modules/graphics/src/main/java/com/sun/javafx/sg/prism/CacheFilter.java

Print this page

        

@@ -209,11 +209,13 @@
     /*
      * Do we need to regenerate the cached image?
      * Assumes that caller locked and validated the cachedImageData.untximage
      * if not null...
      */
-    private boolean needToRenderCache(BaseTransform renderXform, double[] xformInfo, float pixelScale) {
+    private boolean needToRenderCache(BaseTransform renderXform, double[] xformInfo,
+                                      float pixelScaleX, float pixelScaleY)
+    {
         if (cachedImageData == null) {
             return true;
         }
 
         if (lastXDelta != 0 || lastYDelta != 0) {

@@ -248,11 +250,11 @@
 
         double scaleX = xformInfo[0];
         double scaleY = xformInfo[1];
         double rotate = xformInfo[2];
         if (scaleHint) {
-            if (cachedScaleX < pixelScale || cachedScaleY < pixelScale) {
+            if (cachedScaleX < pixelScaleX || cachedScaleY < pixelScaleY) {
                 // We have moved onto a screen with a higher pixelScale and
                 // our cache was less than that pixel scale.  Even though
                 // we have the scaleHint, we always cache at a minimum of
                 // the pixel scale of the screen so we need to re-cache.
                 return true;

@@ -530,12 +532,13 @@
                     implImage.unlock();
                     invalidate();
                 }
             }
         }
-        float pixelScale = g.getAssociatedScreen().getRenderScale();
-        if (needToRenderCache(xform, xformInfo, pixelScale)) {
+        float pixelScaleX = g.getPixelScaleFactorX();
+        float pixelScaleY = g.getPixelScaleFactorY();
+        if (needToRenderCache(xform, xformInfo, pixelScaleX, pixelScaleY)) {
             if (PulseLogger.PULSE_LOGGING_ENABLED) {
                 PulseLogger.incrementCounter("CacheFilter rebuilding");
             }
             if (cachedImageData != null) {
                 Filterable implImage = cachedImageData.getUntransformedImage();

@@ -546,12 +549,12 @@
             }
             if (scaleHint) {
                 // do not cache the image at a small scale factor when
                 // scaleHint is set as it leads to poor rendering results
                 // when image is scaled up.
-                cachedScaleX = Math.max(pixelScale, xformInfo[0]);
-                cachedScaleY = Math.max(pixelScale, xformInfo[1]);
+                cachedScaleX = Math.max(pixelScaleX, xformInfo[0]);
+                cachedScaleY = Math.max(pixelScaleY, xformInfo[1]);
                 cachedRotate = 0;
                 cachedXform.setTransform(cachedScaleX, 0.0,
                                          0.0, cachedScaleX,
                                          0.0, 0.0);
                 updateScreenXform(xformInfo);