X-Git-Url: http://git.megacz.com/?p=org.ibex.core.git;a=blobdiff_plain;f=src%2Forg%2Fibex%2Fcore%2FBox.java;h=bb8a27b94812b8bd954dbaa7ce2f9a445befe228;hp=496725226d590b75639e8ac29c0ce0896cf5b790;hb=fffcafc33aa4066bdf85da7a32e1a1cdb9db2d6f;hpb=48760d1df22a8925ad93fc2fa422faf15ef94cc1 diff --git a/src/org/ibex/core/Box.java b/src/org/ibex/core/Box.java index 4967252..bb8a27b 100644 --- a/src/org/ibex/core/Box.java +++ b/src/org/ibex/core/Box.java @@ -65,8 +65,8 @@ public final class Box extends JSScope implements Task { static final int MOUSEINSIDE = 0x00000001; static final int VISIBLE = 0x00000002; static final int PACKED = 0x00000004; - static final int HSHRINK = 0x00000008; - static final int VSHRINK = 0x00000010; + public static final int HSHRINK = 0x00000008; + public static final int VSHRINK = 0x00000010; static final int BLACK = 0x00000020; // for red-black code static final int FIXED = 0x00000040; @@ -123,8 +123,8 @@ public final class Box extends JSScope implements Task { public int ay = 0; // FEATURE: roll these into x/y; requires lots of changes; perhaps y()? public int width = 0; public int height = 0; - private int contentwidth = 0; // == max(minwidth, textwidth, sum(child.contentwidth)) - private int contentheight = 0; + public int contentwidth = 0; // == max(minwidth, textwidth, sum(child.contentwidth)) + public int contentheight = 0; private Path path = null; /* @@ -170,8 +170,14 @@ public final class Box extends JSScope implements Task { // Reflow //////////////////////////////////////////////////////////////////////////////////////// /** should only be invoked on the root box */ - public void reflow() { pack(); resize(x, y, maxwidth, maxheight); place(); } - + public void reflow() { + pack(); + resize(x, y, + test(HSHRINK) ? contentwidth : maxwidth, + test(VSHRINK) ? contentheight : maxheight); + place(); + } + private static Box[] frontier = new Box[65535]; /** pack the boxes into rows and columns, compute contentwidth */ public void pack() { @@ -226,7 +232,7 @@ public final class Box extends JSScope implements Task { void resize(int x, int y, int width, int height) { if (x == this.x && y == this.y && width == this.width && height == this.height) return; - boolean sizechange = (this.width != width || this.height != height) && getTrap("SizeChange") != null; + boolean sizechange = (this.width != width || this.height != height) && hasTrap("SizeChange"); int thisx = parent == null ? 0 : this.x; int thisy = parent == null ? 0 : this.y; Box who = (parent == null ? this : parent); @@ -442,9 +448,9 @@ public final class Box extends JSScope implements Task { case "distanceto": Box b = (Box)a0; - JS ret = new JS(); - ret.put("x", N(localToGlobalX(0) - b.localToGlobalX(0))); - ret.put("y", N(localToGlobalY(0) - b.localToGlobalY(0))); + JS ret = new JS.O(); + ret.put("x", N(b.localToGlobalX(0) - localToGlobalX(0))); + ret.put("y", N(b.localToGlobalY(0) - localToGlobalY(0))); return ret; //#end @@ -462,7 +468,13 @@ public final class Box extends JSScope implements Task { case "indexof": return METHOD; case "distanceto": return METHOD; case "text": return text; - case "path": throw new JSExn("cannot read from the path property"); + case "path": + if (path != null) return path.toString(); + if (text == null) return null; + if (font == null) return null; + String ret = ""; + for(int i=0; i