modules/graphics/src/main/java/com/sun/javafx/tk/quantum/EmbeddedScene.java

Print this page

        

@@ -58,17 +58,19 @@
     // TODO: synchronize access to embedder from ET and RT
     private HostInterface host;
 
     private UploadingPainter        painter;
     private PaintRenderJob          paintRenderJob;
-    private float                   renderScale;
+    private float                   renderScaleX;
+    private float                   renderScaleY;
 
     private final EmbeddedSceneDnD embeddedDnD;
 
     private volatile IntBuffer  texBits;
     private volatile int        texLineStride; // pre-scaled
-    private volatile float      texScaleFactor = 1.0f;
+    private volatile float      texScaleFactorX = 1.0f;
+    private volatile float      texScaleFactorY = 1.0f;
 
     private volatile PixelFormat<?> pixelFormat;
 
     public EmbeddedScene(HostInterface host, boolean depthBuffer, boolean msaa) {
         super(depthBuffer, msaa);

@@ -147,28 +149,35 @@
             System.err.println("EmbeddedScene.finishInputMethodComposition");
         }
     }
 
     @Override
-    public void setPixelScaleFactor(float scale) {
-        renderScale = scale;
+    public void setPixelScaleFactors(float scalex, float scaley) {
+        renderScaleX = scalex;
+        renderScaleY = scaley;
         entireSceneNeedsRepaint();
     }
 
-    public float getRenderScale() {
-        return renderScale;
+    public float getRenderScaleX() {
+        return renderScaleX;
     }
 
+    public float getRenderScaleY() {
+        return renderScaleY;
+    }
+
+    @Override
     public PixelFormat<?> getPixelFormat() {
         return pixelFormat;
     }
 
     // Called by EmbeddedPainter on the render thread under renderLock
     void uploadPixels(Pixels pixels) {
         texBits = (IntBuffer)pixels.getPixels();
         texLineStride = pixels.getWidthUnsafe();
-        texScaleFactor = pixels.getScaleUnsafe();
+        texScaleFactorX = pixels.getScaleXUnsafe();
+        texScaleFactorY = pixels.getScaleYUnsafe();
         if (host != null) {
             host.repaint();
         }
     }
 

@@ -214,15 +223,18 @@
         return QuantumToolkit.runWithRenderLock(() -> {
             int scaledWidth = width;
             int scaledHeight = height;
 
             // The dest buffer scale factor is expected to match painter.getPixelScaleFactor().
-            if (getRenderScale() != texScaleFactor || texBits == null) {
+            if (getRenderScaleX() != texScaleFactorX ||
+                getRenderScaleY() != texScaleFactorY ||
+                texBits == null)
+            {
                 return false;
             }
-            scaledWidth = (int)Math.round(scaledWidth * texScaleFactor);
-            scaledHeight = (int)Math.round(scaledHeight * texScaleFactor);
+            scaledWidth = Math.round(scaledWidth * texScaleFactorX);
+            scaledHeight = Math.round(scaledHeight * texScaleFactorY);
 
             dest.rewind();
             texBits.rewind();
             if (dest.capacity() != texBits.capacity()) {
                 // Calculate the intersection of the dest & src images.