diff options
author | Bruce Wang <brucewang@google.com> | 2018-06-07 17:19:14 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-06-08 19:13:13 +0000 |
commit | f0aacafe9e7a74475493c71c4c3679e80a8b2a82 (patch) | |
tree | 066042fd81bb3ec2e451a9396c95ec71987a542a /gm | |
parent | 17ee85597a09757d1bdd31c4452bafcc430332f8 (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.cpp | 18 |
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)); |