From 0c6b67e8eca0dbe4baa1038082ca473802e5123b Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Thu, 18 Aug 2022 07:05:34 -0600 Subject: [PATCH] [scaleUpem] Optimize COLRv1 scale paint https://github.com/fonttools/fonttools/pull/2718/commits/032ff5620a7619b22599e73a2b21bd0c05a3510e --- Lib/fontTools/ttLib/scaleUpem.py | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/Lib/fontTools/ttLib/scaleUpem.py b/Lib/fontTools/ttLib/scaleUpem.py index 06c14fb0b4..1323475962 100644 --- a/Lib/fontTools/ttLib/scaleUpem.py +++ b/Lib/fontTools/ttLib/scaleUpem.py @@ -145,21 +145,31 @@ def visit(visitor, varData): # COLRv1 - -@ScalerVisitor.register(otTables.BaseGlyphPaintRecord) -def visit(visitor, record): - oldPaint = record.Paint +def _setup_scale_paint(paint, scale): + if -2 <= scale <= 2 - (1 >> 14): + paint.Format = 20 # PaintScaleUniform + paint.scale = scale + return transform = otTables.Affine2x3() transform.populateDefaults() transform.xy = transform.yx = transform.dx = transform.dy = 0 - transform.xx = transform.yy = visitor.scaleFactor + transform.xx = transform.yy = scale + + paint.Format = 12 # PaintTransform + paint.Transform = transform + + +@ScalerVisitor.register(otTables.BaseGlyphPaintRecord) +def visit(visitor, record): + oldPaint = record.Paint scale = otTables.Paint() - scale.Format = 12 # PaintTransform - scale.Transform = transform + _setup_scale_paint(scale, visitor.scaleFactor) scale.Paint = oldPaint + record.Paint = scale + return True @@ -175,12 +185,7 @@ def visit(visitor, paint): del paint.Paint del paint.Glyph - transform = otTables.Affine2x3() - transform.xy = transform.yx = transform.dx = transform.dy = 0 - transform.xx = transform.yy = 1 / visitor.scaleFactor - - paint.Format = 12 # PaintTransform - paint.Transform = transform + _setup_scale_paint(paint, 1 / visitor.scaleFactor) paint.Paint = newPaint visitor.visit(newPaint.Paint)