2003/12/29 22:13:16
[org.ibex.core.git] / src / org / xwt / Box.java
index df1cfd6..6f0c92c 100644 (file)
@@ -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)
@@ -534,23 +535,23 @@ public final class Box extends JSScope implements Scheduler.Task {
         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);
@@ -605,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
     }
     
@@ -785,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);
@@ -813,14 +814,14 @@ 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) 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;
                 }
@@ -842,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);
         }
     }