2003/12/29 22:13:16
[org.ibex.core.git] / src / org / xwt / Box.java
index b251d3b..6f0c92c 100644 (file)
@@ -68,7 +68,7 @@ public final class Box extends JSScope implements Scheduler.Task {
     static {
         Font f = null;
         try { f = Font.getFont((Res)Main.builtin.get("fonts/vera/Vera.ttf"), 10); }
-        catch(JSExn e) { Log.log(Box.class, "should never happen: "+e); }
+        catch(JSExn e) { Log.info(Box.class, "should never happen: "+e); }
         DEFAULT_FONT = f;
     }
 
@@ -302,7 +302,8 @@ public final class Box extends JSScope implements Scheduler.Task {
             int increment = max(1, x_slack / cols);
             startslack = x_slack;
             for(short col=0; col < cols; col++) {
-                int diff = min(colMaxWidth[col], colWidth[col] + increment) - colWidth[col];
+                // FIXME: double check this
+                int diff = min(min(colMaxWidth[col], colWidth[col] + increment) - colWidth[col], x_slack);
                 x_slack -= diff;
                 colWidth[col] += diff;
             }
@@ -365,8 +366,8 @@ public final class Box extends JSScope implements Scheduler.Task {
             if (cx2 <= cx1 || cy2 <= cy1) return;
         }
 
-        if ((fillcolor & 0xFF000000) != 0x00000000)
-            buf.fillTrapezoid(cx1, cx2, cy1, cx1, cx2, cy2, fillcolor);
+        if ((fillcolor & 0xFF000000) != 0x00000000 || parent == null)
+            buf.fillTrapezoid(cx1, cx2, cy1, cx1, cx2, cy2, (fillcolor & 0xFF000000) == 0 ? 0xffffffff : fillcolor);
 
         // FIXME: do aspect in here
         if (texture != null && texture.isLoaded)
@@ -419,6 +420,7 @@ public final class Box extends JSScope implements Scheduler.Task {
             return redirect == null ? null : redirect == this ? getChild(toInt(name)) : redirect.get(name);
 
         //#switch(name)
+        case "surface": return parent == null ? null : parent.get("surface");
         case "indexof": return METHOD;
         case "text": return text;
         case "path": throw new JSExn("cannot read from the path property");
@@ -527,29 +529,29 @@ public final class Box extends JSScope implements Scheduler.Task {
         case "Close": if (parent == null && getSurface() != null) getSurface().dispose(true);
         case "toback": if (parent == null && getSurface() != null && toBoolean(value)) { getSurface().toBack(); }
         case "tofront": if (parent == null && getSurface() != null && toBoolean(value)) { getSurface().toFront(); }
-        case "redirect": if (redirect == this) redirect = (Box)value; else Log.log(this, "redirect can only be set once");
+        case "redirect": if (redirect == this) redirect = (Box)value; else Log.info(this, "redirect can only be set once");
         case "font": font = value == null ? null : Font.getFont((Res)value, font == null ? 10 : font.pointsize); MARK_RESIZE; dirty();
         case "fontsize": font = Font.getFont(font == null ? null : font.res, toInt(value)); MARK_RESIZE; dirty();
         case "x": if (parent==null && Surface.fromBox(this)!=null) { CHECKSET_INT(x); } else { if (test(PACKED) && parent != null) return; CHECKSET_INT(x); dirty(); MARK_RESIZE; dirty(); }
         case "y": if (parent==null && Surface.fromBox(this)!=null) { CHECKSET_INT(y); } else { if (test(PACKED) && parent != null) return; CHECKSET_INT(y); dirty(); MARK_RESIZE; dirty(); }
 
-        case "Press1":        if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.put(name, value);
-        case "Press2":        if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.put(name, value);
-        case "Press3":        if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.put(name, value);
-        case "Release1":      if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.put(name, value);
-        case "Release2":      if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.put(name, value);
-        case "Release3":      if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.put(name, value);
-        case "Click1":        if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.put(name, value);
-        case "Click2":        if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.put(name, value);
-        case "Click3":        if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.put(name, value);
-        case "DoubleClick1":  if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.put(name, value);
-        case "DoubleClick2":  if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.put(name, value);
-        case "DoubleClick3":  if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.put(name, value);
-        case "KeyPressed":    if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.put(name, value);
-        case "KeyReleased":   if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.put(name, value);
-        case "Move":          if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.put(name, value);
-        case "Enter":         if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.put(name, value);
-        case "Leave":         if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.put(name, value);
+        case "Press1":        if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
+        case "Press2":        if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
+        case "Press3":        if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
+        case "Release1":      if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
+        case "Release2":      if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
+        case "Release3":      if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
+        case "Click1":        if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
+        case "Click2":        if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
+        case "Click3":        if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
+        case "DoubleClick1":  if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
+        case "DoubleClick2":  if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
+        case "DoubleClick3":  if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
+        case "KeyPressed":    if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
+        case "KeyReleased":   if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
+        case "Move":          if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
+        case "Enter":         if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
+        case "Leave":         if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
 
         case "_Move":         propagateDownward(name, value, false);
         case "_Press1":       propagateDownward(name, value, false);
@@ -604,7 +606,7 @@ public final class Box extends JSScope implements Scheduler.Task {
         case "bottom": set(ALIGN_BOTTOM);
         case "left": set(ALIGN_LEFT);
         case "right": set(ALIGN_RIGHT);
-        default: Log.logJS("invalid alignment \"" + value + "\"");
+        default: JS.log("invalid alignment \"" + value + "\"");
         //#end
     }
     
@@ -683,7 +685,7 @@ public final class Box extends JSScope implements Scheduler.Task {
                 (Integer.parseInt(s.substring(3, 5), 16) << 8) |
                 Integer.parseInt(s.substring(5, 7), 16);
         } catch (NumberFormatException e) {
-            Log.log(Box.class, "invalid color " + s);
+            Log.info(Box.class, "invalid color " + s);
             return 0;
         }
         else return 0; // FEATURE: error?
@@ -784,13 +786,13 @@ public final class Box extends JSScope implements Scheduler.Task {
         if (i < 0) return;
             
         if (value != null && !(value instanceof Box)) {
-            if (Log.on) Log.logJS(this, "attempt to set a numerical property on a box to a non-box");
+            if (Log.on) JS.log(this, "attempt to set a numerical property on a box to a non-box");
             return;
         }
 
         if (redirect == null) {
             if (value == null) putAndTriggerTrapsAndCatchExceptions("childremoved", getChild(i));
-            else Log.logJS(this, "attempt to add/remove children to/from a node with a null redirect");
+            else JS.log(this, "attempt to add/remove children to/from a node with a null redirect");
 
         } else if (redirect != this) {
             if (value != null) putAndTriggerTrapsAndCatchExceptions("childadded", value);
@@ -812,15 +814,15 @@ public final class Box extends JSScope implements Scheduler.Task {
             // check if box being moved is currently target of a redirect
             for(Box cur = b.parent; cur != null; cur = cur.parent)
                 if (cur.redirect == b) {
-                    if (Log.on) Log.logJS(this, "attempt to move a box that is the target of a redirect");
+                    if (Log.on) JS.log(this, "attempt to move a box that is the target of a redirect");
                     return;
                 }
 
             // check for recursive ancestor violation
             for(Box cur = this; cur != null; cur = cur.parent)
                 if (cur == b) {
-                    if (Log.on) Log.logJS(this, "attempt to make a node a parent of its own ancestor");
-                    if (Log.on) Log.log(this, "box == " + this + "  ancestor == " + b);
+                    if (Log.on) JS.log(this, "attempt to make a node a parent of its own ancestor");
+                    if (Log.on) Log.info(this, "box == " + this + "  ancestor == " + b);
                     return;
                 }
 
@@ -841,8 +843,8 @@ public final class Box extends JSScope implements Scheduler.Task {
         try {
             putAndTriggerTraps(name, val);
         } catch (Exception e) {
-            Log.logJS("caught exception while putting to trap \""+name+"\"");
-            Log.logJS(e);
+            JS.log("caught exception while putting to trap \""+name+"\"");
+            JS.log(e);
         }
     }