2002/07/15 23:16:42
[org.ibex.core.git] / src / org / xwt / SpecialBoxProperty.java
index 52fc331..f3993cc 100644 (file)
@@ -101,8 +101,8 @@ class SpecialBoxProperty {
                     else if (s.equals("pink")) newcolor = pink;
                     else if (s.equals("yellow")) newcolor = yellow;
                     else if (s.equals("white")) newcolor = white;
-                    else if (Log.on) Log.log(this, "invalid color " + s);
-
+                    else if (Log.on) Log.log(this, "invalid color \"" + s + "\" at " +
+                                             Context.enter().interpreterSourceFile + ":" + Context.enter().interpreterLine);
                     if (newcolor == b.color) return;
                     b.color = newcolor;
                     b.dirty();
@@ -145,7 +145,8 @@ class SpecialBoxProperty {
                     else if (s.equals("pink")) newtextcolor = pink;
                     else if (s.equals("yellow")) newtextcolor = yellow;
                     else if (s.equals("white")) newtextcolor = white;
-                    else if (Log.on) Log.log(this, "invalid textcolor " + s);
+                    else if (Log.on) Log.log(this, "invalid color \"" + s + "\" at " +
+                                             Context.enter().interpreterSourceFile + ":" + Context.enter().interpreterLine);
 
                     if (newtextcolor == b.textcolor) return;
                     b.textcolor = newtextcolor;
@@ -180,9 +181,12 @@ class SpecialBoxProperty {
                 public Object get(Box b) { return b; }
                 public void put(Box b, Object value) {
                     if (value == null) b.remove();
-                    else if (value.equals("window")) Platform.createSurface(b, false, true);
-                    else if (value.equals("frame")) Platform.createSurface(b, true, true);
-                    else if (Log.on) Log.log(this, "put invalid value to 'thisbox' property: " + value);
+                    else if (value.equals("window") || value.equals("frame")) {
+                        if (b.redirect != b && Log.on)
+                            Log.log(this, "WARNING: you have created a surface whose root box's redirect is not itself " +
+                                    "-- this isn't usually a good idea");
+                        Platform.createSurface(b, value.equals("frame"), true);
+                    } else if (Log.on) Log.log(this, "put invalid value to 'thisbox' property: " + value);
                 }
             });
 
@@ -239,6 +243,15 @@ class SpecialBoxProperty {
                     }
                 } });
         
+        specialBoxProperties.put("fixedaspect", new SpecialBoxProperty() {
+                public Object get(Box b) { return b.sizetoimage ? Boolean.TRUE : Boolean.FALSE; }
+                public void put(Box b, Object value) {
+                    boolean newval = stob(value);
+                    if (newval == b.fixedaspect) return;
+                    b.fixedaspect = newval;
+                    b.dirty();
+                } });
+        
         specialBoxProperties.put("shrink", new SpecialBoxProperty() {
                 public Object get(Box b) { return (b.vshrink && b.hshrink) ? Boolean.TRUE : Boolean.FALSE; }
                 public void put(Box b, Object value) {
@@ -466,7 +479,7 @@ class SpecialBoxProperty {
                 public void put(String name, Box b, Object value) {
                     if (b.surface == null) return;
                     if (b.getParent() == null) {
-                        if (b.surface.boxContainingMouse.getParent() != null)
+                        if (b.surface.boxContainingMouse != null && b.surface.boxContainingMouse.getParent() != null)
                             b.surface.boxContainingMouse.put(name, b.surface.boxContainingMouse, value);
                     } else {
                         // check siblings
@@ -634,6 +647,15 @@ class SpecialBoxProperty {
                     b.set(dmax, 1, stosh(value));
                 }
             });
+
+        specialBoxProperties.put("redirect", new SpecialBoxProperty() {
+                public void put(Box b, Object value) { }
+                public Object get(Box b) {
+                    if (b.redirect == null) return null;
+                    if (b.redirect == b) return Boolean.TRUE;
+                    return get(b.redirect);
+                }
+            });
     }