From 26385e08ccf74e4ea46652a9b0aa86ce873677d5 Mon Sep 17 00:00:00 2001 From: megacz Date: Fri, 30 Jan 2004 07:38:49 +0000 Subject: [PATCH] 2003/09/30 21:45:55 darcs-hash:20040130073849-2ba56-3d8934abc47c6ccb4d6be64aaa1c9744b2f11d70.gz --- src/org/xwt/Box.java.pp | 85 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 72 insertions(+), 13 deletions(-) diff --git a/src/org/xwt/Box.java.pp b/src/org/xwt/Box.java.pp index 362f033..b5a7b80 100644 --- a/src/org/xwt/Box.java.pp +++ b/src/org/xwt/Box.java.pp @@ -135,13 +135,14 @@ public final class Box extends JS.Scope { // Rendering Properties /////////////////////////////////////////////////////////// private VectorGraphics.VectorPath path = null; - //private SVG.Paint fill = null; - //private SVG.Paint stroke = null; + private VectorGraphics.Affine transform = null; + //private VectorGraphics.Paint fill = null; + //private VectorGraphics.Paint stroke = null; int strokewidth = 1; public Picture image; // will disappear - private int fillcolor = 0x00000000; // will become SVG.Paint - private int strokecolor = 0xFF000000; // will become SVG.Paint + private int fillcolor = 0x00000000; // will become VectorGraphics.Paint + private int strokecolor = 0xFF000000; // will become VectorGraphics.Paint private String cursor = null; // the cursor for this box @@ -952,17 +953,75 @@ public final class Box extends JS.Scope { b.dirty(); } }); - specialBoxProperties.put("font", new SpecialBoxProperty() { - public Object get(Box b) { return b.font; } + specialBoxProperties.put("transform", new SpecialBoxProperty() { public void put(Box b, Object value) { - // FIXME: translate value into a resource if it is a string - b.font = value == null ? null : (Res)value; - MARK_FOR_REFLOW_b; - b.flags |= FONT_CHANGED_FLAG; + String t = value.toString().trim(); + b.transform = VectorGraphics.Affine.identity(); + while (t.length() > 0) { + if (t.startsWith("skewX(")) { + // FIXME + + } else if (t.startsWith("shear(")) { + // FIXME: nonstandard; remove this + b.transform.multiply(VectorGraphics.Affine.shear(Float.parseFloat(t.substring(t.indexOf('(') + 1, t.indexOf(')'))))); + + } else if (t.startsWith("skewY(")) { + // FIXME + + } else if (t.startsWith("rotate(")) { + String sub = t.substring(t.indexOf('(') + 1, t.indexOf(')')); + if (sub.indexOf(',') != -1) { + float angle = Float.parseFloat(sub.substring(0, sub.indexOf(','))); + sub = sub.substring(sub.indexOf(',') + 1); + float cx = Float.parseFloat(sub.substring(0, sub.indexOf(','))); + sub = sub.substring(sub.indexOf(',') + 1); + float cy = Float.parseFloat(sub); + b.transform.multiply(VectorGraphics.Affine.translate(cx, cy)); + b.transform.multiply(VectorGraphics.Affine.rotate(angle)); + b.transform.multiply(VectorGraphics.Affine.translate(-1 * cx, -1 * cy)); + } else { + b.transform.multiply(VectorGraphics.Affine.rotate(Float.parseFloat(t.substring(t.indexOf('(') + 1, t.indexOf(')'))))); + } + + } else if (t.startsWith("translate(")) { + String sub = t.substring(t.indexOf('(') + 1, t.indexOf(')')); + if (sub.indexOf(',') > -1) { + b.transform.multiply(VectorGraphics.Affine.translate(Float.parseFloat(t.substring(t.indexOf('(') + 1, t.indexOf(','))), + Float.parseFloat(t.substring(t.indexOf(',') + 1, t.indexOf(')'))))); + } else { + b.transform.multiply(VectorGraphics.Affine.translate(Float.parseFloat(t.substring(t.indexOf('(') + 1, t.indexOf(','))), 0)); + } + + } else if (t.startsWith("flip(")) { + String which = t.substring(t.indexOf('(') + 1, t.indexOf(')')); + b.transform.multiply(VectorGraphics.Affine.flip(which.equals("horizontal"), which.equals("vertical"))); + + } else if (t.startsWith("scale(")) { + String sub = t.substring(t.indexOf('(') + 1, t.indexOf(')')); + if (sub.indexOf(',') > -1) { + b.transform.multiply(VectorGraphics.Affine.scale(Float.parseFloat(t.substring(t.indexOf('(') + 1, t.indexOf(','))), + Float.parseFloat(t.substring(t.indexOf(',') + 1, t.indexOf(')'))))); + } else { + b.transform.multiply(VectorGraphics.Affine.scale(Float.parseFloat(t.substring(t.indexOf('(') + 1, t.indexOf(','))), + Float.parseFloat(t.substring(t.indexOf('(') + 1, t.indexOf(','))))); + } + + } else if (t.startsWith("matrix(")) { + // FIXME: is this mapped right? + float d[] = new float[6]; + StringTokenizer st = new StringTokenizer(t, ",", false); + for(int i=0; i<6; i++) + d[i] = Float.parseFloat(st.nextToken()); + b.transform.multiply(new VectorGraphics.Affine(d[0], d[1], d[2], d[3], d[4], d[5])); + } + t = t.substring(t.indexOf(')') + 1).trim(); + } b.dirty(); - } }); - - specialBoxProperties.put("transform", new SpecialBoxProperty() { + } + public Object get(Box b) { return b.transform.toString(); } + }); + + specialBoxProperties.put("font", new SpecialBoxProperty() { public Object get(Box b) { return b.font; } public void put(Box b, Object value) { // FIXME: translate value into a resource if it is a string -- 1.7.10.4