チェンジセット 3483
- コミット日時:
- 2010/03/04 21:49:00 (3 年前)
- ファイル:
-
- as3/SvgParser/trunk/bin (追加)
- as3/SvgParser/trunk/bin/sample.swf (追加)
- as3/SvgParser/trunk/bin/sample_font.swf (追加)
- as3/SvgParser/trunk/bin/svg (追加)
- as3/SvgParser/trunk/bin/svg/svgparser.svg (追加)
- as3/SvgParser/trunk/src/Sample.mxml (追加)
- as3/SvgParser/trunk/src/SampleFontReplace.mxml (追加)
- as3/SvgParser/trunk/src/svgparser/parser/Circle.as (更新) (2 diffs)
- as3/SvgParser/trunk/src/svgparser/parser/ClipPath.as (更新) (3 diffs)
- as3/SvgParser/trunk/src/svgparser/parser/ComplexTree.as (更新) (1 diff)
- as3/SvgParser/trunk/src/svgparser/parser/Defs.as (更新) (2 diffs)
- as3/SvgParser/trunk/src/svgparser/parser/Ellipse.as (更新) (2 diffs)
- as3/SvgParser/trunk/src/svgparser/parser/FilterSet.as (更新) (5 diffs)
- as3/SvgParser/trunk/src/svgparser/parser/FlowRoot.as (更新) (1 diff)
- as3/SvgParser/trunk/src/svgparser/parser/Group.as (更新) (2 diffs)
- as3/SvgParser/trunk/src/svgparser/parser/Image.as (更新) (2 diffs)
- as3/SvgParser/trunk/src/svgparser/parser/Line.as (更新) (2 diffs)
- as3/SvgParser/trunk/src/svgparser/parser/LinearGradient.as (更新) (7 diffs)
- as3/SvgParser/trunk/src/svgparser/parser/Marker.as (更新) (1 diff)
- as3/SvgParser/trunk/src/svgparser/parser/Path.as (更新) (2 diffs)
- as3/SvgParser/trunk/src/svgparser/parser/Pattern.as (更新) (1 diff)
- as3/SvgParser/trunk/src/svgparser/parser/Polygon.as (更新) (2 diffs)
- as3/SvgParser/trunk/src/svgparser/parser/Polyline.as (更新) (1 diff)
- as3/SvgParser/trunk/src/svgparser/parser/RadialGradient.as (更新) (3 diffs)
- as3/SvgParser/trunk/src/svgparser/parser/Rect.as (更新) (2 diffs)
- as3/SvgParser/trunk/src/svgparser/parser/SvgFactory.as (更新) (3 diffs)
- as3/SvgParser/trunk/src/svgparser/parser/Symbol.as (更新) (1 diff)
- as3/SvgParser/trunk/src/svgparser/parser/Text.as (更新) (3 diffs)
- as3/SvgParser/trunk/src/svgparser/parser/Use.as (更新) (2 diffs)
- as3/SvgParser/trunk/src/svgparser/parser/abstract/AbstractPaint.as (更新) (4 diffs)
- as3/SvgParser/trunk/src/svgparser/parser/filters/ColorMatrix.as (更新) (5 diffs)
- as3/SvgParser/trunk/src/svgparser/parser/filters/DisplacementMap.as (追加)
- as3/SvgParser/trunk/src/svgparser/parser/filters/GaussianBlur.as (更新) (3 diffs)
- as3/SvgParser/trunk/src/svgparser/parser/filters/IFilter.as (更新) (2 diffs)
- as3/SvgParser/trunk/src/svgparser/parser/model/Data.as (更新) (1 diff)
- as3/SvgParser/trunk/src/svgparser/parser/model/PersistentData.as (追加)
- as3/SvgParser/trunk/src/svgparser/parser/style/Style.as (更新) (10 diffs)
- as3/SvgParser/trunk/src/svgparser/parser/style/Transform.as (更新) (2 diffs)
- as3/SvgParser/trunk/src/svgparser/parser/utils (追加)
- as3/SvgParser/trunk/src/svgparser/parser/utils/GeomUtil.as (追加)
- as3/SvgParser/trunk/src/svgparser/parser/utils/StyleUtil.as (追加)
凡例:
- 変更無し
- 追加
- 削除
- 更新
- コピー
- 移動
as3/SvgParser/trunk/src/svgparser/parser/Circle.as
r3476 r3483 8 8 import flash.display.Graphics; 9 9 import flash.display.GraphicsPathCommand; 10 import svgparser.parser.utils.StyleUtil; 10 11 11 12 public class Circle extends AbstractPaint implements IParser … … 22 23 var target:Shape = new Shape(); 23 24 var style:Style = new Style( data.currentXml ); 24 25 _cx = Number ( data.currentXml.@cx.toString());26 _cy = Number ( data.currentXml.@cy.toString());27 _r = Number ( data.currentXml.@r.toString());25 26 _cx = StyleUtil.toNumber ( data.currentXml.@cx ); 27 _cy = StyleUtil.toNumber ( data.currentXml.@cy ); 28 _r = StyleUtil.toNumber ( data.currentXml.@r ); 28 29 29 30 paint( target, style, data ); as3/SvgParser/trunk/src/svgparser/parser/ClipPath.as
r3476 r3483 4 4 import svgparser.parser.model.Data; 5 5 import svgparser.parser.style.Style; 6 import flash.display.DisplayObject; 6 7 import flash.display.Sprite; 7 8 … … 9 10 { 10 11 public static var LOCALNAME:String = "clipPath"; 11 private var group:Sprite;12 12 13 13 public function ClipPath() { } … … 16 16 var style:Style = new Style( data.currentXml ); 17 17 if ( !style.display ) return; 18 19 var _xml:XML = data.currentXml; 20 _xml.setLocalName( "_clipPath" ); 18 21 19 group = new Sprite(); 20 group.name = style.id; 21 group.transform.matrix = style.getMatrix(); 22 data.currentCanvas = group; 23 24 var groupXML:XML = data.currentXml; 25 groupXML.setLocalName( "_clipPath" ); 26 SvgFactory.parseData( data ); 27 28 data.addGraphic( group ); 29 data.initCanvas(); 22 var pathObject:Sprite = new Sprite(); 23 pathObject.name = style.id; 24 SvgFactory.parseData( data.copy( _xml, pathObject )); 25 style.applyStyle( pathObject ); 26 data.addClipPath( pathObject as DisplayObject ); 30 27 } 31 32 28 } 33 29 as3/SvgParser/trunk/src/svgparser/parser/ComplexTree.as
r3476 r3483 19 19 } 20 20 } 21 22 public function get parseAlways():Boolean { return true; } 21 23 } 22 24 as3/SvgParser/trunk/src/svgparser/parser/Defs.as
r3476 r3483 10 10 { 11 11 public static var LOCALNAME:String = "defs"; 12 private var group:Sprite;13 12 14 13 public function Defs() { } … … 16 15 public function parse( data:Data ):void { 17 16 var style:Style = new Style( data.currentXml ); 18 if ( !style.display ) return; 19 20 group = new Sprite(); 17 var group:Sprite = new Sprite(); 21 18 group.name = style.id; 22 style.applyStyle( group, data ); 23 data.currentCanvas = group; 24 25 var groupXML:XML = data.currentXml; 19 style.applyStyle( group ); 20 var groupXML:XML = data.currentXml.copy(); 26 21 groupXML.setLocalName( "_defs" ); 27 SvgFactory.parseData( data ); 28 29 var numChildren:int = group.numChildren; 30 for ( var i:int = 0; i < numChildren ; i++ ) { 31 data.addGraphic( group.getChildAt( 0 ) ); 32 group.removeChildAt( 0 ); 33 } 34 35 data.initCanvas(); 22 SvgFactory.parseData( data.copy( groupXML, group ) ); 23 group = null; 36 24 } 37 38 25 } 39 26 as3/SvgParser/trunk/src/svgparser/parser/Ellipse.as
r3476 r3483 7 7 import svgparser.parser.model.Data; 8 8 import svgparser.parser.abstract.AbstractPaint; 9 import svgparser.parser.utils.StyleUtil; 9 10 10 11 public class Ellipse extends AbstractPaint implements IParser … … 22 23 { 23 24 var target:Shape = new Shape(); 24 data.currentCanvas.addChild( target );25 25 var style:Style = new Style( data.currentXml ); 26 26 27 _cx = Number( data.currentXml.@cx.toString());28 _cy = Number( data.currentXml.@cy.toString());29 _rx = Number( data.currentXml.@rx.toString());30 _ry = Number( data.currentXml.@ry.toString());27 _cx = StyleUtil.toNumber( data.currentXml.@cx ); 28 _cy = StyleUtil.toNumber( data.currentXml.@cy ); 29 _rx = StyleUtil.toNumber( data.currentXml.@rx ); 30 _ry = StyleUtil.toNumber( data.currentXml.@ry ); 31 31 32 32 paint( target, style, data ); 33 data.currentCanvas.addChild( target ); 33 34 } 34 35 as3/SvgParser/trunk/src/svgparser/parser/FilterSet.as
r3476 r3483 1 1 package svgparser.parser 2 2 { 3 import flash.display.DisplayObject; 3 4 import svgparser.parser.IParser; 4 5 import svgparser.parser.model.Data; 5 6 import svgparser.parser.filters.*; 7 import svgparser.parser.utils.StyleUtil; 6 8 7 9 public class FilterSet implements IParser … … 9 11 public static var LOCALNAME:String = "filter"; 10 12 11 private static const FPARSERS:Array = [ GaussianBlur , ColorMatrix ];13 private static const FPARSERS:Array = [ GaussianBlur , ColorMatrix, DisplacementMap ]; 12 14 13 15 public var id:String; … … 22 24 { 23 25 id = data.currentXml.@id.toString(); 24 _x = Number( data.currentXml.@x );25 _y = Number( data.currentXml.@y );26 _width = Number( data.currentXml.@width );27 _height = Number( data.currentXml.@height );26 _x = StyleUtil.toNumber( data.currentXml.@x ); 27 _y = StyleUtil.toNumber( data.currentXml.@y ); 28 _width = StyleUtil.toNumber( data.currentXml.@width ); 29 _height = StyleUtil.toNumber( data.currentXml.@height ); 28 30 29 31 var fs:XMLList = data.currentXml.children(); … … 35 37 } 36 38 39 public function setSourceGraphic( d:DisplayObject ):void { 40 for each( var f:IFilter in filters ) 41 f.setSourceGraphic( d); 42 } 43 37 44 public function getAllFilters():Array 38 45 { 39 46 var sets:Array = []; 40 for each( var f:IFilter in filters ) {47 for each( var f:IFilter in filters ) 41 48 sets.push( f.getFlashFilter() ); 42 }43 49 return sets; 44 50 } … … 51 57 public static function getFilter( xml:XML ):IFilter 52 58 { 53 for each( var Fl:Class in FPARSERS ) {59 for each( var Fl:Class in FPARSERS ) 54 60 if ( xml.localName() == Fl["LOCALNAME"] ) return new Fl( xml ); 55 }56 61 return null; 57 62 } 58 63 } 59 60 64 } as3/SvgParser/trunk/src/svgparser/parser/FlowRoot.as
r3476 r3483 12 12 13 13 public function parse( data:Data ):void {} 14 15 14 } 16 15 as3/SvgParser/trunk/src/svgparser/parser/Group.as
r3476 r3483 10 10 11 11 public static var LOCALNAME:String = "g"; 12 private var group:Sprite;13 12 14 13 public function Group() {} … … 17 16 var style:Style = new Style( data.currentXml ); 18 17 if ( !style.display ) return; 19 20 group = new Sprite(); 18 var group:Sprite = new Sprite(); 21 19 group.name = style.id; 22 23 group.transform.matrix = style.getMatrix(); 24 25 var groupXML:XML = data.currentXml; 26 groupXML.setLocalName( "_g" ); 27 SvgFactory.parseData( data ); 28 20 style.applyStyle( group ); 29 21 data.currentCanvas.addChild( group ); 22 var groupXML:XML = data.currentXml.copy(); 23 groupXML.setLocalName( "_g" ); 24 SvgFactory.parseData( data.copy( groupXML, group ) ); 30 25 } 31 26 } as3/SvgParser/trunk/src/svgparser/parser/Image.as
r3477 r3483 12 12 import svgparser.parser.Constants; 13 13 import svgparser.parser.style.Style; 14 import svgparser.parser.utils.StyleUtil; 14 15 15 16 public class Image implements IParser … … 36 37 public function parse( data:Data ):void 37 38 { 38 _x = data.currentXml.@x;39 _y = data.currentXml.@y;40 _width = data.currentXml.@width;41 _height = data.currentXml.@height;39 _x = StyleUtil.toNumber( data.currentXml.@x ); 40 _y = StyleUtil.toNumber( data.currentXml.@y ); 41 _width = StyleUtil.toNumber( data.currentXml.@width ); 42 _height = StyleUtil.toNumber( data.currentXml.@height ); 42 43 43 44 _style = new Style( data.currentXml ); as3/SvgParser/trunk/src/svgparser/parser/Line.as
r3476 r3483 8 8 import svgparser.parser.model.Data; 9 9 import svgparser.parser.style.Style; 10 import svgparser.parser.utils.StyleUtil; 10 11 11 12 public class Line extends AbstractPaint implements IParser … … 29 30 var style:Style = new Style( data.currentXml ); 30 31 31 _x1 = Number( data.currentXml.@x1.toString());32 _x2 = Number( data.currentXml.@x2.toString());33 _y1 = Number( data.currentXml.@y1.toString());34 _y2 = Number( data.currentXml.@y2.toString());32 _x1 = StyleUtil.toNumber( data.currentXml.@x1 ); 33 _x2 = StyleUtil.toNumber( data.currentXml.@x2 ); 34 _y1 = StyleUtil.toNumber( data.currentXml.@y1 ); 35 _y2 = StyleUtil.toNumber( data.currentXml.@y2 ); 35 36 36 37 _vertices = Vector.<Number>([ _x1, _y1 , _x2 , _y2 ]); as3/SvgParser/trunk/src/svgparser/parser/LinearGradient.as
r3476 r3483 10 10 import flash.display.GradientType; 11 11 import flash.display.SpreadMethod; 12 import svgparser.parser.utils.StyleUtil; 13 import svgparser.parser.utils.GeomUtil; 12 14 13 15 public class LinearGradient implements IParser , IGradient … … 51 53 _linked = style.href; 52 54 53 _x1 = Number( data.currentXml.@x1 );54 _x2 = Number( data.currentXml.@x2 );55 _y1 = Number( data.currentXml.@y1 );56 _y2 = Number( data.currentXml.@y2 );55 _x1 = getValue( data.currentXml.@x1 ); 56 _x2 = getValue( data.currentXml.@x2 ); 57 _y1 = getValue( data.currentXml.@y1 ); 58 _y2 = getValue( data.currentXml.@y2 ); 57 59 58 60 pts = new Vector.<Point>(); … … 60 62 pts.push( new Point( _x2, _y2 ) ); 61 63 62 var distance:Number = getDistance( pts[0], pts[1] );64 var distance:Number = GeomUtil.getDistance( pts[0], pts[1] ); 63 65 var boxheight:Number = Math.max( Math.abs(pts[0].x - pts[1].x ), Math.abs(pts[0].y - pts[1].y )); 64 var angle:Number = getAngle(pts[0], pts[1]);66 var angle:Number = GeomUtil.getAngle(pts[0], pts[1]); 65 67 var topleft:Point = new Point( pts[0].x , pts[0].y ); 66 68 … … 78 80 } 79 81 82 if ( _linked != null ) setData( data ); 80 83 data.addGradient( this ); 81 84 } … … 84 87 { 85 88 var linkedGrad:IGradient = data.getGradientById( _linked ); 86 89 if ( !linkedGrad ) return; 87 90 _colors = linkedGrad.colors.concat(); 88 91 _alphas = linkedGrad.alphas.concat(); … … 98 101 } 99 102 100 protected function getAngle( pt1:Point , pt2:Point ):Number 101 { 102 var dx:Number = pt2.x - pt1.x; 103 var dy:Number = pt2.y - pt1.y; 104 var angleRadian:Number = Math.atan2( dy , dx ); 105 return angleRadian; 106 } 107 108 protected function getDistance( pt1:Point , pt2:Point ):Number 109 { 110 var dx:Number = pt2.x - pt1.x; 111 var dy:Number = pt2.y - pt1.y; 112 return Math.sqrt( dx * dx + dy * dy ); 103 protected function getValue( val:String ):Number { 104 return StyleUtil.toNumber( val ); 113 105 } 114 106 … … 122 114 public function get transform():Transform { return _transform; } 123 115 public function get unit():String { return _unit; } 124 125 116 } 126 127 117 } as3/SvgParser/trunk/src/svgparser/parser/Marker.as
r3476 r3483 7 7 8 8 public function Marker() {} 9 public function parse( data:Data ):void { }9 public function parse( data:Data ):void { } 10 10 } 11 11 as3/SvgParser/trunk/src/svgparser/parser/Path.as
r3476 r3483 12 12 13 13 public static var LOCALNAME:String = "path"; 14 public var BezierDetail:uint = Constants.BEZIER_DETAIL;15 14 private var _commands:Vector.<int> = new Vector.<int>; 16 15 private var _vertices:Vector.<Number> = new Vector.<Number>; … … 249 248 private function _bezier_curve( x0:Number, y0:Number, cx0:Number, cy0:Number, cx1:Number, cy1:Number, x:Number, y:Number ):void 250 249 { 251 var k:Number = 1.0/ BezierDetail;250 var k:Number = 1.0/ Constants.BEZIER_DETAIL; 252 251 var t:Number = 0; 253 252 var tp:Number; 254 for ( var i:int = 1; i <= BezierDetail; i++ )253 for ( var i:int = 1; i <= Constants.BEZIER_DETAIL; i++ ) 255 254 { 256 255 t += k; as3/SvgParser/trunk/src/svgparser/parser/Pattern.as
r3476 r3483 4 4 public class Pattern implements IParser 5 5 { 6 7 public function Pattern() 8 { 9 10 } 11 6 public static var LOCALNAME:String = "pattern"; 7 public function Pattern() {} 12 8 } 13 9 as3/SvgParser/trunk/src/svgparser/parser/Polygon.as
r3476 r3483 11 11 public class Polygon extends AbstractPaint implements IParser 12 12 { 13 14 13 public static var LOCALNAME:String = "polygon"; 15 14 … … 24 23 var style:Style = new Style( data.currentXml ); 25 24 26 var points:Array = data.currentXml.@points.toString().replace(/\s+$/,"").replace(/\s+/g , ",").split(","); 25 var points:Array = data.currentXml.@points.toString() .replace(/\s+$/, "") 26 .replace(/\s+/g , ",") 27 .split(","); 27 28 _vertices = Vector.<Number>( points ); 28 29 _vertices.push( _vertices[0], _vertices[1] ); as3/SvgParser/trunk/src/svgparser/parser/Polyline.as
r3476 r3483 23 23 var style:Style = new Style( data.currentXml ); 24 24 25 var points:Array = data.currentXml.@points.toString().replace(/\s+$/,"").replace(/\s+/g , ",").split(","); 25 var points:Array = data.currentXml.@points.toString() .replace(/\s+$/, "") 26 .replace(/\s+/g , ",") 27 .split(","); 26 28 _vertices = Vector.<Number>( points ); 27 29 as3/SvgParser/trunk/src/svgparser/parser/RadialGradient.as
r3476 r3483 10 10 import flash.display.GradientType; 11 11 import flash.display.SpreadMethod; 12 import svgparser.parser.utils.GeomUtil; 12 13 13 14 public class RadialGradient extends LinearGradient implements IParser , IGradient … … 30 31 this.id = style.id; 31 32 33 _cx = getValue( data.currentXml.@cx ); 34 _cy = getValue( data.currentXml.@cy ); 35 _r = getValue( data.currentXml.@r ); 36 _fx = data.currentXml.@fx ? getValue( data.currentXml.@fx ) : _cx ; 37 _fy = data.currentXml.@fy ? getValue( data.currentXml.@fy ) : _cy ; 32 38 _linked = style.href; 33 39 _transform = style.gradientTransform; 34 40 _unit = style.gradientUnits; 35 41 36 _cx = Number( data.currentXml.@cx ); 37 _cy = Number( data.currentXml.@cy ); 38 _r = Number( data.currentXml.@r ); 39 _fx = data.currentXml.@fx ? Number( data.currentXml.@fx ) : _cx ; 40 _fy = data.currentXml.@fy ? Number( data.currentXml.@fy ) : _cy ; 41 42 _matrix.createGradientBox( _r * 2 , _r * 2 , getAngle( new Point(_cx,_cy ) , new Point(_fx,_fy ) ) , _cx - _r , _cy - _r ); 42 _matrix.createGradientBox( _r * 2 , _r * 2 , 43 GeomUtil.getAngle( new Point(_cx, _cy ) , new Point(_fx, _fy ) ) , 44 _cx - _r , _cy - _r ); 43 45 if ( _transform ) _matrix.concat( _transform.getMatrix() ); 44 46 … … 49 51 } 50 52 53 if ( _linked != null ) setData( data ); 51 54 data.addGradient( this ); 52 55 } as3/SvgParser/trunk/src/svgparser/parser/Rect.as
r3476 r3483 5 5 import svgparser.parser.model.Data; 6 6 import svgparser.parser.style.Style; 7 import svgparser.parser.utils.StyleUtil; 7 8 8 9 public class Rect extends AbstractPaint implements IParser … … 23 24 var style:Style = new Style( xml ); 24 25 25 _x = Number( xml.@x.toString());26 _y = Number( xml.@y.toString());27 _width = Number( xml.@width.toString() );28 _height = Number( xml.@height.toString() );26 _x = StyleUtil.toNumber( xml.@x ); 27 _y = StyleUtil.toNumber( xml.@y ); 28 _width = StyleUtil.toNumber( xml.@width.toString() ); 29 _height = StyleUtil.toNumber( xml.@height.toString() ); 29 30 30 31 paint( target , style, data ); as3/SvgParser/trunk/src/svgparser/parser/SvgFactory.as
r3476 r3483 7 7 public class SvgFactory 8 8 { 9 private static const PARSERS:Array = [ Svg , Group , Defs, FlowRoot , Path , Polyline, Polygon, Symbol,9 private static const PARSERS:Array = [ Svg , Group , Defs, FlowRoot , Path , Polyline, Polygon, 10 10 Ellipse, Rect, Text, Image, Line, Circle, ClipPath, Use, 11 Marker, LinearGradient, RadialGradient , FilterSet ];11 Marker, LinearGradient, RadialGradient , FilterSet ,Symbol ]; 12 12 13 13 public function SvgFactory() { } … … 18 18 xml.removeNamespace( Constants.svg ); 19 19 xml.removeNamespace( Constants.xlink ); 20 20 21 parseData( new Data( xml , target , settings ) ); 21 22 } … … 23 24 public static function parseData( data:Data ):void 24 25 { 25 var _parser:IParser = getParser( data.currentXml ); 26 _parser.parse( data ); 26 getParser( data.currentXml ).parse( data ); 27 27 } 28 28 29 29 private static function getParser( xml:XML ):IParser 30 30 { 31 for each( var Ps:Class in PARSERS ) {31 for each( var Ps:Class in PARSERS ) 32 32 if ( xml.localName() == Ps["LOCALNAME"] ) return new Ps(); 33 }34 33 return new ComplexTree(); 35 34 } as3/SvgParser/trunk/src/svgparser/parser/Symbol.as
r3478 r3483 10 10 { 11 11 public static var LOCALNAME:String = "symbol"; 12 private var symbol:Sprite;13 12 14 13 public function Symbol() { } 15 16 public function parse( data:Data ):void { 17 var style:Style = new Style( data.currentXml ); 18 if ( !style.display ) return; 19 20 symbol = new Sprite(); 21 symbol.name = style.id; 22 style.applyStyle( symbol, data ); 23 data.currentCanvas = symbol; 24 25 var groupXML:XML = data.currentXml; 26 groupXML.setLocalName( "_symbol" ); 27 SvgFactory.parseData( data ); 28 29 data.addGraphic( symbol ); 30 data.initCanvas(); 31 } 32 14 public function parse( data:Data ):void {} 33 15 } 34 35 16 } as3/SvgParser/trunk/src/svgparser/parser/Text.as
r3476 r3483 7 7 import svgparser.parser.model.Data; 8 8 import svgparser.parser.style.Style; 9 import flash.text.engine.FontLookup; 9 10 10 11 public class Text implements IParser 11 12 { 12 13 13 public static var LOCALNAME:String = "text"; 14 14 … … 73 73 private function setText( txt:String , style:Style ):void 74 74 { 75 _data. parseStyle( style );75 _data.replaceFont( style ); 76 76 txt = txt.replace(/[\t|\n|\r]+/g , "" ); 77 77 var fd:FontDescription = new FontDescription( style.font_family, style.font_weight ); … … 110 110 textLine.alpha = style.opacity; 111 111 sprite.addChild( textLine ); 112 // if ( style.hasGradientFill ) setGradient( textLine, style ); 112 113 } 113 114 /* 115 private function setGradient( textLine:TextLine , style:Style ):void { 116 var grad:IGradient = _data.getGradientById( style.fill_id ); 117 if ( grad ) { 118 var rect:Rectangle = textLine.getBounds( sprite ); 119 var frame:Sprite = new Sprite(); 120 frame.graphics.beginGradientFill( grad.type, grad.colors, grad.alphas , 121 grad.ratios , grad.matrix , grad.method ); 122 frame.graphics.drawRect( rect.x, rect.y, rect.width, rect.height ); 123 frame.graphics.endFill(); 124 sprite.addChild( frame ); 125 //frame.mask = textLine; 126 //frame.blendMode = BlendMode.SCREEN; 127 } 128 } 129 */ 114 130 } 115 131 as3/SvgParser/trunk/src/svgparser/parser/Use.as
r3478 r3483 2 2 { 3 3 import flash.display.DisplayObject; 4 import flash.display.DisplayObjectContainer; 4 5 import svgparser.parser.IParser; 5 6 import svgparser.parser.model.Data; 6 7 import svgparser.parser.style.Style; 7 8 import flash.display.Sprite; 9 import svgparser.parser.utils.StyleUtil; 8 10 9 11 public class Use implements IParser … … 23 25 var style:Style = new Style( data.currentXml ); 24 26 _href = style.href; 25 _x = Number( data.currentXml.@x.toString()); 26 _y = Number( data.currentXml.@y.toString()); 27 _x = StyleUtil.toNumber( data.currentXml.@x ); 28 _y = StyleUtil.toNumber( data.currentXml.@y ); 29 _width = StyleUtil.toNumber( data.currentXml.@width ); 30 _height = StyleUtil.toNumber( data.currentXml.@height ); 27 31 28 var item:DisplayObject = data.getGraphicById( _href ); 29 if ( !item ) return; 30 item.x = _x; 31 item.y = _y; 32 item.width = _width; 33 item.height = _height; 34 style.applyStyle( item, data ); 32 var currentXML:XML = data.currentXml.copy(); 33 var appendXML:XML = data.xml..*.( attribute("id") == _href )[0].copy(); 34 if( appendXML.localName() == "symbol" ) appendXML.setLocalName( "g" ); 35 currentXML.appendChild( appendXML ); 36 currentXML.setLocalName( "_use" ); 35 37 36 data.currentCanvas.addChild( item ); 38 var symbol:Sprite = new Sprite(); 39 var localData:Data = data.copy( currentXML, symbol ); 40 localData.overrideStyle( currentXML ); 41 SvgFactory.parseData( localData ); 42 symbol.x = _x; 43 symbol.y = _y; 44 if( _width != 0 ) symbol.width = _width; 45 if( _height != 0 ) symbol.height = _height; 46 style.applyStyle( symbol, data ); 47 data.currentCanvas.addChild( symbol ); 37 48 } 38 39 40 49 } 41 50 as3/SvgParser/trunk/src/svgparser/parser/abstract/AbstractPaint.as
r3476 r3483 15 15 protected function paint( target:Shape, style:Style , data:Data ):void 16 16 { 17 if ( data.hasParentStyle ) style.addStyle( data.getStyleXML() ); 17 18 if ( style.hasStroke ) target.graphics.lineStyle( style.stroke_width, style.stroke, style.stroke_opacity, 18 19 Constants.LINE_PIXEL_HINTING, Constants.LINE_SCALE_MODE , … … 21 22 { 22 23 var sgrad:IGradient = data.getGradientById( style.stroke_id ); 23 if ( sgrad.linked != null ) sgrad.setData( data );24 target.graphics.lineGradientStyle( sgrad.type, sgrad.colors, sgrad.alphas,sgrad.ratios, sgrad.matrix, sgrad.method );24 if( sgrad ) target.graphics.lineGradientStyle( sgrad.type, sgrad.colors, sgrad.alphas, 25 sgrad.ratios, sgrad.matrix, sgrad.method ); 25 26 } 26 27 if ( style.hasFill ) target.graphics.beginFill( style.fill , style.fill_opacity ); … … 28 29 { 29 30 var grad:IGradient = data.getGradientById( style.fill_id ); 30 if ( grad ) { 31 if ( grad.linked != null ) grad.setData( data ); 32 target.graphics.beginGradientFill( grad.type, grad.colors, grad.alphas , grad.ratios , grad.matrix , grad.method ); 33 } 31 if ( grad ) target.graphics.beginGradientFill( grad.type, grad.colors, grad.alphas , 32 grad.ratios , grad.matrix , grad.method ); 34 33 } 35 34 … … 43 42 { 44 43 throw new Error( "AbstractPaint draw method" ); 45 } 46 44 } 47 45 } 48 46 as3/SvgParser/trunk/src/svgparser/parser/filters/ColorMatrix.as
r3476 r3483 3 3 import flash.filters.ColorMatrixFilter; 4 4 import flash.filters.BitmapFilter; 5 import flash.display.DisplayObject; 5 6 import svgparser.parser.filters.IFilter; 7 import svgparser.parser.utils.GeomUtil; 6 8 7 9 public class ColorMatrix implements IFilter … … 10 12 11 13 public var id:String; 14 12 15 private var _matrix:Array; 16 private var _result:String; 17 private var _in:String; 18 private var _in2:String; 13 19 14 20 public function ColorMatrix( xml:XML) … … 29 35 if ( xml.@type ) { 30 36 var type:String = xml.@type.toString(); 31 _matrix = getMatrixByType( type );37 _matrix = getMatrixByType( type, xml.@values.toString() ); 32 38 } 33 39 } … … 35 41 public function getFlashFilter():BitmapFilter 36 42 { 37 var filter:ColorMatrixFilter = new ColorMatrixFilter( _matrix ); 38 return filter as BitmapFilter; 43 return new ColorMatrixFilter( _matrix ) as BitmapFilter; 39 44 } 40 45 41 private function getMatrixByType( type:String ):Array 46 public function setSourceGraphic( d:DisplayObject ):void { } 47 48 private function getMatrixByType( type:String, values:String ):Array 42 49 { 43 50 switch( type ) { … … 47 54 0.2125, 0.7154, 0.0721, 0,0]; 48 55 break; 49 case "saturate" :return []; 56 case "saturate" : 57 var v:Number = Number( values ); 58 var i:Number= 1 - v; 59 var ir:Number= i * 0.3086; 60 var ig:Number= i * 0.6094; 61 var ib:Number= i * 0.0820; 62 return [ir + v,ig,ib,0,0,ir,ig + v,ib,0,0,ir,ig,ib + v,0,0,0,0,0,1,0]; 50 63 break; 51 case "hueRotate" :return []; 64 case "hueRotate" : 65 var angle:Number = GeomUtil.degree2radian( Number( values )); 66 var c:Number=Math.cos(angle); 67 var s:Number=Math.sin(angle); 68 var f1:Number=0.213; 69 var f2:Number=0.715; 70 var f3:Number=0.072; 71 return [(f1 + (c * (1 - f1))) + (s * ( -f1)), (f2 + (c * ( -f2))) + (s * ( -f2)), (f3 + (c * ( -f3))) + (s * (1 - f3)), 0, 0, 72 (f1 + (c * ( -f1))) + (s * 0.143), (f2 + (c * (1 - f2))) + (s * 0.14), (f3 + (c * ( -f3))) + (s * -0.283), 0, 0, 73 (f1 + (c * ( -f1))) + (s * ( -(1 - f1))), (f2 + (c * ( -f2))) + (s * f2), (f3 + (c * (1 - f3))) + (s * f3), 0, 0, 74 0, 0, 0, 1, 0, 0, 0, 0, 0, 1]; 75 break; 76 default : 77 return values.replace(/\s$/ , "" ).split( " " ); 52 78 break; 53 79 } as3/SvgParser/trunk/src/svgparser/parser/filters/GaussianBlur.as
r3476 r3483 3 3 import flash.filters.BlurFilter; 4 4 import flash.filters.BitmapFilter; 5 import flash.display.DisplayObject; 5 6 import svgparser.parser.Constants; 6 7 … … 10 11 11 12 public var id:String; 12 public var _result:String;13 public var _in:String;14 public var _in2:String;15 13 public var amount:Number; 16 14 private var quality:int = Constants.BLUR_QUALITY; 17 private var filter:BlurFilter; 15 private var _result:String; 16 private var _in:String; 17 private var _in2:String; 18 18 19 19 public function GaussianBlur( xml:XML ) … … 30 30 public function getFlashFilter():BitmapFilter 31 31 { 32 filter = new BlurFilter( amount , amount , quality ); 33 return filter as BitmapFilter; 32 return new BlurFilter( amount , amount , quality ) as BitmapFilter; 34 33 } 34 35 public function setSourceGraphic( d:DisplayObject ):void { } 36 35 37 36 38 } as3/SvgParser/trunk/src/svgparser/parser/filters/IFilter.as
r3476 r3483 1 1 package svgparser.parser.filters 2 2 { 3 import flash.display.DisplayObject; 3 4 import flash.filters.BitmapFilter; 4 5 public interface IFilter … … 6 7 function parse( xml:XML ):void; 7 8 function getFlashFilter():BitmapFilter; 9 function setSourceGraphic( d:DisplayObject ):void; 8 10 } 9 11 as3/SvgParser/trunk/src/svgparser/parser/model/Data.as
r3476 r3483 4 4 import flash.display.DisplayObject; 5 5 import svgparser.font.FontConverter; 6 import svgparser.parser.style.Style; 7 import svgparser.parser.SvgFactory; 6 8 import svgparser.parser.FilterSet; 7 9 import svgparser.parser.IGradient; 8 import svgparser.parser.style.Style;9 10 import svgparser.Settings; 11 10 12 public class Data 11 13 { 12 private var _xml:XML; 13 private var _canvas:DisplayObjectContainer ; 14 private var _currentXml:XML; 15 private var _currentCanvas:DisplayObjectContainer ; 16 private var _gradients:Array = []; 17 private var _filters:Array = []; 18 private var _graphics:Array = []; 14 private var _currentXML:XML; 15 private var _currentCanvas:DisplayObjectContainer; 19 16 private var _settings:Settings; 17 private var _persistent:PersistentData; 18 private var _styleXML:XML; 20 19 21 public function Data( xml:XML, canvas:DisplayObjectContainer , settings:Settings = null )20 public function Data( xml:XML, canvas:DisplayObjectContainer , settings:Settings = null , persistent:PersistentData = null ) 22 21 { 23 this._xml = this._currentXml = xml; 24 this._canvas = this._currentCanvas = canvas; 22 _persistent = ( persistent ) ? persistent : new PersistentData(); 23 _currentXML = _persistent.rootXML = xml; 24 _currentCanvas = _persistent.rootCanvas = canvas; 25 25 this._settings = settings; 26 26 } 27 27 28 public function initCanvas():void { 29 _currentCanvas = _canvas; 28 //return new Data with persistent data intact 29 public function copy( xml:XML = null , canvas:DisplayObjectContainer = null):Data 30 { 31 if ( !xml ) xml = _currentXML; 32 if ( !canvas ) canvas = _currentCanvas; 33 return new Data( xml, canvas, _settings, _persistent ); 30 34 } 31 35 32 public function get xml():XML { return _xml; } 33 public function get canvas():DisplayObjectContainer { return _canvas; } 34 35 public function get currentXml():XML { return _currentXml; } 36 public function set currentXml(value:XML):void 37 { 38 _currentXml = value; 36 public function overrideStyle( xml:XML):void { 37 xml.@transform = null; 38 _styleXML = xml; 39 39 } 40 40 41 public function get currentCanvas():DisplayObjectContainer { return _currentCanvas; } 42 public function set currentCanvas(value:DisplayObjectContainer ):void 43 { 44 _currentCanvas = value; 41 public function getStyleXML():XML { 42 return _styleXML; 43 } 44 45 public function get hasParentStyle():Boolean { 46 return Boolean( _styleXML ); 47 } 48 49 public function replaceFont ( style:Style ):void { 50 if ( !_settings.hasFontConversion() ) return; 51 var fc:FontConverter = _settings.getSwfFont( style.font_family ); 52 if ( !fc ) return; 53 style.font_family = fc.swfFontName; 54 if ( fc.fontLookUp != null ) style.fontLookup = fc.fontLookUp; 45 55 } 46 56 47 57 public function getGradientById( id:String ):IGradient { 48 for each( var grad:IGradient in _gradients ) 49 if ( grad.getId() == id ) return grad; 50 return null; 58 return _persistent.getGradientById( id ); 51 59 } 52 60 public function addGradient(value:IGradient):void 53 61 { 54 for each( var grad:IGradient in _gradients ) 55 if ( grad.getId() == value.getId() ) return; 56 _gradients.push( value ); 62 _persistent.addGradient( value ); 57 63 } 58 64 59 65 public function getFilterById( id:String ):FilterSet { 60 for each( var fl:FilterSet in _filters ) 61 if ( fl.id == id ) return fl; 62 return null; 66 return _persistent.getFilterById( id ); 63 67 } 64 68 public function addFilter(value:FilterSet):void 65 69 { 66 for each( var fl:FilterSet in _filters ) 67 if ( fl.id == value.id ) return; 68 _filters.push( value ); 70 _persistent.addFilter( value ); 69 71 } 70 72 71 public function getGraphicById( id:String ):DisplayObject { 72 for each( var item:DisplayObject in _graphics ) 73 if ( item.name == id ) return item; 74 return null; 75 } 76 public function addGraphic(value:DisplayObject):void 77 { 78 for each( var item:DisplayObject in _graphics ) 79 if ( item.name == value.name ) return; 80 _graphics.push( value ); 73 public function getClipPathById( id:String ):DisplayObject { 74 return _persistent.getClipPathById( id ); 81 75 } 82 76 83 public function parseStyle( style:Style ):void { 84 if ( _settings.hasFontConversion() ) { 85 var fc:FontConverter = _settings.getSwfFont( style.font_family ); 86 if ( fc ) { 87 style.font_family = fc.swfFontName; 88 if ( fc.fontLookUp != null ) style.fontLookup = fc.fontLookUp; 89 } 90 } 77 public function addClipPath(value:DisplayObject):void 78 { 79 _persistent.addClipPath( value ); 91 80 } 92 81 82 public function get xml():XML { return _persistent.rootXML; } 83 public function get canvas():DisplayObjectContainer { return _persistent.rootCanvas; } 93 84 85 public function get currentCanvas():DisplayObjectContainer { return _currentCanvas; } 86 public function set currentCanvas( value:DisplayObjectContainer ):void { 87 _currentCanvas = value; 88 } 89 public function get currentXml():XML { return _currentXML; } 90 public function set currentXml( value:XML ):void { 91 _currentXML = value; 92 } 93 public function get settings():Settings { return _settings; } 94 94 } 95 95 as3/SvgParser/trunk/src/svgparser/parser/style/Style.as
r3476 r3483 11 11 import svgparser.parser.style.Transform; 12 12 import svgparser.parser.FilterSet; 13 import svgparser.parser.utils.StyleUtil; 13 14 import svgparser.parser.Constants; 14 15 … … 115 116 if ( hasFilter && data != null ) { 116 117 var fl:FilterSet = data.getFilterById( filter_id ); 117 if( fl.hasFilter() ) d.filters = fl.getAllFilters(); 118 if ( fl.hasFilter() ) { 119 fl.setSourceGraphic( d ); 120 d.filters = fl.getAllFilters(); 121 } 118 122 } 119 123 if ( hasClipPath && data != null ) { 120 var maskobj:DisplayObject = data.get GraphicById( clipPath_id );124 var maskobj:DisplayObject = data.getClipPathById( clipPath_id ); 121 125 if ( maskobj ) { 122 126 var mtx:Matrix = maskobj.transform.matrix.clone(); … … 135 139 return new Matrix(); 136 140 } 137 138 public function getClipPath( data:Data ):DisplayObject139 {140 if ( hasClipPath) {141 var maskobj:DisplayObject = data.getGraphicById( clipPath_id );142 if ( maskobj ) return maskobj;143 }144 return null;145 }146 141 147 142 private function parseStyles( st:String ):void … … 157 152 { 158 153 key = key.replace( /-/g, "_" ); 159 if ( key.indexOf( "http://") != -1 ) key = key.replace(/http(.+)::(.+)/, "$2"); //remove namespaces154 if ( key.indexOf( "http://") != -1 ) key = StyleUtil.removeNameSpace( key ); 160 155 switch( key ) { 161 156 case "stroke" : 162 157 if ( val.indexOf("url") == -1 ) { 163 stroke = toColor( val );158 stroke = StyleUtil.toColor( val ); 164 159 } else { 165 stroke_id = val.replace(/url\(#(.+)\)/ , "$1");160 stroke_id = StyleUtil.toURL( val ); 166 161 _hasGradientStroke = true; 167 162 } … … 171 166 if ( val == "none" ) _hasFill = false; 172 167 else if ( val.indexOf("url") == -1 ) { 173 fill = toColor( val );168 fill = StyleUtil.toColor( val ); 174 169 _hasFill = true; 175 170 } else { 176 fill_id = val.replace(/url\(#(.+)\)/ , "$1");171 fill_id = StyleUtil.toURL( val ); 177 172 _hasGradientFill = true; 178 173 } 179 174 break; 180 case "stroke_width": stroke_width = Number( val.replace(/px/, ""));175 case "stroke_width": stroke_width = StyleUtil.toNumber( val ); 181 176 break; 182 177 case "stroke_linecap": stroke_linecap = ( val == CapsStyle.SQUARE || val == CapsStyle.ROUND ) ? val: CapsStyle.NONE; … … 184 179 case "font_family" : font_family = val.replace(/\'/g , "" ); 185 180 break; 186 case "font_size" : font_size = Number( val.replace(/px/, ""));181 case "font_size" : font_size = StyleUtil.toNumber( val ); 187 182 break; 188 183 case "font_weight" : … … 195 190 case "style" : parseStyles( val ); 196 191 break; 197 case "filter" : filter_id = val.replace(/url\(#(.+)\)/ , "$1");192 case "filter" : filter_id = StyleUtil.toURL( val ); 198 193 break; 199 194 case "clip_path" : 200 clipPath_id = val.replace(/url\(#(.+)\)/ , "$1");195 clipPath_id = StyleUtil.toURL( val ); 201 196 _hasClipPath = true; 202 197 break; … … 208 203 break; 209 204 //Gradients 210 case "stop_color" : stop_color = toColor( val );205 case "stop_color" : stop_color = StyleUtil.toColor( val ); 211 206 break; 212 207 case "href" : href = val.replace(/^#/ , "" ); … … 219 214 case "string" : this[key] = val; 220 215 break; 221 case "number" : this[key] = Number( val );216 case "number" : this[key] = StyleUtil.toNumber( val ); 222 217 break; 223 218 } … … 225 220 break; 226 221 } 227 }228 229 private function toColor( str:String ):uint230 {231 return uint( str.replace( /#/, "0x" ) );232 222 } 233 223 as3/SvgParser/trunk/src/svgparser/parser/style/Transform.as
r3476 r3483 3 3 import flash.display.DisplayObject; 4 4 import flash.geom.Matrix; 5 import svgparser.parser.utils.GeomUtil; 5 6 6 7 public class Transform … … 35 36 break; 36 37 case "rotate": 37 _matrix.rotate( degree2radian( vals[0] ) );38 _matrix.rotate( GeomUtil.degree2radian( vals[0] ) ); 38 39 break; 39 40 case "skewX": 40 _matrix.c = Math.tan( degree2radian( vals[0] ) );41 _matrix.c = Math.tan( GeomUtil.degree2radian( vals[0] ) ); 41 42 break; 42 43 case "skewY": 43 _matrix.b = Math.tan( degree2radian( vals[0] ) );44 _matrix.b = Math.tan( GeomUtil.degree2radian( vals[0] ) ); 44 45 break; 45 46 } 46 }47 48 protected function degree2radian( degree:Number ):Number {49 return degree * Math.PI / 180;50 47 } 51 48

