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 """A pen that creates a CGPath 13 14 Parameters 15 - path: an optional CGPath to add to 16 - xform: an optional CGAffineTransform to apply to the path 17 """ 18 19 def __init__(self, glyphSet, path=None, xform=None): 20 BasePen.__init__(self, glyphSet) 21 if path is None: 22 path = CGPathCreateMutable() 23 self.path = path 24 self.xform = xform 25 26 def _moveTo(self, pt): 27 x, y = pt 28 CGPathMoveToPoint(self.path, self.xform, x, y) 29 30 def _lineTo(self, pt): 31 x, y = pt 32 CGPathAddLineToPoint(self.path, self.xform, x, y) 33 34 def _curveToOne(self, p1, p2, p3): 35 (x1, y1), (x2, y2), (x3, y3) = p1, p2, p3 36 CGPathAddCurveToPoint(self.path, self.xform, x1, y1, x2, y2, x3, y3) 37 38 def _qCurveToOne(self, p1, p2): 39 (x1, y1), (x2, y2) = p1, p2 40 CGPathAddQuadCurveToPoint(self.path, self.xform, x1, y1, x2, y2) 41 42 def _closePath(self): 43 CGPathCloseSubpath(self.path) 44