Spaces:
Running
Running
from fontTools.pens.basePen import BasePen | |
from Quartz.CoreGraphics import CGPathCreateMutable, CGPathMoveToPoint | |
from Quartz.CoreGraphics import CGPathAddLineToPoint, CGPathAddCurveToPoint | |
from Quartz.CoreGraphics import CGPathAddQuadCurveToPoint, CGPathCloseSubpath | |
__all__ = ["QuartzPen"] | |
class QuartzPen(BasePen): | |
"""A pen that creates a CGPath | |
Parameters | |
- path: an optional CGPath to add to | |
- xform: an optional CGAffineTransform to apply to the path | |
""" | |
def __init__(self, glyphSet, path=None, xform=None): | |
BasePen.__init__(self, glyphSet) | |
if path is None: | |
path = CGPathCreateMutable() | |
self.path = path | |
self.xform = xform | |
def _moveTo(self, pt): | |
x, y = pt | |
CGPathMoveToPoint(self.path, self.xform, x, y) | |
def _lineTo(self, pt): | |
x, y = pt | |
CGPathAddLineToPoint(self.path, self.xform, x, y) | |
def _curveToOne(self, p1, p2, p3): | |
(x1, y1), (x2, y2), (x3, y3) = p1, p2, p3 | |
CGPathAddCurveToPoint(self.path, self.xform, x1, y1, x2, y2, x3, y3) | |
def _qCurveToOne(self, p1, p2): | |
(x1, y1), (x2, y2) = p1, p2 | |
CGPathAddQuadCurveToPoint(self.path, self.xform, x1, y1, x2, y2) | |
def _closePath(self): | |
CGPathCloseSubpath(self.path) | |