|
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) |
|
|