xref: /aosp_15_r20/external/fonttools/Lib/fontTools/pens/quartzPen.py (revision e1fe3e4ad2793916b15cccdc4a7da52a7e1dd0e9)
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