skia2/include/core/SkFontArguments.h

95 lines
2.7 KiB
C
Raw Normal View History

/*
* Copyright 2017 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkFontArguments_DEFINED
#define SkFontArguments_DEFINED
Support font palette overrides through SkFontArguments Co-authored with Ben Wagner, bungeman@google.com. Similar to how we allow configuration of variable font configurations, provide additional SkFontArguments to select a base palette and a set of potentially sparse color overrides. This is required for implementing CSS font-palette. Modify the more_samples-glyf_colr_1.ttf to have two additional palettes, and two additional test glyphs, one that draws with COLRv0 logic, one that draws with COLRv1 logic and has a foreground palette index dot in the middle. See [1] & [2] for the additions to the test font. Add a GM which tests this on the SkFontMgr_custom using makeClone() and makeFromStreamArgs(). The test displays the two glyphs in default palette on the left, then with palette overrides (as in the title of the test) on the right. The first row uses a typeface created with makeFromStreamArgs(), the second uses one created with makeClone(). [1] https://github.com/googlefonts/color-fonts/pull/91 [2] https://github.com/googlefonts/color-fonts/pull/92 Bug: skia:12730, chromium:1170794 Cq-Include-Trybots: luci.skia.skia.primary:Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android_NativeFonts,Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-NativeFonts Change-Id: Ia1334f069240edc78fd4791969914e8a6f4fbaf9 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/479616 Reviewed-by: Ben Wagner <bungeman@google.com> Reviewed-by: Derek Sollenberger <djsollen@google.com> Commit-Queue: Ben Wagner <bungeman@google.com>
2022-02-17 10:37:49 +00:00
#include "include/core/SkColor.h"
#include "include/core/SkScalar.h"
#include "include/core/SkTypes.h"
/** Represents a set of actual arguments for a font. */
struct SkFontArguments {
struct VariationPosition {
struct Coordinate {
SkFourByteTag axis;
float value;
};
const Coordinate* coordinates;
int coordinateCount;
};
Support font palette overrides through SkFontArguments Co-authored with Ben Wagner, bungeman@google.com. Similar to how we allow configuration of variable font configurations, provide additional SkFontArguments to select a base palette and a set of potentially sparse color overrides. This is required for implementing CSS font-palette. Modify the more_samples-glyf_colr_1.ttf to have two additional palettes, and two additional test glyphs, one that draws with COLRv0 logic, one that draws with COLRv1 logic and has a foreground palette index dot in the middle. See [1] & [2] for the additions to the test font. Add a GM which tests this on the SkFontMgr_custom using makeClone() and makeFromStreamArgs(). The test displays the two glyphs in default palette on the left, then with palette overrides (as in the title of the test) on the right. The first row uses a typeface created with makeFromStreamArgs(), the second uses one created with makeClone(). [1] https://github.com/googlefonts/color-fonts/pull/91 [2] https://github.com/googlefonts/color-fonts/pull/92 Bug: skia:12730, chromium:1170794 Cq-Include-Trybots: luci.skia.skia.primary:Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android_NativeFonts,Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-NativeFonts Change-Id: Ia1334f069240edc78fd4791969914e8a6f4fbaf9 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/479616 Reviewed-by: Ben Wagner <bungeman@google.com> Reviewed-by: Derek Sollenberger <djsollen@google.com> Commit-Queue: Ben Wagner <bungeman@google.com>
2022-02-17 10:37:49 +00:00
/** Specify a palette to use and overrides for palette entries.
*
* `overrides` is a list of pairs of palette entry index and color.
* The overriden palette entries will use the associated color.
* Override pairs with palette entry indices out of range will not be applied.
* Later override entries override earlier ones.
*/
struct Palette {
struct Override {
int index;
SkColor color;
};
int index;
const Override* overrides;
int overrideCount;
};
SkFontArguments()
: fCollectionIndex(0)
, fVariationDesignPosition{nullptr, 0}
, fPalette{0, nullptr, 0} {}
/** Specify the index of the desired font.
*
* Font formats like ttc, dfont, cff, cid, pfr, t42, t1, and fon may actually be indexed
* collections of fonts.
*/
SkFontArguments& setCollectionIndex(int collectionIndex) {
fCollectionIndex = collectionIndex;
return *this;
}
/** Specify a position in the variation design space.
*
* Any axis not specified will use the default value.
* Any specified axis not actually present in the font will be ignored.
*
* @param position not copied. The value must remain valid for life of SkFontArguments.
*/
SkFontArguments& setVariationDesignPosition(VariationPosition position) {
fVariationDesignPosition.coordinates = position.coordinates;
fVariationDesignPosition.coordinateCount = position.coordinateCount;
return *this;
}
int getCollectionIndex() const {
return fCollectionIndex;
}
VariationPosition getVariationDesignPosition() const {
return fVariationDesignPosition;
}
Support font palette overrides through SkFontArguments Co-authored with Ben Wagner, bungeman@google.com. Similar to how we allow configuration of variable font configurations, provide additional SkFontArguments to select a base palette and a set of potentially sparse color overrides. This is required for implementing CSS font-palette. Modify the more_samples-glyf_colr_1.ttf to have two additional palettes, and two additional test glyphs, one that draws with COLRv0 logic, one that draws with COLRv1 logic and has a foreground palette index dot in the middle. See [1] & [2] for the additions to the test font. Add a GM which tests this on the SkFontMgr_custom using makeClone() and makeFromStreamArgs(). The test displays the two glyphs in default palette on the left, then with palette overrides (as in the title of the test) on the right. The first row uses a typeface created with makeFromStreamArgs(), the second uses one created with makeClone(). [1] https://github.com/googlefonts/color-fonts/pull/91 [2] https://github.com/googlefonts/color-fonts/pull/92 Bug: skia:12730, chromium:1170794 Cq-Include-Trybots: luci.skia.skia.primary:Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android_NativeFonts,Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-NativeFonts Change-Id: Ia1334f069240edc78fd4791969914e8a6f4fbaf9 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/479616 Reviewed-by: Ben Wagner <bungeman@google.com> Reviewed-by: Derek Sollenberger <djsollen@google.com> Commit-Queue: Ben Wagner <bungeman@google.com>
2022-02-17 10:37:49 +00:00
SkFontArguments& setPalette(Palette palette) {
fPalette.index = palette.index;
fPalette.overrides = palette.overrides;
fPalette.overrideCount = palette.overrideCount;
return *this;
}
Palette getPalette() const { return fPalette; }
private:
int fCollectionIndex;
VariationPosition fVariationDesignPosition;
Support font palette overrides through SkFontArguments Co-authored with Ben Wagner, bungeman@google.com. Similar to how we allow configuration of variable font configurations, provide additional SkFontArguments to select a base palette and a set of potentially sparse color overrides. This is required for implementing CSS font-palette. Modify the more_samples-glyf_colr_1.ttf to have two additional palettes, and two additional test glyphs, one that draws with COLRv0 logic, one that draws with COLRv1 logic and has a foreground palette index dot in the middle. See [1] & [2] for the additions to the test font. Add a GM which tests this on the SkFontMgr_custom using makeClone() and makeFromStreamArgs(). The test displays the two glyphs in default palette on the left, then with palette overrides (as in the title of the test) on the right. The first row uses a typeface created with makeFromStreamArgs(), the second uses one created with makeClone(). [1] https://github.com/googlefonts/color-fonts/pull/91 [2] https://github.com/googlefonts/color-fonts/pull/92 Bug: skia:12730, chromium:1170794 Cq-Include-Trybots: luci.skia.skia.primary:Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android_NativeFonts,Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-NativeFonts Change-Id: Ia1334f069240edc78fd4791969914e8a6f4fbaf9 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/479616 Reviewed-by: Ben Wagner <bungeman@google.com> Reviewed-by: Derek Sollenberger <djsollen@google.com> Commit-Queue: Ben Wagner <bungeman@google.com>
2022-02-17 10:37:49 +00:00
Palette fPalette;
};
#endif