2004/01/07 20:37:32
[org.ibex.core.git] / src / org / xwt / Box.java
index c39823e..c4f34e5 100644 (file)
@@ -479,7 +479,7 @@ public final class Box extends JSScope implements Scheduler.Task {
             case "y": return N(globalToLocalY(getSurface()._mousey));
 
             // this might not get recomputed if we change mousex/mousey...
-            case "inside": return B(MOUSEINSIDE);
+            case "inside": return B(test(MOUSEINSIDE));
             //#end
             return null;
         }
@@ -533,11 +533,18 @@ public final class Box extends JSScope implements Scheduler.Task {
         case "Maximized": if (parent == null && getSurface() != null) getSurface().maximized = toBoolean(value);  // FEATURE
         case "Close": if (parent == null && getSurface() != null) getSurface().dispose(true);
         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((Stream)value, font == null ? 10 : font.pointsize); MARK_RESIZE; dirty();
+        case "font":
+            if(!(value instanceof Stream)) throw new JSExn("You can only put streams to the font property");
+            font = value == null ? null : Font.getFont((Stream)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 "titlebar":
+            if (getSurface() != null && value != null) getSurface().setTitleBarText(JS.toString(value));
+            super.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);
@@ -625,18 +632,22 @@ public final class Box extends JSScope implements Scheduler.Task {
         if (surface.cursor != tempcursor) surface.syncCursor();
     }
 
-    private void setFill(Object value) {
-        if (value == null) return;
-        if (value instanceof String) {
+    private void setFill(Object value) throws JSExn {
+        if (value == null) {
+            // FIXME: Check this... does this make it transparent? 
+            texture = null;
+            fillcolor = 0;
+        } else if (value instanceof String) {
             // FIXME check double set
             int newfillcolor = stringToColor((String)value);
             if (newfillcolor == fillcolor) return;
             fillcolor = newfillcolor;
-            dirty();
-            return;
+        } else if(value instanceof Stream) {
+            texture = Picture.load((Stream)value, this);
+        } else {
+            throw new JSExn("fill must be null, a String, or a stream");
         }
-        if (!(value instanceof Stream)) return;
-        texture = Picture.load((Stream)value, this);
+        dirty();
     }
 
     // FIXME: mouse move/release still needs to propagate to boxen in which the mouse was pressed and is still held down
@@ -681,7 +692,7 @@ public final class Box extends JSScope implements Scheduler.Task {
         // FIXME support three-char strings by doubling digits
         if (s == null) return 0x00000000;
         else if (SVG.colors.get(s) != null) return 0xFF000000 | toInt(SVG.colors.get(s));
-        else if (s.length() > 0 && s.charAt(0) == '#') try {
+        else if (s.length() == 7 && s.charAt(0) == '#') try {
             // FEATURE  alpha
             return 0xFF000000 |
                 (Integer.parseInt(s.substring(1, 3), 16) << 16) |
@@ -845,6 +856,9 @@ public final class Box extends JSScope implements Scheduler.Task {
     void putAndTriggerTrapsAndCatchExceptions(Object name, Object val) {
         try {
             putAndTriggerTraps(name, val);
+        } catch (JSExn e) {
+            JS.log("caught js exception while putting to trap \""+name+"\"");
+            JS.log(e);
         } catch (Exception e) {
             JS.log("caught exception while putting to trap \""+name+"\"");
             JS.log(e);