]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.diagram/src/org/simantics/diagram/ui/e4/SWTPopupMenuParticipant.java
Small but effective HiDPI fixes for platform G2D
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / ui / e4 / SWTPopupMenuParticipant.java
index eb7fd99281b39255a22d2ca98f3d7cd4e371c86f..e6e4d33ee1e98639ee64e063fd557db368209b5e 100644 (file)
@@ -14,9 +14,6 @@ package org.simantics.diagram.ui.e4;
 import java.awt.geom.Point2D;
 
 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
-import org.eclipse.e4.ui.model.application.ui.menu.MMenu;
-import org.eclipse.e4.ui.model.application.ui.menu.MMenuFactory;
-import org.eclipse.e4.ui.model.application.ui.menu.MPopupMenu;
 import org.eclipse.jface.action.GroupMarker;
 import org.eclipse.jface.action.IMenuListener2;
 import org.eclipse.jface.action.IMenuManager;
@@ -46,6 +43,7 @@ import org.simantics.utils.datastructures.hints.HintListenerAdapter;
 import org.simantics.utils.datastructures.hints.IHintContext.Key;
 import org.simantics.utils.datastructures.hints.IHintListener;
 import org.simantics.utils.datastructures.hints.IHintObservable;
+import org.simantics.utils.ui.SWTDPIUtil;
 
 /**
  * A participant that initializes an SWT pop-up menu and registers it with the
@@ -215,19 +213,15 @@ public class SWTPopupMenuParticipant extends AbstractCanvasParticipant {
      * @param newValue
      * @thread canvas-thread (AWT)
      */
-    protected void showPopup(Point2D newValue) {
-        final Point2D cp = (Point2D) newValue;
+    protected void showPopup(Point2D cp) {
         setHint(DiagramHints.POPUP_MENU_CONTROL_POSITION, cp);
         setHint(DiagramHints.POPUP_MENU_CANVAS_POSITION, trUtil.controlToCanvas(cp, null));
-        display.asyncExec(new Runnable() {
-            @Override
-            public void run() {
-                if (control == null || control.isDisposed())
-                    return;
-                Point p = control.toDisplay((int) cp.getX(), (int) cp.getY());
-                menuManager.getMenu().setLocation(p);
-                menuManager.getMenu().setVisible(true);
-            }
+        display.asyncExec(() -> {
+            if (control == null || control.isDisposed())
+                return;
+            Point p = control.toDisplay( SWTDPIUtil.downscaleSwtToInteger(cp) );
+            menuManager.getMenu().setLocation(p);
+            menuManager.getMenu().setVisible(true);
         });
     }