diff options
Diffstat (limited to 'samplecode')
-rw-r--r-- | samplecode/SampleGlyphTransform.cpp | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/samplecode/SampleGlyphTransform.cpp b/samplecode/SampleGlyphTransform.cpp new file mode 100644 index 0000000000..b5d44f8bfc --- /dev/null +++ b/samplecode/SampleGlyphTransform.cpp @@ -0,0 +1,81 @@ +/* + * Copyright 2018 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ +#include "SampleCode.h" +#include "sk_tool_utils.h" + +#include "SkAnimTimer.h" +#include "SkCanvas.h" +#include "SkPath.h" +#include "SkRandom.h" +#include "SkRRect.h" +#include "SkTypeface.h" + +// Implementation in C++ of Animated Emoji +// See https://t.d3fc.io/status/705212795936247808 + +class GlyphTransformView : public SampleView { +public: + GlyphTransformView() {} + +protected: + void onOnceBeforeDraw() override { + fEmojiFont.fTypeface = sk_tool_utils::emoji_typeface(); + fEmojiFont.fText = sk_tool_utils::emoji_sample_text(); + } + + // overrides from SkEventSink + bool onQuery(SkEvent* evt) override { + if (SampleCode::TitleQ(*evt)) { + SampleCode::TitleR(evt, "Glyph Transform"); + return true; + } + return this->INHERITED::onQuery(evt); + } + + void onDrawContent(SkCanvas* canvas) override { + SkPaint paint; + paint.setTypeface(fEmojiFont.fTypeface); + const char* text = fEmojiFont.fText; + + canvas->scale(4, 4); + + canvas->drawLine(0, 200, 600, 200, paint); + SkMatrix ctm; + ctm.setRotate(SkRadiansToDegrees(fRotate)); + ctm.postScale(fScale, fScale); + ctm.postTranslate(fTranslate.fX, fTranslate.fY); + canvas->concat(ctm); + canvas->drawString(text, 0, 0, paint); + } + + bool onAnimate(const SkAnimTimer& timer) override { + double t = timer.secs(); + + fTranslate.set(99 + sin(t / 3.0e3) - t / 1024, 200 + sin(t / 999) / t); + fScale = 4.5 - t*t / 99; + fRotate = sin(t / 734); + + return true; + } + +private: + struct EmojiFont { + sk_sp<SkTypeface> fTypeface; + const char* fText; + } fEmojiFont; + + SkVector fTranslate; + SkScalar fScale; + SkScalar fRotate; + + typedef SampleView INHERITED; +}; + +////////////////////////////////////////////////////////////////////////////// + +static SkView* MyFactory() { return new GlyphTransformView; } +static SkViewRegister reg(MyFactory); |