2002/08/16 23:37:17
[org.ibex.core.git] / src / org / xwt / Surface.java
index da783c1..e59dfc6 100644 (file)
@@ -48,6 +48,9 @@ public abstract class Surface {
     /** true iff button 3 is depressed, in MessageQueue-time */
     public static boolean button3 = false;
 
+    /** true iff all surfaces created from now on should be scarred */
+    public static boolean scarAllSurfacesFromNowOn = false;
+
 
     // Public Members and State Variables /////////////////////////////////////////////////////////
 
@@ -97,8 +100,7 @@ public abstract class Surface {
 
     /** the last time a Click message was processed; used for simulating DoubleClick's */
     static long lastClickTime = 0;
-
-
+    
     
     // Methods to be overridden by subclasses ///////////////////////////////////////////////////////
 
@@ -337,6 +339,8 @@ public abstract class Surface {
     /** a striped 100x100 double buffer */
     private DoubleBuffer showRenderBuf2 = null;
 
+    /** true iff this window should be scarred */
+    private boolean scarred = true;
 
 
     // Other Methods ///////////////////////////////////////////////////////////////////////////////
@@ -357,11 +361,13 @@ public abstract class Surface {
 
     /** wrapper for setSize() which makes sure to dirty the place where the scar used to be */
     void _setSize(int width, int height) {
-        width = Math.max(width, scarPicture.getWidth());
-        height = Math.max(height, scarPicture.getHeight());
-        dirty(hscar,
-              root.size(1) - vscar - scarPicture.getHeight(),
-              scarPicture.getWidth(), scarPicture.getHeight());
+        if (scarred) {
+            width = Math.max(width, scarPicture.getWidth());
+            height = Math.max(height, scarPicture.getHeight());
+            dirty(hscar,
+                  root.size(1) - vscar - scarPicture.getHeight(),
+                  scarPicture.getWidth(), scarPicture.getHeight());
+        }
         setSize(width, height);
         this.width = width;
         this.height = height;
@@ -391,6 +397,8 @@ public abstract class Surface {
     }
 
     public Surface(Box root) {
+        this.scarred = scarAllSurfacesFromNowOn;
+        scarAllSurfacesFromNowOn = true;
         this.root = root;
         if (root.surface != null && root.surface.root == root) root.surface.dispose();
         root.remove();
@@ -417,9 +425,9 @@ public abstract class Surface {
         if (root.size(0) != width || root.size(1) != height) {
 
             // since the scar will be moving, dirty the place it used to be
-            dirty(hscar,
-                  root.size(1) - vscar - scarPicture.getHeight(),
-                  scarPicture.getWidth(), scarPicture.getHeight());
+            if (scarred) dirty(hscar,
+                               root.size(1) - vscar - scarPicture.getHeight(),
+                               scarPicture.getWidth(), scarPicture.getHeight());
 
             // sort of ugly; we can't use set() here because it will cause an infinite mutual recursion
             root._size_0 = (short)width;
@@ -466,7 +474,7 @@ public abstract class Surface {
             root.render(x, y, w, h, backbuffer);
             
             // if any area under the scar was repainted, rescar that area
-            if (x < hscar + scarPicture.getWidth() &&
+            if (scarred && x < hscar + scarPicture.getWidth() &&
                 y + h > height - scarPicture.getHeight() - vscar) {
                 int _x1 = Math.max(x, hscar);
                 int _x2 = Math.min(x + w, hscar + scarPicture.getWidth());