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);