From 8a5c924940e8e3a8d5e085f87f066f494bbe1ab6 Mon Sep 17 00:00:00 2001 From: Just van Rossum Date: Sat, 3 Sep 2022 15:01:58 +0200 Subject: [PATCH] Add --palette-index command line option; add getPalette() method to font --- Lib/blackrenderer/__main__.py | 2 + Lib/blackrenderer/font.py | 7 + Lib/blackrenderer/render.py | 4 +- Tests/data/Nabla.subset.ttf | Bin 0 -> 5228 bytes .../expectedOutput/glyph_nabla_A_1_cairo.png | Bin 0 -> 11812 bytes .../glyph_nabla_A_1_coregraphics.png | Bin 0 -> 24530 bytes Tests/expectedOutput/glyph_nabla_A_1_skia.png | Bin 0 -> 11754 bytes Tests/expectedOutput/glyph_nabla_A_1_svg.svg | 34 ++++ Tests/expectedOutput/glyph_nabla_A_cairo.png | Bin 0 -> 10246 bytes .../glyph_nabla_A_coregraphics.png | Bin 0 -> 22247 bytes Tests/expectedOutput/glyph_nabla_A_skia.png | Bin 0 -> 10328 bytes Tests/expectedOutput/glyph_nabla_A_svg.svg | 34 ++++ Tests/test_glyph_render.py | 147 ++++++++++-------- 13 files changed, 158 insertions(+), 70 deletions(-) create mode 100644 Tests/data/Nabla.subset.ttf create mode 100644 Tests/expectedOutput/glyph_nabla_A_1_cairo.png create mode 100644 Tests/expectedOutput/glyph_nabla_A_1_coregraphics.png create mode 100644 Tests/expectedOutput/glyph_nabla_A_1_skia.png create mode 100644 Tests/expectedOutput/glyph_nabla_A_1_svg.svg create mode 100644 Tests/expectedOutput/glyph_nabla_A_cairo.png create mode 100644 Tests/expectedOutput/glyph_nabla_A_coregraphics.png create mode 100644 Tests/expectedOutput/glyph_nabla_A_skia.png create mode 100644 Tests/expectedOutput/glyph_nabla_A_svg.svg diff --git a/Lib/blackrenderer/__main__.py b/Lib/blackrenderer/__main__.py index 49335eb..8e6e56b 100644 --- a/Lib/blackrenderer/__main__.py +++ b/Lib/blackrenderer/__main__.py @@ -31,6 +31,7 @@ def main(): parser.add_argument("--features", type=parseFeatures) parser.add_argument("--variations", type=parseVariations) parser.add_argument("--margin", type=float, default=20) + parser.add_argument("--palette-index", type=int, default=0) parser.add_argument( "--backend", default=None, @@ -47,6 +48,7 @@ def main(): margin=args.margin, features=args.features, variations=args.variations, + paletteIndex=args.palette_index, backendName=args.backend, ) diff --git a/Lib/blackrenderer/font.py b/Lib/blackrenderer/font.py index 6c772c9..15efa0a 100644 --- a/Lib/blackrenderer/font.py +++ b/Lib/blackrenderer/font.py @@ -97,6 +97,13 @@ def __init__(self, path=None, *, fontNumber=0, lazy=True, ttFont=None, hbFont=No def unitsPerEm(self): return self.hbFont.face.upem + def getPalette(self, paletteIndex): + if not self.palettes: + return None + # clamp index + paletteIndex = max(0, min(paletteIndex, len(self.palettes) - 1)) + return self.palettes[paletteIndex] + def setLocation(self, location): if location is None: location = {} diff --git a/Lib/blackrenderer/render.py b/Lib/blackrenderer/render.py index fecf515..4455311 100644 --- a/Lib/blackrenderer/render.py +++ b/Lib/blackrenderer/render.py @@ -25,6 +25,7 @@ def renderText( margin=20, features=None, variations=None, + paletteIndex=0, backendName=None, lang=None, script=None, @@ -44,6 +45,7 @@ def renderText( buf.language = lang if variations: font.setLocation(variations) + palette = font.getPalette(paletteIndex) hb.shape(font.hbFont, buf, features) @@ -73,7 +75,7 @@ def renderText( for glyph in glyphLine: with canvas.savedState(): canvas.translate(glyph.xOffset, glyph.yOffset) - font.drawGlyph(glyph.name, canvas) + font.drawGlyph(glyph.name, canvas, palette=palette) canvas.translate(glyph.xAdvance, glyph.yAdvance) if outputPath is not None: diff --git a/Tests/data/Nabla.subset.ttf b/Tests/data/Nabla.subset.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d6356feb6bbe1e2937024f563fdd3f0c90e9674d GIT binary patch literal 5228 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 literal 0 HcmV?d00001 diff --git a/Tests/expectedOutput/glyph_nabla_A_1_coregraphics.png b/Tests/expectedOutput/glyph_nabla_A_1_coregraphics.png new file mode 100644 index 0000000000000000000000000000000000000000..258bdb610b55212f187e416d95e9bb2f18fb746c GIT binary patch literal 24530 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 Bf;|8L literal 0 HcmV?d00001 diff --git a/Tests/expectedOutput/glyph_nabla_A_1_skia.png b/Tests/expectedOutput/glyph_nabla_A_1_skia.png new file mode 100644 index 0000000000000000000000000000000000000000..fbaa6d93d09f50ad06e1bf1368f2bdb2e575da55 GIT binary patch literal 11754 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/expectedOutput/glyph_nabla_A_cairo.png b/Tests/expectedOutput/glyph_nabla_A_cairo.png new file mode 100644 index 0000000000000000000000000000000000000000..64032a3e02d7b84d2f8d64c5fb19d48f5a3c836e GIT binary patch literal 10246 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 Ya;e91W~hfA6@-!brYKn@ZW#3c0C`b>ZvX%Q literal 0 HcmV?d00001 diff --git a/Tests/expectedOutput/glyph_nabla_A_svg.svg b/Tests/expectedOutput/glyph_nabla_A_svg.svg new file mode 100644 index 0000000..6707c07 --- /dev/null +++ b/Tests/expectedOutput/glyph_nabla_A_svg.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/test_glyph_render.py b/Tests/test_glyph_render.py index cfaebc1..168daaf 100644 --- a/Tests/test_glyph_render.py +++ b/Tests/test_glyph_render.py @@ -29,81 +29,85 @@ "crash": dataDir / "crash.subset.otf", "nested_paintglyph": dataDir / "nested-paintglyph.ttf", "ftvartest": dataDir / "TestVariableCOLR-VF.ttf", + "nabla": dataDir / "Nabla.subset.ttf", } test_glyphs = [ - ("noto", "uni2693", None), - ("noto", "uni2694", None), - ("noto", "u1F30A", None), - ("noto", "u1F943", None), - ("mutator", "B", None), - ("mutator", "D", {"wdth": 1000}), - ("twemoji", "uni3299", None), - ("more_samples", "cross_glyph", None), - ("more_samples", "skew_0_15_center_500.0_500.0", None), - ("more_samples", "skew_-10_20_center_500.0_500.0", None), - ("more_samples", "skew_-10_20_center_1000_1000", None), - ("more_samples", "transform_matrix_1_0_0_1_125_125", None), - ("more_samples", "transform_matrix_1.5_0_0_1.5_0_0", None), - ("more_samples", "transform_matrix_0.9659_0.2588_-0.2588_0.9659_0_0", None), - ("more_samples", "transform_matrix_1.0_0.0_0.6_1.0_-300.0_0.0", None), - ("more_samples", "clip_box_top_left", None), - ("more_samples", "clip_box_bottom_left", None), - ("more_samples", "clip_box_bottom_right", None), - ("more_samples", "clip_box_top_right", None), - ("more_samples", "clip_box_center", None), - ("more_samples", "composite_DEST_OVER", None), - ("more_samples", "composite_XOR", None), - ("more_samples", "composite_OVERLAY", None), - ("more_samples", "composite_SRC_IN", None), - ("more_samples", "composite_PLUS", None), - ("more_samples", "composite_LIGHTEN", None), - ("more_samples", "composite_MULTIPLY", None), - ("more_samples", "clip_shade_center", None), - ("more_samples", "clip_shade_top_left", None), - ("more_samples", "clip_shade_bottom_left", None), - ("more_samples", "clip_shade_bottom_right", None), - ("more_samples", "clip_shade_top_right", None), - ("more_samples", "inset_clipped_radial_reflect", None), - # ("more_samples", "sweep", None), - ("more_samples", "transformed_sweep", None), - ("more_samples", "composite_colr_glyph", None), - ("more_samples", "linear_repeat_0_1", None), - ("more_samples", "linear_repeat_0.2_0.8", None), - ("more_samples", "linear_repeat_0_1.5", None), - ("more_samples", "linear_repeat_0.5_1.5", None), - ("more_samples", "scale_0.5_1.5_center_500.0_500.0", None), - ("more_samples", "scale_1.5_1.5_center_500.0_500.0", None), - ("more_samples", "scale_0.5_1.5_center_0_0", None), - ("more_samples", "scale_1.5_1.5_center_0_0", None), - ("more_samples", "scale_0.5_1.5_center_1000_1000", None), - ("more_samples", "scale_1.5_1.5_center_1000_1000", None), - ("more_samples", "linear_gradient_extend_mode_pad", None), - ("more_samples", "linear_gradient_extend_mode_repeat", None), - ("more_samples", "linear_gradient_extend_mode_reflect", None), - ("more_samples", "radial_gradient_extend_mode_pad", None), - ("more_samples", "radial_gradient_extend_mode_repeat", None), - ("more_samples", "radial_gradient_extend_mode_reflect", None), - ("more_samples", "rotate_10_center_0_0", None), - ("more_samples", "rotate_-10_center_1000_1000", None), - ("more_samples", "rotate_25_center_500.0_500.0", None), - ("more_samples", "rotate_-15_center_500.0_500.0", None), - ("more_samples", "skew_25_0_center_0_0", None), - ("more_samples", "skew_25_0_center_500.0_500.0", None), - ("more_samples", "skew_0_15_center_0_0", None), - ("more_samples", "upem_box_glyph", None), - ("nested_paintglyph", "A", None), - ("ftvartest", "A", {"wght": 400}), - ("ftvartest", "A", {"wght": 700}), - ("ftvartest", "B", {"wght": 400}), - ("ftvartest", "B", {"wght": 700}), + ("noto", "uni2693", None, 0), + ("noto", "uni2694", None, 0), + ("noto", "u1F30A", None, 0), + ("noto", "u1F943", None, 0), + ("mutator", "B", None, 0), + ("mutator", "D", {"wdth": 1000}, 0), + ("twemoji", "uni3299", None, 0), + ("more_samples", "cross_glyph", None, 0), + ("more_samples", "skew_0_15_center_500.0_500.0", None, 0), + ("more_samples", "skew_-10_20_center_500.0_500.0", None, 0), + ("more_samples", "skew_-10_20_center_1000_1000", None, 0), + ("more_samples", "transform_matrix_1_0_0_1_125_125", None, 0), + ("more_samples", "transform_matrix_1.5_0_0_1.5_0_0", None, 0), + ("more_samples", "transform_matrix_0.9659_0.2588_-0.2588_0.9659_0_0", None, 0), + ("more_samples", "transform_matrix_1.0_0.0_0.6_1.0_-300.0_0.0", None, 0), + ("more_samples", "clip_box_top_left", None, 0), + ("more_samples", "clip_box_bottom_left", None, 0), + ("more_samples", "clip_box_bottom_right", None, 0), + ("more_samples", "clip_box_top_right", None, 0), + ("more_samples", "clip_box_center", None, 0), + ("more_samples", "composite_DEST_OVER", None, 0), + ("more_samples", "composite_XOR", None, 0), + ("more_samples", "composite_OVERLAY", None, 0), + ("more_samples", "composite_SRC_IN", None, 0), + ("more_samples", "composite_PLUS", None, 0), + ("more_samples", "composite_LIGHTEN", None, 0), + ("more_samples", "composite_MULTIPLY", None, 0), + ("more_samples", "clip_shade_center", None, 0), + ("more_samples", "clip_shade_top_left", None, 0), + ("more_samples", "clip_shade_bottom_left", None, 0), + ("more_samples", "clip_shade_bottom_right", None, 0), + ("more_samples", "clip_shade_top_right", None, 0), + ("more_samples", "inset_clipped_radial_reflect", None, 0), + ("more_samples", "transformed_sweep", None, 0), + ("more_samples", "composite_colr_glyph", None, 0), + ("more_samples", "linear_repeat_0_1", None, 0), + ("more_samples", "linear_repeat_0.2_0.8", None, 0), + ("more_samples", "linear_repeat_0_1.5", None, 0), + ("more_samples", "linear_repeat_0.5_1.5", None, 0), + ("more_samples", "scale_0.5_1.5_center_500.0_500.0", None, 0), + ("more_samples", "scale_1.5_1.5_center_500.0_500.0", None, 0), + ("more_samples", "scale_0.5_1.5_center_0_0", None, 0), + ("more_samples", "scale_1.5_1.5_center_0_0", None, 0), + ("more_samples", "scale_0.5_1.5_center_1000_1000", None, 0), + ("more_samples", "scale_1.5_1.5_center_1000_1000", None, 0), + ("more_samples", "linear_gradient_extend_mode_pad", None, 0), + ("more_samples", "linear_gradient_extend_mode_repeat", None, 0), + ("more_samples", "linear_gradient_extend_mode_reflect", None, 0), + ("more_samples", "radial_gradient_extend_mode_pad", None, 0), + ("more_samples", "radial_gradient_extend_mode_repeat", None, 0), + ("more_samples", "radial_gradient_extend_mode_reflect", None, 0), + ("more_samples", "rotate_10_center_0_0", None, 0), + ("more_samples", "rotate_-10_center_1000_1000", None, 0), + ("more_samples", "rotate_25_center_500.0_500.0", None, 0), + ("more_samples", "rotate_-15_center_500.0_500.0", None, 0), + ("more_samples", "skew_25_0_center_0_0", None, 0), + ("more_samples", "skew_25_0_center_500.0_500.0", None, 0), + ("more_samples", "skew_0_15_center_0_0", None, 0), + ("more_samples", "upem_box_glyph", None, 0), + ("nested_paintglyph", "A", None, 0), + ("ftvartest", "A", {"wght": 400}, 0), + ("ftvartest", "A", {"wght": 700}, 0), + ("ftvartest", "B", {"wght": 400}, 0), + ("ftvartest", "B", {"wght": 700}, 0), + ("nabla", "A", None, 0), + ("nabla", "A", None, 1), ] -@pytest.mark.parametrize("fontName, glyphName, location", test_glyphs) +@pytest.mark.parametrize("fontName, glyphName, location, paletteIndex", test_glyphs) @pytest.mark.parametrize("backendName, surfaceClass", backends) -def test_renderGlyph(backendName, surfaceClass, fontName, glyphName, location): +def test_renderGlyph( + backendName, surfaceClass, fontName, glyphName, location, paletteIndex +): font = BlackRendererFont(testFonts[fontName]) font.setLocation(location) @@ -111,15 +115,20 @@ def test_renderGlyph(backendName, surfaceClass, fontName, glyphName, location): boundingBox = font.getGlyphBounds(glyphName) boundingBox = scaleRect(boundingBox, scaleFactor, scaleFactor) boundingBox = intRect(boundingBox) + palette = font.getPalette(paletteIndex) surface = surfaceClass() ext = surface.fileExtension with surface.canvas(boundingBox) as canvas: canvas.scale(scaleFactor) - font.drawGlyph(glyphName, canvas) + font.drawGlyph(glyphName, canvas, palette=palette) locationString = "_" + _locationToString(location) if location else "" - fileName = f"glyph_{fontName}_{glyphName}{locationString}_{backendName}{ext}" + paletteString = "_" + str(paletteIndex) if paletteIndex else "" + fileName = ( + f"glyph_{fontName}_{glyphName}{locationString}{paletteString}" + f"_{backendName}{ext}" + ) expectedPath = expectedOutputDir / fileName outputPath = tmpOutputDir / fileName surface.saveImage(outputPath)