source:
josm/trunk/patches/10trim_svgsalamander.patch@
4488
Last change on this file since 4488 was 4256, checked in by , 13 years ago | |
---|---|
File size: 200.8 KB |
-
deleted file josm.orig/src/com/kitfox/svg/animation/Animate.java
Patch against rev 98 of https://svn.java.net/svn/svgsalamander~svn/trunk. It strips some classes, that aren't needed (basically animation and gui) and removes dependencies. The only purpose of this patch is to reduce binary download size for JOSM users.
+ - 1 /*2 * Animate.java3 *4 * The Salamander Project - 2D and 3D graphics libraries in Java5 * Copyright (C) 2004 Mark McKay6 *7 * This library is free software; you can redistribute it and/or8 * modify it under the terms of the GNU Lesser General Public9 * License as published by the Free Software Foundation; either10 * version 2.1 of the License, or (at your option) any later version.11 *12 * This library is distributed in the hope that it will be useful,13 * but WITHOUT ANY WARRANTY; without even the implied warranty of14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU15 * Lesser General Public License for more details.16 *17 * You should have received a copy of the GNU Lesser General Public18 * License along with this library; if not, write to the Free Software19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA20 *21 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other22 * projects can be found at http://www.kitfox.com23 *24 * Created on August 15, 2004, 2:51 AM25 */26 27 package com.kitfox.svg.animation;28 29 import com.kitfox.svg.SVGElement;30 import com.kitfox.svg.SVGException;31 import com.kitfox.svg.SVGLoaderHelper;32 import com.kitfox.svg.animation.parser.AnimTimeParser;33 import com.kitfox.svg.xml.ColorTable;34 import com.kitfox.svg.xml.StyleAttribute;35 import com.kitfox.svg.xml.XMLParseUtil;36 import java.awt.Color;37 import java.awt.geom.AffineTransform;38 import java.awt.geom.GeneralPath;39 import java.awt.geom.PathIterator;40 import org.xml.sax.Attributes;41 import org.xml.sax.SAXException;42 43 44 /**45 * Animate is a really annoying morphic tag that could represent a real value,46 * a color or a path47 *48 * @author Mark McKay49 * @author <a href="mailto:mark@kitfox.com">Mark McKay</a>50 */51 public class Animate extends AnimateBase implements AnimateColorIface52 {53 // StyleAttribute retAttrib = new StyleAttribute54 public static final int DT_REAL = 0;55 public static final int DT_COLOR = 1;56 public static final int DT_PATH = 2;57 int dataType = DT_REAL;58 59 protected double fromValue = Double.NaN;60 protected double toValue = Double.NaN;61 protected double byValue = Double.NaN;62 protected double[] valuesValue;63 64 protected Color fromColor = null;65 protected Color toColor = null;66 67 protected GeneralPath fromPath = null;68 protected GeneralPath toPath = null;69 70 /** Creates a new instance of Animate */71 public Animate()72 {73 }74 75 public int getDataType()76 {77 return dataType;78 }79 80 public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) throws SAXException81 {82 //Load style string83 super.loaderStartElement(helper, attrs, parent);84 85 String strn = attrs.getValue("from");86 if (strn != null)87 {88 if (XMLParseUtil.isDouble(strn))89 {90 fromValue = XMLParseUtil.parseDouble(strn);91 }92 // else if (attrs.getValue("attributeName").equals("d"))93 // {94 // fromPath = this.buildPath(strn, GeneralPath.WIND_EVEN_ODD);95 // dataType = DT_PATH;96 // }97 else98 {99 fromColor = ColorTable.parseColor(strn);100 if (fromColor == null)101 {102 //Try path103 fromPath = this.buildPath(strn, GeneralPath.WIND_EVEN_ODD);104 dataType = DT_PATH;105 }106 else dataType = DT_COLOR;107 }108 }109 110 strn = attrs.getValue("to");111 if (strn != null)112 {113 if (XMLParseUtil.isDouble(strn))114 {115 toValue = XMLParseUtil.parseDouble(strn);116 }117 else118 {119 toColor = ColorTable.parseColor(strn);120 if (toColor == null)121 {122 //Try path123 toPath = this.buildPath(strn, GeneralPath.WIND_EVEN_ODD);124 dataType = DT_PATH;125 }126 else dataType = DT_COLOR;127 }128 }129 130 strn = attrs.getValue("by");131 try132 {133 if (strn != null) byValue = XMLParseUtil.parseDouble(strn);134 } catch (Exception e) {}135 136 strn = attrs.getValue("values");137 try138 {139 if (strn != null) valuesValue = XMLParseUtil.parseDoubleList(strn);140 } catch (Exception e) {}141 }142 143 /**144 * Evaluates this animation element for the passed interpolation time. Interp145 * must be on [0..1].146 */147 public double eval(double interp)148 {149 boolean fromExists = !Double.isNaN(fromValue);150 boolean toExists = !Double.isNaN(toValue);151 boolean byExists = !Double.isNaN(byValue);152 boolean valuesExists = valuesValue != null;153 154 if (valuesExists)155 {156 double sp = interp * valuesValue.length;157 int ip = (int)sp;158 double fp = sp - ip;159 160 int i0 = ip;161 int i1 = ip + 1;162 163 if (i0 < 0) return valuesValue[0];164 if (i1 >= valuesValue.length) return valuesValue[valuesValue.length - 1];165 return valuesValue[i0] * (1 - fp) + valuesValue[i1] * fp;166 }167 else if (fromExists && toExists)168 {169 return toValue * interp + fromValue * (1.0 - interp);170 }171 else if (fromExists && byExists)172 {173 return fromValue + byValue * interp;174 }175 else if (toExists && byExists)176 {177 return toValue - byValue * (1.0 - interp);178 }179 else if (byExists)180 {181 return byValue * interp;182 }183 184 //Should not reach this line185 throw new RuntimeException("Animate tag could not be evalutated - insufficient arguements");186 }187 188 public Color evalColor(double interp)189 {190 if (fromColor == null && toColor != null)191 {192 float[] toCol = new float[3];193 toColor.getColorComponents(toCol);194 return new Color(toCol[0] * (float)interp,195 toCol[1] * (float)interp,196 toCol[2] * (float)interp);197 }198 else if (fromColor != null && toColor != null)199 {200 float nInterp = 1 - (float)interp;201 202 float[] fromCol = new float[3];203 float[] toCol = new float[3];204 fromColor.getColorComponents(fromCol);205 toColor.getColorComponents(toCol);206 return new Color(fromCol[0] * nInterp + toCol[0] * (float)interp,207 fromCol[1] * nInterp + toCol[1] * (float)interp,208 fromCol[2] * nInterp + toCol[2] * (float)interp);209 }210 211 throw new RuntimeException("Animate tag could not be evalutated - insufficient arguements");212 }213 214 public GeneralPath evalPath(double interp)215 {216 if (fromPath == null && toPath != null)217 {218 PathIterator itTo = toPath.getPathIterator(new AffineTransform());219 220 GeneralPath midPath = new GeneralPath();221 float[] coordsTo = new float[6];222 223 for (; !itTo.isDone(); itTo.next())224 {225 int segTo = itTo.currentSegment(coordsTo);226 227 switch (segTo)228 {229 case PathIterator.SEG_CLOSE:230 midPath.closePath();231 break;232 case PathIterator.SEG_CUBICTO:233 midPath.curveTo(234 (float)(coordsTo[0] * interp),235 (float)(coordsTo[1] * interp),236 (float)(coordsTo[2] * interp),237 (float)(coordsTo[3] * interp),238 (float)(coordsTo[4] * interp),239 (float)(coordsTo[5] * interp)240 );241 break;242 case PathIterator.SEG_LINETO:243 midPath.lineTo(244 (float)(coordsTo[0] * interp),245 (float)(coordsTo[1] * interp)246 );247 break;248 case PathIterator.SEG_MOVETO:249 midPath.moveTo(250 (float)(coordsTo[0] * interp),251 (float)(coordsTo[1] * interp)252 );253 break;254 case PathIterator.SEG_QUADTO:255 midPath.quadTo(256 (float)(coordsTo[0] * interp),257 (float)(coordsTo[1] * interp),258 (float)(coordsTo[2] * interp),259 (float)(coordsTo[3] * interp)260 );261 break;262 }263 }264 265 return midPath;266 }267 else if (toPath != null)268 {269 PathIterator itFrom = fromPath.getPathIterator(new AffineTransform());270 PathIterator itTo = toPath.getPathIterator(new AffineTransform());271 272 GeneralPath midPath = new GeneralPath();273 float[] coordsFrom = new float[6];274 float[] coordsTo = new float[6];275 276 for (; !itFrom.isDone(); itFrom.next())277 {278 int segFrom = itFrom.currentSegment(coordsFrom);279 int segTo = itTo.currentSegment(coordsTo);280 281 if (segFrom != segTo)282 {283 throw new RuntimeException("Path shape mismatch");284 }285 286 switch (segFrom)287 {288 case PathIterator.SEG_CLOSE:289 midPath.closePath();290 break;291 case PathIterator.SEG_CUBICTO:292 midPath.curveTo(293 (float)(coordsFrom[0] * (1 - interp) + coordsTo[0] * interp),294 (float)(coordsFrom[1] * (1 - interp) + coordsTo[1] * interp),295 (float)(coordsFrom[2] * (1 - interp) + coordsTo[2] * interp),296 (float)(coordsFrom[3] * (1 - interp) + coordsTo[3] * interp),297 (float)(coordsFrom[4] * (1 - interp) + coordsTo[4] * interp),298 (float)(coordsFrom[5] * (1 - interp) + coordsTo[5] * interp)299 );300 break;301 case PathIterator.SEG_LINETO:302 midPath.lineTo(303 (float)(coordsFrom[0] * (1 - interp) + coordsTo[0] * interp),304 (float)(coordsFrom[1] * (1 - interp) + coordsTo[1] * interp)305 );306 break;307 case PathIterator.SEG_MOVETO:308 midPath.moveTo(309 (float)(coordsFrom[0] * (1 - interp) + coordsTo[0] * interp),310 (float)(coordsFrom[1] * (1 - interp) + coordsTo[1] * interp)311 );312 break;313 case PathIterator.SEG_QUADTO:314 midPath.quadTo(315 (float)(coordsFrom[0] * (1 - interp) + coordsTo[0] * interp),316 (float)(coordsFrom[1] * (1 - interp) + coordsTo[1] * interp),317 (float)(coordsFrom[2] * (1 - interp) + coordsTo[2] * interp),318 (float)(coordsFrom[3] * (1 - interp) + coordsTo[3] * interp)319 );320 break;321 }322 }323 324 return midPath;325 }326 327 throw new RuntimeException("Animate tag could not be evalutated - insufficient arguements");328 }329 330 /**331 * If this element is being accumulated, detemine the delta to accumulate by332 */333 public double repeatSkipSize(int reps)334 {335 boolean fromExists = !Double.isNaN(fromValue);336 boolean toExists = !Double.isNaN(toValue);337 boolean byExists = !Double.isNaN(byValue);338 339 if (fromExists && toExists)340 {341 return (toValue - fromValue) * reps;342 }343 else if (fromExists && byExists)344 {345 return (fromValue + byValue) * reps;346 }347 else if (toExists && byExists)348 {349 return toValue * reps;350 }351 else if (byExists)352 {353 return byValue * reps;354 }355 356 //Should not reach this line357 return 0;358 }359 360 protected void rebuild(AnimTimeParser animTimeParser) throws SVGException361 {362 super.rebuild(animTimeParser);363 364 StyleAttribute sty = new StyleAttribute();365 366 if (getPres(sty.setName("from")))367 {368 String strn = sty.getStringValue();369 if (XMLParseUtil.isDouble(strn))370 {371 fromValue = XMLParseUtil.parseDouble(strn);372 }373 else374 {375 fromColor = ColorTable.parseColor(strn);376 if (fromColor == null)377 {378 //Try path379 fromPath = this.buildPath(strn, GeneralPath.WIND_EVEN_ODD);380 dataType = DT_PATH;381 }382 else dataType = DT_COLOR;383 }384 }385 386 if (getPres(sty.setName("to")))387 {388 String strn = sty.getStringValue();389 if (XMLParseUtil.isDouble(strn))390 {391 toValue = XMLParseUtil.parseDouble(strn);392 }393 else394 {395 toColor = ColorTable.parseColor(strn);396 if (toColor == null)397 {398 //Try path399 toPath = this.buildPath(strn, GeneralPath.WIND_EVEN_ODD);400 dataType = DT_PATH;401 }402 else dataType = DT_COLOR;403 }404 }405 406 if (getPres(sty.setName("by")))407 {408 String strn = sty.getStringValue();409 if (strn != null) byValue = XMLParseUtil.parseDouble(strn);410 }411 412 if (getPres(sty.setName("values")))413 {414 String strn = sty.getStringValue();415 if (strn != null) valuesValue = XMLParseUtil.parseDoubleList(strn);416 }417 }418 419 } -
deleted file josm.orig/src/com/kitfox/svg/animation/AnimateBase.java
+ - 1 /*2 * Animate.java3 *4 * The Salamander Project - 2D and 3D graphics libraries in Java5 * Copyright (C) 2004 Mark McKay6 *7 * This library is free software; you can redistribute it and/or8 * modify it under the terms of the GNU Lesser General Public9 * License as published by the Free Software Foundation; either10 * version 2.1 of the License, or (at your option) any later version.11 *12 * This library is distributed in the hope that it will be useful,13 * but WITHOUT ANY WARRANTY; without even the implied warranty of14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU15 * Lesser General Public License for more details.16 *17 * You should have received a copy of the GNU Lesser General Public18 * License along with this library; if not, write to the Free Software19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA20 *21 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other22 * projects can be found at http://www.kitfox.com23 *24 * Created on August 15, 2004, 2:51 AM25 */26 27 package com.kitfox.svg.animation;28 29 import com.kitfox.svg.SVGElement;30 import com.kitfox.svg.SVGException;31 import com.kitfox.svg.SVGLoaderHelper;32 import com.kitfox.svg.animation.parser.AnimTimeParser;33 import com.kitfox.svg.animation.parser.ParseException;34 import com.kitfox.svg.xml.StyleAttribute;35 import java.io.StringReader;36 import org.xml.sax.Attributes;37 import org.xml.sax.SAXException;38 39 /**40 * @author Mark McKay41 * @author <a href="mailto:mark@kitfox.com">Mark McKay</a>42 */43 abstract public class AnimateBase extends AnimationElement44 {45 protected double repeatCount = Double.NaN;46 protected TimeBase repeatDur;47 48 /** Creates a new instance of Animate */49 public AnimateBase()50 {51 }52 53 public void evalParametric(AnimationTimeEval state, double curTime)54 {55 evalParametric(state, curTime, repeatCount, repeatDur == null ? Double.NaN : repeatDur.evalTime());56 }57 58 public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) throws SAXException59 {60 //Load style string61 super.loaderStartElement(helper, attrs, parent);62 63 String repeatDurTime = attrs.getValue("repeatDur");64 65 try66 {67 if (repeatDurTime != null)68 {69 helper.animTimeParser.ReInit(new StringReader(repeatDurTime));70 this.repeatDur = helper.animTimeParser.Expr();71 this.repeatDur.setParentElement(this);72 }73 }74 catch (Exception e)75 {76 throw new SAXException(e);77 }78 79 String strn = attrs.getValue("repeatCount");80 if (strn == null)81 {82 repeatCount = 1;83 }84 else if ("indefinite".equals(strn))85 {86 repeatCount = Double.POSITIVE_INFINITY;87 }88 else89 {90 try { repeatCount = Double.parseDouble(strn); }91 catch (Exception e) { repeatCount = Double.NaN; }92 }93 }94 95 protected void rebuild(AnimTimeParser animTimeParser) throws SVGException96 {97 super.rebuild(animTimeParser);98 99 StyleAttribute sty = new StyleAttribute();100 101 if (getPres(sty.setName("repeatDur")))102 {103 String strn = sty.getStringValue();104 if (strn != null)105 {106 animTimeParser.ReInit(new StringReader(strn));107 try {108 this.repeatDur = animTimeParser.Expr();109 } catch (ParseException ex) {110 ex.printStackTrace();111 }112 }113 }114 115 if (getPres(sty.setName("repeatCount")))116 {117 String strn = sty.getStringValue();118 if (strn == null)119 {120 repeatCount = 1;121 }122 else if ("indefinite".equals(strn))123 {124 repeatCount = Double.POSITIVE_INFINITY;125 }126 else127 {128 try { repeatCount = Double.parseDouble(strn); }129 catch (Exception e) { repeatCount = Double.NaN; }130 }131 }132 }133 } -
deleted file josm.orig/src/com/kitfox/svg/animation/AnimateColor.java
+ - 1 /*2 * Animate.java3 *4 * The Salamander Project - 2D and 3D graphics libraries in Java5 * Copyright (C) 2004 Mark McKay6 *7 * This library is free software; you can redistribute it and/or8 * modify it under the terms of the GNU Lesser General Public9 * License as published by the Free Software Foundation; either10 * version 2.1 of the License, or (at your option) any later version.11 *12 * This library is distributed in the hope that it will be useful,13 * but WITHOUT ANY WARRANTY; without even the implied warranty of14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU15 * Lesser General Public License for more details.16 *17 * You should have received a copy of the GNU Lesser General Public18 * License along with this library; if not, write to the Free Software19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA20 *21 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other22 * projects can be found at http://www.kitfox.com23 *24 * Created on August 15, 2004, 2:51 AM25 */26 27 package com.kitfox.svg.animation;28 29 import com.kitfox.svg.SVGElement;30 import com.kitfox.svg.SVGException;31 import com.kitfox.svg.SVGLoaderHelper;32 import com.kitfox.svg.animation.parser.AnimTimeParser;33 import com.kitfox.svg.xml.ColorTable;34 import com.kitfox.svg.xml.StyleAttribute;35 import java.awt.Color;36 import org.xml.sax.Attributes;37 import org.xml.sax.SAXException;38 39 40 /**41 * @author Mark McKay42 * @author <a href="mailto:mark@kitfox.com">Mark McKay</a>43 */44 public class AnimateColor extends AnimateBase implements AnimateColorIface45 {46 47 protected Color fromValue;48 protected Color toValue;49 50 /** Creates a new instance of Animate */51 public AnimateColor()52 {53 }54 55 public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) throws SAXException56 {57 //Load style string58 super.loaderStartElement(helper, attrs, parent);59 60 String strn = attrs.getValue("from");61 fromValue = ColorTable.parseColor(strn);62 63 strn = attrs.getValue("to");64 toValue = ColorTable.parseColor(strn);65 }66 67 68 /**69 * Evaluates this animation element for the passed interpolation time. Interp70 * must be on [0..1].71 */72 public Color evalColor(double interp)73 {74 int r1 = fromValue.getRed();75 int g1 = fromValue.getGreen();76 int b1 = fromValue.getBlue();77 int r2 = toValue.getRed();78 int g2 = toValue.getGreen();79 int b2 = toValue.getBlue();80 double invInterp = 1.0 - interp;81 82 return new Color((int)(r1 * invInterp + r2 * interp),83 (int)(g1 * invInterp + g2 * interp),84 (int)(b1 * invInterp + b2 * interp));85 }86 87 protected void rebuild(AnimTimeParser animTimeParser) throws SVGException88 {89 super.rebuild(animTimeParser);90 91 StyleAttribute sty = new StyleAttribute();92 93 if (getPres(sty.setName("from")))94 {95 String strn = sty.getStringValue();96 fromValue = ColorTable.parseColor(strn);97 }98 99 if (getPres(sty.setName("to")))100 {101 String strn = sty.getStringValue();102 toValue = ColorTable.parseColor(strn);103 }104 }105 } -
deleted file josm.orig/src/com/kitfox/svg/animation/AnimateColorIface.java
+ - 1 /*2 * AnimateColorIface.java3 *4 * The Salamander Project - 2D and 3D graphics libraries in Java5 * Copyright (C) 2004 Mark McKay6 *7 * This library is free software; you can redistribute it and/or8 * modify it under the terms of the GNU Lesser General Public9 * License as published by the Free Software Foundation; either10 * version 2.1 of the License, or (at your option) any later version.11 *12 * This library is distributed in the hope that it will be useful,13 * but WITHOUT ANY WARRANTY; without even the implied warranty of14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU15 * Lesser General Public License for more details.16 *17 * You should have received a copy of the GNU Lesser General Public18 * License along with this library; if not, write to the Free Software19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA20 *21 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other22 * projects can be found at http://www.kitfox.com23 *24 * Created on January 16, 2005, 6:24 AM25 */26 27 package com.kitfox.svg.animation;28 29 import java.awt.*;30 31 /**32 *33 * @author kitfox34 */35 public interface AnimateColorIface36 {37 public Color evalColor(double interp);38 } -
deleted file josm.orig/src/com/kitfox/svg/animation/AnimateMotion.java
+ - 1 /*2 * Animate.java3 *4 * The Salamander Project - 2D and 3D graphics libraries in Java5 * Copyright (C) 2004 Mark McKay6 *7 * This library is free software; you can redistribute it and/or8 * modify it under the terms of the GNU Lesser General Public9 * License as published by the Free Software Foundation; either10 * version 2.1 of the License, or (at your option) any later version.11 *12 * This library is distributed in the hope that it will be useful,13 * but WITHOUT ANY WARRANTY; without even the implied warranty of14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU15 * Lesser General Public License for more details.16 *17 * You should have received a copy of the GNU Lesser General Public18 * License along with this library; if not, write to the Free Software19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA20 *21 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other22 * projects can be found at http://www.kitfox.com23 *24 * Created on August 15, 2004, 2:51 AM25 */26 27 package com.kitfox.svg.animation;28 29 import com.kitfox.svg.SVGElement;30 import com.kitfox.svg.SVGException;31 import com.kitfox.svg.SVGLoaderHelper;32 import com.kitfox.svg.animation.parser.AnimTimeParser;33 import com.kitfox.svg.xml.StyleAttribute;34 import java.awt.geom.AffineTransform;35 import java.awt.geom.GeneralPath;36 import java.awt.geom.PathIterator;37 import java.awt.geom.Point2D;38 import java.util.ArrayList;39 import java.util.Iterator;40 import java.util.regex.Matcher;41 import java.util.regex.Pattern;42 import org.xml.sax.Attributes;43 import org.xml.sax.SAXException;44 45 46 /**47 * @author Mark McKay48 * @author <a href="mailto:mark@kitfox.com">Mark McKay</a>49 */50 public class AnimateMotion extends AnimateXform51 {52 static final Matcher matchPoint = Pattern.compile("\\s*(\\d+)[^\\d]+(\\d+)\\s*").matcher("");53 54 // protected double fromValue;55 // protected double toValue;56 GeneralPath path;57 int rotateType = RT_ANGLE;58 double rotate; //Static angle to rotate by59 60 public static final int RT_ANGLE = 0; //Rotate by constant 'rotate' degrees61 public static final int RT_AUTO = 1; //Rotate to reflect tangent of position on path62 63 final ArrayList bezierSegs = new ArrayList();64 double curveLength;65 66 /** Creates a new instance of Animate */67 public AnimateMotion()68 {69 }70 71 public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) throws SAXException72 {73 //Load style string74 super.loaderStartElement(helper, attrs, parent);75 76 //Motion element implies animating the transform element77 if (attribName == null)78 {79 attribName = "transform";80 attribType = AT_AUTO;81 additiveType = AD_SUM;82 }83 84 85 String path = attrs.getValue("path");86 if (path != null)87 {88 this.path = buildPath(path, GeneralPath.WIND_NON_ZERO);89 }90 91 //Now parse rotation style92 String rotate = attrs.getValue("rotate");93 if (rotate != null)94 {95 if (rotate.equals("auto"))96 {97 this.rotateType = RT_AUTO;98 }99 else100 {101 try { this.rotate = Math.toRadians(Float.parseFloat(rotate)); } catch (Exception e) {}102 }103 }104 105 //Determine path106 String from = attrs.getValue("from");107 String to = attrs.getValue("to");108 109 buildPath(from, to);110 }111 112 protected static void setPoint(Point2D.Float pt, String x, String y)113 {114 try { pt.x = Float.parseFloat(x); } catch (Exception e) {};115 116 try { pt.y = Float.parseFloat(y); } catch (Exception e) {};117 }118 119 private void buildPath(String from, String to)120 {121 if (from != null && to != null)122 {123 Point2D.Float ptFrom = new Point2D.Float(), ptTo = new Point2D.Float();124 125 matchPoint.reset(from);126 if (matchPoint.matches())127 {128 setPoint(ptFrom, matchPoint.group(1), matchPoint.group(2));129 }130 131 matchPoint.reset(to);132 if (matchPoint.matches())133 {134 setPoint(ptFrom, matchPoint.group(1), matchPoint.group(2));135 }136 137 if (ptFrom != null && ptTo != null)138 {139 path = new GeneralPath();140 path.moveTo(ptFrom.x, ptFrom.y);141 path.lineTo(ptTo.x, ptTo.y);142 }143 }144 145 paramaterizePath();146 }147 148 private void paramaterizePath()149 {150 bezierSegs.clear();151 curveLength = 0;152 153 double[] coords = new double[6];154 double sx = 0, sy = 0;155 156 for (PathIterator pathIt = path.getPathIterator(new AffineTransform()); !pathIt.isDone(); pathIt.next())157 {158 Bezier bezier = null;159 160 int segType = pathIt.currentSegment(coords);161 162 switch (segType)163 {164 case PathIterator.SEG_LINETO:165 {166 bezier = new Bezier(sx, sy, coords, 1);167 sx = coords[0];168 sy = coords[1];169 break;170 }171 case PathIterator.SEG_QUADTO:172 {173 bezier = new Bezier(sx, sy, coords, 2);174 sx = coords[2];175 sy = coords[3];176 break;177 }178 case PathIterator.SEG_CUBICTO:179 {180 bezier = new Bezier(sx, sy, coords, 3);181 sx = coords[4];182 sy = coords[5];183 break;184 }185 case PathIterator.SEG_MOVETO:186 {187 sx = coords[0];188 sy = coords[1];189 break;190 }191 case PathIterator.SEG_CLOSE:192 //Do nothing193 break;194 195 }196 197 if (bezier != null)198 {199 bezierSegs.add(bezier);200 curveLength += bezier.getLength();201 }202 }203 }204 205 /**206 * Evaluates this animation element for the passed interpolation time. Interp207 * must be on [0..1].208 */209 public AffineTransform eval(AffineTransform xform, double interp)210 {211 Point2D.Double point = new Point2D.Double();212 213 if (interp >= 1)214 {215 Bezier last = (Bezier)bezierSegs.get(bezierSegs.size() - 1);216 last.getFinalPoint(point);217 xform.setToTranslation(point.x, point.y);218 return xform;219 }220 221 double curLength = curveLength * interp;222 for (Iterator it = bezierSegs.iterator(); it.hasNext();)223 {224 Bezier bez = (Bezier)it.next();225 226 double bezLength = bez.getLength();227 if (curLength < bezLength)228 {229 double param = curLength / bezLength;230 bez.eval(param, point);231 break;232 }233 234 curLength -= bezLength;235 }236 237 xform.setToTranslation(point.x, point.y);238 239 return xform;240 }241 242 243 protected void rebuild(AnimTimeParser animTimeParser) throws SVGException244 {245 super.rebuild(animTimeParser);246 247 StyleAttribute sty = new StyleAttribute();248 249 if (getPres(sty.setName("path")))250 {251 String strn = sty.getStringValue();252 this.path = buildPath(strn, GeneralPath.WIND_NON_ZERO);253 }254 255 if (getPres(sty.setName("rotate")))256 {257 String strn = sty.getStringValue();258 if (strn.equals("auto"))259 {260 this.rotateType = RT_AUTO;261 }262 else263 {264 try { this.rotate = Math.toRadians(Float.parseFloat(strn)); } catch (Exception e) {}265 }266 }267 268 String from = null;269 if (getPres(sty.setName("from")))270 {271 from = sty.getStringValue();272 }273 274 String to = null;275 if (getPres(sty.setName("to")))276 {277 to = sty.getStringValue();278 }279 280 buildPath(from, to);281 }282 } -
deleted file josm.orig/src/com/kitfox/svg/animation/AnimateTransform.java
+ - 1 /*2 * Animate.java3 *4 * The Salamander Project - 2D and 3D graphics libraries in Java5 * Copyright (C) 2004 Mark McKay6 *7 * This library is free software; you can redistribute it and/or8 * modify it under the terms of the GNU Lesser General Public9 * License as published by the Free Software Foundation; either10 * version 2.1 of the License, or (at your option) any later version.11 *12 * This library is distributed in the hope that it will be useful,13 * but WITHOUT ANY WARRANTY; without even the implied warranty of14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU15 * Lesser General Public License for more details.16 *17 * You should have received a copy of the GNU Lesser General Public18 * License along with this library; if not, write to the Free Software19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA20 *21 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other22 * projects can be found at http://www.kitfox.com23 *24 * Created on August 15, 2004, 2:51 AM25 */26 27 package com.kitfox.svg.animation;28 29 import com.kitfox.svg.SVGElement;30 import com.kitfox.svg.SVGException;31 import com.kitfox.svg.SVGLoaderHelper;32 import com.kitfox.svg.animation.parser.AnimTimeParser;33 import com.kitfox.svg.xml.StyleAttribute;34 import com.kitfox.svg.xml.XMLParseUtil;35 import java.awt.geom.AffineTransform;36 import java.util.regex.Pattern;37 import org.xml.sax.Attributes;38 import org.xml.sax.SAXException;39 40 41 /**42 * @author Mark McKay43 * @author <a href="mailto:mark@kitfox.com">Mark McKay</a>44 */45 public class AnimateTransform extends AnimateXform46 {47 // protected AffineTransform fromValue;48 // protected AffineTransform toValue;49 // protected double[] fromValue; //Transform parameters50 // protected double[] toValue;51 protected double[][] values;52 protected double[] keyTimes;53 54 public static final int AT_REPLACE = 0;55 public static final int AT_SUM = 1;56 57 protected int additive = AT_REPLACE;58 59 public static final int TR_TRANSLATE = 0;60 public static final int TR_ROTATE = 1;61 public static final int TR_SCALE = 2;62 public static final int TR_SKEWY = 3;63 public static final int TR_SKEWX = 4;64 public static final int TR_INVALID = 5;65 66 protected int xformType = TR_INVALID;67 68 /** Creates a new instance of Animate */69 public AnimateTransform()70 {71 }72 73 public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) throws SAXException74 {75 //Load style string76 super.loaderStartElement(helper, attrs, parent);77 78 //Type of matrix of transform. Should be one of the known names used to79 // define matrix transforms80 // valid types: translate, scale, rotate, skewX, skewY81 // 'matrix' not valid for animation82 String type = attrs.getValue("type").toLowerCase();83 if (type.equals("translate")) xformType = TR_TRANSLATE;84 if (type.equals("rotate")) xformType = TR_ROTATE;85 if (type.equals("scale")) xformType = TR_SCALE;86 if (type.equals("skewx")) xformType = TR_SKEWX;87 if (type.equals("skewy")) xformType = TR_SKEWY;88 89 String fromStrn = attrs.getValue("from");90 String toStrn = attrs.getValue("to");91 if (fromStrn != null && toStrn != null)92 {93 //fromValue = parseSingleTransform(type + "(" + strn + ")");94 double[] fromValue = XMLParseUtil.parseDoubleList(fromStrn);95 fromValue = validate(fromValue);96 97 // toValue = parseSingleTransform(type + "(" + strn + ")");98 double[] toValue = XMLParseUtil.parseDoubleList(toStrn);99 toValue = validate(toValue);100 101 values = new double[][]{fromValue, toValue};102 keyTimes = new double[]{0, 1};103 }104 105 String keyTimeStrn = attrs.getValue("keyTimes");106 String valuesStrn = attrs.getValue("values");107 if (keyTimeStrn != null && valuesStrn != null)108 {109 keyTimes = XMLParseUtil.parseDoubleList(keyTimeStrn);110 111 String[] valueList = Pattern.compile(";").split(valuesStrn);112 values = new double[valueList.length][];113 for (int i = 0; i < valueList.length; i++)114 {115 double[] list = XMLParseUtil.parseDoubleList(valueList[i]);116 values[i] = validate(list);117 }118 }119 120 //Check our additive state121 String additive = attrs.getValue("additive");122 if (additive != null)123 {124 if (additive.equals("sum")) this.additive = AT_SUM;125 }126 }127 128 /**129 * Check list size against current xform type and ensure list130 * is expanded to a standard list size131 */132 private double[] validate(double[] paramList)133 {134 switch (xformType)135 {136 case TR_SCALE:137 {138 if (paramList == null)139 {140 paramList = new double[]{1, 1};141 }142 else if (paramList.length == 1)143 {144 paramList = new double[]{paramList[0], paramList[0]};145 146 // double[] tmp = paramList;147 // paramList = new double[2];148 // paramList[0] = paramList[1] = tmp[0];149 }150 }151 }152 153 return paramList;154 }155 156 /**157 * Evaluates this animation element for the passed interpolation time. Interp158 * must be on [0..1].159 */160 public AffineTransform eval(AffineTransform xform, double interp)161 {162 int idx = 0;163 for (; idx < keyTimes.length - 1; idx++)164 {165 if (interp >= keyTimes[idx])166 {167 idx--;168 if (idx < 0) idx = 0;169 break;170 }171 }172 173 double spanStartTime = keyTimes[idx];174 double spanEndTime = keyTimes[idx + 1];175 // double span = spanStartTime - spanEndTime;176 177 interp = (interp - spanStartTime) / (spanEndTime - spanStartTime);178 double[] fromValue = values[idx];179 double[] toValue = values[idx + 1];180 181 switch (xformType)182 {183 case TR_TRANSLATE:184 {185 double x = (1.0 - interp) * fromValue[0] + interp * toValue[0];186 double y = (1.0 - interp) * fromValue[1] + interp * toValue[1];187 xform.setToTranslation(x, y);188 break;189 }190 case TR_ROTATE:191 {192 double x1 = fromValue.length == 3 ? fromValue[1] : 0;193 double y1 = fromValue.length == 3 ? fromValue[2] : 0;194 double x2 = toValue.length == 3 ? toValue[1] : 0;195 double y2 = toValue.length == 3 ? toValue[2] : 0;196 197 double theta = (1.0 - interp) * fromValue[0] + interp * toValue[0];198 double x = (1.0 - interp) * x1 + interp * x2;199 double y = (1.0 - interp) * y1 + interp * y2;200 xform.setToRotation(Math.toRadians(theta), x, y);201 break;202 }203 case TR_SCALE:204 {205 double x = (1.0 - interp) * fromValue[0] + interp * toValue[0];206 double y = (1.0 - interp) * fromValue[1] + interp * toValue[1];207 xform.setToScale(x, y);208 break;209 }210 case TR_SKEWX:211 {212 double x = (1.0 - interp) * fromValue[0] + interp * toValue[0];213 xform.setToShear(Math.toRadians(x), 0.0);214 break;215 }216 case TR_SKEWY:217 {218 double y = (1.0 - interp) * fromValue[0] + interp * toValue[0];219 xform.setToShear(0.0, Math.toRadians(y));220 break;221 }222 default:223 xform.setToIdentity();224 break;225 }226 227 return xform;228 }229 230 protected void rebuild(AnimTimeParser animTimeParser) throws SVGException231 {232 super.rebuild(animTimeParser);233 234 StyleAttribute sty = new StyleAttribute();235 236 if (getPres(sty.setName("type")))237 {238 String strn = sty.getStringValue().toLowerCase();239 if (strn.equals("translate")) xformType = TR_TRANSLATE;240 if (strn.equals("rotate")) xformType = TR_ROTATE;241 if (strn.equals("scale")) xformType = TR_SCALE;242 if (strn.equals("skewx")) xformType = TR_SKEWX;243 if (strn.equals("skewy")) xformType = TR_SKEWY;244 }245 246 String fromStrn = null;247 if (getPres(sty.setName("from")))248 {249 fromStrn = sty.getStringValue();250 }251 252 String toStrn = null;253 if (getPres(sty.setName("to")))254 {255 toStrn = sty.getStringValue();256 }257 258 if (fromStrn != null && toStrn != null)259 {260 double[] fromValue = XMLParseUtil.parseDoubleList(fromStrn);261 fromValue = validate(fromValue);262 263 double[] toValue = XMLParseUtil.parseDoubleList(toStrn);264 toValue = validate(toValue);265 266 values = new double[][]{fromValue, toValue};267 }268 269 String keyTimeStrn = null;270 if (getPres(sty.setName("keyTimes")))271 {272 keyTimeStrn = sty.getStringValue();273 }274 275 String valuesStrn = null;276 if (getPres(sty.setName("values")))277 {278 valuesStrn = sty.getStringValue();279 }280 281 if (keyTimeStrn != null && valuesStrn != null)282 {283 keyTimes = XMLParseUtil.parseDoubleList(keyTimeStrn);284 285 String[] valueList = Pattern.compile(";").split(valuesStrn);286 values = new double[valueList.length][];287 for (int i = 0; i < valueList.length; i++)288 {289 double[] list = XMLParseUtil.parseDoubleList(valueList[i]);290 values[i] = validate(list);291 }292 }293 294 //Check our additive state295 296 if (getPres(sty.setName("additive")))297 {298 String strn = sty.getStringValue().toLowerCase();299 if (strn.equals("sum")) this.additive = AT_SUM;300 }301 }302 } -
deleted file josm.orig/src/com/kitfox/svg/animation/AnimateXform.java
+ - 1 /*2 * AnimateXform.java3 *4 * The Salamander Project - 2D and 3D graphics libraries in Java5 * Copyright (C) 2004 Mark McKay6 *7 * This library is free software; you can redistribute it and/or8 * modify it under the terms of the GNU Lesser General Public9 * License as published by the Free Software Foundation; either10 * version 2.1 of the License, or (at your option) any later version.11 *12 * This library is distributed in the hope that it will be useful,13 * but WITHOUT ANY WARRANTY; without even the implied warranty of14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU15 * Lesser General Public License for more details.16 *17 * You should have received a copy of the GNU Lesser General Public18 * License along with this library; if not, write to the Free Software19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA20 *21 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other22 * projects can be found at http://www.kitfox.com23 *24 * Created on January 14, 2005, 6:46 AM25 */26 27 package com.kitfox.svg.animation;28 29 import com.kitfox.svg.SVGElement;30 import com.kitfox.svg.SVGLoaderHelper;31 import java.awt.geom.AffineTransform;32 import org.xml.sax.Attributes;33 import org.xml.sax.SAXException;34 35 36 37 /**38 *39 * @author kitfox40 */41 abstract public class AnimateXform extends AnimateBase42 {43 public AnimateXform()44 {45 }46 47 public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) throws SAXException48 {49 super.loaderStartElement(helper, attrs, parent);50 }51 52 abstract public AffineTransform eval(AffineTransform xform, double interp);53 54 } -
deleted file josm.orig/src/com/kitfox/svg/animation/AnimationElement.java
+ - 1 /*2 * AnimateEle.java3 *4 * The Salamander Project - 2D and 3D graphics libraries in Java5 * Copyright (C) 2004 Mark McKay6 *7 * This library is free software; you can redistribute it and/or8 * modify it under the terms of the GNU Lesser General Public9 * License as published by the Free Software Foundation; either10 * version 2.1 of the License, or (at your option) any later version.11 *12 * This library is distributed in the hope that it will be useful,13 * but WITHOUT ANY WARRANTY; without even the implied warranty of14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU15 * Lesser General Public License for more details.16 *17 * You should have received a copy of the GNU Lesser General Public18 * License along with this library; if not, write to the Free Software19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA20 *21 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other22 * projects can be found at http://www.kitfox.com23 *24 * Created on August 15, 2004, 2:52 AM25 */26 27 package com.kitfox.svg.animation;28 29 import com.kitfox.svg.SVGElement;30 import com.kitfox.svg.SVGException;31 import com.kitfox.svg.SVGLoaderHelper;32 import com.kitfox.svg.animation.parser.AnimTimeParser;33 import com.kitfox.svg.animation.parser.ParseException;34 import com.kitfox.svg.xml.StyleAttribute;35 import java.io.StringReader;36 import org.xml.sax.Attributes;37 import org.xml.sax.SAXException;38 39 40 /**41 * @author Mark McKay42 * @author <a href="mailto:mark@kitfox.com">Mark McKay</a>43 */44 public abstract class AnimationElement extends SVGElement45 {46 protected String attribName;47 // protected String attribType;48 protected int attribType = AT_AUTO;49 50 public static final int AT_CSS = 0;51 public static final int AT_XML = 1;52 public static final int AT_AUTO = 2; //Check CSS first, then XML53 54 protected TimeBase beginTime;55 protected TimeBase durTime;56 protected TimeBase endTime;57 protected int fillType = FT_AUTO;58 59 /** <a href="http://www.w3.org/TR/smil20/smil-timing.html#adef-fill">More about the <b>fill</b> attribute</a> */60 public static final int FT_REMOVE = 0;61 public static final int FT_FREEZE = 1;62 public static final int FT_HOLD = 2;63 public static final int FT_TRANSITION = 3;64 public static final int FT_AUTO = 4;65 public static final int FT_DEFAULT = 5;66 67 /** Additive state of track */68 public static final int AD_REPLACE = 0;69 public static final int AD_SUM = 1;70 71 int additiveType = AD_REPLACE;72 73 /** Accumlative state */74 public static final int AC_REPLACE = 0;75 public static final int AC_SUM = 1;76 77 int accumulateType = AC_REPLACE;78 79 /** Creates a new instance of AnimateEle */80 public AnimationElement()81 {82 }83 84 public static String animationElementToString(int attrValue)85 {86 switch (attrValue)87 {88 case AT_CSS:89 return "CSS";90 case AT_XML:91 return "XML";92 case AT_AUTO:93 return "AUTO";94 default:95 throw new RuntimeException("Unknown element type");96 }97 }98 99 public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) throws SAXException100 {101 //Load style string102 super.loaderStartElement(helper, attrs, parent);103 104 attribName = attrs.getValue("attributeName");105 String attribType = attrs.getValue("attributeType");106 if (attribType != null)107 {108 attribType = attribType.toLowerCase();109 if (attribType.equals("css")) this.attribType = AT_CSS;110 else if (attribType.equals("xml")) this.attribType = AT_XML;111 }112 113 String beginTime = attrs.getValue("begin");114 String durTime = attrs.getValue("dur");115 String endTime = attrs.getValue("end");116 117 try118 {119 if (beginTime != null)120 {121 helper.animTimeParser.ReInit(new StringReader(beginTime));122 this.beginTime = helper.animTimeParser.Expr();123 this.beginTime.setParentElement(this);124 }125 126 if (durTime != null)127 {128 helper.animTimeParser.ReInit(new StringReader(durTime));129 this.durTime = helper.animTimeParser.Expr();130 this.durTime.setParentElement(this);131 }132 133 if (endTime != null)134 {135 helper.animTimeParser.ReInit(new StringReader(endTime));136 this.endTime = helper.animTimeParser.Expr();137 this.endTime.setParentElement(this);138 }139 }140 catch (Exception e)141 {142 throw new SAXException(e);143 }144 145 // this.beginTime = TimeBase.parseTime(beginTime);146 // this.durTime = TimeBase.parseTime(durTime);147 // this.endTime = TimeBase.parseTime(endTime);148 149 String fill = attrs.getValue("fill");150 151 if (fill != null)152 {153 if (fill.equals("remove")) this.fillType = FT_REMOVE;154 if (fill.equals("freeze")) this.fillType = FT_FREEZE;155 if (fill.equals("hold")) this.fillType = FT_HOLD;156 if (fill.equals("transiton")) this.fillType = FT_TRANSITION;157 if (fill.equals("auto")) this.fillType = FT_AUTO;158 if (fill.equals("default")) this.fillType = FT_DEFAULT;159 }160 161 String additiveStrn = attrs.getValue("additive");162 163 if (additiveStrn != null)164 {165 if (additiveStrn.equals("replace")) this.additiveType = AD_REPLACE;166 if (additiveStrn.equals("sum")) this.additiveType = AD_SUM;167 }168 169 String accumulateStrn = attrs.getValue("accumulate");170 171 if (accumulateStrn != null)172 {173 if (accumulateStrn.equals("replace")) this.accumulateType = AC_REPLACE;174 if (accumulateStrn.equals("sum")) this.accumulateType = AC_SUM;175 }176 }177 178 public String getAttribName() { return attribName; }179 public int getAttribType() { return attribType; }180 public int getAdditiveType() { return additiveType; }181 public int getAccumulateType() { return accumulateType; }182 183 public void evalParametric(AnimationTimeEval state, double curTime)184 {185 evalParametric(state, curTime, Double.NaN, Double.NaN);186 }187 188 /**189 * Compares current time to start and end times and determines what degree190 * of time interpolation this track currently represents. Returns191 * Float.NaN if this track cannot be evaluated at the passed time (ie,192 * it is before or past the end of the track, or it depends upon193 * an unknown event)194 * @param state - A structure that will be filled with information195 * regarding the applicability of this animatoin element at the passed196 * time.197 * @param curTime - Current time in seconds198 * @param repeatCount - Optional number of repetitions of length 'dur' to199 * do. Set to Double.NaN to not consider this in the calculation.200 * @param repeatDur - Optional amoun tof time to repeat the animaiton.201 * Set to Double.NaN to not consider this in the calculation.202 */203 protected void evalParametric(AnimationTimeEval state, double curTime, double repeatCount, double repeatDur)204 {205 double begin = (beginTime == null) ? 0 : beginTime.evalTime();206 if (Double.isNaN(begin) || begin > curTime)207 {208 state.set(Double.NaN, 0);209 return;210 }211 212 double dur = (durTime == null) ? Double.NaN : durTime.evalTime();213 if (Double.isNaN(dur))214 {215 state.set(Double.NaN, 0);216 return;217 }218 219 //Determine end point of this animation220 double end = (endTime == null) ? Double.NaN : endTime.evalTime();221 double repeat;222 // if (Double.isNaN(repeatDur))223 // {224 // repeatDur = dur;225 // }226 if (Double.isNaN(repeatCount) && Double.isNaN(repeatDur))227 {228 repeat = Double.NaN;229 }230 else231 {232 repeat = Math.min(233 Double.isNaN(repeatCount) ? Double.POSITIVE_INFINITY : dur * repeatCount,234 Double.isNaN(repeatDur) ? Double.POSITIVE_INFINITY : repeatDur);235 }236 if (Double.isNaN(repeat) && Double.isNaN(end))237 {238 //If neither and end point nor a repeat is specified, end point is239 // implied by duration.240 end = begin + dur;241 }242 243 double finishTime;244 if (Double.isNaN(end))245 {246 finishTime = begin + repeat;247 }248 else if (Double.isNaN(repeat))249 {250 finishTime = end;251 }252 else253 {254 finishTime = Math.min(end, repeat);255 }256 257 double evalTime = Math.min(curTime, finishTime);258 // if (curTime > finishTime) evalTime = finishTime;259 260 261 // double evalTime = curTime;262 263 // boolean pastEnd = curTime > evalTime;264 265 // if (!Double.isNaN(end) && curTime > end) { pastEnd = true; evalTime = Math.min(evalTime, end); }266 // if (!Double.isNaN(repeat) && curTime > repeat) { pastEnd = true; evalTime = Math.min(evalTime, repeat); }267 268 double ratio = (evalTime - begin) / dur;269 int rep = (int)ratio;270 double interp = ratio - rep;271 272 //Adjust for roundoff273 if (interp < 0.00001) interp = 0;274 275 // state.set(interp, rep);276 // if (!pastEnd)277 // {278 // state.set(interp, rep, false);279 // return;280 // }281 282 //If we are still within the clip, return value283 if (curTime == evalTime)284 {285 state.set(interp, rep);286 return;287 }288 289 //We are past end of clip. Determine to clamp or ignore.290 switch (fillType)291 {292 default:293 case FT_REMOVE:294 case FT_AUTO:295 case FT_DEFAULT:296 state.set(Double.NaN, rep);297 return;298 case FT_FREEZE:299 case FT_HOLD:300 case FT_TRANSITION:301 state.set(interp == 0 ? 1 : interp, rep);302 return;303 }304 305 }306 307 double evalStartTime()308 {309 return beginTime == null ? Double.NaN : beginTime.evalTime();310 }311 312 double evalDurTime()313 {314 return durTime == null ? Double.NaN : durTime.evalTime();315 }316 317 /**318 * Evaluates the ending time of this element. Returns 0 if not specified.319 *320 * @see hasEndTime321 */322 double evalEndTime()323 {324 return endTime == null ? Double.NaN : endTime.evalTime();325 }326 327 /**328 * Checks to see if an end time has been specified for this element.329 */330 boolean hasEndTime() { return endTime != null; }331 332 /**333 * Updates all attributes in this diagram associated with a time event.334 * Ie, all attributes with track information.335 * @return - true if this node has changed state as a result of the time336 * update337 */338 public boolean updateTime(double curTime)339 {340 //Animation elements to not change with time341 return false;342 }343 344 public void rebuild() throws SVGException345 {346 AnimTimeParser animTimeParser = new AnimTimeParser(new StringReader(""));347 348 rebuild(animTimeParser);349 }350 351 protected void rebuild(AnimTimeParser animTimeParser) throws SVGException352 {353 StyleAttribute sty = new StyleAttribute();354 355 if (getPres(sty.setName("begin")))356 {357 String newVal = sty.getStringValue();358 animTimeParser.ReInit(new StringReader(newVal));359 try {360 this.beginTime = animTimeParser.Expr();361 } catch (ParseException ex) {362 ex.printStackTrace();363 }364 }365 366 if (getPres(sty.setName("dur")))367 {368 String newVal = sty.getStringValue();369 animTimeParser.ReInit(new StringReader(newVal));370 try {371 this.durTime = animTimeParser.Expr();372 } catch (ParseException ex) {373 ex.printStackTrace();374 }375 }376 377 if (getPres(sty.setName("end")))378 {379 String newVal = sty.getStringValue();380 animTimeParser.ReInit(new StringReader(newVal));381 try {382 this.endTime = animTimeParser.Expr();383 } catch (ParseException ex) {384 ex.printStackTrace();385 }386 }387 388 if (getPres(sty.setName("fill")))389 {390 String newVal = sty.getStringValue();391 if (newVal.equals("remove")) this.fillType = FT_REMOVE;392 if (newVal.equals("freeze")) this.fillType = FT_FREEZE;393 if (newVal.equals("hold")) this.fillType = FT_HOLD;394 if (newVal.equals("transiton")) this.fillType = FT_TRANSITION;395 if (newVal.equals("auto")) this.fillType = FT_AUTO;396 if (newVal.equals("default")) this.fillType = FT_DEFAULT;397 }398 399 if (getPres(sty.setName("additive")))400 {401 String newVal = sty.getStringValue();402 if (newVal.equals("replace")) this.additiveType = AD_REPLACE;403 if (newVal.equals("sum")) this.additiveType = AD_SUM;404 }405 406 if (getPres(sty.setName("accumulate")))407 {408 String newVal = sty.getStringValue();409 if (newVal.equals("replace")) this.accumulateType = AC_REPLACE;410 if (newVal.equals("sum")) this.accumulateType = AC_SUM;411 }412 413 }414 } -
deleted file josm.orig/src/com/kitfox/svg/animation/AnimationTimeEval.java
+ - 1 /*2 * AnimateTimeEval.java3 *4 * The Salamander Project - 2D and 3D graphics libraries in Java5 * Copyright (C) 2004 Mark McKay6 *7 * This library is free software; you can redistribute it and/or8 * modify it under the terms of the GNU Lesser General Public9 * License as published by the Free Software Foundation; either10 * version 2.1 of the License, or (at your option) any later version.11 *12 * This library is distributed in the hope that it will be useful,13 * but WITHOUT ANY WARRANTY; without even the implied warranty of14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU15 * Lesser General Public License for more details.16 *17 * You should have received a copy of the GNU Lesser General Public18 * License along with this library; if not, write to the Free Software19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA20 *21 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other22 * projects can be found at http://www.kitfox.com23 *24 *25 * Created on September 21, 2004, 1:31 PM26 */27 28 package com.kitfox.svg.animation;29 30 /**31 *32 * @author kitfox33 */34 public class AnimationTimeEval35 {36 /**37 * Value on [0..1] representing the interpolation value of queried animation38 * element, or Double.NaN if element does not provide a valid evalutaion39 */40 public double interp;41 42 /**43 * Number of completed repetitions44 */45 public int rep;46 47 /**48 * True if this evaluation is in a frozen state; ie, past the end of the49 * track and held in the "freeze" state.50 */51 // public boolean pastEnd;52 53 /** Creates a new instance of AnimateTimeEval */54 public AnimationTimeEval()55 {56 }57 58 // public void set(double interp, int rep, boolean pastEnd)59 public void set(double interp, int rep)60 {61 this.interp = interp;62 this.rep = rep;63 // this.pastEnd = pastEnd;64 }65 } -
deleted file josm.orig/src/com/kitfox/svg/animation/Bezier.java
+ - 1 /*2 * Bezier.java3 *4 5 * The Salamander Project - 2D and 3D graphics libraries in Java6 * Copyright (C) 2004 Mark McKay7 *8 * This library is free software; you can redistribute it and/or9 * modify it under the terms of the GNU Lesser General Public10 * License as published by the Free Software Foundation; either11 * version 2.1 of the License, or (at your option) any later version.12 *13 * This library is distributed in the hope that it will be useful,14 * but WITHOUT ANY WARRANTY; without even the implied warranty of15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU16 * Lesser General Public License for more details.17 *18 * You should have received a copy of the GNU Lesser General Public19 * License along with this library; if not, write to the Free Software20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA21 *22 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other23 * projects can be found at http://www.kitfox.com24 *25 * Created on January 14, 2005, 4:08 AM26 */27 28 package com.kitfox.svg.animation;29 30 import java.awt.geom.*;31 32 /**33 * http://mathworld.wolfram.com/BezierCurve.html34 * @author kitfox35 */36 public class Bezier37 {38 double length;39 double[] coord;40 41 public Bezier(double sx, double sy, double[] coords, int numCoords)42 {43 setCoords(sx, sy, coords, numCoords);44 }45 46 public void setCoords(double sx, double sy, double[] coords, int numCoords)47 {48 coord = new double[numCoords * 2 + 2];49 coord[0] = sx;50 coord[1] = sy;51 for (int i = 0; i < numCoords; i++)52 {53 coord[i * 2 + 2] = coords[i * 2];54 coord[i * 2 + 3] = coords[i * 2 + 1];55 }56 57 calcLength();58 }59 60 /**61 * Retuns aproximation of the length of the bezier62 */63 public double getLength()64 {65 return length;66 }67 68 private void calcLength()69 {70 length = 0;71 for (int i = 2; i < coord.length; i += 2)72 {73 length += lineLength(coord[i - 2], coord[i - 1], coord[i], coord[i + 1]);74 }75 }76 77 private double lineLength(double x1, double y1, double x2, double y2)78 {79 double dx = x2 - x1, dy = y2 - y1;80 return Math.sqrt(dx * dx + dy * dy);81 }82 83 public Point2D.Double getFinalPoint(Point2D.Double point)84 {85 point.x = coord[coord.length - 2];86 point.y = coord[coord.length - 1];87 return point;88 }89 90 public Point2D.Double eval(double param, Point2D.Double point)91 {92 point.x = 0;93 point.y = 0;94 int numKnots = coord.length / 2;95 96 for (int i = 0; i < numKnots; i++)97 {98 double scale = bernstein(numKnots - 1, i, param);99 point.x += coord[i * 2] * scale;100 point.y += coord[i * 2 + 1] * scale;101 }102 103 return point;104 }105 106 /**107 * Calculates the bernstein polynomial for evaluating parametric bezier108 * @param numKnots - one less than number of knots in this curve hull109 * @param knotNo - knot we are evaluating Bernstein for110 * @param param - Parametric value we are evaluating at111 */112 private double bernstein(int numKnots, int knotNo, double param)113 {114 double iParam = 1 - param;115 //Faster evaluation for easy cases:116 switch (numKnots)117 {118 case 0:119 return 1;120 case 1:121 {122 switch (knotNo)123 {124 case 0:125 return iParam;126 case 1:127 return param;128 }129 break;130 }131 case 2:132 {133 switch (knotNo)134 {135 case 0:136 return iParam * iParam;137 case 1:138 return 2 * iParam * param;139 case 2:140 return param * param;141 }142 break;143 }144 case 3:145 {146 switch (knotNo)147 {148 case 0:149 return iParam * iParam * iParam;150 case 1:151 return 3 * iParam * iParam * param;152 case 2:153 return 3 * iParam * param * param;154 case 3:155 return param * param * param;156 }157 break;158 }159 }160 161 //If this bezier has more than four points, calculate bernstein the hard way162 double retVal = 1;163 for (int i = 0; i < knotNo; i++)164 {165 retVal *= param;166 }167 for (int i = 0; i < numKnots - knotNo; i++)168 {169 retVal *= iParam;170 }171 retVal *= choose(numKnots, knotNo);172 173 return retVal;174 }175 176 177 178 private int choose(int num, int denom)179 {180 int denom2 = num - denom;181 if (denom < denom2)182 {183 int tmp = denom;184 denom = denom2;185 denom2 = tmp;186 }187 188 int prod = 1;189 for (int i = num; i > denom; i--)190 {191 prod *= num;192 }193 194 for (int i = 2; i <= denom2; i++)195 {196 prod /= i;197 }198 199 return prod;200 }201 } -
deleted file josm.orig/src/com/kitfox/svg/animation/SetSmil.java
+ - 1 /*2 * Set.java3 *4 * The Salamander Project - 2D and 3D graphics libraries in Java5 * Copyright (C) 2004 Mark McKay6 *7 * This library is free software; you can redistribute it and/or8 * modify it under the terms of the GNU Lesser General Public9 * License as published by the Free Software Foundation; either10 * version 2.1 of the License, or (at your option) any later version.11 *12 * This library is distributed in the hope that it will be useful,13 * but WITHOUT ANY WARRANTY; without even the implied warranty of14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU15 * Lesser General Public License for more details.16 *17 * You should have received a copy of the GNU Lesser General Public18 * License along with this library; if not, write to the Free Software19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA20 *21 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other22 * projects can be found at http://www.kitfox.com23 *24 * Created on August 15, 2004, 2:51 AM25 */26 27 package com.kitfox.svg.animation;28 29 import com.kitfox.svg.SVGElement;30 import com.kitfox.svg.SVGException;31 import com.kitfox.svg.SVGLoaderHelper;32 import com.kitfox.svg.animation.parser.AnimTimeParser;33 import com.kitfox.svg.xml.StyleAttribute;34 import org.xml.sax.Attributes;35 import org.xml.sax.SAXException;36 37 38 /**39 * Set is used to set a textual value; most likely for a style element.40 *41 * @author Mark McKay42 * @author <a href="mailto:mark@kitfox.com">Mark McKay</a>43 */44 public class SetSmil extends AnimationElement45 {46 String toValue;47 48 /** Creates a new instance of Set */49 public SetSmil()50 {51 }52 53 public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) throws SAXException54 {55 //Load style string56 super.loaderStartElement(helper, attrs, parent);57 58 toValue = attrs.getValue("to");59 }60 61 protected void rebuild(AnimTimeParser animTimeParser) throws SVGException62 {63 super.rebuild(animTimeParser);64 65 StyleAttribute sty = new StyleAttribute();66 67 if (getPres(sty.setName("to")))68 {69 String newVal = sty.getStringValue();70 toValue = newVal;71 }72 }73 } -
deleted file josm.orig/src/com/kitfox/svg/animation/TimeBase.java
+ - 1 /*2 * TimeBase.java3 *4 * The Salamander Project - 2D and 3D graphics libraries in Java5 * Copyright (C) 2004 Mark McKay6 *7 * This library is free software; you can redistribute it and/or8 * modify it under the terms of the GNU Lesser General Public9 * License as published by the Free Software Foundation; either10 * version 2.1 of the License, or (at your option) any later version.11 *12 * This library is distributed in the hope that it will be useful,13 * but WITHOUT ANY WARRANTY; without even the implied warranty of14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU15 * Lesser General Public License for more details.16 *17 * You should have received a copy of the GNU Lesser General Public18 * License along with this library; if not, write to the Free Software19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA20 *21 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other22 * projects can be found at http://www.kitfox.com23 *24 * Created on August 15, 2004, 3:31 AM25 */26 27 package com.kitfox.svg.animation;28 29 import java.util.regex.*;30 31 /**32 * SVG has a complicated way of specifying time. Potentially, a time could33 * be represened as a summation of discrete times and times of other animation34 * events. This provides a root for the many elements we will need to define35 * time.36 *37 * @author Mark McKay38 * @author <a href="mailto:mark@kitfox.com">Mark McKay</a>39 */40 abstract public class TimeBase41 {42 static final Matcher matchIndefinite = Pattern.compile("\\s*indefinite\\s*").matcher("");43 static final Matcher matchUnitTime = Pattern.compile("\\s*([-+]?((\\d*\\.\\d+)|(\\d+))([-+]?[eE]\\d+)?)\\s*(h|min|s|ms)?\\s*").matcher("");44 45 /*46 public static TimeBase parseTime(String text)47 {48 if (text == null) return null;49 50 if (text.indexOf('+') == -1)51 {52 return parseTimeComponent(text);53 }54 55 return new TimeCompound(text);56 }57 */58 59 protected static TimeBase parseTimeComponent(String text)60 {61 matchIndefinite.reset(text);62 if (matchIndefinite.matches()) return new TimeIndefinite();63 64 matchUnitTime.reset(text);65 if (matchUnitTime.matches())66 {67 String val = matchUnitTime.group(1);68 String units = matchUnitTime.group(6);69 70 double time = 0;71 try { time = Double.parseDouble(val); }72 catch (Exception e) {}73 74 if (units.equals("ms")) time *= .001;75 else if (units.equals("min")) time *= 60;76 else if (units.equals("h")) time *= 3600;77 78 return new TimeDiscrete(time);79 }80 81 return null;82 }83 84 /**85 * Calculates the (greater than or equal to 0) time in seconds this86 * time represents. If the time cannot be determined, returns87 * Double.NaN. If this represents an infinte amount of time, returns88 * Double.POSITIVE_INFINITY.89 */90 abstract public double evalTime();91 92 /**93 * Some time elements need to refer to the animation element that contains94 * them to evaluate correctly95 */96 public void setParentElement(AnimationElement ele)97 {98 }99 } -
deleted file josm.orig/src/com/kitfox/svg/animation/TimeCompound.java
+ - 1 /*2 * TimeDiscrete.java3 *4 * The Salamander Project - 2D and 3D graphics libraries in Java5 * Copyright (C) 2004 Mark McKay6 *7 * This library is free software; you can redistribute it and/or8 * modify it under the terms of the GNU Lesser General Public9 * License as published by the Free Software Foundation; either10 * version 2.1 of the License, or (at your option) any later version.11 *12 * This library is distributed in the hope that it will be useful,13 * but WITHOUT ANY WARRANTY; without even the implied warranty of14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU15 * Lesser General Public License for more details.16 *17 * You should have received a copy of the GNU Lesser General Public18 * License along with this library; if not, write to the Free Software19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA20 *21 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other22 * projects can be found at http://www.kitfox.com23 *24 * Created on August 15, 2004, 3:33 AM25 */26 27 package com.kitfox.svg.animation;28 29 import java.util.Collections;30 import java.util.Iterator;31 import java.util.List;32 import java.util.regex.Pattern;33 34 35 /**36 * This represents a summation of other time elements. It is used for complex37 * timing events with offsets.38 *39 * @author Mark McKay40 * @author <a href="mailto:mark@kitfox.com">Mark McKay</a>41 */42 public class TimeCompound extends TimeBase43 {44 static final Pattern patPlus = Pattern.compile("\\+");45 46 /**47 * This is a list of times. This element's time is calculated as the greatest48 * member that is less than the current time.49 */50 final List componentTimes;51 52 private AnimationElement parent;53 54 /** Creates a new instance of TimeDiscrete */55 public TimeCompound(List timeBases)56 {57 componentTimes = Collections.unmodifiableList(timeBases);58 }59 60 public double evalTime()61 {62 double agg = 0.0;63 64 for (Iterator it = componentTimes.iterator(); it.hasNext();)65 {66 TimeBase timeEle = (TimeBase)it.next();67 double time = timeEle.evalTime();68 agg += time;69 }70 71 return agg;72 }73 74 public void setParentElement(AnimationElement ele)75 {76 this.parent = ele;77 78 for (Iterator it = componentTimes.iterator(); it.hasNext();)79 {80 TimeBase timeEle = (TimeBase)it.next();81 timeEle.setParentElement(ele);82 }83 }84 } -
deleted file josm.orig/src/com/kitfox/svg/animation/TimeDiscrete.java
+ - 1 /*2 * TimeDiscrete.java3 *4 * The Salamander Project - 2D and 3D graphics libraries in Java5 * Copyright (C) 2004 Mark McKay6 *7 * This library is free software; you can redistribute it and/or8 * modify it under the terms of the GNU Lesser General Public9 * License as published by the Free Software Foundation; either10 * version 2.1 of the License, or (at your option) any later version.11 *12 * This library is distributed in the hope that it will be useful,13 * but WITHOUT ANY WARRANTY; without even the implied warranty of14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU15 * Lesser General Public License for more details.16 *17 * You should have received a copy of the GNU Lesser General Public18 * License along with this library; if not, write to the Free Software19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA20 *21 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other22 * projects can be found at http://www.kitfox.com23 *24 * Created on August 15, 2004, 3:33 AM25 */26 27 package com.kitfox.svg.animation;28 29 /**30 * This is a time that represents a specific number of milliseconds31 *32 * @author Mark McKay33 * @author <a href="mailto:mark@kitfox.com">Mark McKay</a>34 */35 public class TimeDiscrete extends TimeBase36 {37 //Milliseconds of delay38 double secs;39 40 /** Creates a new instance of TimeDiscrete */41 public TimeDiscrete(double secs)42 {43 this.secs = secs;44 }45 46 public double evalTime()47 {48 return secs;49 }50 51 } -
deleted file josm.orig/src/com/kitfox/svg/animation/TimeIndefinite.java
+ - 1 /*2 * TimeDiscrete.java3 *4 * The Salamander Project - 2D and 3D graphics libraries in Java5 * Copyright (C) 2004 Mark McKay6 *7 * This library is free software; you can redistribute it and/or8 * modify it under the terms of the GNU Lesser General Public9 * License as published by the Free Software Foundation; either10 * version 2.1 of the License, or (at your option) any later version.11 *12 * This library is distributed in the hope that it will be useful,13 * but WITHOUT ANY WARRANTY; without even the implied warranty of14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU15 * Lesser General Public License for more details.16 *17 * You should have received a copy of the GNU Lesser General Public18 * License along with this library; if not, write to the Free Software19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA20 *21 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other22 * projects can be found at http://www.kitfox.com23 *24 * Created on August 15, 2004, 3:33 AM25 */26 27 package com.kitfox.svg.animation;28 29 /**30 * This represents the indefinite (infinite) amount of time.31 *32 * @author Mark McKay33 * @author <a href="mailto:mark@kitfox.com">Mark McKay</a>34 */35 public class TimeIndefinite extends TimeBase36 {37 38 /** Creates a new instance of TimeDiscrete */39 public TimeIndefinite()40 {41 }42 43 public double evalTime()44 {45 return Double.POSITIVE_INFINITY;46 }47 48 } -
deleted file josm.orig/src/com/kitfox/svg/animation/TimeLookup.java
+ - 1 /*2 * TimeDiscrete.java3 *4 * The Salamander Project - 2D and 3D graphics libraries in Java5 * Copyright (C) 2004 Mark McKay6 *7 * This library is free software; you can redistribute it and/or8 * modify it under the terms of the GNU Lesser General Public9 * License as published by the Free Software Foundation; either10 * version 2.1 of the License, or (at your option) any later version.11 *12 * This library is distributed in the hope that it will be useful,13 * but WITHOUT ANY WARRANTY; without even the implied warranty of14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU15 * Lesser General Public License for more details.16 *17 * You should have received a copy of the GNU Lesser General Public18 * License along with this library; if not, write to the Free Software19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA20 *21 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other22 * projects can be found at http://www.kitfox.com23 *24 * Created on August 15, 2004, 3:33 AM25 */26 27 package com.kitfox.svg.animation;28 29 /**30 * This is a time that represents a specific number of milliseconds31 *32 * @author Mark McKay33 * @author <a href="mailto:mark@kitfox.com">Mark McKay</a>34 */35 public class TimeLookup extends TimeBase36 {37 /**38 * This time can only be resolved in relation to it's parent39 */40 private AnimationElement parent;41 42 /**43 * Node this lookup acts upon44 */45 String node;46 47 /**48 * Event to evalutae on this node49 */50 String event;51 52 /**53 * Optional parameter used by some events54 */55 String paramList;56 57 /** Creates a new instance of TimeDiscrete */58 public TimeLookup(AnimationElement parent, String node, String event, String paramList)59 {60 this.parent = parent;61 this.node = node;62 this.event = event;63 this.paramList = paramList;64 }65 66 public double evalTime()67 {68 return 0.0;69 }70 71 public void setParentElement(AnimationElement ele)72 {73 parent = ele;74 }75 } -
deleted file josm.orig/src/com/kitfox/svg/animation/TimeSum.java
+ - 1 /*2 * TimeDiscrete.java3 *4 * The Salamander Project - 2D and 3D graphics libraries in Java5 * Copyright (C) 2004 Mark McKay6 *7 * This library is free software; you can redistribute it and/or8 * modify it under the terms of the GNU Lesser General Public9 * License as published by the Free Software Foundation; either10 * version 2.1 of the License, or (at your option) any later version.11 *12 * This library is distributed in the hope that it will be useful,13 * but WITHOUT ANY WARRANTY; without even the implied warranty of14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU15 * Lesser General Public License for more details.16 *17 * You should have received a copy of the GNU Lesser General Public18 * License along with this library; if not, write to the Free Software19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA20 *21 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other22 * projects can be found at http://www.kitfox.com23 *24 * Created on August 15, 2004, 3:33 AM25 */26 27 package com.kitfox.svg.animation;28 29 /**30 * This is a time that represents a specific number of milliseconds31 *32 * @author Mark McKay33 * @author <a href="mailto:mark@kitfox.com">Mark McKay</a>34 */35 public class TimeSum extends TimeBase36 {37 //Milliseconds of delay38 TimeBase t1;39 TimeBase t2;40 boolean add;41 42 /** Creates a new instance of TimeDiscrete */43 public TimeSum(TimeBase t1, TimeBase t2, boolean add)44 {45 this.t1 = t1;46 this.t2 = t2;47 this.add = add;48 }49 50 public double evalTime()51 {52 return add ? t1.evalTime() + t2.evalTime() : t1.evalTime() - t2.evalTime();53 }54 55 public void setParentElement(AnimationElement ele)56 {57 t1.setParentElement(ele);58 t2.setParentElement(ele);59 }60 } -
deleted file josm.orig/src/com/kitfox/svg/animation/TrackBase.java
+ - 1 /*2 * TrackManager.java3 *4 * The Salamander Project - 2D and 3D graphics libraries in Java5 * Copyright (C) 2004 Mark McKay6 *7 * This library is free software; you can redistribute it and/or8 * modify it under the terms of the GNU Lesser General Public9 * License as published by the Free Software Foundation; either10 * version 2.1 of the License, or (at your option) any later version.11 *12 * This library is distributed in the hope that it will be useful,13 * but WITHOUT ANY WARRANTY; without even the implied warranty of14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU15 * Lesser General Public License for more details.16 *17 * You should have received a copy of the GNU Lesser General Public18 * License along with this library; if not, write to the Free Software19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA20 *21 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other22 * projects can be found at http://www.kitfox.com23 *24 * Created on August 15, 2004, 11:34 PM25 */26 27 package com.kitfox.svg.animation;28 29 import java.util.*;30 31 import com.kitfox.svg.xml.*;32 import com.kitfox.svg.*;33 34 /**35 * A track holds the animation events for a single parameter of a single SVG36 * element. It also contains the default value for the element, should the37 * user want to see the 'unanimated' value.38 *39 * @author Mark McKay40 * @author <a href="mailto:mark@kitfox.com">Mark McKay</a>41 */42 abstract public class TrackBase43 {44 protected final String attribName;45 protected final int attribType; //AnimationElement.AT_*46 47 /** Element we're animating */48 protected final SVGElement parent;49 50 //It doesn't make sense to sort this, since some events will depend on51 // other events - in many cases, there will be no meaningful sorted order.52 final ArrayList animEvents = new ArrayList();53 54 /** Creates a new instance of TrackManager */55 // public TrackBase(SVGElement parent)56 // {57 // this(parent, "", AnimationElement.AT_AUTO);58 // }59 60 /**61 * Creates a track that would be valid for the name and type of element62 * passed in. Does not actually add this elemnt to the track.63 */64 public TrackBase(SVGElement parent, AnimationElement ele) throws SVGElementException65 {66 this(parent, ele.getAttribName(), ele.getAttribType());67 }68 69 public TrackBase(SVGElement parent, String attribName, int attribType) throws SVGElementException70 {71 this.parent = parent;72 this.attribName = attribName;73 this.attribType = attribType;74 75 //Make sure parent has an attribute we will write to76 if (attribType == AnimationElement.AT_AUTO77 && !parent.hasAttribute(attribName, AnimationElement.AT_CSS)78 && !parent.hasAttribute(attribName, AnimationElement.AT_XML))79 {80 parent.addAttribute(attribName, AnimationElement.AT_CSS, "");81 }82 else if (!parent.hasAttribute(attribName, attribType))83 {84 parent.addAttribute(attribName, attribType, "");85 }86 }87 88 public String getAttribName() { return attribName; }89 public int getAttribType() { return attribType; }90 91 public void addElement(AnimationElement ele)92 {93 animEvents.add(ele);94 }95 96 /**97 * Returns a StyleAttribute representing the value of this track at the98 * passed time. If this track does not apply, returns null.99 * @return - True if successful, false if a value could not be obtained100 */101 abstract public boolean getValue(StyleAttribute attrib, double curTime) throws SVGException;102 103 } -
deleted file josm.orig/src/com/kitfox/svg/animation/TrackColor.java
+ - 1 /*2 * TrackManager.java3 *4 * The Salamander Project - 2D and 3D graphics libraries in Java5 * Copyright (C) 2004 Mark McKay6 *7 * This library is free software; you can redistribute it and/or8 * modify it under the terms of the GNU Lesser General Public9 * License as published by the Free Software Foundation; either10 * version 2.1 of the License, or (at your option) any later version.11 *12 * This library is distributed in the hope that it will be useful,13 * but WITHOUT ANY WARRANTY; without even the implied warranty of14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU15 * Lesser General Public License for more details.16 *17 * You should have received a copy of the GNU Lesser General Public18 * License along with this library; if not, write to the Free Software19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA20 *21 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other22 * projects can be found at http://www.kitfox.com23 *24 * Created on September 21, 2004, 11:34 PM25 */26 27 package com.kitfox.svg.animation;28 29 import com.kitfox.svg.xml.StyleAttribute;30 import java.awt.*;31 import java.util.*;32 33 import com.kitfox.svg.*;34 import com.kitfox.svg.xml.*;35 36 /**37 * A track holds the animation events for a single parameter of a single SVG38 * element. It also contains the default value for the element, should the39 * user want to see the 'unanimated' value.40 *41 * @author Mark McKay42 * @author <a href="mailto:mark@kitfox.com">Mark McKay</a>43 */44 public class TrackColor extends TrackBase45 {46 47 public TrackColor(AnimationElement ele) throws SVGElementException48 {49 super(ele.getParent(), ele);50 }51 52 public boolean getValue(StyleAttribute attrib, double curTime)53 {54 Color col = getValue(curTime);55 if (col == null) return false;56 57 attrib.setStringValue("#" + Integer.toHexString(col.getRGB()));58 return true;59 }60 61 public Color getValue(double curTime)62 {63 Color retVal = null;64 AnimationTimeEval state = new AnimationTimeEval();65 66 for (Iterator it = animEvents.iterator(); it.hasNext();)67 {68 AnimateBase ele = (AnimateBase)it.next();69 AnimateColorIface eleColor = (AnimateColorIface)ele;70 ele.evalParametric(state, curTime);71 72 //Reject value if it is in the invalid state73 if (Double.isNaN(state.interp)) continue;74 75 if (retVal == null)76 {77 retVal = eleColor.evalColor(state.interp);78 continue;79 }80 81 Color curCol = eleColor.evalColor(state.interp);82 switch (ele.getAdditiveType())83 {84 case AnimationElement.AD_REPLACE:85 retVal = curCol;86 break;87 case AnimationElement.AD_SUM:88 retVal = new Color(curCol.getRed() + retVal.getRed(), curCol.getGreen() + retVal.getGreen(), curCol.getBlue() + retVal.getBlue());89 break;90 }91 }92 93 return retVal;94 }95 } -
deleted file josm.orig/src/com/kitfox/svg/animation/TrackDouble.java
+ - 1 /*2 * TrackManager.java3 *4 * The Salamander Project - 2D and 3D graphics libraries in Java5 * Copyright (C) 2004 Mark McKay6 *7 * This library is free software; you can redistribute it and/or8 * modify it under the terms of the GNU Lesser General Public9 * License as published by the Free Software Foundation; either10 * version 2.1 of the License, or (at your option) any later version.11 *12 * This library is distributed in the hope that it will be useful,13 * but WITHOUT ANY WARRANTY; without even the implied warranty of14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU15 * Lesser General Public License for more details.16 *17 * You should have received a copy of the GNU Lesser General Public18 * License along with this library; if not, write to the Free Software19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA20 *21 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other22 * projects can be found at http://www.kitfox.com23 *24 * Created on August 15, 2004, 11:34 PM25 */26 27 package com.kitfox.svg.animation;28 29 import com.kitfox.svg.xml.StyleAttribute;30 import java.util.*;31 32 import com.kitfox.svg.*;33 import com.kitfox.svg.xml.*;34 35 /**36 * A track holds the animation events for a single parameter of a single SVG37 * element. It also contains the default value for the element, should the38 * user want to see the 'unanimated' value.39 *40 * @author Mark McKay41 * @author <a href="mailto:mark@kitfox.com">Mark McKay</a>42 */43 public class TrackDouble extends TrackBase44 {45 public TrackDouble(AnimationElement ele) throws SVGElementException46 {47 super(ele.getParent(), ele);48 }49 50 public boolean getValue(StyleAttribute attrib, double curTime)51 {52 double val = getValue(curTime);53 if (Double.isNaN(val)) return false;54 55 attrib.setStringValue("" + val);56 return true;57 }58 59 public double getValue(double curTime)60 {61 double retVal = Double.NaN;62 63 StyleAttribute attr = null;64 switch (attribType)65 {66 case AnimationElement.AT_CSS:67 attr = parent.getStyleAbsolute(attribName);68 retVal = attr.getDoubleValue();69 break;70 case AnimationElement.AT_XML:71 attr = parent.getPresAbsolute(attribName);72 retVal = attr.getDoubleValue();73 break;74 case AnimationElement.AT_AUTO:75 attr = parent.getStyleAbsolute(attribName);76 if (attr == null) attr = parent.getPresAbsolute(attribName);77 retVal = attr.getDoubleValue();78 break;79 }80 81 82 83 AnimationTimeEval state = new AnimationTimeEval();84 // boolean pastEnd = true;85 86 for (Iterator it = animEvents.iterator(); it.hasNext();)87 {88 Animate ele = (Animate)it.next();89 ele.evalParametric(state, curTime);90 91 //Go to next element if this one does not affect processing92 if (Double.isNaN(state.interp)) continue;93 94 switch (ele.getAdditiveType())95 {96 case AnimationElement.AD_SUM:97 retVal += ele.eval(state.interp);98 break;99 case AnimationElement.AD_REPLACE:100 retVal = ele.eval(state.interp);101 break;102 }103 104 //Evalutae accumulation if applicable105 if (state.rep > 0)106 {107 switch (ele.getAccumulateType())108 {109 case AnimationElement.AC_SUM:110 retVal += ele.repeatSkipSize(state.rep);111 break;112 }113 114 }115 }116 117 return retVal;118 }119 } -
deleted file josm.orig/src/com/kitfox/svg/animation/TrackManager.java
+ - 1 /*2 * TrackManager.java3 *4 * The Salamander Project - 2D and 3D graphics libraries in Java5 * Copyright (C) 2004 Mark McKay6 *7 * This library is free software; you can redistribute it and/or8 * modify it under the terms of the GNU Lesser General Public9 * License as published by the Free Software Foundation; either10 * version 2.1 of the License, or (at your option) any later version.11 *12 * This library is distributed in the hope that it will be useful,13 * but WITHOUT ANY WARRANTY; without even the implied warranty of14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU15 * Lesser General Public License for more details.16 *17 * You should have received a copy of the GNU Lesser General Public18 * License along with this library; if not, write to the Free Software19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA20 *21 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other22 * projects can be found at http://www.kitfox.com23 *24 * Created on August 15, 2004, 11:34 PM25 */26 27 package com.kitfox.svg.animation;28 29 import java.util.*;30 31 import com.kitfox.svg.*;32 import java.io.Serializable;33 34 /**35 * Every element contains tracks, which manage the animation. There is one track36 * for every parameter with animation, and each track in turn is composed of37 * many events.38 *39 * @author Mark McKay40 * @author <a href="mailto:mark@kitfox.com">Mark McKay</a>41 */42 public class TrackManager implements Serializable43 {44 public static final long serialVersionUID = 0;45 46 static class TrackKey47 {48 String name;49 int type;50 51 TrackKey(AnimationElement base)52 {53 this(base.getAttribName(), base.getAttribType());54 }55 56 TrackKey(String name, int type)57 {58 this.name = name;59 this.type = type;60 }61 62 public int hashCode() { return name.hashCode() ^ type; }63 public boolean equals(Object obj)64 {65 if (!(obj instanceof TrackKey)) return false;66 TrackKey key = (TrackKey)obj;67 return key.type == type && key.name.equals(name);68 }69 }70 71 HashMap tracks = new HashMap();72 73 /** Creates a new instance of TrackManager */74 public TrackManager()75 {76 }77 78 /**79 * Adds a new animation element to this track80 */81 public void addTrackElement(AnimationElement element) throws SVGElementException82 {83 TrackKey key = new TrackKey(element);84 85 TrackBase track = (TrackBase)tracks.get(key);86 87 if (track == null)88 {89 //Create a track for this element90 if (element instanceof Animate)91 {92 switch (((Animate)element).getDataType())93 {94 case Animate.DT_REAL:95 track = new TrackDouble(element);96 break;97 case Animate.DT_COLOR:98 track = new TrackColor(element);99 break;100 case Animate.DT_PATH:101 track = new TrackPath(element);102 break;103 default:104 throw new RuntimeException("");105 }106 }107 else if (element instanceof AnimateColor)108 {109 track = new TrackColor(element);110 }111 else if (element instanceof AnimateTransform || element instanceof AnimateMotion)112 {113 track = new TrackTransform(element);114 }115 116 tracks.put(key, track);117 }118 119 track.addElement(element);120 }121 122 public TrackBase getTrack(String name, int type)123 {124 //Handle AUTO, which will match either CSS or XML (in that order)125 if (type == AnimationElement.AT_AUTO)126 {127 TrackBase t = getTrack(name, AnimationElement.AT_CSS);128 if (t != null) return t;129 t = getTrack(name, AnimationElement.AT_XML);130 if (t != null) return t;131 return null;132 }133 134 //Get requested attribute135 TrackKey key = new TrackKey(name, type);136 TrackBase t = (TrackBase)tracks.get(key);137 if (t != null) return t;138 139 //If that didn't exist, see if one exists of type AUTO140 key = new TrackKey(name, AnimationElement.AT_AUTO);141 return (TrackBase)tracks.get(key);142 }143 144 public int getNumTracks()145 {146 return tracks.size();147 }148 149 public Iterator iterator()150 {151 return tracks.values().iterator();152 }153 } -
deleted file josm.orig/src/com/kitfox/svg/animation/TrackMotion.java
+ - 1 /*2 * TrackManager.java3 *4 * The Salamander Project - 2D and 3D graphics libraries in Java5 * Copyright (C) 2004 Mark McKay6 *7 * This library is free software; you can redistribute it and/or8 * modify it under the terms of the GNU Lesser General Public9 * License as published by the Free Software Foundation; either10 * version 2.1 of the License, or (at your option) any later version.11 *12 * This library is distributed in the hope that it will be useful,13 * but WITHOUT ANY WARRANTY; without even the implied warranty of14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU15 * Lesser General Public License for more details.16 *17 * You should have received a copy of the GNU Lesser General Public18 * License along with this library; if not, write to the Free Software19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA20 *21 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other22 * projects can be found at http://www.kitfox.com23 *24 * Created on September 21, 2004, 11:34 PM25 */26 27 package com.kitfox.svg.animation;28 29 import com.kitfox.svg.xml.StyleAttribute;30 import java.awt.geom.*;31 import java.util.*;32 33 import com.kitfox.svg.*;34 import com.kitfox.svg.xml.*;35 36 /**37 * A track holds the animation events for a single parameter of a single SVG38 * element. It also contains the default value for the element, should the39 * user want to see the 'unanimated' value.40 *41 * @author Mark McKay42 * @author <a href="mailto:mark@kitfox.com">Mark McKay</a>43 */44 public class TrackMotion extends TrackBase45 {46 public TrackMotion(AnimationElement ele) throws SVGElementException47 {48 //The motion element implies a CSS attribute of transform49 // super(ele.getParent(), "transform", AnimationElement.AT_CSS);50 super(ele.getParent(), ele);51 }52 53 public boolean getValue(StyleAttribute attrib, double curTime) throws SVGException54 {55 AffineTransform retVal = new AffineTransform();56 retVal = getValue(retVal, curTime);57 // AffineTransform val = getValue(curTime);58 // if (val == null) return false;59 60 double[] mat = new double[6];61 retVal.getMatrix(mat);62 attrib.setStringValue("matrix(" + mat[0] + " " + mat[1] + " " + mat[2] + " " + mat[3] + " " + mat[4] + " " + mat[5] + ")");63 return true;64 }65 66 public AffineTransform getValue(AffineTransform retVal, double curTime) throws SVGException67 {68 //Init transform with default state69 StyleAttribute attr = null;70 switch (attribType)71 {72 case AnimationElement.AT_CSS:73 attr = parent.getStyleAbsolute(attribName);74 retVal.setTransform(SVGElement.parseSingleTransform(attr.getStringValue()));75 break;76 case AnimationElement.AT_XML:77 attr = parent.getPresAbsolute(attribName);78 retVal.setTransform(SVGElement.parseSingleTransform(attr.getStringValue()));79 break;80 case AnimationElement.AT_AUTO:81 attr = parent.getStyleAbsolute(attribName);82 if (attr == null) attr = parent.getPresAbsolute(attribName);83 retVal.setTransform(SVGElement.parseSingleTransform(attr.getStringValue()));84 break;85 }86 87 88 //Update transform with time based information89 AnimationTimeEval state = new AnimationTimeEval();90 AffineTransform xform = new AffineTransform();91 // boolean pastEnd = true;92 93 for (Iterator it = animEvents.iterator(); it.hasNext();)94 {95 AnimateMotion ele = (AnimateMotion)it.next();96 ele.evalParametric(state, curTime);97 98 //Go to next element if this one does not affect processing99 if (Double.isNaN(state.interp)) continue;100 101 switch (ele.getAdditiveType())102 {103 case AnimationElement.AD_SUM:104 retVal.concatenate(ele.eval(xform, state.interp));105 break;106 case AnimationElement.AD_REPLACE:107 retVal.setTransform(ele.eval(xform, state.interp));108 break;109 }110 111 //Evaluate accumulation if applicable112 /*113 if (state.rep > 0)114 {115 switch (ele.getAccumulateType())116 {117 case AnimationElement.AC_SUM:118 retVal += ele.repeatSkipSize(state.rep);119 break;120 }121 122 }123 */124 }125 126 return retVal;127 }128 } -
deleted file josm.orig/src/com/kitfox/svg/animation/TrackPath.java
+ - 1 /*2 * TrackManager.java3 *4 * The Salamander Project - 2D and 3D graphics libraries in Java5 * Copyright (C) 2004 Mark McKay6 *7 * This library is free software; you can redistribute it and/or8 * modify it under the terms of the GNU Lesser General Public9 * License as published by the Free Software Foundation; either10 * version 2.1 of the License, or (at your option) any later version.11 *12 * This library is distributed in the hope that it will be useful,13 * but WITHOUT ANY WARRANTY; without even the implied warranty of14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU15 * Lesser General Public License for more details.16 *17 * You should have received a copy of the GNU Lesser General Public18 * License along with this library; if not, write to the Free Software19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA20 *21 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other22 * projects can be found at http://www.kitfox.com23 *24 * Created on September 21, 2004, 11:34 PM25 */26 27 package com.kitfox.svg.animation;28 29 import com.kitfox.svg.xml.StyleAttribute;30 import java.awt.*;31 import java.awt.geom.*;32 import java.util.*;33 34 import com.kitfox.svg.pathcmd.*;35 import com.kitfox.svg.*;36 import com.kitfox.svg.xml.*;37 38 /**39 * A track holds the animation events for a single parameter of a single SVG40 * element. It also contains the default value for the element, should the41 * user want to see the 'unanimated' value.42 *43 * @author Mark McKay44 * @author <a href="mailto:mark@kitfox.com">Mark McKay</a>45 */46 public class TrackPath extends TrackBase47 {48 49 public TrackPath(AnimationElement ele) throws SVGElementException50 {51 super(ele.getParent(), ele);52 }53 54 public boolean getValue(StyleAttribute attrib, double curTime)55 {56 GeneralPath path = getValue(curTime);57 if (path == null) return false;58 59 attrib.setStringValue(PathUtil.buildPathString(path));60 return true;61 }62 63 public GeneralPath getValue(double curTime)64 {65 GeneralPath retVal = null;66 AnimationTimeEval state = new AnimationTimeEval();67 68 for (Iterator it = animEvents.iterator(); it.hasNext();)69 {70 AnimateBase ele = (AnimateBase)it.next();71 Animate eleAnim = (Animate)ele;72 ele.evalParametric(state, curTime);73 74 //Reject value if it is in the invalid state75 if (Double.isNaN(state.interp)) continue;76 77 if (retVal == null)78 {79 retVal = eleAnim.evalPath(state.interp);80 continue;81 }82 83 GeneralPath curPath = eleAnim.evalPath(state.interp);84 switch (ele.getAdditiveType())85 {86 case AnimationElement.AD_REPLACE:87 retVal = curPath;88 break;89 case AnimationElement.AD_SUM:90 throw new RuntimeException("Not implemented");91 // retVal = new Color(curCol.getRed() + retVal.getRed(), curCol.getGreen() + retVal.getGreen(), curCol.getBlue() + retVal.getBlue());92 // break;93 default:94 throw new RuntimeException();95 }96 }97 98 return retVal;99 }100 } -
deleted file josm.orig/src/com/kitfox/svg/animation/TrackTransform.java
+ - 1 /*2 * TrackManager.java3 *4 * The Salamander Project - 2D and 3D graphics libraries in Java5 * Copyright (C) 2004 Mark McKay6 *7 * This library is free software; you can redistribute it and/or8 * modify it under the terms of the GNU Lesser General Public9 * License as published by the Free Software Foundation; either10 * version 2.1 of the License, or (at your option) any later version.11 *12 * This library is distributed in the hope that it will be useful,13 * but WITHOUT ANY WARRANTY; without even the implied warranty of14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU15 * Lesser General Public License for more details.16 *17 * You should have received a copy of the GNU Lesser General Public18 * License along with this library; if not, write to the Free Software19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA20 *21 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other22 * projects can be found at http://www.kitfox.com23 *24 * Created on September 21, 2004, 11:34 PM25 */26 27 package com.kitfox.svg.animation;28 29 import com.kitfox.svg.xml.StyleAttribute;30 import java.awt.geom.*;31 import java.util.*;32 33 import com.kitfox.svg.*;34 import com.kitfox.svg.xml.*;35 36 /**37 * A track holds the animation events for a single parameter of a single SVG38 * element. It also contains the default value for the element, should the39 * user want to see the 'unanimated' value.40 *41 * @author Mark McKay42 * @author <a href="mailto:mark@kitfox.com">Mark McKay</a>43 */44 public class TrackTransform extends TrackBase45 {46 public TrackTransform(AnimationElement ele) throws SVGElementException47 {48 super(ele.getParent(), ele);49 }50 51 public boolean getValue(StyleAttribute attrib, double curTime) throws SVGException52 {53 AffineTransform retVal = new AffineTransform();54 retVal = getValue(retVal, curTime);55 // AffineTransform val = getValue(curTime);56 // if (val == null) return false;57 58 double[] mat = new double[6];59 retVal.getMatrix(mat);60 attrib.setStringValue("matrix(" + mat[0] + " " + mat[1] + " " + mat[2] + " " + mat[3] + " " + mat[4] + " " + mat[5] + ")");61 return true;62 }63 64 public AffineTransform getValue(AffineTransform retVal, double curTime) throws SVGException65 {66 //Init transform with default state67 StyleAttribute attr = null;68 switch (attribType)69 {70 case AnimationElement.AT_CSS:71 attr = parent.getStyleAbsolute(attribName);72 retVal.setTransform(SVGElement.parseSingleTransform(attr.getStringValue()));73 break;74 case AnimationElement.AT_XML:75 attr = parent.getPresAbsolute(attribName);76 retVal.setTransform(SVGElement.parseSingleTransform(attr.getStringValue()));77 break;78 case AnimationElement.AT_AUTO:79 attr = parent.getStyleAbsolute(attribName);80 if (attr == null) attr = parent.getPresAbsolute(attribName);81 retVal.setTransform(SVGElement.parseSingleTransform(attr.getStringValue()));82 break;83 }84 85 86 //Update transform with time based information87 AnimationTimeEval state = new AnimationTimeEval();88 AffineTransform xform = new AffineTransform();89 90 for (Iterator it = animEvents.iterator(); it.hasNext();)91 {92 AnimateXform ele = (AnimateXform)it.next();93 ele.evalParametric(state, curTime);94 95 //Go to next element if this one does not affect processing96 if (Double.isNaN(state.interp)) continue;97 98 switch (ele.getAdditiveType())99 {100 case AnimationElement.AD_SUM:101 retVal.concatenate(ele.eval(xform, state.interp));102 break;103 case AnimationElement.AD_REPLACE:104 retVal.setTransform(ele.eval(xform, state.interp));105 break;106 }107 108 }109 110 return retVal;111 }112 } -
src/com/kitfox/svg/SVGElement.java
old new 33 33 import java.awt.geom.*; 34 34 35 35 import org.xml.sax.*; 36 import com.kitfox.svg.animation.*;37 36 import com.kitfox.svg.pathcmd.*; 38 37 import com.kitfox.svg.xml.*; 39 38 import java.io.Serializable; … … 101 100 */ 102 101 // protected SVGUniverse universe; 103 102 104 protected final TrackManager trackManager = new TrackManager();105 106 103 boolean dirty = true; 107 104 108 105 // public static final Matcher adobeId = Pattern.compile("(.*)_1_").matcher(""); … … 268 265 } 269 266 } 270 267 271 public void addAttribute(String name, int attribType, String value) throws SVGElementException272 {273 if (hasAttribute(name, attribType)) throw new SVGElementException(this, "Attribute " + name + "(" + AnimationElement.animationElementToString(attribType) + ") already exists");274 275 //Alter layout for id attribute276 if ("id".equals(name) && diagram != null)277 {278 diagram.removeElement(this.id);279 this.id = name;280 diagram.setElement(this.id, this);281 }282 283 switch (attribType)284 {285 case AnimationElement.AT_CSS:286 inlineStyles.put(name, new StyleAttribute(name, value));287 return;288 case AnimationElement.AT_XML:289 presAttribs.put(name, new StyleAttribute(name, value));290 return;291 }292 293 throw new SVGElementException(this, "Invalid attribute type " + attribType);294 }295 296 public boolean hasAttribute(String name, int attribType) throws SVGElementException297 {298 switch (attribType)299 {300 case AnimationElement.AT_CSS:301 return inlineStyles.containsKey(name);302 case AnimationElement.AT_XML:303 return presAttribs.containsKey(name);304 case AnimationElement.AT_AUTO:305 return inlineStyles.containsKey(name) || presAttribs.containsKey(name);306 }307 308 throw new SVGElementException(this, "Invalid attribute type " + attribType);309 }310 311 268 /** 312 269 * @return a set of Strings that corespond to CSS attributes on this element 313 270 */ … … 333 290 children.add(child); 334 291 child.parent = this; 335 292 child.setDiagram(diagram); 336 337 //Add info to track if we've scanned animation element338 if (child instanceof AnimationElement)339 {340 trackManager.addTrackElement((AnimationElement)child);341 }342 293 } 343 294 344 295 private void setDiagram(SVGDiagram diagram) … … 457 408 return getStyle(attrib, true); 458 409 } 459 410 460 461 public void setAttribute(String name, int attribType, String value) throws SVGElementException462 {463 StyleAttribute styAttr;464 465 466 switch (attribType)467 {468 case AnimationElement.AT_CSS:469 {470 styAttr = (StyleAttribute)inlineStyles.get(name);471 break;472 }473 case AnimationElement.AT_XML:474 {475 styAttr = (StyleAttribute)presAttribs.get(name);476 break;477 }478 case AnimationElement.AT_AUTO:479 {480 styAttr = (StyleAttribute)inlineStyles.get(name);481 482 if (styAttr == null)483 {484 styAttr = (StyleAttribute)presAttribs.get(name);485 }486 break;487 }488 default:489 throw new SVGElementException(this, "Invalid attribute type " + attribType);490 }491 492 if (styAttr == null)493 {494 throw new SVGElementException(this, "Could not find attribute " + name + "(" + AnimationElement.animationElementToString(attribType) + "). Make sure to create attribute before setting it.");495 }496 497 //Alter layout for relevant attributes498 if ("id".equals(styAttr.getName()))499 {500 diagram.removeElement(this.id);501 this.id = name;502 diagram.setElement(this.id, this);503 }504 505 styAttr.setStringValue(value);506 }507 508 411 /** 509 412 * Copies the current style into the passed style attribute. Checks for 510 413 * inline styles first, then internal and extranal style sheets, and … … 524 427 525 428 attrib.setStringValue(styAttr == null ? "" : styAttr.getStringValue()); 526 429 527 //Evalutate coresponding track, if one exists528 TrackBase track = trackManager.getTrack(styName, AnimationElement.AT_CSS);529 if (track != null)530 {531 track.getValue(attrib, diagram.getUniverse().getCurTime());532 return true;533 }534 535 430 //Return if we've found a non animated style 536 431 if (styAttr != null) return true; 537 432 … … 544 439 545 440 attrib.setStringValue(presAttr == null ? "" : presAttr.getStringValue()); 546 441 547 //Evalutate coresponding track, if one exists548 track = trackManager.getTrack(styName, AnimationElement.AT_XML);549 if (track != null)550 {551 track.getValue(attrib, diagram.getUniverse().getCurTime());552 return true;553 }554 555 442 //Return if we've found a presentation attribute instead 556 443 if (presAttr != null) return true; 557 444 … … 593 480 //Copy presentation value directly 594 481 attrib.setStringValue(presAttr == null ? "" : presAttr.getStringValue()); 595 482 596 //Evalutate coresponding track, if one exists597 TrackBase track = trackManager.getTrack(presName, AnimationElement.AT_XML);598 if (track != null)599 {600 track.getValue(attrib, diagram.getUniverse().getCurTime());601 return true;602 }603 604 483 //Return if we found presentation attribute 605 484 if (presAttr != null) return true; 606 485 -
src/com/kitfox/svg/SVGLoader.java
old new 33 33 import org.xml.sax.*; 34 34 import org.xml.sax.helpers.DefaultHandler; 35 35 36 import com.kitfox.svg.animation.*;37 38 36 /** 39 37 * @author Mark McKay 40 38 * @author <a href="mailto:mark@kitfox.com">Mark McKay</a> … … 77 75 78 76 //Compile a list of important builder classes 79 77 nodeClasses.put("a", A.class); 80 nodeClasses.put("animate", Animate.class);81 nodeClasses.put("animatecolor", AnimateColor.class);82 nodeClasses.put("animatemotion", AnimateMotion.class);83 nodeClasses.put("animatetransform", AnimateTransform.class);84 78 nodeClasses.put("circle", Circle.class); 85 79 nodeClasses.put("clippath", ClipPath.class); 86 80 nodeClasses.put("defs", Defs.class); … … 104 98 nodeClasses.put("polyline", Polyline.class); 105 99 nodeClasses.put("radialgradient", RadialGradient.class); 106 100 nodeClasses.put("rect", Rect.class); 107 nodeClasses.put("set", SetSmil.class);108 101 nodeClasses.put("shape", ShapeElement.class); 109 102 nodeClasses.put("stop", Stop.class); 110 103 nodeClasses.put("style", Style.class); -
src/com/kitfox/svg/SVGLoaderHelper.java
old new 28 28 package com.kitfox.svg; 29 29 30 30 import java.net.*; 31 import java.io.*;32 33 import com.kitfox.svg.animation.parser.*;34 31 35 32 /** 36 33 * @author Mark McKay … … 50 47 51 48 public final URI xmlBase; 52 49 53 /**54 * Animate nodes use this to parse their time strings55 */56 public final AnimTimeParser animTimeParser = new AnimTimeParser(new StringReader(""));57 58 50 /** Creates a new instance of SVGLoaderHelper */ 59 51 public SVGLoaderHelper(URI xmlBase, SVGUniverse universe, SVGDiagram diagram) 60 52 { -
deleted file josm.orig/src/com/kitfox/svg/app/MainFrame.java
+ - 1 /*2 * MainFrame.java3 *4 * Created on September 6, 2004, 1:19 AM5 */6 7 package com.kitfox.svg.app;8 9 /**10 *11 * @author kitfox12 */13 public class MainFrame extends javax.swing.JFrame14 {15 public static final long serialVersionUID = 1;16 17 /** Creates new form MainFrame */18 public MainFrame()19 {20 initComponents();21 }22 23 /** This method is called from within the constructor to24 * initialize the form.25 * WARNING: Do NOT modify this code. The content of this method is26 * always regenerated by the Form Editor.27 */28 private void initComponents()//GEN-BEGIN:initComponents29 {30 jPanel1 = new javax.swing.JPanel();31 bn_svgViewer = new javax.swing.JButton();32 bn_svgViewer1 = new javax.swing.JButton();33 jPanel2 = new javax.swing.JPanel();34 bn_quit = new javax.swing.JButton();35 36 setTitle("SVG Salamander - Application Launcher");37 addWindowListener(new java.awt.event.WindowAdapter()38 {39 public void windowClosing(java.awt.event.WindowEvent evt)40 {41 exitForm(evt);42 }43 });44 45 jPanel1.setLayout(new javax.swing.BoxLayout(jPanel1, javax.swing.BoxLayout.Y_AXIS));46 47 bn_svgViewer.setText("SVG Viewer (No animation)");48 bn_svgViewer.addActionListener(new java.awt.event.ActionListener()49 {50 public void actionPerformed(java.awt.event.ActionEvent evt)51 {52 bn_svgViewerActionPerformed(evt);53 }54 });55 56 jPanel1.add(bn_svgViewer);57 58 bn_svgViewer1.setText("SVG Player (Animation)");59 bn_svgViewer1.addActionListener(new java.awt.event.ActionListener()60 {61 public void actionPerformed(java.awt.event.ActionEvent evt)62 {63 bn_svgViewer1ActionPerformed(evt);64 }65 });66 67 jPanel1.add(bn_svgViewer1);68 69 getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);70 71 bn_quit.setText("Quit");72 bn_quit.addActionListener(new java.awt.event.ActionListener()73 {74 public void actionPerformed(java.awt.event.ActionEvent evt)75 {76 bn_quitActionPerformed(evt);77 }78 });79 80 jPanel2.add(bn_quit);81 82 getContentPane().add(jPanel2, java.awt.BorderLayout.SOUTH);83 84 pack();85 }//GEN-END:initComponents86 87 private void bn_svgViewer1ActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_bn_svgViewer1ActionPerformed88 {//GEN-HEADEREND:event_bn_svgViewer1ActionPerformed89 SVGPlayer.main(null);90 91 close();92 }//GEN-LAST:event_bn_svgViewer1ActionPerformed93 94 private void bn_svgViewerActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_bn_svgViewerActionPerformed95 {//GEN-HEADEREND:event_bn_svgViewerActionPerformed96 SVGViewer.main(null);97 98 close();99 }//GEN-LAST:event_bn_svgViewerActionPerformed100 101 private void bn_quitActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_bn_quitActionPerformed102 {//GEN-HEADEREND:event_bn_quitActionPerformed103 exitForm(null);104 }//GEN-LAST:event_bn_quitActionPerformed105 106 /** Exit the Application */107 private void exitForm(java.awt.event.WindowEvent evt)//GEN-FIRST:event_exitForm108 {109 System.exit(0);110 }//GEN-LAST:event_exitForm111 112 private void close()113 {114 this.setVisible(false);115 this.dispose();116 }117 118 /**119 * @param args the command line arguments120 */121 public static void main(String args[])122 {123 new MainFrame().setVisible(true);124 }125 126 // Variables declaration - do not modify//GEN-BEGIN:variables127 private javax.swing.JButton bn_quit;128 private javax.swing.JButton bn_svgViewer;129 private javax.swing.JButton bn_svgViewer1;130 private javax.swing.JPanel jPanel1;131 private javax.swing.JPanel jPanel2;132 // End of variables declaration//GEN-END:variables133 134 } -
deleted file josm.orig/src/com/kitfox/svg/app/PlayerDialog.java
+ - 1 /*2 * PlayerDialog.java3 *4 *5 * The Salamander Project - 2D and 3D graphics libraries in Java6 * Copyright (C) 2004 Mark McKay7 *8 * This library is free software; you can redistribute it and/or9 * modify it under the terms of the GNU Lesser General Public10 * License as published by the Free Software Foundation; either11 * version 2.1 of the License, or (at your option) any later version.12 *13 * This library is distributed in the hope that it will be useful,14 * but WITHOUT ANY WARRANTY; without even the implied warranty of15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU16 * Lesser General Public License for more details.17 *18 * You should have received a copy of the GNU Lesser General Public19 * License along with this library; if not, write to the Free Software20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA21 *22 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other23 * projects can be found at http://www.kitfox.com24 *25 * Created on September 28, 2004, 9:56 PM26 */27 28 package com.kitfox.svg.app;29 30 /**31 *32 * @author kitfox33 */34 public class PlayerDialog extends javax.swing.JDialog implements PlayerThreadListener35 {36 public static final long serialVersionUID = 1;37 38 PlayerThread thread;39 40 final SVGPlayer parent;41 42 /** Creates new form PlayerDialog */43 public PlayerDialog(SVGPlayer parent)44 {45 super(parent, false);46 initComponents();47 48 this.parent = parent;49 50 thread = new PlayerThread();51 thread.addListener(this);52 53 text_timeStepActionPerformed(null);54 }55 56 public void updateTime(double curTime, double timeStep, int playState)57 {58 if (playState == PlayerThread.PS_STOP) return;59 60 text_curTime.setText("" + (float)curTime);61 parent.updateTime(curTime);62 // text_timeStep.setText("" + (int)(1.0 / timeStep));63 }64 65 /** This method is called from within the constructor to66 * initialize the form.67 * WARNING: Do NOT modify this code. The content of this method is68 * always regenerated by the Form Editor.69 */70 // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents71 private void initComponents()72 {73 jPanel1 = new javax.swing.JPanel();74 bn_playBack = new javax.swing.JButton();75 bn_stop = new javax.swing.JButton();76 bn_playFwd = new javax.swing.JButton();77 jPanel2 = new javax.swing.JPanel();78 jPanel3 = new javax.swing.JPanel();79 jLabel1 = new javax.swing.JLabel();80 text_curTime = new javax.swing.JTextField();81 bn_time0 = new javax.swing.JButton();82 jPanel4 = new javax.swing.JPanel();83 jLabel2 = new javax.swing.JLabel();84 text_timeStep = new javax.swing.JTextField();85 86 setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);87 setTitle("Player");88 addWindowListener(new java.awt.event.WindowAdapter()89 {90 public void windowClosed(java.awt.event.WindowEvent evt)91 {92 formWindowClosed(evt);93 }94 });95 96 bn_playBack.setText("<");97 bn_playBack.setToolTipText("Play backwards");98 bn_playBack.addActionListener(new java.awt.event.ActionListener()99 {100 public void actionPerformed(java.awt.event.ActionEvent evt)101 {102 bn_playBackActionPerformed(evt);103 }104 });105 106 jPanel1.add(bn_playBack);107 108 bn_stop.setText("||");109 bn_stop.setToolTipText("Stop playback");110 bn_stop.addActionListener(new java.awt.event.ActionListener()111 {112 public void actionPerformed(java.awt.event.ActionEvent evt)113 {114 bn_stopActionPerformed(evt);115 }116 });117 118 jPanel1.add(bn_stop);119 120 bn_playFwd.setText(">");121 bn_playFwd.setToolTipText("Play Forwards");122 bn_playFwd.addActionListener(new java.awt.event.ActionListener()123 {124 public void actionPerformed(java.awt.event.ActionEvent evt)125 {126 bn_playFwdActionPerformed(evt);127 }128 });129 130 jPanel1.add(bn_playFwd);131 132 getContentPane().add(jPanel1, java.awt.BorderLayout.NORTH);133 134 jPanel2.setLayout(new javax.swing.BoxLayout(jPanel2, javax.swing.BoxLayout.Y_AXIS));135 136 jLabel1.setText("Cur Time");137 jPanel3.add(jLabel1);138 139 text_curTime.setHorizontalAlignment(javax.swing.JTextField.LEFT);140 text_curTime.setText("0");141 text_curTime.setPreferredSize(new java.awt.Dimension(100, 21));142 text_curTime.addActionListener(new java.awt.event.ActionListener()143 {144 public void actionPerformed(java.awt.event.ActionEvent evt)145 {146 text_curTimeActionPerformed(evt);147 }148 });149 text_curTime.addFocusListener(new java.awt.event.FocusAdapter()150 {151 public void focusLost(java.awt.event.FocusEvent evt)152 {153 text_curTimeFocusLost(evt);154 }155 });156 157 jPanel3.add(text_curTime);158 159 bn_time0.setText("Time 0");160 bn_time0.setToolTipText("Reset time to first frame");161 bn_time0.addActionListener(new java.awt.event.ActionListener()162 {163 public void actionPerformed(java.awt.event.ActionEvent evt)164 {165 bn_time0ActionPerformed(evt);166 }167 });168 169 jPanel3.add(bn_time0);170 171 jPanel2.add(jPanel3);172 173 jLabel2.setText("Frames Per Second");174 jPanel4.add(jLabel2);175 176 text_timeStep.setHorizontalAlignment(javax.swing.JTextField.RIGHT);177 text_timeStep.setText("60");178 text_timeStep.setPreferredSize(new java.awt.Dimension(100, 21));179 text_timeStep.addActionListener(new java.awt.event.ActionListener()180 {181 public void actionPerformed(java.awt.event.ActionEvent evt)182 {183 text_timeStepActionPerformed(evt);184 }185 });186 text_timeStep.addFocusListener(new java.awt.event.FocusAdapter()187 {188 public void focusLost(java.awt.event.FocusEvent evt)189 {190 text_timeStepFocusLost(evt);191 }192 });193 194 jPanel4.add(text_timeStep);195 196 jPanel2.add(jPanel4);197 198 getContentPane().add(jPanel2, java.awt.BorderLayout.CENTER);199 200 pack();201 }// </editor-fold>//GEN-END:initComponents202 203 private void bn_time0ActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_bn_time0ActionPerformed204 {//GEN-HEADEREND:event_bn_time0ActionPerformed205 thread.setCurTime(0);206 }//GEN-LAST:event_bn_time0ActionPerformed207 208 private void bn_playFwdActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_bn_playFwdActionPerformed209 {//GEN-HEADEREND:event_bn_playFwdActionPerformed210 thread.setPlayState(PlayerThread.PS_PLAY_FWD);211 }//GEN-LAST:event_bn_playFwdActionPerformed212 213 private void bn_stopActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_bn_stopActionPerformed214 {//GEN-HEADEREND:event_bn_stopActionPerformed215 thread.setPlayState(PlayerThread.PS_STOP);216 }//GEN-LAST:event_bn_stopActionPerformed217 218 private void bn_playBackActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_bn_playBackActionPerformed219 {//GEN-HEADEREND:event_bn_playBackActionPerformed220 thread.setPlayState(PlayerThread.PS_PLAY_BACK);221 }//GEN-LAST:event_bn_playBackActionPerformed222 223 private void formWindowClosed(java.awt.event.WindowEvent evt)//GEN-FIRST:event_formWindowClosed224 {//GEN-HEADEREND:event_formWindowClosed225 // thread.exit();226 }//GEN-LAST:event_formWindowClosed227 228 private void text_timeStepFocusLost(java.awt.event.FocusEvent evt)//GEN-FIRST:event_text_timeStepFocusLost229 {//GEN-HEADEREND:event_text_timeStepFocusLost230 text_timeStepActionPerformed(null);231 }//GEN-LAST:event_text_timeStepFocusLost232 233 private void text_timeStepActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_text_timeStepActionPerformed234 {//GEN-HEADEREND:event_text_timeStepActionPerformed235 try236 {237 int val = Integer.parseInt(text_timeStep.getText());238 thread.setTimeStep(1.0 / val);239 }240 catch (Exception e)241 {242 }243 244 double d = thread.getTimeStep();245 String newStrn = "" + (int)(1f / d);246 if (newStrn.equals(text_timeStep.getText())) return;247 text_timeStep.setText(newStrn);248 249 // text_timeStepActionPerformed(null);250 }//GEN-LAST:event_text_timeStepActionPerformed251 252 private void text_curTimeActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_text_curTimeActionPerformed253 {//GEN-HEADEREND:event_text_curTimeActionPerformed254 try255 {256 double val = Double.parseDouble(text_curTime.getText());257 thread.setCurTime(val);258 }259 catch (Exception e)260 {261 }262 263 double d = thread.getCurTime();264 text_curTime.setText("" + (float)d);265 266 text_timeStepActionPerformed(null);267 }//GEN-LAST:event_text_curTimeActionPerformed268 269 private void text_curTimeFocusLost(java.awt.event.FocusEvent evt)//GEN-FIRST:event_text_curTimeFocusLost270 {//GEN-HEADEREND:event_text_curTimeFocusLost271 text_curTimeActionPerformed(null);272 }//GEN-LAST:event_text_curTimeFocusLost273 274 // Variables declaration - do not modify//GEN-BEGIN:variables275 private javax.swing.JButton bn_playBack;276 private javax.swing.JButton bn_playFwd;277 private javax.swing.JButton bn_stop;278 private javax.swing.JButton bn_time0;279 private javax.swing.JLabel jLabel1;280 private javax.swing.JLabel jLabel2;281 private javax.swing.JPanel jPanel1;282 private javax.swing.JPanel jPanel2;283 private javax.swing.JPanel jPanel3;284 private javax.swing.JPanel jPanel4;285 private javax.swing.JTextField text_curTime;286 private javax.swing.JTextField text_timeStep;287 // End of variables declaration//GEN-END:variables288 289 } -
deleted file josm.orig/src/com/kitfox/svg/app/PlayerThread.java
+ - 1 /*2 * PlayerThread.java3 *4 *5 * The Salamander Project - 2D and 3D graphics libraries in Java6 * Copyright (C) 2004 Mark McKay7 *8 * This library is free software; you can redistribute it and/or9 * modify it under the terms of the GNU Lesser General Public10 * License as published by the Free Software Foundation; either11 * version 2.1 of the License, or (at your option) any later version.12 *13 * This library is distributed in the hope that it will be useful,14 * but WITHOUT ANY WARRANTY; without even the implied warranty of15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU16 * Lesser General Public License for more details.17 *18 * You should have received a copy of the GNU Lesser General Public19 * License along with this library; if not, write to the Free Software20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA21 *22 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other23 * projects can be found at http://www.kitfox.com24 *25 * Created on September 28, 2004, 10:07 PM26 */27 28 29 package com.kitfox.svg.app;30 31 import java.util.*;32 33 /**34 *35 * @author kitfox36 */37 public class PlayerThread implements Runnable38 {39 HashSet listeners = new HashSet();40 41 double curTime = 0;42 double timeStep = .2;43 44 public static final int PS_STOP = 0;45 public static final int PS_PLAY_FWD = 1;46 public static final int PS_PLAY_BACK = 2;47 48 int playState = PS_STOP;49 50 Thread thread;51 52 /** Creates a new instance of PlayerThread */53 public PlayerThread()54 {55 thread = new Thread(this);56 thread.start();57 }58 59 public void run()60 {61 while (thread != null)62 {63 synchronized (this)64 {65 switch (playState)66 {67 case PS_PLAY_FWD:68 curTime += timeStep;69 break;70 case PS_PLAY_BACK:71 curTime -= timeStep;72 if (curTime < 0) curTime = 0;73 break;74 default:75 case PS_STOP:76 break;77 }78 79 fireTimeUpdateEvent();80 }81 82 try83 {84 Thread.sleep((long)(timeStep * 1000));85 }86 catch (Exception e)87 {88 throw new RuntimeException(e);89 }90 }91 }92 93 public void exit() { thread = null; }94 public synchronized void addListener(PlayerThreadListener listener)95 {96 listeners.add(listener);97 }98 99 public synchronized double getCurTime() { return curTime; }100 101 public synchronized void setCurTime(double time)102 {103 curTime = time;104 }105 106 public synchronized double getTimeStep() { return timeStep; }107 108 public synchronized void setTimeStep(double time)109 {110 timeStep = time;111 if (timeStep < .01) timeStep = .01;112 }113 114 public synchronized int getPlayState() { return playState; }115 116 public synchronized void setPlayState(int playState)117 {118 this.playState = playState;119 }120 121 private void fireTimeUpdateEvent()122 {123 for (Iterator it = listeners.iterator(); it.hasNext();)124 {125 PlayerThreadListener listener = (PlayerThreadListener)it.next();126 listener.updateTime(curTime, timeStep, playState);127 }128 }129 } -
deleted file josm.orig/src/com/kitfox/svg/app/PlayerThreadListener.java
+ - 1 /*2 * PlayerThreadListener.java3 *4 *5 * The Salamander Project - 2D and 3D graphics libraries in Java6 * Copyright (C) 2004 Mark McKay7 *8 * This library is free software; you can redistribute it and/or9 * modify it under the terms of the GNU Lesser General Public10 * License as published by the Free Software Foundation; either11 * version 2.1 of the License, or (at your option) any later version.12 *13 * This library is distributed in the hope that it will be useful,14 * but WITHOUT ANY WARRANTY; without even the implied warranty of15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU16 * Lesser General Public License for more details.17 *18 * You should have received a copy of the GNU Lesser General Public19 * License along with this library; if not, write to the Free Software20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA21 *22 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other23 * projects can be found at http://www.kitfox.com24 *25 * Created on September 28, 2004, 10:15 PM26 */27 28 package com.kitfox.svg.app;29 30 /**31 *32 * @author kitfox33 */34 public interface PlayerThreadListener35 {36 public void updateTime(double curTime, double timeStep, int playState);37 } -
deleted file josm.orig/src/com/kitfox/svg/app/SVGPlayer.java
+ - 1 /*2 * SVGViewer.java3 *4 *5 * The Salamander Project - 2D and 3D graphics libraries in Java6 * Copyright (C) 2004 Mark McKay7 *8 * This library is free software; you can redistribute it and/or9 * modify it under the terms of the GNU Lesser General Public10 * License as published by the Free Software Foundation; either11 * version 2.1 of the License, or (at your option) any later version.12 *13 * This library is distributed in the hope that it will be useful,14 * but WITHOUT ANY WARRANTY; without even the implied warranty of15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU16 * Lesser General Public License for more details.17 *18 * You should have received a copy of the GNU Lesser General Public19 * License along with this library; if not, write to the Free Software20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA21 *22 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other23 * projects can be found at http://www.kitfox.com24 *25 * Created on April 3, 2004, 5:28 PM26 */27 28 package com.kitfox.svg.app;29 30 31 import com.kitfox.svg.SVGDiagram;32 import com.kitfox.svg.SVGDisplayPanel;33 import com.kitfox.svg.SVGElement;34 import com.kitfox.svg.SVGException;35 import com.kitfox.svg.SVGUniverse;36 import java.awt.Color;37 import java.awt.event.MouseAdapter;38 import java.awt.event.MouseEvent;39 import java.awt.geom.Point2D;40 import java.io.File;41 import java.io.InputStream;42 import java.net.URI;43 import java.net.URL;44 import java.net.URLEncoder;45 import java.security.AccessControlException;46 import java.util.ArrayList;47 import java.util.List;48 import java.util.Vector;49 import java.util.regex.Matcher;50 import java.util.regex.Pattern;51 import javax.swing.JFileChooser;52 import javax.swing.JOptionPane;53 54 /**55 * @author Mark McKay56 * @author <a href="mailto:mark@kitfox.com">Mark McKay</a>57 */58 public class SVGPlayer extends javax.swing.JFrame59 {60 public static final long serialVersionUID = 1;61 62 SVGDisplayPanel svgDisplayPanel = new SVGDisplayPanel();63 64 final PlayerDialog playerDialog;65 66 SVGUniverse universe;67 68 /** FileChooser for running in trusted environments */69 final JFileChooser fileChooser;70 {71 // fileChooser = new JFileChooser(new File("."));72 JFileChooser fc = null;73 try74 {75 fc = new JFileChooser();76 fc.setFileFilter(77 new javax.swing.filechooser.FileFilter() {78 final Matcher matchLevelFile = Pattern.compile(".*\\.svg[z]?").matcher("");79 80 public boolean accept(File file)81 {82 if (file.isDirectory()) return true;83 84 matchLevelFile.reset(file.getName());85 return matchLevelFile.matches();86 }87 88 public String getDescription() { return "SVG file (*.svg, *.svgz)"; }89 }90 );91 }92 catch (AccessControlException ex)93 {94 //Do not create file chooser if webstart refuses permissions95 }96 fileChooser = fc;97 }98 99 /** Backup file service for opening files in WebStart situations */100 /*101 final FileOpenService fileOpenService;102 {103 try104 {105 fileOpenService = (FileOpenService)ServiceManager.lookup("javax.jnlp.FileOpenService");106 }107 catch (UnavailableServiceException e)108 {109 fileOpenService = null;110 }111 }112 */113 114 /** Creates new form SVGViewer */115 public SVGPlayer() {116 initComponents();117 118 setSize(800, 600);119 120 svgDisplayPanel.setBgColor(Color.white);121 svgDisplayPanel.addMouseListener(new MouseAdapter()122 {123 public void mouseClicked(MouseEvent evt)124 {125 SVGDiagram diagram = svgDisplayPanel.getDiagram();126 if (diagram == null) return;127 128 System.out.println("Picking at cursor (" + evt.getX() + ", " + evt.getY() + ")");129 try130 {131 List paths = diagram.pick(new Point2D.Float(evt.getX(), evt.getY()), null);132 for (int i = 0; i < paths.size(); i++)133 {134 ArrayList path = (ArrayList)paths.get(i);135 System.out.println(pathToString(path));136 }137 }138 catch (SVGException ex)139 {140 ex.printStackTrace();141 }142 }143 }144 );145 146 svgDisplayPanel.setPreferredSize(getSize());147 scrollPane_svgArea.setViewportView(svgDisplayPanel);148 149 playerDialog = new PlayerDialog(this);150 }151 152 private String pathToString(List path)153 {154 if (path.size() == 0) return "";155 156 StringBuffer sb = new StringBuffer();157 sb.append(path.get(0));158 for (int i = 1; i < path.size(); i++)159 {160 sb.append("/");161 sb.append(((SVGElement)path.get(i)).getId());162 }163 return sb.toString();164 }165 166 public void updateTime(double curTime)167 {168 try169 {170 if (universe != null)171 {172 universe.setCurTime(curTime);173 universe.updateTime();174 // svgDisplayPanel.updateTime(curTime);175 repaint();176 }177 }178 catch (Exception e)179 {180 e.printStackTrace();181 }182 }183 184 private void loadURL(URL url)185 {186 boolean verbose = cmCheck_verbose.isSelected();187 188 universe = new SVGUniverse();189 universe.setVerbose(verbose);190 SVGDiagram diagram = null;191 192 if (!CheckBoxMenuItem_anonInputStream.isSelected())193 {194 //Load from a disk with a valid URL195 URI uri = universe.loadSVG(url);196 197 if (verbose) System.err.println(uri.toString());198 199 diagram = universe.getDiagram(uri);200 }201 else202 {203 //Load from a stream with no particular valid URL204 try205 {206 InputStream is = url.openStream();207 URI uri = universe.loadSVG(is, "defaultName");208 209 if (verbose) System.err.println(uri.toString());210 211 diagram = universe.getDiagram(uri);212 }213 catch (Exception e)214 {215 e.printStackTrace();216 }217 }218 219 svgDisplayPanel.setDiagram(diagram);220 repaint();221 }222 223 /** This method is called from within the constructor to224 * initialize the form.225 * WARNING: Do NOT modify this code. The content of this method is226 * always regenerated by the Form Editor.227 */228 // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents229 private void initComponents()230 {231 scrollPane_svgArea = new javax.swing.JScrollPane();232 jMenuBar1 = new javax.swing.JMenuBar();233 menu_file = new javax.swing.JMenu();234 cm_loadFile = new javax.swing.JMenuItem();235 cm_loadUrl = new javax.swing.JMenuItem();236 menu_window = new javax.swing.JMenu();237 cm_player = new javax.swing.JMenuItem();238 jSeparator2 = new javax.swing.JSeparator();239 cm_800x600 = new javax.swing.JMenuItem();240 CheckBoxMenuItem_anonInputStream = new javax.swing.JCheckBoxMenuItem();241 cmCheck_verbose = new javax.swing.JCheckBoxMenuItem();242 menu_help = new javax.swing.JMenu();243 cm_about = new javax.swing.JMenuItem();244 245 setTitle("SVG Player - Salamander Project");246 addWindowListener(new java.awt.event.WindowAdapter()247 {248 public void windowClosing(java.awt.event.WindowEvent evt)249 {250 exitForm(evt);251 }252 });253 254 getContentPane().add(scrollPane_svgArea, java.awt.BorderLayout.CENTER);255 256 menu_file.setMnemonic('f');257 menu_file.setText("File");258 cm_loadFile.setMnemonic('l');259 cm_loadFile.setText("Load File...");260 cm_loadFile.addActionListener(new java.awt.event.ActionListener()261 {262 public void actionPerformed(java.awt.event.ActionEvent evt)263 {264 cm_loadFileActionPerformed(evt);265 }266 });267 268 menu_file.add(cm_loadFile);269 270 cm_loadUrl.setText("Load URL...");271 cm_loadUrl.addActionListener(new java.awt.event.ActionListener()272 {273 public void actionPerformed(java.awt.event.ActionEvent evt)274 {275 cm_loadUrlActionPerformed(evt);276 }277 });278 279 menu_file.add(cm_loadUrl);280 281 jMenuBar1.add(menu_file);282 283 menu_window.setText("Window");284 cm_player.setText("Player");285 cm_player.addActionListener(new java.awt.event.ActionListener()286 {287 public void actionPerformed(java.awt.event.ActionEvent evt)288 {289 cm_playerActionPerformed(evt);290 }291 });292 293 menu_window.add(cm_player);294 295 menu_window.add(jSeparator2);296 297 cm_800x600.setText("800 x 600");298 cm_800x600.addActionListener(new java.awt.event.ActionListener()299 {300 public void actionPerformed(java.awt.event.ActionEvent evt)301 {302 cm_800x600ActionPerformed(evt);303 }304 });305 306 menu_window.add(cm_800x600);307 308 CheckBoxMenuItem_anonInputStream.setText("Anonymous Input Stream");309 menu_window.add(CheckBoxMenuItem_anonInputStream);310 311 cmCheck_verbose.setText("Verbose");312 cmCheck_verbose.addActionListener(new java.awt.event.ActionListener()313 {314 public void actionPerformed(java.awt.event.ActionEvent evt)315 {316 cmCheck_verboseActionPerformed(evt);317 }318 });319 320 menu_window.add(cmCheck_verbose);321 322 jMenuBar1.add(menu_window);323 324 menu_help.setText("Help");325 cm_about.setText("About...");326 cm_about.addActionListener(new java.awt.event.ActionListener()327 {328 public void actionPerformed(java.awt.event.ActionEvent evt)329 {330 cm_aboutActionPerformed(evt);331 }332 });333 334 menu_help.add(cm_about);335 336 jMenuBar1.add(menu_help);337 338 setJMenuBar(jMenuBar1);339 340 pack();341 }// </editor-fold>//GEN-END:initComponents342 343 private void cm_loadUrlActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cm_loadUrlActionPerformed344 {//GEN-HEADEREND:event_cm_loadUrlActionPerformed345 String urlStrn = JOptionPane.showInputDialog(this, "Enter URL of SVG file");346 if (urlStrn == null) return;347 348 try349 {350 URL url = new URL(URLEncoder.encode(urlStrn, "UTF-8"));351 loadURL(url);352 }353 catch (Exception e)354 {355 e.printStackTrace();356 }357 358 }//GEN-LAST:event_cm_loadUrlActionPerformed359 360 private void cmCheck_verboseActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cmCheck_verboseActionPerformed361 {//GEN-HEADEREND:event_cmCheck_verboseActionPerformed362 // TODO add your handling code here:363 }//GEN-LAST:event_cmCheck_verboseActionPerformed364 365 private void cm_playerActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cm_playerActionPerformed366 {//GEN-HEADEREND:event_cm_playerActionPerformed367 playerDialog.setVisible(true);368 }//GEN-LAST:event_cm_playerActionPerformed369 370 private void cm_aboutActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cm_aboutActionPerformed371 {//GEN-HEADEREND:event_cm_aboutActionPerformed372 VersionDialog dia = new VersionDialog(this, true, cmCheck_verbose.isSelected());373 dia.setVisible(true);374 // JOptionPane.showMessageDialog(this, "Salamander SVG - Created by Mark McKay\nhttp://www.kitfox.com");375 }//GEN-LAST:event_cm_aboutActionPerformed376 377 private void cm_800x600ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cm_800x600ActionPerformed378 setSize(800, 600);379 }//GEN-LAST:event_cm_800x600ActionPerformed380 381 private void cm_loadFileActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cm_loadFileActionPerformed382 {//GEN-HEADEREND:event_cm_loadFileActionPerformed383 boolean verbose = cmCheck_verbose.isSelected();384 385 try386 {387 int retVal = fileChooser.showOpenDialog(this);388 if (retVal == JFileChooser.APPROVE_OPTION)389 {390 File chosenFile = fileChooser.getSelectedFile();391 392 URL url = chosenFile.toURI().toURL();393 394 loadURL(url);395 }396 }397 catch (Exception e)398 {399 e.printStackTrace();400 }401 402 }//GEN-LAST:event_cm_loadFileActionPerformed403 404 /** Exit the Application */405 private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm406 System.exit(0);407 }//GEN-LAST:event_exitForm408 409 /**410 * @param args the command line arguments411 */412 public static void main(String args[]) {413 new SVGPlayer().setVisible(true);414 }415 416 public void updateTime(double curTime, double timeStep, int playState)417 {418 }419 420 // Variables declaration - do not modify//GEN-BEGIN:variables421 private javax.swing.JCheckBoxMenuItem CheckBoxMenuItem_anonInputStream;422 private javax.swing.JCheckBoxMenuItem cmCheck_verbose;423 private javax.swing.JMenuItem cm_800x600;424 private javax.swing.JMenuItem cm_about;425 private javax.swing.JMenuItem cm_loadFile;426 private javax.swing.JMenuItem cm_loadUrl;427 private javax.swing.JMenuItem cm_player;428 private javax.swing.JMenuBar jMenuBar1;429 private javax.swing.JSeparator jSeparator2;430 private javax.swing.JMenu menu_file;431 private javax.swing.JMenu menu_help;432 private javax.swing.JMenu menu_window;433 private javax.swing.JScrollPane scrollPane_svgArea;434 // End of variables declaration//GEN-END:variables435 436 } -
deleted file josm.orig/src/com/kitfox/svg/app/SVGViewer.java
+ - 1 /*2 * SVGViewer.java3 *4 *5 * The Salamander Project - 2D and 3D graphics libraries in Java6 * Copyright (C) 2004 Mark McKay7 *8 * This library is free software; you can redistribute it and/or9 * modify it under the terms of the GNU Lesser General Public10 * License as published by the Free Software Foundation; either11 * version 2.1 of the License, or (at your option) any later version.12 *13 * This library is distributed in the hope that it will be useful,14 * but WITHOUT ANY WARRANTY; without even the implied warranty of15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU16 * Lesser General Public License for more details.17 *18 * You should have received a copy of the GNU Lesser General Public19 * License along with this library; if not, write to the Free Software20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA21 *22 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other23 * projects can be found at http://www.kitfox.com24 *25 * Created on April 3, 2004, 5:28 PM26 */27 28 package com.kitfox.svg.app;29 30 import com.kitfox.svg.SVGCache;31 import com.kitfox.svg.SVGDiagram;32 import com.kitfox.svg.SVGDisplayPanel;33 import com.kitfox.svg.SVGElement;34 import com.kitfox.svg.SVGException;35 import com.kitfox.svg.SVGUniverse;36 import java.awt.BorderLayout;37 import java.awt.Color;38 import java.awt.Point;39 import java.io.File;40 import java.io.InputStream;41 import java.net.URI;42 import java.net.URL;43 import java.net.URLEncoder;44 import java.security.AccessControlException;45 import java.util.ArrayList;46 import java.util.Iterator;47 import java.util.List;48 import java.util.regex.Matcher;49 import java.util.regex.Pattern;50 import javax.swing.JFileChooser;51 import javax.swing.JOptionPane;52 53 54 /**55 * @author Mark McKay56 * @author <a href="mailto:mark@kitfox.com">Mark McKay</a>57 */58 public class SVGViewer extends javax.swing.JFrame59 {60 public static final long serialVersionUID = 1;61 62 SVGDisplayPanel svgDisplayPanel = new SVGDisplayPanel();63 64 /** FileChooser for running in trusted environments */65 final JFileChooser fileChooser;66 {67 // fileChooser = new JFileChooser(new File("."));68 JFileChooser fc = null;69 try70 {71 fc = new JFileChooser();72 fc.setFileFilter(73 new javax.swing.filechooser.FileFilter() {74 final Matcher matchLevelFile = Pattern.compile(".*\\.svg[z]?").matcher("");75 76 public boolean accept(File file)77 {78 if (file.isDirectory()) return true;79 80 matchLevelFile.reset(file.getName());81 return matchLevelFile.matches();82 }83 84 public String getDescription() { return "SVG file (*.svg, *.svgz)"; }85 }86 );87 }88 catch (AccessControlException ex)89 {90 //Do not create file chooser if webstart refuses permissions91 }92 fileChooser = fc;93 }94 95 /** Backup file service for opening files in WebStart situations */96 /*97 final FileOpenService fileOpenService;98 {99 try100 {101 fileOpenService = (FileOpenService)ServiceManager.lookup("javax.jnlp.FileOpenService");102 }103 catch (UnavailableServiceException e)104 {105 fileOpenService = null;106 }107 }108 */109 110 /** Creates new form SVGViewer */111 public SVGViewer() {112 initComponents();113 114 setSize(800, 600);115 116 svgDisplayPanel.setBgColor(Color.white);117 118 svgDisplayPanel.setPreferredSize(getSize());119 panel_svgArea.add(svgDisplayPanel, BorderLayout.CENTER);120 // scrollPane_svgArea.setViewportView(svgDisplayPanel);121 }122 123 private void loadURL(URL url)124 {125 boolean verbose = cmCheck_verbose.isSelected();126 127 // SVGUniverse universe = new SVGUniverse();128 SVGUniverse universe = SVGCache.getSVGUniverse();129 SVGDiagram diagram = null;130 URI uri;131 132 if (!CheckBoxMenuItem_anonInputStream.isSelected())133 {134 //Load from a disk with a valid URL135 uri = universe.loadSVG(url);136 137 if (verbose) System.err.println("Loading document " + uri.toString());138 139 diagram = universe.getDiagram(uri);140 }141 else142 {143 //Load from a stream with no particular valid URL144 try145 {146 InputStream is = url.openStream();147 uri = universe.loadSVG(is, "defaultName");148 149 if (verbose) System.err.println("Loading document " + uri.toString());150 }151 catch (Exception e)152 {153 e.printStackTrace();154 return;155 }156 }157 /*158 ByteArrayOutputStream bs = new ByteArrayOutputStream();159 ObjectOutputStream os = new ObjectOutputStream(bs);160 os.writeObject(universe);161 os.close();162 163 ByteArrayInputStream bin = new ByteArrayInputStream(bs.toByteArray());164 ObjectInputStream is = new ObjectInputStream(bin);165 universe = (SVGUniverse)is.readObject();166 is.close();167 */168 169 diagram = universe.getDiagram(uri);170 171 svgDisplayPanel.setDiagram(diagram);172 repaint();173 }174 175 /** This method is called from within the constructor to176 * initialize the form.177 * WARNING: Do NOT modify this code. The content of this method is178 * always regenerated by the Form Editor.179 */180 // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents181 private void initComponents()182 {183 scrollPane_svgArea = new javax.swing.JScrollPane();184 panel_svgArea = new javax.swing.JPanel();185 jMenuBar1 = new javax.swing.JMenuBar();186 menu_file = new javax.swing.JMenu();187 cm_loadFile = new javax.swing.JMenuItem();188 cm_loadUrl = new javax.swing.JMenuItem();189 menu_window = new javax.swing.JMenu();190 cm_800x600 = new javax.swing.JMenuItem();191 CheckBoxMenuItem_anonInputStream = new javax.swing.JCheckBoxMenuItem();192 cmCheck_verbose = new javax.swing.JCheckBoxMenuItem();193 menu_help = new javax.swing.JMenu();194 cm_about = new javax.swing.JMenuItem();195 196 setTitle("SVG Viewer - Salamander Project");197 addWindowListener(new java.awt.event.WindowAdapter()198 {199 public void windowClosing(java.awt.event.WindowEvent evt)200 {201 exitForm(evt);202 }203 });204 205 panel_svgArea.setLayout(new java.awt.BorderLayout());206 207 panel_svgArea.addMouseListener(new java.awt.event.MouseAdapter()208 {209 public void mousePressed(java.awt.event.MouseEvent evt)210 {211 panel_svgAreaMousePressed(evt);212 }213 public void mouseReleased(java.awt.event.MouseEvent evt)214 {215 panel_svgAreaMouseReleased(evt);216 }217 });218 219 scrollPane_svgArea.setViewportView(panel_svgArea);220 221 getContentPane().add(scrollPane_svgArea, java.awt.BorderLayout.CENTER);222 223 menu_file.setMnemonic('f');224 menu_file.setText("File");225 cm_loadFile.setMnemonic('l');226 cm_loadFile.setText("Load File...");227 cm_loadFile.addActionListener(new java.awt.event.ActionListener()228 {229 public void actionPerformed(java.awt.event.ActionEvent evt)230 {231 cm_loadFileActionPerformed(evt);232 }233 });234 235 menu_file.add(cm_loadFile);236 237 cm_loadUrl.setText("Load URL...");238 cm_loadUrl.addActionListener(new java.awt.event.ActionListener()239 {240 public void actionPerformed(java.awt.event.ActionEvent evt)241 {242 cm_loadUrlActionPerformed(evt);243 }244 });245 246 menu_file.add(cm_loadUrl);247 248 jMenuBar1.add(menu_file);249 250 menu_window.setText("Window");251 cm_800x600.setText("800 x 600");252 cm_800x600.addActionListener(new java.awt.event.ActionListener()253 {254 public void actionPerformed(java.awt.event.ActionEvent evt)255 {256 cm_800x600ActionPerformed(evt);257 }258 });259 260 menu_window.add(cm_800x600);261 262 CheckBoxMenuItem_anonInputStream.setText("Anonymous Input Stream");263 menu_window.add(CheckBoxMenuItem_anonInputStream);264 265 cmCheck_verbose.setText("Verbose");266 cmCheck_verbose.addActionListener(new java.awt.event.ActionListener()267 {268 public void actionPerformed(java.awt.event.ActionEvent evt)269 {270 cmCheck_verboseActionPerformed(evt);271 }272 });273 274 menu_window.add(cmCheck_verbose);275 276 jMenuBar1.add(menu_window);277 278 menu_help.setText("Help");279 cm_about.setText("About...");280 cm_about.addActionListener(new java.awt.event.ActionListener()281 {282 public void actionPerformed(java.awt.event.ActionEvent evt)283 {284 cm_aboutActionPerformed(evt);285 }286 });287 288 menu_help.add(cm_about);289 290 jMenuBar1.add(menu_help);291 292 setJMenuBar(jMenuBar1);293 294 pack();295 }// </editor-fold>//GEN-END:initComponents296 297 private void cm_loadUrlActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cm_loadUrlActionPerformed298 {//GEN-HEADEREND:event_cm_loadUrlActionPerformed299 String urlStrn = JOptionPane.showInputDialog(this, "Enter URL of SVG file");300 if (urlStrn == null) return;301 302 try303 {304 URL url = new URL(URLEncoder.encode(urlStrn, "UTF-8"));305 loadURL(url);306 }307 catch (Exception e)308 {309 e.printStackTrace();310 }311 312 }//GEN-LAST:event_cm_loadUrlActionPerformed313 314 private void panel_svgAreaMouseReleased(java.awt.event.MouseEvent evt)//GEN-FIRST:event_panel_svgAreaMouseReleased315 {//GEN-HEADEREND:event_panel_svgAreaMouseReleased316 SVGDiagram diagram = svgDisplayPanel.getDiagram();317 List pickedElements;318 try319 {320 pickedElements = diagram.pick(new Point(evt.getX(), evt.getY()), null);321 }322 catch (SVGException ex)323 {324 ex.printStackTrace();325 return;326 }327 328 System.out.println("Pick results:");329 for (Iterator it = pickedElements.iterator(); it.hasNext();)330 {331 ArrayList path = (ArrayList)it.next();332 333 System.out.print(" Path: ");334 335 for (Iterator it2 = path.iterator(); it2.hasNext();)336 {337 SVGElement ele = (SVGElement)it2.next();338 339 System.out.print("" + ele.getId() + "(" + ele.getClass().getName() + ") ");340 }341 System.out.println();342 }343 }//GEN-LAST:event_panel_svgAreaMouseReleased344 345 private void panel_svgAreaMousePressed(java.awt.event.MouseEvent evt)//GEN-FIRST:event_panel_svgAreaMousePressed346 {//GEN-HEADEREND:event_panel_svgAreaMousePressed347 348 }//GEN-LAST:event_panel_svgAreaMousePressed349 350 private void cmCheck_verboseActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cmCheck_verboseActionPerformed351 {//GEN-HEADEREND:event_cmCheck_verboseActionPerformed352 SVGCache.getSVGUniverse().setVerbose(cmCheck_verbose.isSelected());353 }//GEN-LAST:event_cmCheck_verboseActionPerformed354 355 private void cm_aboutActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cm_aboutActionPerformed356 {//GEN-HEADEREND:event_cm_aboutActionPerformed357 //JOptionPane.showMessageDialog(this, "Salamander SVG - Created by Mark McKay\nhttp://www.kitfox.com");358 VersionDialog dlg = new VersionDialog(this, true, cmCheck_verbose.isSelected());359 dlg.setVisible(true);360 }//GEN-LAST:event_cm_aboutActionPerformed361 362 private void cm_800x600ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cm_800x600ActionPerformed363 setSize(800, 600);364 }//GEN-LAST:event_cm_800x600ActionPerformed365 366 private void cm_loadFileActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cm_loadFileActionPerformed367 {//GEN-HEADEREND:event_cm_loadFileActionPerformed368 try369 {370 int retVal = fileChooser.showOpenDialog(this);371 if (retVal == JFileChooser.APPROVE_OPTION)372 {373 File chosenFile = fileChooser.getSelectedFile();374 375 URL url = chosenFile.toURI().toURL();376 377 loadURL(url);378 }379 }380 /*381 catch (IOException ioe)382 {383 try384 {385 //We may be in a WebStart app. Try again with a FileOpenService386 FileContents fc = fileOpenService.openFileDialog(null, new String[]{"svg"});387 InputStream is = fc.getInputStream();388 String name = fc.getName();389 }390 catch (Exception e)391 {392 e.printStackTrace();393 }394 }395 */396 catch (Exception e)397 {398 e.printStackTrace();399 }400 401 }//GEN-LAST:event_cm_loadFileActionPerformed402 403 /** Exit the Application */404 private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm405 // setVisible(false);406 // dispose();407 System.exit(0);408 }//GEN-LAST:event_exitForm409 410 /**411 * @param args the command line arguments412 */413 public static void main(String args[]) {414 new SVGViewer().setVisible(true);415 }416 417 // Variables declaration - do not modify//GEN-BEGIN:variables418 private javax.swing.JCheckBoxMenuItem CheckBoxMenuItem_anonInputStream;419 private javax.swing.JCheckBoxMenuItem cmCheck_verbose;420 private javax.swing.JMenuItem cm_800x600;421 private javax.swing.JMenuItem cm_about;422 private javax.swing.JMenuItem cm_loadFile;423 private javax.swing.JMenuItem cm_loadUrl;424 private javax.swing.JMenuBar jMenuBar1;425 private javax.swing.JMenu menu_file;426 private javax.swing.JMenu menu_help;427 private javax.swing.JMenu menu_window;428 private javax.swing.JPanel panel_svgArea;429 private javax.swing.JScrollPane scrollPane_svgArea;430 // End of variables declaration//GEN-END:variables431 432 } -
deleted file josm.orig/src/com/kitfox/svg/app/VersionDialog.java
+ - 1 /*2 * VersionDialog.java3 *4 *5 * The Salamander Project - 2D and 3D graphics libraries in Java6 * Copyright (C) 2004 Mark McKay7 *8 * This library is free software; you can redistribute it and/or9 * modify it under the terms of the GNU Lesser General Public10 * License as published by the Free Software Foundation; either11 * version 2.1 of the License, or (at your option) any later version.12 *13 * This library is distributed in the hope that it will be useful,14 * but WITHOUT ANY WARRANTY; without even the implied warranty of15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU16 * Lesser General Public License for more details.17 *18 * You should have received a copy of the GNU Lesser General Public19 * License along with this library; if not, write to the Free Software20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA21 *22 * Mark McKay can be contacted at mark@kitfox.com. Salamander and other23 * projects can be found at http://www.kitfox.com24 *25 * Created on January 13, 2005, 7:23 AM26 */27 28 package com.kitfox.svg.app;29 30 import java.net.*;31 import java.io.*;32 import java.util.*;33 import javax.swing.event.*;34 import javax.swing.*;35 import javax.swing.text.html.*;36 37 38 /**39 *40 * @author kitfox41 */42 public class VersionDialog extends javax.swing.JDialog43 {44 public static final long serialVersionUID = 1;45 46 final boolean verbose;47 48 /** Creates new form VersionDialog */49 public VersionDialog(java.awt.Frame parent, boolean modal, boolean verbose)50 {51 super(parent, modal);52 initComponents();53 54 this.verbose = verbose;55 56 textpane_text.setContentType("text/html");57 58 StringBuffer sb = new StringBuffer();59 try60 {61 URL url = getClass().getResource("/res/help/about/about.html");62 if (verbose)63 {64 System.err.println("" + getClass() + " trying to load about html " + url);65 }66 67 BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));68 while (true)69 {70 String line = reader.readLine();71 if (line == null) break;72 sb.append(line);73 }74 75 textpane_text.setText(sb.toString());76 }77 catch (Exception e)78 {79 e.printStackTrace();80 }81 82 }83 84 /** This method is called from within the constructor to85 * initialize the form.86 * WARNING: Do NOT modify this code. The content of this method is87 * always regenerated by the Form Editor.88 */89 // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents90 private void initComponents()91 {92 jPanel1 = new javax.swing.JPanel();93 textpane_text = new javax.swing.JTextPane();94 jPanel2 = new javax.swing.JPanel();95 bn_close = new javax.swing.JButton();96 97 setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);98 setTitle("About SVG Salamander");99 jPanel1.setLayout(new java.awt.BorderLayout());100 101 textpane_text.setEditable(false);102 textpane_text.setPreferredSize(new java.awt.Dimension(400, 300));103 jPanel1.add(textpane_text, java.awt.BorderLayout.CENTER);104 105 getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);106 107 bn_close.setText("Close");108 bn_close.addActionListener(new java.awt.event.ActionListener()109 {110 public void actionPerformed(java.awt.event.ActionEvent evt)111 {112 bn_closeActionPerformed(evt);113 }114 });115 116 jPanel2.add(bn_close);117 118 getContentPane().add(jPanel2, java.awt.BorderLayout.SOUTH);119 120 pack();121 }122 // </editor-fold>//GEN-END:initComponents123 124 private void bn_closeActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_bn_closeActionPerformed125 {//GEN-HEADEREND:event_bn_closeActionPerformed126 setVisible(false);127 dispose();128 }//GEN-LAST:event_bn_closeActionPerformed129 130 /**131 * @param args the command line arguments132 */133 public static void main(String args[])134 {135 java.awt.EventQueue.invokeLater(new Runnable()136 {137 public void run()138 {139 new VersionDialog(new javax.swing.JFrame(), true, true).setVisible(true);140 }141 });142 }143 144 // Variables declaration - do not modify//GEN-BEGIN:variables145 private javax.swing.JButton bn_close;146 private javax.swing.JPanel jPanel1;147 private javax.swing.JPanel jPanel2;148 private javax.swing.JTextPane textpane_text;149 // End of variables declaration//GEN-END:variables150 151 } -
deleted file josm.orig/src/com/kitfox/svg/app/ant/SVGToImageAntTask.java
+ - 1 /*2 * IndexLoadObjectsAntTask.java3 *4 * Created on January 22, 2005, 10:30 AM5 */6 7 package com.kitfox.svg.app.ant;8 9 import java.awt.*;10 import java.awt.image.*;11 import java.util.*;12 import java.util.regex.*;13 import java.io.*;14 import javax.imageio.*;15 16 //import com.kitfox.util.*;17 //import com.kitfox.util.indexedObject.*;18 19 import org.apache.tools.ant.*;20 import org.apache.tools.ant.types.*;21 22 import com.kitfox.svg.app.beans.*;23 import com.kitfox.svg.*;24 import com.kitfox.svg.xml.ColorTable;25 26 /**27 * <p>Translates a group of SVG files into images.</p>28 *29 * <p>Parameters:</p>30 * <p><ul>31 * <li/>destDir - If present, specifices a directory to write SVG files to. Otherwise32 * writes images to directory SVG file was found in33 * verbose - If true, prints processing information to the console34 * <li/>format - File format for output images. The java core javax.imageio.ImageIO35 * class is used for creating images, so format strings will depend on what36 * files your system is configured to handle. By default, "gif", "jpg" and "png"37 * files are guaranteed to be present. If omitted, "png" is used by default.38 * <li/>backgroundColor - Optional background color. Color can be specified as a standard39 * HTML color. That is, as the name of a standard color such as "blue" or40 * "limegreen", using the # notaion as in #ff00ff for magenta, or in rgb format41 * listing the components as in rgb(255, 192, 192) for pink. If omitted,42 * background is transparent.43 * <li/>antiAlias - If set, shapes are drawn using antialiasing. Defaults to true.44 * <li/>interpolation - String describing image interpolation alrogithm. Can45 * be one of "nearest neighbor", "bilinear" or "bicubic". Defaults to "bicubic".46 * <li/>width - If greater than 0, determines the width of the written image. Otherwise,47 * the width is obtained from the SVG document. Defaults to -1;48 * <li/>height - If greater than 0, determines the height of the written image. Otherwise,49 * the height is obtained from the SVG document. Defaults to -1.50 * <li/>sizeToFit - If true and the width and height of the output image differ51 * from that of the SVG image, the valid area of the SVG image will be resized52 * to fit the specified size.53 * <li/>verbose - IF true, prints out diagnostic infromation about processing.54 * Defaults to false.55 * </ul></p>56 *57 * Example:58 * <SVGToImage destDir="${index.java}" format="jpg" verbose="true">59 * <fileset dir="${dir1}">60 * <include name="*.svg"/>61 * </fileset>62 * <fileset dir="${dir2}">63 * <include name="*.svg"/>64 * </fileset>65 * </SVGToImage>66 *67 *68 *69 * @author kitfox70 */71 public class SVGToImageAntTask extends Task72 {73 private ArrayList filesets = new ArrayList();74 boolean verbose = false;75 File destDir;76 private String format = "png";77 Color backgroundColor = null;78 int width = -1;79 int height = -1;80 boolean antiAlias = true;81 String interpolation = "bicubic";82 boolean clipToViewBox = false;83 boolean sizeToFit = true;84 85 /** Creates a new instance of IndexLoadObjectsAntTask */86 public SVGToImageAntTask()87 {88 }89 90 91 public String getFormat()92 {93 return format;94 }95 96 public void setFormat(String format)97 {98 this.format = format;99 }100 101 public void setBackgroundColor(String bgColor)102 {103 this.backgroundColor = ColorTable.parseColor(bgColor);104 }105 106 public void setHeight(int height)107 {108 this.height = height;109 }110 111 public void setWidth(int width)112 {113 this.width = width;114 }115 116 public void setAntiAlias(boolean antiAlias)117 {118 this.antiAlias = antiAlias;119 }120 121 public void setInterpolation(String interpolation)122 {123 this.interpolation = interpolation;124 }125 126 public void setSizeToFit(boolean sizeToFit)127 {128 this.sizeToFit = sizeToFit;129 }130 131 public void setClipToViewBox(boolean clipToViewBox)132 {133 this.clipToViewBox = clipToViewBox;134 }135 136 public void setVerbose(boolean verbose)137 {138 this.verbose = verbose;139 }140 141 public void setDestDir(File destDir)142 {143 this.destDir = destDir;144 }145 146 /**147 * Adds a set of files.148 */149 public void addFileset(FileSet set)150 {151 filesets.add(set);152 }153 154 155 156 public void execute()157 {158 if (verbose) log("Building SVG images");159 160 for (Iterator it = filesets.iterator(); it.hasNext();)161 {162 FileSet fs = (FileSet)it.next();163 FileScanner scanner = fs.getDirectoryScanner(getProject());164 String[] files = scanner.getIncludedFiles();165 166 try167 {168 File basedir = scanner.getBasedir();169 170 if (verbose) log("Scaning " + basedir);171 172 for (int i = 0; i < files.length; i++)173 {174 //System.out.println("File " + files[i]);175 //System.out.println("BaseDir " + basedir);176 translate(basedir, files[i]);177 }178 }179 catch (Exception e)180 {181 throw new BuildException(e);182 }183 }184 }185 186 private void translate(File baseDir, String shortName) throws BuildException187 {188 File source = new File(baseDir, shortName);189 190 if (verbose) log("Reading file: " + source);191 192 Matcher matchName = Pattern.compile("(.*)\\.svg", Pattern.CASE_INSENSITIVE).matcher(shortName);193 if (matchName.matches())194 {195 shortName = matchName.group(1);196 }197 shortName += "." + format;198 199 SVGIcon icon = new SVGIcon();200 icon.setSvgURI(source.toURI());201 icon.setAntiAlias(antiAlias);202 if (interpolation.equals("nearest neighbor"))203 {204 icon.setInterpolation(SVGIcon.INTERP_NEAREST_NEIGHBOR);205 }206 else if (interpolation.equals("bilinear"))207 {208 icon.setInterpolation(SVGIcon.INTERP_BILINEAR);209 }210 else if (interpolation.equals("bicubic"))211 {212 icon.setInterpolation(SVGIcon.INTERP_BICUBIC);213 }214 215 int iconWidth = width > 0 ? width : icon.getIconWidth();216 int iconHeight = height > 0 ? height : icon.getIconHeight();217 icon.setClipToViewbox(clipToViewBox);218 icon.setPreferredSize(new Dimension(iconWidth, iconHeight));219 icon.setScaleToFit(sizeToFit);220 BufferedImage image = new BufferedImage(iconWidth, iconHeight, BufferedImage.TYPE_INT_ARGB);221 Graphics2D g = image.createGraphics();222 223 if (backgroundColor != null)224 {225 g.setColor(backgroundColor);226 g.fillRect(0, 0, iconWidth, iconHeight);227 }228 229 g.setClip(0, 0, iconWidth, iconHeight);230 // g.fillRect(10, 10, 100, 100);231 icon.paintIcon(null, g, 0, 0);232 g.dispose();233 234 File outFile = destDir == null ? new File(baseDir, shortName) : new File(destDir, shortName);235 if (verbose) log("Writing file: " + outFile);236 237 try238 {239 ImageIO.write(image, format, outFile);240 }241 catch (IOException e)242 {243 log("Error writing image: " + e.getMessage());244 throw new BuildException(e);245 }246 247 248 SVGCache.getSVGUniverse().clear();249 }250 251 } -
deleted file josm.orig/src/com/kitfox/svg/app/beans/ProportionalLayoutPanel.java
+ - 1 /*2 * ProportionalLayoutPanel.java3 *4 * Created on May 7, 2005, 4:15 AM5 */6 7 package com.kitfox.svg.app.beans;8 9 import java.awt.*;10 import java.util.*;11 import javax.swing.*;12 13 /**14 * Panel based on the null layout. Allows editing with absolute layout. When15 * instanced, records layout dimensions of all subcomponents. Then, if the16 * panel is ever resized, scales all children to fit new size.17 *18 * @author kitfox19 */20 public class ProportionalLayoutPanel extends javax.swing.JPanel21 {22 public static final long serialVersionUID = 1;23 24 //Margins to leave on sides of panel, expressed in fractions [0 1]25 float topMargin;26 float bottomMargin;27 float leftMargin;28 float rightMargin;29 30 /** Creates new form ProportionalLayoutPanel */31 public ProportionalLayoutPanel()32 {33 initComponents();34 }35 36 public void addNotify()37 {38 super.addNotify();39 40 Rectangle rect = this.getBounds();41 JOptionPane.showMessageDialog(this, "" + rect);42 }43 44 45 /** This method is called from within the constructor to46 * initialize the form.47 * WARNING: Do NOT modify this code. The content of this method is48 * always regenerated by the Form Editor.49 */50 // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents51 private void initComponents()52 {53 jPanel1 = new javax.swing.JPanel();54 55 setLayout(null);56 57 addComponentListener(new java.awt.event.ComponentAdapter()58 {59 public void componentResized(java.awt.event.ComponentEvent evt)60 {61 formComponentResized(evt);62 }63 public void componentShown(java.awt.event.ComponentEvent evt)64 {65 formComponentShown(evt);66 }67 });68 69 add(jPanel1);70 jPanel1.setBounds(80, 90, 280, 160);71 72 }73 // </editor-fold>//GEN-END:initComponents74 75 private void formComponentShown(java.awt.event.ComponentEvent evt)//GEN-FIRST:event_formComponentShown76 {//GEN-HEADEREND:event_formComponentShown77 JOptionPane.showMessageDialog(this, "" + getWidth() + ", " + getHeight());78 79 }//GEN-LAST:event_formComponentShown80 81 private void formComponentResized(java.awt.event.ComponentEvent evt)//GEN-FIRST:event_formComponentResized82 {//GEN-HEADEREND:event_formComponentResized83 // TODO add your handling code here:84 }//GEN-LAST:event_formComponentResized85 86 87 // Variables declaration - do not modify//GEN-BEGIN:variables88 private javax.swing.JPanel jPanel1;89 // End of variables declaration//GEN-END:variables90 91 } -
deleted file josm.orig/src/com/kitfox/svg/app/beans/SVGPanel.java
+ - 1 /*2 * SVGIcon.java3 *4 * Created on April 21, 2005, 10:43 AM5 */6 7 package com.kitfox.svg.app.beans;8 9 import javax.swing.*;10 import java.awt.*;11 import java.awt.geom.*;12 import java.net.*;13 import java.beans.*;14 15 import com.kitfox.svg.*;16 17 /**18 *19 * @author kitfox20 */21 public class SVGPanel extends JPanel22 {23 public static final long serialVersionUID = 1;24 25 26 SVGUniverse svgUniverse = SVGCache.getSVGUniverse();27 28 private boolean antiAlias;29 30 // private String svgPath;31 URI svgURI;32 33 private boolean scaleToFit;34 AffineTransform scaleXform = new AffineTransform();35 36 /** Creates new form SVGIcon */37 public SVGPanel()38 {39 initComponents();40 }41 42 public int getSVGHeight()43 {44 if (scaleToFit) return getPreferredSize().height;45 46 SVGDiagram diagram = svgUniverse.getDiagram(svgURI);47 if (diagram == null) return 0;48 return (int)diagram.getHeight();49 }50 51 public int getSVGWidth()52 {53 if (scaleToFit) return getPreferredSize().width;54 55 SVGDiagram diagram = svgUniverse.getDiagram(svgURI);56 if (diagram == null) return 0;57 return (int)diagram.getWidth();58 }59 60 // Draw the icon at the specified location.61 public void paintComponent(Graphics gg)62 {63 super.paintComponent(gg);64 65 Graphics2D g = (Graphics2D)gg;66 67 Object oldAliasHint = g.getRenderingHint(RenderingHints.KEY_ANTIALIASING);68 g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, antiAlias ? RenderingHints.VALUE_ANTIALIAS_ON : RenderingHints.VALUE_ANTIALIAS_OFF);69 70 71 SVGDiagram diagram = svgUniverse.getDiagram(svgURI);72 if (diagram == null) return;73 74 if (!scaleToFit)75 {76 try77 {78 diagram.render(g);79 g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, oldAliasHint);80 }81 catch (SVGException e)82 {83 throw new RuntimeException(e);84 }85 return;86 }87 88 Dimension dim = getSize();89 final int width = dim.width;90 final int height = dim.height;91 // int width = getWidth();92 // int height = getHeight();93 94 // if (width == 0 || height == 0)95 // {96 // //Chances are we're rendering offscreen97 // Dimension dim = getSize();98 // width = dim.width;99 // height = dim.height;100 // return;101 // }102 103 // g.setClip(0, 0, dim.width, dim.height);104 105 106 final Rectangle2D.Double rect = new Rectangle2D.Double();107 diagram.getViewRect(rect);108 109 scaleXform.setToScale(width / rect.width, height / rect.height);110 111 AffineTransform oldXform = g.getTransform();112 g.transform(scaleXform);113 114 try115 {116 diagram.render(g);117 }118 catch (SVGException e)119 {120 throw new RuntimeException(e);121 }122 123 g.setTransform(oldXform);124 125 g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, oldAliasHint);126 }127 128 public SVGUniverse getSvgUniverse()129 {130 return svgUniverse;131 }132 133 public void setSvgUniverse(SVGUniverse svgUniverse)134 {135 SVGUniverse old = this.svgUniverse;136 this.svgUniverse = svgUniverse;137 firePropertyChange("svgUniverse", old, svgUniverse);138 }139 140 public URI getSvgURI()141 {142 return svgURI;143 }144 145 public void setSvgURI(URI svgURI)146 {147 URI old = this.svgURI;148 this.svgURI = svgURI;149 firePropertyChange("svgURI", old, svgURI);150 }151 152 /**153 * Most resources your component will want to access will be resources on your classpath.154 * This method will interpret the passed string as a path in the classpath and use155 * Class.getResource() to determine the URI of the SVG.156 */157 public void setSvgResourcePath(String resourcePath) throws SVGException158 {159 URI old = this.svgURI;160 161 try162 {163 svgURI = new URI(getClass().getResource(resourcePath).toString());164 //System.err.println("SVGPanel: new URI " + svgURI + " from path " + resourcePath);165 166 firePropertyChange("svgURI", old, svgURI);167 168 repaint();169 }170 catch (Exception e)171 {172 throw new SVGException("Could not resolve path " + resourcePath, e);173 // svgURI = old;174 }175 }176 177 public boolean isScaleToFit()178 {179 return scaleToFit;180 }181 182 public void setScaleToFit(boolean scaleToFit)183 {184 boolean old = this.scaleToFit;185 this.scaleToFit = scaleToFit;186 firePropertyChange("scaleToFit", old, scaleToFit);187 }188 189 /**190 * @return true if antiAliasing is turned on.191 * @deprecated192 */193 public boolean getUseAntiAlias()194 {195 return getAntiAlias();196 }197 198 /**199 * @param antiAlias true to use antiAliasing.200 * @deprecated201 */202 public void setUseAntiAlias(boolean antiAlias)203 {204 setAntiAlias(antiAlias);205 }206 207 /**208 * @return true if antiAliasing is turned on.209 */210 public boolean getAntiAlias()211 {212 return antiAlias;213 }214 215 /**216 * @param antiAlias true to use antiAliasing.217 */218 public void setAntiAlias(boolean antiAlias)219 {220 boolean old = this.antiAlias;221 this.antiAlias = antiAlias;222 firePropertyChange("antiAlias", old, antiAlias);223 }224 225 /** This method is called from within the constructor to226 * initialize the form.227 * WARNING: Do NOT modify this code. The content of this method is228 * always regenerated by the Form Editor.229 */230 // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents231 private void initComponents()232 {233 234 setLayout(new java.awt.BorderLayout());235 236 }237 // </editor-fold>//GEN-END:initComponents238 239 240 // Variables declaration - do not modify//GEN-BEGIN:variables241 // End of variables declaration//GEN-END:variables242 243 } -
deleted file josm.orig/src/com/kitfox/svg/app/data/HandlerFactory.java
+ - 1 /*2 * To change this template, choose Tools | Templates3 * and open the template in the editor.4 */5 6 package com.kitfox.svg.app.data;7 8 import java.net.URLStreamHandler;9 import java.net.URLStreamHandlerFactory;10 11 /**12 *13 * @author kitfox14 */15 public class HandlerFactory implements URLStreamHandlerFactory16 {17 static Handler handler = new Handler();18 19 public URLStreamHandler createURLStreamHandler(String protocol)20 {21 if ("data".equals(protocol))22 {23 return handler;24 }25 return null;26 }27 }
Note:
See TracBrowser
for help on using the repository browser.