diff --git a/src/dorkbox/systemTray/SystemTray.java b/src/dorkbox/systemTray/SystemTray.java index f4e15b0..49433ab 100644 --- a/src/dorkbox/systemTray/SystemTray.java +++ b/src/dorkbox/systemTray/SystemTray.java @@ -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; diff --git a/src/dorkbox/systemTray/linux/jna/JnaHelper.java b/src/dorkbox/systemTray/jna/JnaHelper.java similarity index 96% rename from src/dorkbox/systemTray/linux/jna/JnaHelper.java rename to src/dorkbox/systemTray/jna/JnaHelper.java index baa854f..53cdc72 100644 --- a/src/dorkbox/systemTray/linux/jna/JnaHelper.java +++ b/src/dorkbox/systemTray/jna/JnaHelper.java @@ -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 options = new HashMap(); options.put(Library.OPTION_CLASSLOADER, clazz.getClassLoader()); diff --git a/src/dorkbox/systemTray/jna/Windows/Gdi32.java b/src/dorkbox/systemTray/jna/Windows/Gdi32.java new file mode 100644 index 0000000..c36da64 --- /dev/null +++ b/src/dorkbox/systemTray/jna/Windows/Gdi32.java @@ -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); +} diff --git a/src/dorkbox/systemTray/jna/Windows/User32.java b/src/dorkbox/systemTray/jna/Windows/User32.java new file mode 100644 index 0000000..007d63f --- /dev/null +++ b/src/dorkbox/systemTray/jna/Windows/User32.java @@ -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 + *

+ * 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); +} diff --git a/src/dorkbox/systemTray/linux/jna/AppIndicator.java b/src/dorkbox/systemTray/jna/linux/AppIndicator.java similarity index 99% rename from src/dorkbox/systemTray/linux/jna/AppIndicator.java rename to src/dorkbox/systemTray/jna/linux/AppIndicator.java index 5a6554f..3a2e41d 100644 --- a/src/dorkbox/systemTray/linux/jna/AppIndicator.java +++ b/src/dorkbox/systemTray/jna/linux/AppIndicator.java @@ -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 diff --git a/src/dorkbox/systemTray/linux/jna/AppIndicatorInstanceStruct.java b/src/dorkbox/systemTray/jna/linux/AppIndicatorInstanceStruct.java similarity index 96% rename from src/dorkbox/systemTray/linux/jna/AppIndicatorInstanceStruct.java rename to src/dorkbox/systemTray/jna/linux/AppIndicatorInstanceStruct.java index 69ae097..eefec57 100644 --- a/src/dorkbox/systemTray/linux/jna/AppIndicatorInstanceStruct.java +++ b/src/dorkbox/systemTray/jna/linux/AppIndicatorInstanceStruct.java @@ -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; diff --git a/src/dorkbox/systemTray/linux/jna/FuncCallback.java b/src/dorkbox/systemTray/jna/linux/FuncCallback.java similarity index 95% rename from src/dorkbox/systemTray/linux/jna/FuncCallback.java rename to src/dorkbox/systemTray/jna/linux/FuncCallback.java index 7c79012..fb177c1 100644 --- a/src/dorkbox/systemTray/linux/jna/FuncCallback.java +++ b/src/dorkbox/systemTray/jna/linux/FuncCallback.java @@ -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 diff --git a/src/dorkbox/systemTray/linux/jna/GCallback.java b/src/dorkbox/systemTray/jna/linux/GCallback.java similarity index 95% rename from src/dorkbox/systemTray/linux/jna/GCallback.java rename to src/dorkbox/systemTray/jna/linux/GCallback.java index a4d2df6..53344e0 100644 --- a/src/dorkbox/systemTray/linux/jna/GCallback.java +++ b/src/dorkbox/systemTray/jna/linux/GCallback.java @@ -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 diff --git a/src/dorkbox/systemTray/linux/jna/GEventCallback.java b/src/dorkbox/systemTray/jna/linux/GEventCallback.java similarity index 95% rename from src/dorkbox/systemTray/linux/jna/GEventCallback.java rename to src/dorkbox/systemTray/jna/linux/GEventCallback.java index ceb955a..6feba57 100644 --- a/src/dorkbox/systemTray/linux/jna/GEventCallback.java +++ b/src/dorkbox/systemTray/jna/linux/GEventCallback.java @@ -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 diff --git a/src/dorkbox/systemTray/linux/jna/GObjectStruct.java b/src/dorkbox/systemTray/jna/linux/GObjectStruct.java similarity index 96% rename from src/dorkbox/systemTray/linux/jna/GObjectStruct.java rename to src/dorkbox/systemTray/jna/linux/GObjectStruct.java index 21aa9d3..a252821 100644 --- a/src/dorkbox/systemTray/linux/jna/GObjectStruct.java +++ b/src/dorkbox/systemTray/jna/linux/GObjectStruct.java @@ -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 { diff --git a/src/dorkbox/systemTray/linux/jna/GThread.java b/src/dorkbox/systemTray/jna/linux/GThread.java similarity index 92% rename from src/dorkbox/systemTray/linux/jna/GThread.java rename to src/dorkbox/systemTray/jna/linux/GThread.java index a78a407..b30d44e 100644 --- a/src/dorkbox/systemTray/linux/jna/GThread.java +++ b/src/dorkbox/systemTray/jna/linux/GThread.java @@ -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 * diff --git a/src/dorkbox/systemTray/linux/jna/GTypeInstanceStruct.java b/src/dorkbox/systemTray/jna/linux/GTypeInstanceStruct.java similarity index 96% rename from src/dorkbox/systemTray/linux/jna/GTypeInstanceStruct.java rename to src/dorkbox/systemTray/jna/linux/GTypeInstanceStruct.java index ee9d6c3..1525acd 100644 --- a/src/dorkbox/systemTray/linux/jna/GTypeInstanceStruct.java +++ b/src/dorkbox/systemTray/jna/linux/GTypeInstanceStruct.java @@ -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 { diff --git a/src/dorkbox/systemTray/linux/jna/GdkEventButton.java b/src/dorkbox/systemTray/jna/linux/GdkEventButton.java similarity index 97% rename from src/dorkbox/systemTray/linux/jna/GdkEventButton.java rename to src/dorkbox/systemTray/jna/linux/GdkEventButton.java index 332afaf..97e90de 100644 --- a/src/dorkbox/systemTray/linux/jna/GdkEventButton.java +++ b/src/dorkbox/systemTray/jna/linux/GdkEventButton.java @@ -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 { diff --git a/src/dorkbox/systemTray/linux/jna/Gobject.java b/src/dorkbox/systemTray/jna/linux/Gobject.java similarity index 94% rename from src/dorkbox/systemTray/linux/jna/Gobject.java rename to src/dorkbox/systemTray/jna/linux/Gobject.java index 84b7073..9ce1871 100644 --- a/src/dorkbox/systemTray/linux/jna/Gobject.java +++ b/src/dorkbox/systemTray/jna/linux/Gobject.java @@ -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 * diff --git a/src/dorkbox/systemTray/linux/jna/Gtk.java b/src/dorkbox/systemTray/jna/linux/Gtk.java similarity index 99% rename from src/dorkbox/systemTray/linux/jna/Gtk.java rename to src/dorkbox/systemTray/jna/linux/Gtk.java index a4ec969..00bd96a 100644 --- a/src/dorkbox/systemTray/linux/jna/Gtk.java +++ b/src/dorkbox/systemTray/jna/linux/Gtk.java @@ -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; diff --git a/src/dorkbox/systemTray/nativeUI/GtkEntry.java b/src/dorkbox/systemTray/nativeUI/GtkEntry.java index a73c2ec..1a255bc 100644 --- a/src/dorkbox/systemTray/nativeUI/GtkEntry.java +++ b/src/dorkbox/systemTray/nativeUI/GtkEntry.java @@ -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 diff --git a/src/dorkbox/systemTray/nativeUI/GtkEntryItem.java b/src/dorkbox/systemTray/nativeUI/GtkEntryItem.java index 93a18e1..74dac6a 100644 --- a/src/dorkbox/systemTray/nativeUI/GtkEntryItem.java +++ b/src/dorkbox/systemTray/nativeUI/GtkEntryItem.java @@ -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 { diff --git a/src/dorkbox/systemTray/nativeUI/GtkEntrySeparator.java b/src/dorkbox/systemTray/nativeUI/GtkEntrySeparator.java index 5f33e7b..96b3dae 100644 --- a/src/dorkbox/systemTray/nativeUI/GtkEntrySeparator.java +++ b/src/dorkbox/systemTray/nativeUI/GtkEntrySeparator.java @@ -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 { diff --git a/src/dorkbox/systemTray/nativeUI/GtkEntryStatus.java b/src/dorkbox/systemTray/nativeUI/GtkEntryStatus.java index ee135c5..a3ea713 100644 --- a/src/dorkbox/systemTray/nativeUI/GtkEntryStatus.java +++ b/src/dorkbox/systemTray/nativeUI/GtkEntryStatus.java @@ -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 diff --git a/src/dorkbox/systemTray/nativeUI/GtkMenu.java b/src/dorkbox/systemTray/nativeUI/GtkMenu.java index 4d6e898..a9d4fc8 100644 --- a/src/dorkbox/systemTray/nativeUI/GtkMenu.java +++ b/src/dorkbox/systemTray/nativeUI/GtkMenu.java @@ -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 { diff --git a/src/dorkbox/systemTray/nativeUI/_AppIndicatorNativeTray.java b/src/dorkbox/systemTray/nativeUI/_AppIndicatorNativeTray.java index 8a18b49..6227205 100644 --- a/src/dorkbox/systemTray/nativeUI/_AppIndicatorNativeTray.java +++ b/src/dorkbox/systemTray/nativeUI/_AppIndicatorNativeTray.java @@ -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; /** diff --git a/src/dorkbox/systemTray/nativeUI/_GtkStatusIconNativeTray.java b/src/dorkbox/systemTray/nativeUI/_GtkStatusIconNativeTray.java index 1fc00c9..d9ef1a6 100644 --- a/src/dorkbox/systemTray/nativeUI/_GtkStatusIconNativeTray.java +++ b/src/dorkbox/systemTray/nativeUI/_GtkStatusIconNativeTray.java @@ -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. diff --git a/src/dorkbox/systemTray/swingUI/_AppIndicatorTray.java b/src/dorkbox/systemTray/swingUI/_AppIndicatorTray.java index 11074c2..ea816c4 100644 --- a/src/dorkbox/systemTray/swingUI/_AppIndicatorTray.java +++ b/src/dorkbox/systemTray/swingUI/_AppIndicatorTray.java @@ -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; diff --git a/src/dorkbox/systemTray/swingUI/_GtkStatusIconTray.java b/src/dorkbox/systemTray/swingUI/_GtkStatusIconTray.java index 3c3329d..3056fca 100644 --- a/src/dorkbox/systemTray/swingUI/_GtkStatusIconTray.java +++ b/src/dorkbox/systemTray/swingUI/_GtkStatusIconTray.java @@ -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. diff --git a/src/dorkbox/systemTray/util/ImageUtils.java b/src/dorkbox/systemTray/util/ImageUtils.java index f818f95..fdb3341 100644 --- a/src/dorkbox/systemTray/util/ImageUtils.java +++ b/src/dorkbox/systemTray/util/ImageUtils.java @@ -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