X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fxwt%2FBox.java;h=7743120303dac99f53d1817138049ef01369458e;hb=16ad8b9430571d806f2aeb18ec472a277ff69423;hp=c4f34e599ae38e2032334d9cf47884ac1bb29159;hpb=9c2602143956cd39ecf5ef4c9eb31f5f56b5bd66;p=org.ibex.core.git diff --git a/src/org/xwt/Box.java b/src/org/xwt/Box.java index c4f34e5..7743120 100644 --- a/src/org/xwt/Box.java +++ b/src/org/xwt/Box.java @@ -1,3 +1,4 @@ +// FIXME // Copyright 2002 Adam Megacz, see the COPYING file for licensing [GPL] package org.xwt; @@ -175,7 +176,7 @@ public final class Box extends JSScope implements Scheduler.Task { // as external events have occured, check the state of box if (texture != null) { if (texture.isLoaded) { minwidth = min(texture.width, maxwidth); minheight = min(texture.height, maxheight); } - else { Stream res = texture.res; texture = null; throw new JSExn("image not found: "+res); } + else { JS res = texture.stream; texture = null; throw new JSExn("image not found: "+res); } } MARK_REPACK; @@ -257,7 +258,7 @@ public final class Box extends JSScope implements Scheduler.Task { if (x != this.x || y != this.y || width != this.width || height != this.height) { boolean sizechange = (this.width != width || this.height != height) && getTrap("SizeChange") != null; boolean poschange = (this.x != x || this.y != y) && getTrap("PosChange") != null; - do { + //do { int thisx = parent == null ? 0 : this.x; int thisy = parent == null ? 0 : this.y; @@ -280,8 +281,8 @@ public final class Box extends JSScope implements Scheduler.Task { (parent == null ? this : parent).dirty(thisx, thisy, this.width, this.height); this.width = width; this.height = height; this.x = x; this.y = y; dirty(); - } while (false); - this.width = width; this.height = height; this.x = x; this.y = y; + //} while (false); + //this.width = width; this.height = height; this.x = x; this.y = y; if (sizechange) putAndTriggerTrapsAndCatchExceptions("SizeChange", T); if (poschange) putAndTriggerTrapsAndCatchExceptions("PosChange", T); } @@ -322,8 +323,8 @@ public final class Box extends JSScope implements Scheduler.Task { if (!child.test(PACKED)) { child_x = child.x; child_y = child.y; - child_width = child.test(HSHRINK) ? child.contentwidth : min(child.maxwidth, width - child.x); - child_height = child.test(VSHRINK) ? child.contentheight : min(child.maxheight, height - child.y); + child_width = child.test(HSHRINK) ? child.contentwidth : min(child.maxwidth, width - child_x); + child_height = child.test(VSHRINK) ? child.contentheight : min(child.maxheight, height - child_y); child_width = max(child.minwidth, child_width); child_height = max(child.minheight, child_height); } else { @@ -432,7 +433,7 @@ public final class Box extends JSScope implements Scheduler.Task { case "fill": return colorToString(fillcolor); case "strokecolor": return colorToString(strokecolor); case "textcolor": return colorToString(strokecolor); - case "font": return font == null ? null : font.res; + case "font": return font == null ? null : font.stream; case "fontsize": return font == null ? N(10) : N(font.pointsize); case "strokewidth": return N(strokewidth); case "align": return alignToString(); @@ -472,7 +473,7 @@ public final class Box extends JSScope implements Scheduler.Task { throw new Error("unreachable"); // unreachable } - private class Mouse extends JS { + private class Mouse extends JS.Cloneable { public Object get(Object key) { //#switch(key) case "x": return N(globalToLocalX(getSurface()._mousex)); @@ -509,8 +510,12 @@ public final class Box extends JSScope implements Scheduler.Task { case "height": put("maxheight", value); put("minheight", value); MARK_RESIZE; case "maxwidth": setMaxWidth(value); case "minwidth": CHECKSET_INT(minwidth); MARK_RESIZE; + if (parent == null && getSurface() != null) + getSurface().setMinimumSize(minwidth, minheight, minwidth != maxwidth || minheight != maxheight); case "maxheight": setMaxHeight(value); case "minheight": CHECKSET_INT(minheight); MARK_RESIZE; + if (parent == null && getSurface() != null) + getSurface().setMinimumSize(minwidth, minheight, minwidth != maxwidth || minheight != maxheight); case "colspan": CHECKSET_SHORT(colspan); MARK_REPACK_parent; case "rowspan": CHECKSET_SHORT(rowspan); MARK_REPACK_parent; case "rows": CHECKSET_SHORT(rows); if (rows==0){set(FIXED, COLS);if(cols==0)cols=1;} else set(FIXED, ROWS); MARK_REPACK; @@ -538,9 +543,9 @@ public final class Box extends JSScope implements Scheduler.Task { 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 "fontsize": font = Font.getFont(font == null ? null : font.stream, toInt(value)); MARK_RESIZE; dirty(); + case "x": if (parent==null && Surface.fromBox(this)!=null) { CHECKSET_INT(x); } else { if (test(PACKED) && parent != null) return; dirty(); 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; dirty(); CHECKSET_INT(y); dirty(); MARK_RESIZE; dirty(); } case "titlebar": if (getSurface() != null && value != null) getSurface().setTitleBarText(JS.toString(value)); super.put(name,value); @@ -642,10 +647,10 @@ public final class Box extends JSScope implements Scheduler.Task { int newfillcolor = stringToColor((String)value); if (newfillcolor == fillcolor) return; fillcolor = newfillcolor; - } else if(value instanceof Stream) { - texture = Picture.load((Stream)value, this); + } else if(value instanceof JS) { + texture = Picture.load((JS)value, this); } else { - throw new JSExn("fill must be null, a String, or a stream"); + throw new JSExn("fill must be null, a String, or a stream, not a " + value.getClass()); } dirty(); } @@ -800,13 +805,13 @@ public final class Box extends JSScope implements Scheduler.Task { if (i < 0) return; if (value != null && !(value instanceof Box)) { - if (Log.on) JS.log(this, "attempt to set a numerical property on a box to a non-box"); + if (Log.on) JS.warn("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 JS.log(this, "attempt to add/remove children to/from a node with a null redirect"); + else JS.warn("attempt to add/remove children to/from a node with a null redirect"); } else if (redirect != this) { if (value != null) putAndTriggerTrapsAndCatchExceptions("childadded", value); @@ -828,14 +833,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) JS.log(this, "attempt to move a box that is the target of a redirect"); + if (Log.on) JS.warn("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) JS.log(this, "attempt to make a node a parent of its own ancestor"); + if (Log.on) JS.warn("attempt to make a node a parent of its own ancestor"); if (Log.on) Log.info(this, "box == " + this + " ancestor == " + b); return; }