X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fcore%2FBox.java;h=f333abb0eba7983bfcc5d4480886037940fd36c4;hb=4ee8935b67d76c7a0e3bfc7f4e59248abae69fc2;hp=c898d8e1cfb502749b2aa88234e56013cedfa506;hpb=4daeeb4119b901d53b44913c86f8af3ce67db925;p=org.ibex.core.git diff --git a/src/org/ibex/core/Box.java b/src/org/ibex/core/Box.java index c898d8e..f333abb 100644 --- a/src/org/ibex/core/Box.java +++ b/src/org/ibex/core/Box.java @@ -1,6 +1,6 @@ // FIXME // Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL] -package org.ibex; +package org.ibex.core; // FIXME: are traps on x/y meaningful? // FIXME: if we trap on cols, then set rows to 0 (forcing cols to 1), does the cols trap get triggered? @@ -17,7 +17,7 @@ package org.ibex; import java.util.*; import org.ibex.js.*; import org.ibex.util.*; -import org.ibex.translators.*; +import org.ibex.graphics.*; /** *

@@ -38,7 +38,7 @@ import org.ibex.translators.*; * trigger a Surface.abort; if rendering were done in the same pass, * rendering work done prior to the Surface.abort would be wasted. */ -public final class Box extends JSScope implements Scheduler.Task { +public final class Box extends JSScope implements Task { // Macros ////////////////////////////////////////////////////////////////////// @@ -52,7 +52,7 @@ public final class Box extends JSScope implements Scheduler.Task { //#define CHECKSET_BOOLEAN(prop) boolean nu = toBoolean(value); if (nu == prop) break; prop = nu; //#define CHECKSET_STRING(prop) if ((value==null&&prop==null)||(value!=null&&JS.toString(value).equals(prop))) break; prop=JS.toString(value); - protected Box() { super(null); } + public Box() { super(null); } // FIXME memory leak static Hash boxToCursor = new Hash(500, 3); @@ -128,9 +128,9 @@ public final class Box extends JSScope implements Scheduler.Task { /* private VectorGraphics.VectorPath path = null; - private VectorGraphics.Affine transform = null; + private Affine transform = null; private VectorGraphics.RasterPath rpath = null; - private VectorGraphics.Affine rtransform = null; + private Affine rtransform = null; */ //#define DIRTY dirty() @@ -172,11 +172,11 @@ public final class Box extends JSScope implements Scheduler.Task { // Reflow //////////////////////////////////////////////////////////////////////////////////////// /** should only be invoked on the root box */ - void reflow() { pack(); resize(x, y, maxwidth, maxheight); place(); } + public void reflow() { pack(); resize(x, y, maxwidth, maxheight); place(); } private static Box[] frontier = new Box[65535]; /** pack the boxes into rows and columns, compute contentwidth */ - void pack() { + public void pack() { if (!test(REPACK)) { constrain(); return; } boolean haskid = false; for(Box child = getChild(0); child != null; child = child.nextSibling()) { haskid = true; child.pack(); } @@ -390,7 +390,7 @@ public final class Box extends JSScope implements Scheduler.Task { // Rendering Pipeline ///////////////////////////////////////////////////////////////////// /** Renders self and children within the specified region. All rendering operations are clipped to xIn,yIn,wIn,hIn */ - void render(int parentx, int parenty, int cx1, int cy1, int cx2, int cy2, PixelBuffer buf, VectorGraphics.Affine a) { + public void render(int parentx, int parenty, int cx1, int cy1, int cx2, int cy2, PixelBuffer buf, Affine a) { if (!test(VISIBLE)) return; int globalx = parentx + (parent == null ? 0 : x); int globaly = parenty + (parent == null ? 0 : y); @@ -463,9 +463,9 @@ public final class Box extends JSScope implements Scheduler.Task { case "distanceto": return METHOD; case "text": return text; case "path": throw new JSExn("cannot read from the path property"); - case "fill": return colorToString(fillcolor); - case "strokecolor": return colorToString(strokecolor); - case "textcolor": return colorToString(strokecolor); + case "fill": return Color.colorToString(fillcolor); + case "strokecolor": return Color.colorToString(strokecolor); + case "textcolor": return Color.colorToString(strokecolor); case "font": return font == null ? null : font.stream; case "fontsize": return font == null ? N(10) : N(font.pointsize); case "strokewidth": return N(strokewidth); @@ -539,8 +539,8 @@ public final class Box extends JSScope implements Scheduler.Task { //#switch(name) case "thisbox": if (value == null) removeSelf(); case "text": if (value == null) value = ""; CHECKSET_STRING(text); RECONSTRAIN(); DIRTY; - case "strokecolor": value = N(stringToColor((String)value)); CHECKSET_INT(strokecolor); DIRTY; - case "textcolor": value = N(stringToColor((String)value)); CHECKSET_INT(strokecolor); DIRTY; + case "strokecolor": value = N(Color.stringToColor((String)value)); CHECKSET_INT(strokecolor); DIRTY; + case "textcolor": value = N(Color.stringToColor((String)value)); CHECKSET_INT(strokecolor); DIRTY; case "strokewidth": CHECKSET_SHORT(strokewidth); DIRTY; case "shrink": CHECKSET_FLAG(HSHRINK | VSHRINK); RECONSTRAIN(); case "hshrink": CHECKSET_FLAG(HSHRINK); RECONSTRAIN(); @@ -695,7 +695,7 @@ public final class Box extends JSScope implements Scheduler.Task { texture = null; fillcolor = 0; } else if (value instanceof String) { - int newfillcolor = stringToColor((String)value); + int newfillcolor = Color.stringToColor((String)value); if (newfillcolor == fillcolor) return; fillcolor = newfillcolor; texture = null; @@ -761,34 +761,6 @@ public final class Box extends JSScope implements Scheduler.Task { putAndTriggerTrapsAndCatchExceptions(name.substring(1), value); } - private static int stringToColor(String s) { - // 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() == 7 && s.charAt(0) == '#') try { - // FEATURE alpha - return 0xFF000000 | - (Integer.parseInt(s.substring(1, 3), 16) << 16) | - (Integer.parseInt(s.substring(3, 5), 16) << 8) | - Integer.parseInt(s.substring(5, 7), 16); - } catch (NumberFormatException e) { - Log.info(Box.class, "invalid color " + s); - return 0; - } - else return 0; // FEATURE: error? - } - - private static String colorToString(int argb) { - if ((argb & 0xFF000000) == 0) return null; - String red = Integer.toHexString((argb & 0x00FF0000) >> 16); - String green = Integer.toHexString((argb & 0x0000FF00) >> 8); - String blue = Integer.toHexString(argb & 0x000000FF); - if (red.length() < 2) red = "0" + red; - if (blue.length() < 2) blue = "0" + blue; - if (green.length() < 2) green = "0" + green; - return "#" + red + green + blue; - } - /** figures out what box in this subtree of the Box owns the pixel at x,y relitave to the Surface */ public static Box whoIs(Box cur, int x, int y) { @@ -862,7 +834,7 @@ public final class Box extends JSScope implements Scheduler.Task { // Tree Manipulation ///////////////////////////////////////////////////////////////////// - void removeSelf() { + public void removeSelf() { if (parent != null) { parent.removeChild(parent.indexNode(this)); return; } Surface surface = Surface.fromBox(this); if (surface != null) surface.dispose(true); @@ -936,8 +908,8 @@ public final class Box extends JSScope implements Scheduler.Task { putAndTriggerTrapsAndCatchExceptions("ChildChange", b); } } - - void putAndTriggerTrapsAndCatchExceptions(Object name, Object val) { + + public void putAndTriggerTrapsAndCatchExceptions(Object name, Object val) { try { putAndTriggerTraps(name, val); } catch (JSExn e) {