aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm
diff options
context:
space:
mode:
authorGravatar Bruce Wang <brucewang@google.com>2018-06-07 17:19:14 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-06-08 19:13:13 +0000
commitf0aacafe9e7a74475493c71c4c3679e80a8b2a82 (patch)
tree066042fd81bb3ec2e451a9396c95ec71987a542a /gm
parent17ee85597a09757d1bdd31c4452bafcc430332f8 (diff)
Add SkTypeface::makeClone.
This adds an method to typeface to allow users to create a copy of the typeface with different arguments for its parameters. This is far more efficient when animating a variation font. Change-Id: Ie41a5b76bef8eaf05b56b65774eaf38aad0dc4cf Reviewed-on: https://skia-review.googlesource.com/132934 Commit-Queue: Bruce Wang <brucewang@google.com> Reviewed-by: Bruce Wang <brucewang@google.com> Reviewed-by: Ben Wagner <bungeman@google.com>
Diffstat (limited to 'gm')
-rw-r--r--gm/fontscalerdistortable.cpp18
1 files changed, 13 insertions, 5 deletions
diff --git a/gm/fontscalerdistortable.cpp b/gm/fontscalerdistortable.cpp
index 49d254de36..5778ce0200 100644
--- a/gm/fontscalerdistortable.cpp
+++ b/gm/fontscalerdistortable.cpp
@@ -35,8 +35,10 @@ protected:
paint.setLCDRenderText(true);
sk_sp<SkFontMgr> fontMgr(SkFontMgr::RefDefault());
- std::unique_ptr<SkStreamAsset> distortable(GetResourceAsStream("fonts/Distortable.ttf"));
- if (!distortable) {
+ std::unique_ptr<SkStreamAsset> distortableStream(GetResourceAsStream("fonts/Distortable.ttf"));
+ sk_sp<SkTypeface> distortable(MakeResourceAsTypeface("fonts/Distortable.ttf"));
+
+ if (!distortableStream) {
return;
}
const char* text = "abc";
@@ -48,13 +50,19 @@ protected:
SkScalar y = SkIntToScalar(20);
SkFourByteTag tag = SkSetFourByteTag('w','g','h','t');
- SkScalar styleValue = SkDoubleToScalar(0.5 + (5*j + i) * ((2.0 - 0.5) / (2 * 5)));
+ SkScalar styleValue = SkDoubleToScalar(0.5 + (5 * j + i) * ((2.0 - 0.5) / (2 * 5)));
SkFontArguments::VariationPosition::Coordinate coordinates[] = {{tag, styleValue}};
SkFontArguments::VariationPosition position =
{ coordinates, SK_ARRAY_COUNT(coordinates) };
- paint.setTypeface(sk_sp<SkTypeface>(fontMgr->makeFromStream(
- distortable->duplicate(),
+ if (j == 0 && distortable) {
+ paint.setTypeface(sk_sp<SkTypeface>(
+ distortable->makeClone(
+ SkFontArguments().setVariationDesignPosition(position))));
+ } else {
+ paint.setTypeface(sk_sp<SkTypeface>(fontMgr->makeFromStream(
+ distortableStream->duplicate(),
SkFontArguments().setVariationDesignPosition(position))));
+ }
SkAutoCanvasRestore acr(canvas, true);
canvas->translate(SkIntToScalar(30 + i * 100), SkIntToScalar(20));