• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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