diff --git a/bundles/org.eclipse.swt/Eclipse SWT Tests/win32/org/eclipse/swt/widgets/ControlWin32Tests.java b/bundles/org.eclipse.swt/Eclipse SWT Tests/win32/org/eclipse/swt/widgets/ControlWin32Tests.java index 0b8c146b32b..ab56cc9bf49 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT Tests/win32/org/eclipse/swt/widgets/ControlWin32Tests.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Tests/win32/org/eclipse/swt/widgets/ControlWin32Tests.java @@ -43,6 +43,17 @@ public void testScaleFontCorrectlyInAutoScaleSzenario() { fontComparison.originalFontHeight * scalingFactor, fontComparison.currentFontHeight); } + @Test + public void testSetFontWithMonitorSpecificScalingEnabled() { + DPIUtil.setMonitorSpecificScaling(true); + Display display = Display.getDefault(); + Image colorImage = new Image(display, 10, 10); + GC gc = new GC(colorImage); + gc.setFont(display.getSystemFont()); + Font font = gc.getFont(); + assertEquals(display.getSystemFont(), font); + } + @Test public void testDoNotScaleFontCorrectlyInNoAutoScaleSzenario() { DPIUtil.setMonitorSpecificScaling(false); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/ScalingSWTFontRegistry.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/ScalingSWTFontRegistry.java index 1cc1c8af7d2..020d81d6fb9 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/ScalingSWTFontRegistry.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/ScalingSWTFontRegistry.java @@ -44,7 +44,9 @@ private Font getScaledFont(int zoom) { private Font createAndCacheFont(int zoom) { Font newFont = createFont(zoom); - customFontHandlesKeyMap.put(Font.win32_getHandle(newFont), this); + FontData clonedFontData = new FontData(newFont.getFontData()[0]); + fontsKeyMap.put(clonedFontData, this); + fontHandlesKeyMap.put(Font.win32_getHandle(newFont), this); scaledFonts.put(zoom, newFont); return newFont; } @@ -108,8 +110,8 @@ protected void dispose() { } private ScaledFontContainer systemFontContainer; - private Map customFontsKeyMap = new HashMap<>(); - private Map customFontHandlesKeyMap = new HashMap<>(); + private Map fontsKeyMap = new HashMap<>(); + private Map fontHandlesKeyMap = new HashMap<>(); private Device device; ScalingSWTFontRegistry(Device device) { @@ -125,27 +127,26 @@ public Font getSystemFont(int zoom) { @Override public Font getFont(FontData fontData, int zoom) { ScaledFontContainer container; - if (customFontsKeyMap.containsKey(fontData)) { - container = customFontsKeyMap.get(fontData); + if (fontsKeyMap.containsKey(fontData)) { + container = fontsKeyMap.get(fontData); } else { FontData clonedFontData = new FontData(fontData); container = new ScaledCustomFontContainer(clonedFontData); - customFontsKeyMap.put(clonedFontData, container); } return container.getScaledFont(zoom); } @Override public Font getFont(long fontHandle, int zoom) { - if (customFontHandlesKeyMap.containsKey(fontHandle)) { - return customFontHandlesKeyMap.get(fontHandle).getScaledFont(zoom); + if (fontHandlesKeyMap.containsKey(fontHandle)) { + return fontHandlesKeyMap.get(fontHandle).getScaledFont(zoom); } return Font.win32_new(device, fontHandle, zoom); } @Override public void dispose() { - customFontsKeyMap.values().forEach(ScaledFontContainer::dispose); - customFontsKeyMap.clear(); + fontsKeyMap.values().forEach(ScaledFontContainer::dispose); + fontsKeyMap.clear(); } }