forked from dorkbox/SystemTray
WIP: Getting windows DPI checks in order.
This commit is contained in:
parent
01f3e0e90a
commit
109def7db2
@ -31,9 +31,9 @@ import javax.swing.SwingUtilities;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import dorkbox.systemTray.jna.linux.AppIndicator;
|
||||
import dorkbox.systemTray.jna.linux.Gtk;
|
||||
import dorkbox.systemTray.linux.GnomeShellExtension;
|
||||
import dorkbox.systemTray.linux.jna.AppIndicator;
|
||||
import dorkbox.systemTray.linux.jna.Gtk;
|
||||
import dorkbox.systemTray.nativeUI.NativeUI;
|
||||
import dorkbox.systemTray.nativeUI._AppIndicatorNativeTray;
|
||||
import dorkbox.systemTray.nativeUI._AwtTray;
|
||||
|
@ -13,21 +13,22 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package dorkbox.systemTray.linux.jna;
|
||||
package dorkbox.systemTray.jna;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import com.sun.jna.Library;
|
||||
import com.sun.jna.Native;
|
||||
import com.sun.jna.NativeLibrary;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Helper method to get the library info from JNA when registering via direct map
|
||||
*/
|
||||
public
|
||||
class JnaHelper {
|
||||
@SuppressWarnings("unchecked")
|
||||
static
|
||||
public static
|
||||
NativeLibrary register(final String libraryName, final Class<?> clazz) throws IllegalArgumentException {
|
||||
final Map<String, Object> options = new HashMap<String, Object>();
|
||||
options.put(Library.OPTION_CLASSLOADER, clazz.getClassLoader());
|
47
src/dorkbox/systemTray/jna/Windows/Gdi32.java
Normal file
47
src/dorkbox/systemTray/jna/Windows/Gdi32.java
Normal file
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright 2015 dorkbox, llc
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package dorkbox.systemTray.jna.Windows;
|
||||
|
||||
import com.sun.jna.Pointer;
|
||||
|
||||
import dorkbox.systemTray.jna.JnaHelper;
|
||||
|
||||
/**
|
||||
* bindings for GDI32
|
||||
*
|
||||
* Direct-mapping, See: https://github.com/java-native-access/jna/blob/master/www/DirectMapping.md
|
||||
*/
|
||||
public
|
||||
class Gdi32 {
|
||||
|
||||
static {
|
||||
JnaHelper.register("gdi32", Gdi32.class);
|
||||
}
|
||||
|
||||
public static final int LOGPIXELSX = 88;
|
||||
public static final int LOGPIXELSY = 90;
|
||||
|
||||
|
||||
/**
|
||||
* The GetDeviceCaps function retrieves device-specific information for the specified device.
|
||||
*
|
||||
* https://msdn.microsoft.com/en-us/library/dd144877(v=vs.85).aspx
|
||||
*
|
||||
* @param handle A handle to the DC.
|
||||
* @param nIndex The item to be returned.
|
||||
*/
|
||||
public static native int GetDeviceCaps(Pointer handle, int nIndex);
|
||||
}
|
52
src/dorkbox/systemTray/jna/Windows/User32.java
Normal file
52
src/dorkbox/systemTray/jna/Windows/User32.java
Normal file
@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright 2015 dorkbox, llc
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package dorkbox.systemTray.jna.Windows;
|
||||
|
||||
import com.sun.jna.Pointer;
|
||||
|
||||
import dorkbox.systemTray.jna.JnaHelper;
|
||||
|
||||
/**
|
||||
* bindings for User32
|
||||
* <p>
|
||||
* Direct-mapping, See: https://github.com/java-native-access/jna/blob/master/www/DirectMapping.md
|
||||
*/
|
||||
public
|
||||
class User32 {
|
||||
|
||||
static {
|
||||
JnaHelper.register("user32", User32.class);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* https://msdn.microsoft.com/en-us/library/windows/desktop/dd144871(v=vs.85).aspx
|
||||
*
|
||||
* @param shouldBeNull A handle to the window whose DC is to be retrieved. If this value is NULL, GetDC retrieves the DC for the entire
|
||||
* screen.
|
||||
*
|
||||
* @return if the function succeeds, the return value is a handle to the DC for the specified window's client area. If the function
|
||||
* fails, the return value is NULL.
|
||||
*/
|
||||
public static native
|
||||
Pointer GetDC(Pointer shouldBeNull);
|
||||
|
||||
/**
|
||||
* https://msdn.microsoft.com/en-us/library/windows/desktop/dd162920(v=vs.85).aspx
|
||||
*/
|
||||
public static native
|
||||
void ReleaseDC(Pointer shouldBeNull, Pointer dcHandle);
|
||||
}
|
@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package dorkbox.systemTray.linux.jna;
|
||||
package dorkbox.systemTray.jna.linux;
|
||||
|
||||
import static dorkbox.systemTray.SystemTray.logger;
|
||||
|
||||
@ -22,6 +22,7 @@ import com.sun.jna.NativeLibrary;
|
||||
import com.sun.jna.Pointer;
|
||||
|
||||
import dorkbox.systemTray.SystemTray;
|
||||
import dorkbox.systemTray.jna.JnaHelper;
|
||||
|
||||
/**
|
||||
* bindings for libappindicator
|
@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package dorkbox.systemTray.linux.jna;
|
||||
package dorkbox.systemTray.jna.linux;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
@ -13,10 +13,11 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package dorkbox.systemTray.linux.jna;
|
||||
package dorkbox.systemTray.jna.linux;
|
||||
|
||||
import com.sun.jna.Callback;
|
||||
import com.sun.jna.Pointer;
|
||||
|
||||
import dorkbox.util.Keep;
|
||||
|
||||
@Keep
|
@ -13,10 +13,11 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package dorkbox.systemTray.linux.jna;
|
||||
package dorkbox.systemTray.jna.linux;
|
||||
|
||||
import com.sun.jna.Callback;
|
||||
import com.sun.jna.Pointer;
|
||||
|
||||
import dorkbox.util.Keep;
|
||||
|
||||
@Keep
|
@ -13,10 +13,11 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package dorkbox.systemTray.linux.jna;
|
||||
package dorkbox.systemTray.jna.linux;
|
||||
|
||||
import com.sun.jna.Callback;
|
||||
import com.sun.jna.Pointer;
|
||||
|
||||
import dorkbox.util.Keep;
|
||||
|
||||
@Keep
|
@ -13,15 +13,16 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package dorkbox.systemTray.linux.jna;
|
||||
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.Structure;
|
||||
import dorkbox.util.Keep;
|
||||
package dorkbox.systemTray.jna.linux;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.Structure;
|
||||
|
||||
import dorkbox.util.Keep;
|
||||
|
||||
@Keep
|
||||
public
|
||||
class GObjectStruct extends Structure {
|
@ -13,10 +13,12 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package dorkbox.systemTray.linux.jna;
|
||||
package dorkbox.systemTray.jna.linux;
|
||||
|
||||
import com.sun.jna.Pointer;
|
||||
|
||||
import dorkbox.systemTray.jna.JnaHelper;
|
||||
|
||||
/**
|
||||
* bindings for libgthread
|
||||
*
|
@ -13,15 +13,16 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package dorkbox.systemTray.linux.jna;
|
||||
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.Structure;
|
||||
import dorkbox.util.Keep;
|
||||
package dorkbox.systemTray.jna.linux;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.Structure;
|
||||
|
||||
import dorkbox.util.Keep;
|
||||
|
||||
@Keep
|
||||
public
|
||||
class GTypeInstanceStruct extends Structure {
|
@ -13,15 +13,16 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package dorkbox.systemTray.linux.jna;
|
||||
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.Structure;
|
||||
import dorkbox.util.Keep;
|
||||
package dorkbox.systemTray.jna.linux;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.Structure;
|
||||
|
||||
import dorkbox.util.Keep;
|
||||
|
||||
@Keep
|
||||
public
|
||||
class GdkEventButton extends Structure {
|
@ -13,13 +13,15 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package dorkbox.systemTray.linux.jna;
|
||||
package dorkbox.systemTray.jna.linux;
|
||||
|
||||
import com.sun.jna.Callback;
|
||||
import com.sun.jna.NativeLong;
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.ptr.PointerByReference;
|
||||
|
||||
import dorkbox.systemTray.jna.JnaHelper;
|
||||
|
||||
/**
|
||||
* bindings for libgobject-2.0
|
||||
*
|
@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package dorkbox.systemTray.linux.jna;
|
||||
package dorkbox.systemTray.jna.linux;
|
||||
|
||||
import static dorkbox.systemTray.SystemTray.logger;
|
||||
|
||||
@ -28,6 +28,7 @@ import dorkbox.systemTray.Action;
|
||||
import dorkbox.systemTray.Entry;
|
||||
import dorkbox.systemTray.Menu;
|
||||
import dorkbox.systemTray.SystemTray;
|
||||
import dorkbox.systemTray.jna.JnaHelper;
|
||||
import dorkbox.systemTray.util.JavaFX;
|
||||
import dorkbox.systemTray.util.Swt;
|
||||
|
@ -23,7 +23,7 @@ import com.sun.jna.Pointer;
|
||||
|
||||
import dorkbox.systemTray.Entry;
|
||||
import dorkbox.systemTray.Menu;
|
||||
import dorkbox.systemTray.linux.jna.Gtk;
|
||||
import dorkbox.systemTray.jna.linux.Gtk;
|
||||
import dorkbox.systemTray.util.ImageUtils;
|
||||
|
||||
abstract
|
||||
|
@ -21,9 +21,9 @@ import com.sun.jna.NativeLong;
|
||||
import com.sun.jna.Pointer;
|
||||
|
||||
import dorkbox.systemTray.Action;
|
||||
import dorkbox.systemTray.linux.jna.GCallback;
|
||||
import dorkbox.systemTray.linux.jna.Gobject;
|
||||
import dorkbox.systemTray.linux.jna.Gtk;
|
||||
import dorkbox.systemTray.jna.linux.GCallback;
|
||||
import dorkbox.systemTray.jna.linux.Gobject;
|
||||
import dorkbox.systemTray.jna.linux.Gtk;
|
||||
import dorkbox.systemTray.util.ImageUtils;
|
||||
|
||||
class GtkEntryItem extends GtkEntry implements GCallback {
|
||||
|
@ -19,7 +19,7 @@ import java.io.File;
|
||||
|
||||
import dorkbox.systemTray.Action;
|
||||
import dorkbox.systemTray.Separator;
|
||||
import dorkbox.systemTray.linux.jna.Gtk;
|
||||
import dorkbox.systemTray.jna.linux.Gtk;
|
||||
|
||||
class GtkEntrySeparator extends GtkEntry implements Separator {
|
||||
|
||||
|
@ -16,7 +16,7 @@
|
||||
package dorkbox.systemTray.nativeUI;
|
||||
|
||||
import dorkbox.systemTray.Action;
|
||||
import dorkbox.systemTray.linux.jna.Gtk;
|
||||
import dorkbox.systemTray.jna.linux.Gtk;
|
||||
|
||||
// you might wonder WHY this extends MenuEntryItem -- the reason is that an AppIndicator "status" will be offset from everyone else,
|
||||
// where a GtkStatusIconTray + SwingUI will have everything lined up. (with or without icons). This is to normalize how it looks
|
||||
|
@ -29,8 +29,8 @@ import dorkbox.systemTray.Action;
|
||||
import dorkbox.systemTray.Entry;
|
||||
import dorkbox.systemTray.Menu;
|
||||
import dorkbox.systemTray.SystemTray;
|
||||
import dorkbox.systemTray.linux.jna.Gobject;
|
||||
import dorkbox.systemTray.linux.jna.Gtk;
|
||||
import dorkbox.systemTray.jna.linux.Gobject;
|
||||
import dorkbox.systemTray.jna.linux.Gtk;
|
||||
import dorkbox.systemTray.util.MenuBase;
|
||||
|
||||
class GtkMenu extends MenuBase implements NativeUI {
|
||||
|
@ -21,10 +21,10 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import com.sun.jna.Pointer;
|
||||
|
||||
import dorkbox.systemTray.SystemTray;
|
||||
import dorkbox.systemTray.linux.jna.AppIndicator;
|
||||
import dorkbox.systemTray.linux.jna.AppIndicatorInstanceStruct;
|
||||
import dorkbox.systemTray.linux.jna.Gobject;
|
||||
import dorkbox.systemTray.linux.jna.Gtk;
|
||||
import dorkbox.systemTray.jna.linux.AppIndicator;
|
||||
import dorkbox.systemTray.jna.linux.AppIndicatorInstanceStruct;
|
||||
import dorkbox.systemTray.jna.linux.Gobject;
|
||||
import dorkbox.systemTray.jna.linux.Gtk;
|
||||
import dorkbox.systemTray.util.ImageUtils;
|
||||
|
||||
/**
|
||||
|
@ -24,10 +24,10 @@ import com.sun.jna.NativeLong;
|
||||
import com.sun.jna.Pointer;
|
||||
|
||||
import dorkbox.systemTray.SystemTray;
|
||||
import dorkbox.systemTray.linux.jna.GEventCallback;
|
||||
import dorkbox.systemTray.linux.jna.GdkEventButton;
|
||||
import dorkbox.systemTray.linux.jna.Gobject;
|
||||
import dorkbox.systemTray.linux.jna.Gtk;
|
||||
import dorkbox.systemTray.jna.linux.GEventCallback;
|
||||
import dorkbox.systemTray.jna.linux.GdkEventButton;
|
||||
import dorkbox.systemTray.jna.linux.Gobject;
|
||||
import dorkbox.systemTray.jna.linux.Gtk;
|
||||
|
||||
/**
|
||||
* Class for handling all system tray interactions via GTK.
|
||||
|
@ -25,12 +25,12 @@ import com.sun.jna.Pointer;
|
||||
import com.sun.jna.ptr.PointerByReference;
|
||||
|
||||
import dorkbox.systemTray.SystemTray;
|
||||
import dorkbox.systemTray.linux.jna.AppIndicator;
|
||||
import dorkbox.systemTray.linux.jna.AppIndicatorInstanceStruct;
|
||||
import dorkbox.systemTray.linux.jna.GEventCallback;
|
||||
import dorkbox.systemTray.linux.jna.GdkEventButton;
|
||||
import dorkbox.systemTray.linux.jna.Gobject;
|
||||
import dorkbox.systemTray.linux.jna.Gtk;
|
||||
import dorkbox.systemTray.jna.linux.AppIndicator;
|
||||
import dorkbox.systemTray.jna.linux.AppIndicatorInstanceStruct;
|
||||
import dorkbox.systemTray.jna.linux.GEventCallback;
|
||||
import dorkbox.systemTray.jna.linux.GdkEventButton;
|
||||
import dorkbox.systemTray.jna.linux.Gobject;
|
||||
import dorkbox.systemTray.jna.linux.Gtk;
|
||||
import dorkbox.systemTray.util.ImageUtils;
|
||||
import dorkbox.util.SwingUtil;
|
||||
|
||||
|
@ -28,10 +28,10 @@ import com.sun.jna.NativeLong;
|
||||
import com.sun.jna.Pointer;
|
||||
|
||||
import dorkbox.systemTray.SystemTray;
|
||||
import dorkbox.systemTray.linux.jna.GEventCallback;
|
||||
import dorkbox.systemTray.linux.jna.GdkEventButton;
|
||||
import dorkbox.systemTray.linux.jna.Gobject;
|
||||
import dorkbox.systemTray.linux.jna.Gtk;
|
||||
import dorkbox.systemTray.jna.linux.GEventCallback;
|
||||
import dorkbox.systemTray.jna.linux.GdkEventButton;
|
||||
import dorkbox.systemTray.jna.linux.Gobject;
|
||||
import dorkbox.systemTray.jna.linux.Gtk;
|
||||
|
||||
/**
|
||||
* Class for handling all system tray interactions via GTK.
|
||||
|
@ -15,6 +15,10 @@
|
||||
*/
|
||||
package dorkbox.systemTray.util;
|
||||
|
||||
import static dorkbox.systemTray.jna.Windows.Gdi32.GetDeviceCaps;
|
||||
import static dorkbox.systemTray.jna.Windows.Gdi32.LOGPIXELSX;
|
||||
import static dorkbox.systemTray.jna.Windows.Gdi32.LOGPIXELSY;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Graphics2D;
|
||||
@ -35,7 +39,10 @@ import javax.imageio.ImageReader;
|
||||
import javax.imageio.stream.ImageInputStream;
|
||||
import javax.swing.ImageIcon;
|
||||
|
||||
import com.sun.jna.Pointer;
|
||||
|
||||
import dorkbox.systemTray.SystemTray;
|
||||
import dorkbox.systemTray.jna.Windows.User32;
|
||||
import dorkbox.util.CacheUtil;
|
||||
import dorkbox.util.FileUtil;
|
||||
import dorkbox.util.LocationResolver;
|
||||
@ -91,6 +98,9 @@ class ImageUtils {
|
||||
}
|
||||
}
|
||||
|
||||
// vista - 8.0 - only global DPI settings
|
||||
// 8.1 - 10 - global + per-monitor DPI settings
|
||||
|
||||
// 1 = 16
|
||||
// 2 = 32
|
||||
// 4 = 64
|
||||
@ -124,6 +134,8 @@ class ImageUtils {
|
||||
} else if (windowsVersion.startsWith("6.3")) {
|
||||
// Windows 8.1
|
||||
// Windows Server 2012 6.3.9200
|
||||
|
||||
|
||||
scalingFactor = 4;
|
||||
|
||||
} else if (windowsVersion.startsWith("6.4")) {
|
||||
@ -133,15 +145,24 @@ class ImageUtils {
|
||||
} else if (windowsVersion.startsWith("10.0")) {
|
||||
// Windows 10 Technical Preview 4 10.0.9926
|
||||
// Windows 10 Insider Preview 10.0.14915
|
||||
scalingFactor = 8;
|
||||
scalingFactor = 4;
|
||||
|
||||
} else {
|
||||
// dunnno, but i'm going to assume HiDPI for this...
|
||||
scalingFactor = 8;
|
||||
}
|
||||
|
||||
Pointer screen = User32.GetDC(null);
|
||||
int dpiX = GetDeviceCaps (screen, LOGPIXELSX);
|
||||
int dpiY = GetDeviceCaps (screen, LOGPIXELSY);
|
||||
User32.ReleaseDC(null, screen);
|
||||
|
||||
System.err.println("DPI : " + dpiX + "," + dpiY);
|
||||
|
||||
|
||||
|
||||
if (SystemTray.DEBUG) {
|
||||
SystemTray.logger.error("Windows version (partial): '{}'", windowsVersion);
|
||||
SystemTray.logger.debug("Windows version (partial): '{}'", windowsVersion);
|
||||
}
|
||||
} else if (OS.isLinux()) {
|
||||
// GtkStatusIcon will USUALLY automatically scale the icon
|
||||
|
Loading…
Reference in New Issue
Block a user