public Picture image; // will disappear
private int fillcolor = 0x00000000; // will become VectorGraphics.Paint
private int strokecolor = 0xFF000000; // will become VectorGraphics.Paint
+ private int textcolor = 0xFF000000; // will become VectorGraphics.Paint
private String cursor = null; // the cursor for this box
y + vpad + g.max_ascent - g.baseline + g.p.getHeight(),
0, 0,
g.p.getWidth(), g.p.getHeight(),
- strokecolor);
+ textcolor);
x += g.advance;
}
}
void put(String name, Box b, Object value) { put(b, value); }
static {
- //#repeat fill/stroke fillcolor/strokecolor
- specialBoxProperties.put("fill", new SpecialBoxProperty() {
- public Object get(Box b) {
- if ((b.fillcolor & 0xFF000000) == 0) return null;
- String red = Integer.toHexString((b.fillcolor & 0x00FF0000) >> 16);
- String green = Integer.toHexString((b.fillcolor & 0x0000FF00) >> 8);
- String blue = Integer.toHexString(b.fillcolor & 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;
- }
- public void put(Box b, Object value) {
- int newcolor = b.fillcolor;
- String s = value == null ? null : value.toString();
- if (value == null) newcolor = 0x00000000;
- else if (s.length() > 0 && s.charAt(0) == '#')
- try {
- newcolor = 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.log(this, "invalid color " + s);
- return;
- }
- else if (org.xwt.translators.SVG.colors.get(s) != null)
- newcolor = 0xFF000000 | ((Integer)org.xwt.translators.SVG.colors.get(s)).intValue();
- if (newcolor == b.fillcolor) return;
- b.fillcolor = newcolor;
- b.dirty();
- }
+ specialBoxProperties.put("fill", new ColorBoxProperty() {
+ public int getColor(Box b) { return b.fillcolor; }
+ public void putColor(Box b, int argb) { b.fillcolor = argb; }
});
- //#end
-
- specialBoxProperties.put("color", new SpecialBoxProperty() {
- public Object get(Box b) { return b.get("fill"); }
- public void put(Box b, Object value) { b.put("fill", value); }
+ specialBoxProperties.put("textcolor", new ColorBoxProperty() {
+ public int getColor(Box b) { return b.textcolor; }
+ public void putColor(Box b, int argb) { b.textcolor = argb; }
});
-
- specialBoxProperties.put("textcolor", new SpecialBoxProperty() {
- public Object get(Box b) { return b.get("stroke"); }
- public void put(Box b, Object value) { b.put("stroke", value); }
+ specialBoxProperties.put("strokecolor", new ColorBoxProperty() {
+ public int getColor(Box b) { return b.strokecolor; }
+ public void putColor(Box b, int argb) { b.strokecolor = argb; }
});
specialBoxProperties.put("text", new SpecialBoxProperty() {
b.dirty();
} });
- specialBoxProperties.put("invisible", new SpecialBoxProperty() {
+ specialBoxProperties.put("visible", new SpecialBoxProperty() {
public Object get(Box b) {
for (Box cur = b; cur != null; cur = cur.parent) {
- if ((cur.flags & INVISIBLE_FLAG) != 0) return Boolean.TRUE; }
- return Boolean.FALSE;
+ if ((cur.flags & INVISIBLE_FLAG) != 0) return Boolean.FALSE; }
+ return Boolean.TRUE;
}
public void put(Box b, Object value) {
- if (stob(value) == ((b.flags & INVISIBLE_FLAG) != 0)) return;
- if (stob(value)) b.flags |= INVISIBLE_FLAG; else b.flags &= ~INVISIBLE_FLAG;
+ if (!stob(value) == ((b.flags & INVISIBLE_FLAG) != 0)) return;
+ if (!stob(value)) b.flags |= INVISIBLE_FLAG; else b.flags &= ~INVISIBLE_FLAG;
if (b.parent == null) {
if (b.surface != null) b.surface.setInvisible((b.flags & INVISIBLE_FLAG) != 0);
} else {
*/
});
}
+
+ private static abstract class ColorBoxProperty extends SpecialBoxProperty {
+ public abstract int getColor(Box b);
+ public abstract void putColor(Box b, int argb);
+ public Object get(Box b) {
+ if ((getColor(b) & 0xFF000000) == 0) return null;
+ String red = Integer.toHexString((getColor(b) & 0x00FF0000) >> 16);
+ String green = Integer.toHexString((getColor(b) & 0x0000FF00) >> 8);
+ String blue = Integer.toHexString(getColor(b) & 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;
+ }
+ public void put(Box b, Object value) {
+ int newcolor = getColor(b);
+ String s = value == null ? null : value.toString();
+ if (value == null) newcolor = 0x00000000;
+ else if (s.length() > 0 && s.charAt(0) == '#')
+ try {
+ newcolor = 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.log(this, "invalid color " + s);
+ return;
+ }
+ else if (org.xwt.translators.SVG.colors.get(s) != null)
+ newcolor = 0xFF000000 | ((Integer)org.xwt.translators.SVG.colors.get(s)).intValue();
+ if (newcolor == getColor(b)) return;
+ putColor(b, newcolor);
+ b.dirty();
+ }
+ }
}
/** helper that converts a String to a boolean according to JavaScript coercion rules */