+
+ 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();
+ }
+ }