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)

