Skip to content

Commit 6d83968

Browse files
akoch-yattaHeikoKlare
authored andcommitted
[win32] different coordinate system strategies
This contribution extracts two different strategies to provide a consistent coordinate system in the win32 implemenentation for a single-zoom and a multi-zoom environment. The existing logic remains unchanged in this commit. It is only moved and consolidated in the new inner classes in Display. Contributes to #62 and #131 Fixes eclipse-platform/eclipse.platform.ui#2595
1 parent 811a4a6 commit 6d83968

File tree

5 files changed

+371
-33
lines changed

5 files changed

+371
-33
lines changed

bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4007,7 +4007,9 @@ void subclass () {
40074007
public Point toControl (int x, int y) {
40084008
checkWidget ();
40094009
int zoom = getZoom();
4010-
return DPIUtil.scaleDown(toControlInPixels(DPIUtil.scaleUp(x, zoom), DPIUtil.scaleUp(y, zoom)), zoom);
4010+
Point displayPointInPixels = getDisplay().translateToDisplayCoordinates(new Point(x, y), zoom);
4011+
final Point controlPointInPixels = toControlInPixels(displayPointInPixels.x, displayPointInPixels.y);
4012+
return DPIUtil.scaleDown(controlPointInPixels, zoom);
40114013
}
40124014

40134015
Point toControlInPixels (int x, int y) {
@@ -4040,9 +4042,7 @@ Point toControlInPixels (int x, int y) {
40404042
public Point toControl (Point point) {
40414043
checkWidget ();
40424044
if (point == null) error (SWT.ERROR_NULL_ARGUMENT);
4043-
int zoom = getZoom();
4044-
point = DPIUtil.scaleUp(point, zoom);
4045-
return DPIUtil.scaleDown(toControlInPixels(point.x, point.y), zoom);
4045+
return toControl(point.x, point.y);
40464046
}
40474047

40484048
/**
@@ -4068,7 +4068,8 @@ public Point toControl (Point point) {
40684068
public Point toDisplay (int x, int y) {
40694069
checkWidget ();
40704070
int zoom = getZoom();
4071-
return DPIUtil.scaleDown(toDisplayInPixels(DPIUtil.scaleUp(x, zoom), DPIUtil.scaleUp(y, zoom)), zoom);
4071+
Point displayPointInPixels = toDisplayInPixels(DPIUtil.scaleUp(x, zoom), DPIUtil.scaleUp(y, zoom));
4072+
return getDisplay().translateFromDisplayCoordinates(displayPointInPixels, zoom);
40724073
}
40734074

40744075
Point toDisplayInPixels (int x, int y) {
@@ -4101,9 +4102,7 @@ Point toDisplayInPixels (int x, int y) {
41014102
public Point toDisplay (Point point) {
41024103
checkWidget ();
41034104
if (point == null) error (SWT.ERROR_NULL_ARGUMENT);
4104-
int zoom = getZoom();
4105-
point = DPIUtil.scaleUp(point, zoom);
4106-
return DPIUtil.scaleDown(toDisplayInPixels(point.x, point.y), zoom);
4105+
return toDisplay(point.x, point.y);
41074106
}
41084107

41094108
long topHandle () {

0 commit comments

Comments
 (0)