1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- //
- // SVGEllipseElement.m
- // SVGKit
- //
- // Copyright Matt Rajca 2010-2011. All rights reserved.
- //
- #import "SVGEllipseElement.h"
- #import "SVGElement_ForParser.h" // to resolve Xcode circular dependencies; in long term, parsing SHOULD NOT HAPPEN inside any class whose name starts "SVG" (because those are reserved classes for the SVG Spec)
- #import "SVGHelperUtilities.h"
- @interface SVGEllipseElement()
- @property (nonatomic, readwrite) CGFloat cx;
- @property (nonatomic, readwrite) CGFloat cy;
- @property (nonatomic, readwrite) CGFloat rx;
- @property (nonatomic, readwrite) CGFloat ry;
- @end
- @implementation SVGEllipseElement
- @synthesize cx = _cx;
- @synthesize cy = _cy;
- @synthesize rx = _rx;
- @synthesize ry = _ry;
- - (void)postProcessAttributesAddingErrorsTo:(SVGKParseResult *)parseResult {
- [super postProcessAttributesAddingErrorsTo:parseResult];
-
- SVGRect r = parseResult.rootOfSVGTree.viewport;
-
- if( [[self getAttribute:@"cx"] length] > 0 )
- {
- self.cx = [[SVGLength svgLengthFromNSString:[self getAttribute:@"cx"] ]
- pixelsValueWithDimension:r.width];
- }
- if( [[self getAttribute:@"cy"] length] > 0 )
- {
- self.cy = [[SVGLength svgLengthFromNSString:[self getAttribute:@"cy"] ]
- pixelsValueWithDimension:r.height];
- }
- if( [[self getAttribute:@"rx"] length] > 0 )
- {
- self.rx = [[SVGLength svgLengthFromNSString:[self getAttribute:@"rx"] ]
- pixelsValueWithDimension:r.width];
- }
- if( [[self getAttribute:@"ry"] length] > 0 )
- {
- self.ry = [[SVGLength svgLengthFromNSString:[self getAttribute:@"ry"] ]
- pixelsValueWithDimension:r.height];
- }
- if( [[self getAttribute:@"r"] length] > 0 ) { // circle
-
- self.ry = self.rx = [[SVGLength svgLengthFromNSString:[self getAttribute:@"r"] ]
- pixelsValueWithDimension:hypot(r.width, r.height)/M_SQRT2];
- }
-
- CGMutablePathRef path = CGPathCreateMutable();
- CGPathAddEllipseInRect(path, NULL, CGRectMake(self.cx - self.rx, self.cy - self.ry, self.rx * 2, self.ry * 2));
- self.pathForShapeInRelativeCoords = path;
- CGPathRelease(path);
- }
- @end
|