Go to file
Dominik Röttsches 691a794bee Support COLRv1 color fonts
Implement support for COLRv1 color gradient vector forms. COLR v1 is an
extension to the OpenType COLR tables that introduces support for
gradients, transforms and compositing. [1]

COLRv1 fonts contain an OpenType COLR table with format v1. In a COLR v1
table, glyphs are defined by a directed, acyclic graph of Paint
operations. The task for the Skia implementation is to extract the COLR
v1 information from the font using FreeType's COLRv1 API, then traverse
the glyph graph and translate information from the font into Skia
operations on SkCanvas.

Care needs to be taken for transformations to work correctly. FreeType
sends a top level transform that includes the scaling from font units to
actual glyph size, as well as optional transforms configured on FreeType
using FT_Set_Transform. This is set up as the starting transform at the
beginning of drawing a COLRv1 glyph. At the stage of setting a clip for
a PaintGlyph operation, the glyph outline is retrieved from FreeType
unscaled and untransformed. Since the starting transformation is applied
to the SkCanvas, the unscaled glyph is properly scaled and positioned.

Similarly, computing the initial bounding box for the COLRv1 glyph needs
to consider transformations. COLRv1 glyphs have a base glyph entry in
the glyf table which can use a minimum of two points for defining a
bounding box. This bounding box is an imaged rectangle enclosing those
two points at the identity transform. We need to compute the bounding
box scaled, but at identity transform, then make a rectangle from it,
that we then transform so that we get a large enough area to paint
in. If those two points from the glyf table would be transformed first,
then we would compute the bounding box, the resulting bounding box ends
up too small.

As a test font, add a version of the samples-glyf_colr_1.ttf from [2]
with one glyph added for testing PaintColrGlyph functionality and
compositions.

Add a basic GM test that produces color glyphs untransformed, with
skew and with rotation and combinations of those.

[1] https://github.com/googlefonts/colr-gradients-spec/
[2] https://github.com/googlefonts/color-fonts

Bug: skia:11264
Change-Id: I8357cd0c7ac0039bb2eac18f21fa343bf61871eb
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/300558
Commit-Queue: Dominik Röttsches <drott@chromium.org>
Commit-Queue: Ben Wagner <bungeman@google.com>
Auto-Submit: Dominik Röttsches <drott@chromium.org>
Reviewed-by: Ben Wagner <bungeman@google.com>
2021-02-11 22:51:13 +00:00
animations
bazel bazel baby steps 2020-09-14 15:18:32 +00:00
bench Android roll broke with a compilation error: 2021-02-10 00:05:10 +00:00
bin pull arm64 binary on arm64 Mac/Linux 2021-01-15 19:00:46 +00:00
build/fuchsia [fuchsia] Fix fidlc command. 2020-06-10 03:29:24 +00:00
build_overrides Port to ANGLE's GN files 2020-09-11 15:22:34 +00:00
client_utils/android Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
demos.skia.org [particles] Fix up URLs for the particles migration. 2021-01-25 20:44:32 +00:00
dm Reland "[svg] Plumb a ResourceProvider" 2021-01-27 21:12:23 +00:00
docker [docker] Fix build by pointing to correct path 2021-01-22 17:34:56 +00:00
docs/examples Guard legacy matrixtransforms, and expose new one 2021-02-01 22:10:39 +00:00
example Reland "Remove use of legacy display globals." 2020-10-05 19:13:58 +00:00
experimental [particles] Fix up URLs for the particles migration. 2021-01-25 20:44:32 +00:00
fuzz Support structs in runtime effects 2021-02-11 21:09:15 +00:00
gm Support COLRv1 color fonts 2021-02-11 22:51:13 +00:00
gn Support COLRv1 color fonts 2021-02-11 22:51:13 +00:00
include SkColorFilters::WithWorkingFormat 2021-02-11 19:44:33 +00:00
infra further refine reruns 2021-02-11 18:29:45 +00:00
modules [canvaskit] perform audio asset lookup by layer id 2021-02-11 17:11:00 +00:00
platform_tools [SkottieView] handle calls to setSource after first animation initialization 2021-01-21 23:41:28 +00:00
resources Support COLRv1 color fonts 2021-02-11 22:51:13 +00:00
samplecode Rename GrPathStencilFillOp -> GrTessellatingStencilFillOp 2021-01-28 13:51:17 +00:00
site Replace 'dogben' with 'brianosman' in client code search page 2021-02-10 18:04:12 +00:00
specs Fix CanvasKit generated documentation to work with emscripten 1.39.16. 2020-05-27 12:23:32 +00:00
src Support COLRv1 color fonts 2021-02-11 22:51:13 +00:00
tests added SkSL DSL uniform support 2021-02-11 22:03:56 +00:00
third_party NEON libjpeg-turbo on iOS and Mac 2021-02-02 22:07:54 +00:00
tools Add UWP support 2021-02-10 19:04:42 +00:00
.bazelignore bazel baby steps 2020-09-14 15:18:32 +00:00
.clang-format Disable BinPackParameters in .clang-format 2020-03-27 14:32:40 +00:00
.clang-tidy Disable ClangTidy namespace comments for short blocks. 2020-08-24 14:01:22 +00:00
.gitignore Update gitignore for goma win_toolchain 2021-02-01 17:25:52 +00:00
.gn Pre-emptive fix for upcoming ANGLE change. 2021-01-08 17:23:52 +00:00
AUTHORS Add UWP support 2021-02-10 19:04:42 +00:00
BUILD.bazel bazel baby steps 2020-09-14 15:18:32 +00:00
BUILD.gn Add UWP support 2021-02-10 19:04:42 +00:00
codereview.settings Make uploading to Gerrit the default for Skia 2016-11-09 19:07:56 +00:00
CONTRIBUTING
CQ_COMMITTERS Moved committer list to chrome-infra-auth and deleted it from the repo 2015-09-02 13:37:54 -07:00
DEPS Roll FreeType 2021-02-11 16:26:52 +00:00
DIR_METADATA Move metadata in OWNERS files to DIR_METADATA files 2021-02-02 23:41:54 +00:00
go.mod Update go.skia.org/infra in go.mod/go.sum 2020-12-21 20:31:07 +00:00
go.sum Update go.skia.org/infra in go.mod/go.sum 2020-12-21 20:31:07 +00:00
LICENSE LICENSE file: clean up 2019-11-22 21:59:03 +00:00
PRESUBMIT.py reland: make brianosman a public API owner 2021-02-03 20:27:17 +00:00
public.bzl Round unresolved font blocks to grapheme edges 2021-01-27 15:39:09 +00:00
README
README.chromium Update README.chromium. 2015-06-11 13:19:24 -07:00
RELEASE_NOTES.txt rm pow2 arg to GrDirectContext::ComputeImagesize 2021-02-11 13:44:52 +00:00
whitespace.txt Whitespace change to re-trigger Mac/iOS tests 2020-02-23 20:55:01 +00:00
WORKSPACE.bazel bazel baby steps 2020-09-14 15:18:32 +00:00

Skia is a complete 2D graphic library for drawing Text, Geometries, and Images.

See full details, and build instructions, at https://skia.org.