modules/graphics/src/main/java/com/sun/glass/ui/mac/MacWindow.java

Print this page

        

@@ -44,39 +44,48 @@
         _initIDs();
     }
 
     protected MacWindow(Window owner, Screen screen, int styleMask) {
         super(owner, screen, styleMask);
-        setPlatformScale(screen.getUIScale());
-        setRenderScale(screen.getRenderScale());
     }
     protected MacWindow(long parent) {
         super(parent);
     }
 
     @Override
     protected void setScreen(Screen screen) {
         // SceneState will be called to update with new scale values
         // before we return from super.setScreen()...
-        setRenderScale(screen.getUIScale());
-        setRenderScale(screen.getRenderScale());
         super.setScreen(screen);
-    }
-
-    @Override
-    public float getOutputScale() {
-        return getRenderScale();
+        notifyScaleChanged(1.0f, 1.0f,
+                           screen.getRecommendedOutputScaleX(),
+                           screen.getRecommendedOutputScaleY());
     }
 
     @Override native protected long _createWindow(long ownerPtr, long screenPtr, int mask);
     @Override native protected long _createChildWindow(long parent);
     @Override native protected boolean _close(long ptr);
     @Override native protected boolean _setView(long ptr, View view);
     @Override native protected boolean _setMenubar(long ptr, long menubarPtr);
     @Override native protected boolean _minimize(long ptr, boolean minimize);
     @Override native protected boolean _maximize(long ptr, boolean maximize, boolean wasMaximized);
-    @Override native protected void _setBounds(long ptr, int x, int y, boolean xSet, boolean ySet, int w, int h, int cw, int ch, float xGravity, float yGravity);
+    @Override protected void _setBounds(long ptr,
+                                        int x, int y, boolean xSet, boolean ySet,
+                                        int w, int h, int cw, int ch,
+                                        float xGravity, float yGravity)
+    {
+        float sx = getPlatformScaleX();
+        float sy = getPlatformScaleY();
+        if (xSet)    x = Math.round( x / sx);
+        if (ySet)    y = Math.round( y / sy);
+        if ( w > 0)  w = Math.round( w / sx);
+        if ( h > 0)  h = Math.round( h / sy);
+        if (cw > 0) cw = Math.round(cw / sx);
+        if (ch > 0) ch = Math.round(ch / sy);
+        _setBounds2(ptr, x, y, xSet, ySet, w, h, cw, ch, xGravity, yGravity);
+    }
+    native protected void _setBounds2(long ptr, int x, int y, boolean xSet, boolean ySet, int w, int h, int cw, int ch, float xGravity, float yGravity);
     @Override native protected boolean _setVisible(long ptr, boolean visible);
     @Override native protected boolean _setResizable(long ptr, boolean resizable);
 
     native private boolean _requestFocus(long ptr);
     @Override protected boolean _requestFocus(long ptr, int event) {

@@ -107,10 +116,17 @@
 
     @Override native protected int _getEmbeddedX(long ptr);
     @Override native protected int _getEmbeddedY(long ptr);
 
     @Override
+    protected void notifyResize(int type, int width, int height) {
+        width  = Math.round( width * getPlatformScaleX());
+        height = Math.round(height * getPlatformScaleY());
+        super.notifyResize(type, width, height);
+    }
+
+    @Override
     protected void _setCursor(long ptr, Cursor cursor) {
         ((MacCursor)cursor).set();
     }
 
     @Override