[interpolatable] Derive RecordingPen from AbstractPen, not BasePen

This commit is contained in:
Behdad Esfahbod 2017-02-21 12:08:07 -06:00
parent f0584a8507
commit 5a06247ef8

View File

@ -8,7 +8,7 @@ other interpolatability (or lack thereof) issues.
from __future__ import print_function, division, absolute_import from __future__ import print_function, division, absolute_import
from fontTools.misc.py23 import * from fontTools.misc.py23 import *
from fontTools.pens.basePen import BasePen from fontTools.pens.basePen import AbstractPen, BasePen
from fontTools.pens.statisticsPen import StatisticsPen from fontTools.pens.statisticsPen import StatisticsPen
import itertools import itertools
@ -47,33 +47,28 @@ class PerContourOrComponentPen(PerContourPen):
self.value[-1].addComponent(glyphName, transformation) self.value[-1].addComponent(glyphName, transformation)
class RecordingNoComponentsPen(BasePen): class RecordingPen(AbstractPen):
def __init__(self, glyphset=None): # glyphset is unused def __init__(self):
BasePen.__init__(self, glyphset)
self._glyphset = glyphset
self.value = [] self.value = []
def _moveTo(self, p0): def moveTo(self, p0):
self.value.append(('moveTo', (p0,))) self.value.append(('moveTo', (p0,)))
def _lineTo(self, p1): def lineTo(self, p1):
self.value.append(('lineTo', (p1,))) self.value.append(('lineTo', (p1,)))
def _qCurveToOne(self, p1, p2): def qCurveTo(self, *points):
self.value.append(('qCurveTo', (p1,p2))) self.value.append(('qCurveTo', points))
def _curveToOne(self, p1, p2, p3): def curveTo(self, *points):
self.value.append(('curveTo', (p1,p2,p3))) self.value.append(('curveTo', points))
def _closePath(self): def closePath(self):
self.value.append(('closePath', ())) self.value.append(('closePath', ()))
def _endPath(self): def endPath(self):
self.value.append(('endPath', ())) self.value.append(('endPath', ()))
def addComponent(self, glyphName, transformation):
self.value.append(('addComponent', (glyphName, transformation)))
def replay(self, pen): def replay(self, pen):
for operator,operands in self.value: for operator,operands in self.value:
getattr(pen, operator)(*operands) getattr(pen, operator)(*operands)
class RecordingPen(RecordingNoComponentsPen):
def addComponent(self, glyphName, transformation):
self.value.append(('addComponent', (glyphName, transformation)))
def _vdiff(v0, v1): def _vdiff(v0, v1):
return tuple(b-a for a,b in zip(v0,v1)) return tuple(b-a for a,b in zip(v0,v1))
@ -137,7 +132,8 @@ def test(glyphsets, glyphs=None, names=None):
#print('.', end='') #print('.', end='')
glyph = glyphset[glyph_name] glyph = glyphset[glyph_name]
perContourPen = PerContourOrComponentPen(RecordingPen, glyphset=glyphset) penClass = lambda glyphset: RecordingPen()
perContourPen = PerContourOrComponentPen(penClass, glyphset=glyphset)
glyph.draw(perContourPen) glyph.draw(perContourPen)
contourPens = perContourPen.value contourPens = perContourPen.value
del perContourPen del perContourPen