aboutsummaryrefslogtreecommitdiff
path: root/Lib/fontTools/pens/quartzPen.py
blob: d35a993bbc5f9b1cb174e3a71077ca93e82372fc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
from fontTools.misc.py23 import *
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)