You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by tv...@apache.org on 2009/05/06 17:17:42 UTC

svn commit: r772298 - in /incubator/pivot/trunk/wtk/src/pivot/wtk: ApplicationContext.java skin/ScrollPaneSkin.java

Author: tvolkert
Date: Wed May  6 15:17:41 2009
New Revision: 772298

URL: http://svn.apache.org/viewvc?rev=772298&view=rev
Log:
Re-enabled ScrollPane's optimized scrolling for the cases where we know that it's OK; added DisplayHost#getApplicationContext

Modified:
    incubator/pivot/trunk/wtk/src/pivot/wtk/ApplicationContext.java
    incubator/pivot/trunk/wtk/src/pivot/wtk/skin/ScrollPaneSkin.java

Modified: incubator/pivot/trunk/wtk/src/pivot/wtk/ApplicationContext.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/pivot/wtk/ApplicationContext.java?rev=772298&r1=772297&r2=772298&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/pivot/wtk/ApplicationContext.java (original)
+++ incubator/pivot/trunk/wtk/src/pivot/wtk/ApplicationContext.java Wed May  6 15:17:41 2009
@@ -278,6 +278,10 @@
             setFocusTraversalKeysEnabled(false);
         }
 
+        public ApplicationContext getApplicationContext() {
+            return ApplicationContext.this;
+        }
+
         public double getScale() {
             return scale;
         }

Modified: incubator/pivot/trunk/wtk/src/pivot/wtk/skin/ScrollPaneSkin.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/pivot/wtk/skin/ScrollPaneSkin.java?rev=772298&r1=772297&r2=772298&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/pivot/wtk/skin/ScrollPaneSkin.java (original)
+++ incubator/pivot/trunk/wtk/src/pivot/wtk/skin/ScrollPaneSkin.java Wed May  6 15:17:41 2009
@@ -19,8 +19,11 @@
 import java.awt.Color;
 import java.awt.Graphics2D;
 import java.awt.Paint;
+import java.awt.Transparency;
 
+import pivot.wtk.ApplicationContext;
 import pivot.wtk.Component;
+import pivot.wtk.DesktopApplicationContext;
 import pivot.wtk.Dimensions;
 import pivot.wtk.Keyboard;
 import pivot.wtk.Mouse;
@@ -807,17 +810,8 @@
     public void setBackgroundPaint(Paint backgroundPaint) {
         super.setBackgroundPaint(backgroundPaint);
 
-        // TODO Remove once the cause for the intermittent painting bugs has
-        // been identified
-        optimizeScrolling = false;
-        /*
-        // TODO Remove check for Operating System once Apple fixes the
-        // paint artifact issue with Graphics#copyArea
-        String osName = System.getProperty("os.name");
-        optimizeScrolling = (!osName.equals("Mac OS X") &&
-            backgroundPaint instanceof Color &&
-            backgroundPaint.getTransparency() == Transparency.OPAQUE);
-        */
+        optimizeScrolling = (backgroundPaint != null
+            && backgroundPaint.getTransparency() == Transparency.OPAQUE);
     }
 
     public int getHorizontalIncrement() {
@@ -915,6 +909,7 @@
 
     // ViewportListener methods
 
+    @SuppressWarnings("deprecation")
     public void scrollTopChanged(Viewport viewport, int previousScrollTop) {
         // NOTE we don't invalidate the component here because we need only
         // reposition the view and row header. Invalidating would yield
@@ -948,6 +943,19 @@
 
         boolean optimizeScrolling = this.optimizeScrolling;
 
+        // TODO Remove this check when we can. Sun bug 4033851 causes paint
+        // artifacts while scrolling. For a full description of why this is,
+        // needed, see http://people.apache.org/~tvolkert/tests/scrolling/
+        // There seems to be no workaround, so we have to turn the optimization
+        // completely off if we're not sure that we're unobscured.
+        if (optimizeScrolling) {
+            ApplicationContext.DisplayHost displayHost = viewport.getDisplay().getDisplayHost();
+            ApplicationContext applicationContext = displayHost.getApplicationContext();
+
+            optimizeScrolling = (applicationContext instanceof DesktopApplicationContext ||
+                (displayHost.getPeer().canDetermineObscurity() && !displayHost.getPeer().isObscured())); 
+        }
+
         if (optimizeScrolling) {
             try {
                 graphics.copyArea(blitX, blitY, blitWidth, blitHeight, 0, -deltaScrollTop);
@@ -981,6 +989,7 @@
         }
     }
 
+    @SuppressWarnings("deprecation")
     public void scrollLeftChanged(Viewport viewport, int previousScrollLeft) {
         // NOTE we don't invalidate the component here because we need only
         // reposition the view and column header. Invalidating would yield
@@ -1014,6 +1023,19 @@
 
         boolean optimizeScrolling = this.optimizeScrolling;
 
+        // TODO Remove this check when we can. Sun bug 4033851 causes paint
+        // artifacts while scrolling. For a full description of why this is,
+        // needed, see http://people.apache.org/~tvolkert/tests/scrolling/.
+        // There seems to be no workaround, so we have to turn the optimization
+        // completely off if we're not sure that we're unobscured.
+        if (optimizeScrolling) {
+            ApplicationContext.DisplayHost displayHost = viewport.getDisplay().getDisplayHost();
+            ApplicationContext applicationContext = displayHost.getApplicationContext();
+
+            optimizeScrolling = (applicationContext instanceof DesktopApplicationContext ||
+                (displayHost.getPeer().canDetermineObscurity() && !displayHost.getPeer().isObscured())); 
+        }
+
         if (optimizeScrolling) {
             try {
                 graphics.copyArea(blitX, blitY, blitWidth, blitHeight, -deltaScrollLeft, 0);