mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-05-03 17:08:09 +02:00
Add test for SVG font palettes
This commit is contained in:
parent
3cc9e198fd
commit
b68583ee54
7 changed files with 327 additions and 2 deletions
|
|
@ -795,7 +795,7 @@ get_color (cairo_svg_glyph_render_t *svg_render,
|
|||
if (end == s)
|
||||
return FALSE;
|
||||
|
||||
if (svg_render->palette && entry > 0 && entry < svg_render->num_palette_entries) {
|
||||
if (svg_render->palette && entry >= 0 && entry < svg_render->num_palette_entries) {
|
||||
FT_Color *palette_color = &svg_render->palette[entry];
|
||||
color->type = RGB;
|
||||
color->red = palette_color->red / 255.0;
|
||||
|
|
|
|||
226
test/cairo-svg-test-palette.ttx
Normal file
226
test/cairo-svg-test-palette.ttx
Normal file
|
|
@ -0,0 +1,226 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="4.38">
|
||||
|
||||
<GlyphOrder>
|
||||
<!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
|
||||
<GlyphID id="0" name=".notdef"/>
|
||||
<GlyphID id="1" name="zero"/>
|
||||
<GlyphID id="2" name="one"/>
|
||||
</GlyphOrder>
|
||||
|
||||
<head>
|
||||
<!-- Most of this table will be recalculated by the compiler -->
|
||||
<tableVersion value="1.0"/>
|
||||
<fontRevision value="1.0"/>
|
||||
<checkSumAdjustment value="0xcb6df82"/>
|
||||
<magicNumber value="0x5f0f3cf5"/>
|
||||
<flags value="00000000 00000011"/>
|
||||
<unitsPerEm value="1000"/>
|
||||
<created value="Wed Jun 15 00:00:00 2022"/>
|
||||
<modified value="Sat Jan 21 05:46:29 2023"/>
|
||||
<xMin value="0"/>
|
||||
<yMin value="0"/>
|
||||
<xMax value="1000"/>
|
||||
<yMax value="1000"/>
|
||||
<macStyle value="00000000 00000000"/>
|
||||
<lowestRecPPEM value="6"/>
|
||||
<fontDirectionHint value="2"/>
|
||||
<indexToLocFormat value="0"/>
|
||||
<glyphDataFormat value="0"/>
|
||||
</head>
|
||||
|
||||
<hhea>
|
||||
<tableVersion value="0x00010000"/>
|
||||
<ascent value="1000"/>
|
||||
<descent value="0"/>
|
||||
<lineGap value="200"/>
|
||||
<advanceWidthMax value="1100"/>
|
||||
<minLeftSideBearing value="0"/>
|
||||
<minRightSideBearing value="100"/>
|
||||
<xMaxExtent value="1000"/>
|
||||
<caretSlopeRise value="1"/>
|
||||
<caretSlopeRun value="0"/>
|
||||
<caretOffset value="0"/>
|
||||
<reserved0 value="0"/>
|
||||
<reserved1 value="0"/>
|
||||
<reserved2 value="0"/>
|
||||
<reserved3 value="0"/>
|
||||
<metricDataFormat value="0"/>
|
||||
<numberOfHMetrics value="1"/>
|
||||
</hhea>
|
||||
|
||||
<maxp>
|
||||
<!-- Most of this table will be recalculated by the compiler -->
|
||||
<tableVersion value="0x10000"/>
|
||||
<numGlyphs value="3"/>
|
||||
<maxPoints value="4"/>
|
||||
<maxContours value="1"/>
|
||||
<maxCompositePoints value="0"/>
|
||||
<maxCompositeContours value="0"/>
|
||||
<maxZones value="1"/>
|
||||
<maxTwilightPoints value="0"/>
|
||||
<maxStorage value="0"/>
|
||||
<maxFunctionDefs value="0"/>
|
||||
<maxInstructionDefs value="0"/>
|
||||
<maxStackElements value="256"/>
|
||||
<maxSizeOfInstructions value="1"/>
|
||||
<maxComponentElements value="0"/>
|
||||
<maxComponentDepth value="0"/>
|
||||
</maxp>
|
||||
|
||||
<OS_2>
|
||||
<!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
|
||||
will be recalculated by the compiler -->
|
||||
<version value="3"/>
|
||||
<xAvgCharWidth value="1000"/>
|
||||
<usWeightClass value="400"/>
|
||||
<usWidthClass value="5"/>
|
||||
<fsType value="00000000 00000001"/>
|
||||
<ySubscriptXSize value="600"/>
|
||||
<ySubscriptYSize value="600"/>
|
||||
<ySubscriptXOffset value="0"/>
|
||||
<ySubscriptYOffset value="75"/>
|
||||
<ySuperscriptXSize value="600"/>
|
||||
<ySuperscriptYSize value="600"/>
|
||||
<ySuperscriptXOffset value="0"/>
|
||||
<ySuperscriptYOffset value="300"/>
|
||||
<yStrikeoutSize value="0"/>
|
||||
<yStrikeoutPosition value="300"/>
|
||||
<sFamilyClass value="0"/>
|
||||
<panose>
|
||||
<bFamilyType value="0"/>
|
||||
<bSerifStyle value="0"/>
|
||||
<bWeight value="0"/>
|
||||
<bProportion value="0"/>
|
||||
<bContrast value="0"/>
|
||||
<bStrokeVariation value="0"/>
|
||||
<bArmStyle value="0"/>
|
||||
<bLetterForm value="0"/>
|
||||
<bMidline value="0"/>
|
||||
<bXHeight value="0"/>
|
||||
</panose>
|
||||
<ulUnicodeRange1 value="00000000 00000000 00000000 00000001"/>
|
||||
<ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/>
|
||||
<ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/>
|
||||
<ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/>
|
||||
<achVendID value="djr "/>
|
||||
<fsSelection value="00000000 01000000"/>
|
||||
<usFirstCharIndex value="48"/>
|
||||
<usLastCharIndex value="49"/>
|
||||
<sTypoAscender value="1000"/>
|
||||
<sTypoDescender value="0"/>
|
||||
<sTypoLineGap value="200"/>
|
||||
<usWinAscent value="1000"/>
|
||||
<usWinDescent value="300"/>
|
||||
<ulCodePageRange1 value="00000000 00000000 00000000 00000001"/>
|
||||
<ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
|
||||
<sxHeight value="500"/>
|
||||
<sCapHeight value="720"/>
|
||||
<usDefaultChar value="0"/>
|
||||
<usBreakChar value="32"/>
|
||||
<usMaxContext value="3"/>
|
||||
</OS_2>
|
||||
|
||||
<hmtx>
|
||||
<mtx name=".notdef" width="1100" lsb="0"/>
|
||||
<mtx name="one" width="1100" lsb="0"/>
|
||||
<mtx name="zero" width="1100" lsb="0"/>
|
||||
</hmtx>
|
||||
|
||||
<cmap>
|
||||
<tableVersion version="0"/>
|
||||
<cmap_format_4 platformID="0" platEncID="3" language="0">
|
||||
<map code="0x30" name="zero"/><!-- DIGIT ZERO -->
|
||||
<map code="0x31" name="one"/><!-- DIGIT ONE -->
|
||||
</cmap_format_4>
|
||||
</cmap>
|
||||
|
||||
<loca>
|
||||
<!-- The 'loca' table will be calculated by the compiler -->
|
||||
</loca>
|
||||
|
||||
<glyf>
|
||||
|
||||
<!-- The xMin, yMin, xMax and yMax values
|
||||
will be recalculated by the compiler. -->
|
||||
|
||||
<TTGlyph name=".notdef"/><!-- contains no outline data -->
|
||||
|
||||
<TTGlyph name="one" xMin="0" yMin="0" xMax="1000" yMax="1000">
|
||||
<contour>
|
||||
<pt x="0" y="0" on="1"/>
|
||||
<pt x="0" y="1000" on="1"/>
|
||||
<pt x="1000" y="1000" on="1"/>
|
||||
<pt x="1000" y="0" on="1"/>
|
||||
</contour>
|
||||
<instructions/>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name="zero" xMin="0" yMin="0" xMax="1000" yMax="1000">
|
||||
<contour>
|
||||
<pt x="0" y="0" on="1"/>
|
||||
<pt x="0" y="1000" on="1"/>
|
||||
<pt x="1000" y="1000" on="1"/>
|
||||
<pt x="1000" y="0" on="1"/>
|
||||
</contour>
|
||||
<instructions/>
|
||||
</TTGlyph>
|
||||
|
||||
</glyf>
|
||||
|
||||
<name>
|
||||
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
|
||||
Cairo Svg Test Palette
|
||||
</namerecord>
|
||||
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
|
||||
Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
|
||||
Cairo Svg Test Palette Regular
|
||||
</namerecord>
|
||||
</name>
|
||||
|
||||
<post>
|
||||
<formatType value="3.0"/>
|
||||
<italicAngle value="0.0"/>
|
||||
<underlinePosition value="0"/>
|
||||
<underlineThickness value="0"/>
|
||||
<isFixedPitch value="0"/>
|
||||
<minMemType42 value="0"/>
|
||||
<maxMemType42 value="0"/>
|
||||
<minMemType1 value="0"/>
|
||||
<maxMemType1 value="0"/>
|
||||
</post>
|
||||
|
||||
<CPAL>
|
||||
<version value="0"/>
|
||||
<numPaletteEntries value="2"/>
|
||||
<palette index="0">
|
||||
<color index="0" value="#C5A1D7FF"/>
|
||||
<color index="1" value="#80DFC8FF"/>
|
||||
</palette>
|
||||
<palette index="1">
|
||||
<color index="0" value="#6392A9FF"/>
|
||||
<color index="1" value="#7896B3FF"/>
|
||||
</palette>
|
||||
</CPAL>
|
||||
|
||||
<SVG>
|
||||
<svgDoc endGlyphID="0" startGlyphID="0">
|
||||
<![CDATA[<svg xmlns="http://www.w3.org/2000/svg"></svg>]]>
|
||||
</svgDoc>
|
||||
<svgDoc endGlyphID="1" startGlyphID="1">
|
||||
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="100" y="-750" width="800" height="500"
|
||||
fill="var(--color0, red)" />
|
||||
</svg>]]>
|
||||
</svgDoc>
|
||||
<svgDoc endGlyphID="2" startGlyphID="2">
|
||||
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="100" y="-750" width="800" height="500"
|
||||
fill="var(--color1, blue)" />
|
||||
</svg>]]>
|
||||
</svgDoc>
|
||||
</SVG>
|
||||
|
||||
</ttFont>
|
||||
89
test/ft-svg-render-palette.c
Normal file
89
test/ft-svg-render-palette.c
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
/*
|
||||
* Copyright © 2023 Adrian Johnson
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person
|
||||
* obtaining a copy of this software and associated documentation
|
||||
* files (the "Software"), to deal in the Software without
|
||||
* restriction, including without limitation the rights to use, copy,
|
||||
* modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
* of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*
|
||||
* Author: Adrian Johnson <ajohnson@redneon.com>
|
||||
*/
|
||||
|
||||
#include "cairo-test.h"
|
||||
#include <cairo-ft.h>
|
||||
|
||||
#define FONT_SIZE 50
|
||||
#define MARGIN 5
|
||||
#define WIDTH (FONT_SIZE*8 + MARGIN*9)
|
||||
#define HEIGHT (FONT_SIZE + MARGIN*2)
|
||||
|
||||
#define FONT_FILE "cairo-svg-test-palette.ttf"
|
||||
|
||||
#define TEXT "01"
|
||||
|
||||
|
||||
static cairo_test_status_t
|
||||
draw (cairo_t *cr, int width, int height)
|
||||
{
|
||||
cairo_test_status_t result;
|
||||
cairo_font_options_t *font_options;
|
||||
|
||||
cairo_set_source_rgb (cr, 1, 1, 1);
|
||||
cairo_paint (cr);
|
||||
cairo_set_source_rgb (cr, 0, 0, 0);
|
||||
|
||||
result = cairo_test_ft_select_font_from_file (cr, FONT_FILE);
|
||||
if (result)
|
||||
return result;
|
||||
|
||||
cairo_set_font_size (cr, FONT_SIZE);
|
||||
cairo_move_to (cr, MARGIN, FONT_SIZE + MARGIN);
|
||||
|
||||
font_options = cairo_font_options_create ();
|
||||
|
||||
/* Default palette */
|
||||
cairo_show_text (cr, TEXT);
|
||||
|
||||
/* Palette 1 */
|
||||
cairo_font_options_set_color_palette (font_options, 1);
|
||||
cairo_set_font_options (cr, font_options);
|
||||
cairo_show_text (cr, TEXT);
|
||||
|
||||
/* Palette 0, override color 0 */
|
||||
cairo_font_options_set_color_palette (font_options, 0);
|
||||
cairo_font_options_set_custom_palette_color (font_options, 0, 1, 0, 1, 0.5);
|
||||
cairo_set_font_options (cr, font_options);
|
||||
cairo_show_text (cr, TEXT);
|
||||
|
||||
/* Palette 1, override color 1 */
|
||||
cairo_font_options_set_color_palette (font_options, 1);
|
||||
cairo_font_options_set_custom_palette_color (font_options, 1, 0, 1, 1, 0.5);
|
||||
cairo_set_font_options (cr, font_options);
|
||||
cairo_show_text (cr, TEXT);
|
||||
|
||||
cairo_font_options_destroy (font_options);
|
||||
|
||||
return CAIRO_TEST_SUCCESS;
|
||||
}
|
||||
|
||||
CAIRO_TEST (ft_svg_render_palette,
|
||||
"Test cairo SVG font palettes",
|
||||
"svgrender", /* keywords */
|
||||
NULL, /* requirements */
|
||||
WIDTH, HEIGHT,
|
||||
NULL, draw)
|
||||
|
|
@ -435,7 +435,8 @@ test_ft_svg_font_sources = [
|
|||
|
||||
test_ft_svg_ttx_font_sources = [
|
||||
'ft-svg-cairo-logo.c',
|
||||
'ft-svg-render.c'
|
||||
'ft-svg-render.c',
|
||||
'ft-svg-render-palette.c'
|
||||
]
|
||||
|
||||
test_gl_sources = [
|
||||
|
|
@ -534,6 +535,7 @@ test_ttx_fonts = [
|
|||
'cairo-svg-test-doc.ttx',
|
||||
'cairo-svg-test-fill.ttx',
|
||||
'cairo-svg-test-gradient.ttx',
|
||||
'cairo-svg-test-palette.ttx',
|
||||
'cairo-svg-test-path.ttx',
|
||||
'cairo-svg-test-shapes.ttx',
|
||||
'cairo-svg-test-stroke.ttx',
|
||||
|
|
|
|||
BIN
test/reference/ft-svg-render-palette.ref.png
Normal file
BIN
test/reference/ft-svg-render-palette.ref.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 485 B |
4
test/svg/palette.0.color0.svg
Normal file
4
test/svg/palette.0.color0.svg
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="100" y="-750" width="800" height="500"
|
||||
fill="var(--color0, red)" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 149 B |
4
test/svg/palette.1.color1.svg
Normal file
4
test/svg/palette.1.color1.svg
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="100" y="-750" width="800" height="500"
|
||||
fill="var(--color1, blue)" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 150 B |
Loading…
Add table
Reference in a new issue