Skip to content

Commit 8c7b933

Browse files
arunjose696HeikoKlare
authored andcommitted
Cache all Fonts in ScalingSWTFontRegistry on creation
Previously, system fonts were not cached during their creation in ScalingSWTFontRegistry. This change ensures that system fonts, are now cached in fontsKeyMap
1 parent d36f616 commit 8c7b933

File tree

2 files changed

+22
-10
lines changed

2 files changed

+22
-10
lines changed

bundles/org.eclipse.swt/Eclipse SWT Tests/win32/org/eclipse/swt/widgets/ControlWin32Tests.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,17 @@ public void testScaleFontCorrectlyInAutoScaleSzenario() {
4343
fontComparison.originalFontHeight * scalingFactor, fontComparison.currentFontHeight);
4444
}
4545

46+
@Test
47+
public void testSetFontWithMonitorSpecificScalingEnabled() {
48+
DPIUtil.setMonitorSpecificScaling(true);
49+
Display display = Display.getDefault();
50+
Image colorImage = new Image(display, 10, 10);
51+
GC gc = new GC(colorImage);
52+
gc.setFont(display.getSystemFont());
53+
Font font = gc.getFont();
54+
assertEquals(display.getSystemFont(), font);
55+
}
56+
4657
@Test
4758
public void testDoNotScaleFontCorrectlyInNoAutoScaleSzenario() {
4859
DPIUtil.setMonitorSpecificScaling(false);

bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/ScalingSWTFontRegistry.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,9 @@ private Font getScaledFont(int zoom) {
4444

4545
private Font createAndCacheFont(int zoom) {
4646
Font newFont = createFont(zoom);
47-
customFontHandlesKeyMap.put(Font.win32_getHandle(newFont), this);
47+
FontData clonedFontData = new FontData(newFont.getFontData()[0]);
48+
fontsKeyMap.put(clonedFontData, this);
49+
fontHandlesKeyMap.put(Font.win32_getHandle(newFont), this);
4850
scaledFonts.put(zoom, newFont);
4951
return newFont;
5052
}
@@ -108,8 +110,8 @@ protected void dispose() {
108110
}
109111

110112
private ScaledFontContainer systemFontContainer;
111-
private Map<FontData, ScaledFontContainer> customFontsKeyMap = new HashMap<>();
112-
private Map<Long, ScaledFontContainer> customFontHandlesKeyMap = new HashMap<>();
113+
private Map<FontData, ScaledFontContainer> fontsKeyMap = new HashMap<>();
114+
private Map<Long, ScaledFontContainer> fontHandlesKeyMap = new HashMap<>();
113115
private Device device;
114116

115117
ScalingSWTFontRegistry(Device device) {
@@ -125,27 +127,26 @@ public Font getSystemFont(int zoom) {
125127
@Override
126128
public Font getFont(FontData fontData, int zoom) {
127129
ScaledFontContainer container;
128-
if (customFontsKeyMap.containsKey(fontData)) {
129-
container = customFontsKeyMap.get(fontData);
130+
if (fontsKeyMap.containsKey(fontData)) {
131+
container = fontsKeyMap.get(fontData);
130132
} else {
131133
FontData clonedFontData = new FontData(fontData);
132134
container = new ScaledCustomFontContainer(clonedFontData);
133-
customFontsKeyMap.put(clonedFontData, container);
134135
}
135136
return container.getScaledFont(zoom);
136137
}
137138

138139
@Override
139140
public Font getFont(long fontHandle, int zoom) {
140-
if (customFontHandlesKeyMap.containsKey(fontHandle)) {
141-
return customFontHandlesKeyMap.get(fontHandle).getScaledFont(zoom);
141+
if (fontHandlesKeyMap.containsKey(fontHandle)) {
142+
return fontHandlesKeyMap.get(fontHandle).getScaledFont(zoom);
142143
}
143144
return Font.win32_new(device, fontHandle, zoom);
144145
}
145146

146147
@Override
147148
public void dispose() {
148-
customFontsKeyMap.values().forEach(ScaledFontContainer::dispose);
149-
customFontsKeyMap.clear();
149+
fontsKeyMap.values().forEach(ScaledFontContainer::dispose);
150+
fontsKeyMap.clear();
150151
}
151152
}

0 commit comments

Comments
 (0)