Skip to content

Commit 8be37d6

Browse files
committed
[win32] Dynamic handle creation for transform
This commit refactors Transform in the win32 implementation to better support multiple handles for different zoom settings of a Transform when monitor-specific scaling is enabled. The previous implementation only applied adaptions to the initial handle of the transform and relied on the transform not to be changed afterwards. This doesn't cover all scenarios and can lead to unexpected behavior when re-using Transform objects over different zoom settings.
1 parent 9f60279 commit 8be37d6

File tree

5 files changed

+361
-55
lines changed

5 files changed

+361
-55
lines changed

bundles/org.eclipse.swt/Eclipse SWT Tests/win32/org/eclipse/swt/graphics/TransformWin32Tests.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,21 @@ public void testShouldHaveDifferentHandlesAtDifferentZoomLevels() {
4040
@Test
4141
public void testScaledTrasformMustHaveScaledValues() {
4242
Display display = Display.getDefault();
43-
int zoom = DPIUtil.getDeviceZoom();
4443
Transform transform = new Transform(display, 0, 0, 0, 0, 4, 2);
4544
float[] elements = new float[6];
4645
transform.getElements(elements);
47-
long scaledHandle = transform.getHandle(zoom * 2);
48-
float[] scaledElements = new float[6];
49-
Gdip.Matrix_GetElements(scaledHandle, scaledElements);
50-
assertEquals(elements[4] * 2, scaledElements[4], 0);
51-
assertEquals(elements[5] * 2, scaledElements[5], 0);
46+
47+
long handle200 = transform.getHandle(200);
48+
float[] scaledElements200 = new float[6];
49+
Gdip.Matrix_GetElements(handle200, scaledElements200);
50+
assertEquals(elements[4] * 2, scaledElements200[4], 0);
51+
assertEquals(elements[5] * 2, scaledElements200[5], 0);
52+
53+
long handle300 = transform.getHandle(300);
54+
float[] scaledElements300 = new float[6];
55+
Gdip.Matrix_GetElements(handle300, scaledElements300);
56+
assertEquals(elements[4] * 3, scaledElements300[4], 0);
57+
assertEquals(elements[5] * 3, scaledElements300[5], 0);
5258
}
5359

5460
}

0 commit comments

Comments
 (0)