#import "svg2q.h" @implementation QLine @synthesize x1, x2, y1, y2, strokeColor, strokeWidth; -(void) drawWithContext:(CGContextRef) context { CGContextSetLineWidth(context, self.strokeWidth); CGContextSetStrokeColorWithColor(context, self.strokeColor); CGContextMoveToPoint(context, self.x1, self.y1); CGContextAddLineToPoint(context, self.x2, self.y2); CGContextDrawPath(context, kCGPathStroke); } @end @implementation QPath @synthesize strokeColor, fillColor, strokeWidth; @end @implementation QEllipse @synthesize strokeColor, fillColor, strokeWidth, x, y, radiusX, radiusY; -(void) drawWithContext:(CGContextRef)context { CGRect frame = CGRectMake(self.x - self.radiusX, self.y - self.radiusY, 2*self.radiusX, 2*self.radiusY); CGContextSetFillColorWithColor(context, self.fillColor); CGContextSetStrokeColorWithColor(context, strokeColor); CGContextSetLineWidth(context, self.strokeWidth); CGContextAddEllipseInRect(context, frame); CGContextDrawPath(context, kCGPathFillStroke); } @end @implementation QRect @synthesize strokeColor, fillColor, strokeWidth, x, y, radiusX, radiusY, width, height; -(void) drawWithContext:(CGContextRef)context { if (self.radiusX > self.width / 2) { self.radiusX = self.width / 2; } if (self.radiusY > self.height / 2) { self.radiusY = self.height / 2; } CGContextSetLineWidth(context, self.strokeWidth); CGContextSetStrokeColorWithColor(context, self.strokeColor); CGContextSetFillColorWithColor(context, self.fillColor); CGContextMoveToPoint(context, self.x+self.radiusX, self.y); CGContextAddLineToPoint(context, self.x + self.width - self.radiusX, self.y); CGContextAddQuadCurveToPoint(context, self.x + self.width, self.y, self.x + self.width, self.y+self.radiusY); CGContextAddLineToPoint(context, self.x+self.width, self.y+self.height-self.radiusY); CGContextAddQuadCurveToPoint(context, self.x + self.width, self.y + self.height, self.x + self.width - self.radiusX, self.y + self.height); CGContextAddLineToPoint(context, self.x + self.radiusX, self.y + self.height); CGContextAddQuadCurveToPoint(context, self.x, self.y + self.height, self.x, self.y + self.height - self.radiusY); CGContextAddLineToPoint(context, self.x, self.y + self.radiusY); CGContextAddQuadCurveToPoint(context, self.x, self.y, self.x + self.radiusX, self.y); CGContextDrawPath(context, kCGPathFillStroke); } +(void)drawWithContext:(CGContextRef)context andX:(CGFloat)x andY:(CGFloat)y andRadiusX:(CGFloat)rx andRadiusY:(CGFloat)ry andWidth:(CGFloat)w andHeight:(CGFloat)h andStrokeWidth:(CGFloat)sw andStrokeColor:(CGColorRef)sc { if (rx > (w/2)) { rx = w/2; } if (ry > (h/2)) { ry = h/2; } CGContextSetLineWidth(context, sw); CGContextSetStrokeColorWithColor(context, sc); // 1. top left corner CGContextMoveToPoint(context, x+rx, y); // 2. line to right corner CGContextAddLineToPoint(context, x + w - rx, y); // 3. top right rounded corner CGContextAddQuadCurveToPoint(context, x + w, y, x + w, y+ry); // 4. line down the right CGContextAddLineToPoint(context, x + w, y + h - ry); // 5. lower right corner CGContextAddQuadCurveToPoint(context, x + w, y + h, x + w - rx, y + h); // 6. lower line to left corner CGContextAddLineToPoint(context, x + rx, y + h); // 7. lower left corner CGContextAddQuadCurveToPoint(context, x, y+h, x, y + h - ry); // 8. line from lower left to upper left CGContextAddLineToPoint(context, x, y+ry); // 9. upper left corner CGContextAddQuadCurveToPoint(context, x, y, x+rx, y); CGContextStrokePath(context); } +(void)drawWithContext:(CGContextRef)context andX:(CGFloat)x andY:(CGFloat)y andRadiusX:(CGFloat)rx andRadiusY:(CGFloat)ry andWidth:(CGFloat)w andHeight:(CGFloat)h andStrokeWidth:(CGFloat)sw andStrokeColor:(CGColorRef)sc andFillColor:(CGColorRef) fc { if (rx > (w/2)) { rx = w/2; } if (ry > (h/2)) { ry = h/2; } CGContextSetLineWidth(context, sw); CGContextSetStrokeColorWithColor(context, sc); CGContextSetFillColorWithColor(context, fc); // 1. top left corner CGContextMoveToPoint(context, x+rx, y); // 2. line to right corner CGContextAddLineToPoint(context, x + w - rx, y); // 3. top right rounded corner CGContextAddQuadCurveToPoint(context, x + w, y, x + w, y+ry); // 4. line down the right CGContextAddLineToPoint(context, x + w, y + h - ry); // 5. lower right corner CGContextAddQuadCurveToPoint(context, x + w, y + h, x + w - rx, y + h); // 6. lower line to left corner CGContextAddLineToPoint(context, x + rx, y + h); // 7. lower left corner CGContextAddQuadCurveToPoint(context, x, y+h, x, y + h - ry); // 8. line from lower left to upper left CGContextAddLineToPoint(context, x, y+ry); // 9. upper left corner CGContextAddQuadCurveToPoint(context, x, y, x+rx, y); CGContextDrawPath(context, kCGPathFillStroke); } @end @implementation QText @synthesize strokeColor, strokeWidth, fillColor, fontSize, text, x, y; -(void) drawWithContext:(CGContextRef)context { CGContextSetLineWidth(context, self.strokeWidth); CGContextSetStrokeColorWithColor(context, self.strokeColor); CGContextSetFillColorWithColor(context, self.fillColor); CGContextSetTextMatrix(context, CGAffineTransformMakeScale(1, -1)); CGContextSetTextDrawingMode(context, kCGTextFillStroke); CGContextSelectFont(context, "Helvetica", self.fontSize, kCGEncodingMacRoman); CGContextShowTextAtPoint(context, self.x, self.y, [self.text UTF8String], [self.text length]); CGContextSetTextMatrix(context, CGAffineTransformMakeScale(1, -1)); } @end