1from fontTools.pens.basePen import BasePen 2 3from Quartz.CoreGraphics import CGPathCreateMutable, CGPathMoveToPoint 4from Quartz.CoreGraphics import CGPathAddLineToPoint, CGPathAddCurveToPoint 5from Quartz.CoreGraphics import CGPathAddQuadCurveToPoint, CGPathCloseSubpath 6 7 8__all__ = ["QuartzPen"] 9 10 11class QuartzPen(BasePen): 12 13 """A pen that creates a CGPath 14 15 Parameters 16 - path: an optional CGPath to add to 17 - xform: an optional CGAffineTransform to apply to the path 18 """ 19 20 def __init__(self, glyphSet, path=None, xform=None): 21 BasePen.__init__(self, glyphSet) 22 if path is None: 23 path = CGPathCreateMutable() 24 self.path = path 25 self.xform = xform 26 27 def _moveTo(self, pt): 28 x, y = pt 29 CGPathMoveToPoint(self.path, self.xform, x, y) 30 31 def _lineTo(self, pt): 32 x, y = pt 33 CGPathAddLineToPoint(self.path, self.xform, x, y) 34 35 def _curveToOne(self, p1, p2, p3): 36 (x1, y1), (x2, y2), (x3, y3) = p1, p2, p3 37 CGPathAddCurveToPoint(self.path, self.xform, x1, y1, x2, y2, x3, y3) 38 39 def _qCurveToOne(self, p1, p2): 40 (x1, y1), (x2, y2) = p1, p2 41 CGPathAddQuadCurveToPoint(self.path, self.xform, x1, y1, x2, y2) 42 43 def _closePath(self): 44 CGPathCloseSubpath(self.path) 45 46