Mike Reed | d62d406 | 2019-06-12 10:20:44 -0400 | [diff] [blame] | 1 | /* |
| 2 | * Copyright 2015 Google Inc. |
| 3 | * |
| 4 | * Use of this source code is governed by a BSD-style license that can be |
| 5 | * found in the LICENSE file. |
| 6 | */ |
| 7 | |
| 8 | #include "gm/gm.h" |
| 9 | |
| 10 | #ifndef SK_BUILD_FOR_GOOGLE3 |
| 11 | |
| 12 | #include "experimental/xform/SkShape.h" |
| 13 | #include "experimental/xform/SkXform.h" |
| 14 | |
| 15 | #include "include/core/SkCanvas.h" |
| 16 | #include "include/core/SkPaint.h" |
Hal Canary | 4124807 | 2019-07-11 16:32:53 -0400 | [diff] [blame] | 17 | #include "tools/timer/TimeUtils.h" |
Mike Reed | d62d406 | 2019-06-12 10:20:44 -0400 | [diff] [blame] | 18 | |
| 19 | class XformGM : public skiagm::GM { |
| 20 | sk_sp<MatrixXF> fRoot, fRA, fRB, fA, fB; |
| 21 | sk_sp<Shape> fShape; |
| 22 | |
| 23 | public: |
| 24 | XformGM() { |
| 25 | fRoot = MatrixXF::Make(); |
| 26 | |
| 27 | fRA = MatrixXF::Make(fRoot); |
| 28 | fRB = MatrixXF::Make(fRoot); |
| 29 | |
| 30 | fA = MatrixXF::Make(fRA); |
| 31 | fB = MatrixXF::Make(fRB); |
| 32 | |
| 33 | fRA->setRotate(30); |
| 34 | fA->setTranslate(100, 0); |
| 35 | |
| 36 | fRB->setTranslate(100, 0); |
| 37 | fB->setRotate(30); |
| 38 | |
| 39 | sk_sp<GroupShape> g = GroupShape::Make(); |
| 40 | g->append(GeoShape::Make(fA, {0, 0, 100, 60}, SK_ColorRED)); |
| 41 | g->append(GeoShape::Make(fB, {0, 0, 100, 60}, SK_ColorGREEN)); |
| 42 | g->append(GeoShape::Make(fRA, {0, 0, 100, 60}, SK_ColorBLUE)); |
| 43 | g->append(GeoShape::Make(fRB, {0, 0, 100, 60}, SK_ColorGRAY)); |
| 44 | g->append(GeoShape::Make(fRoot, {0, 0, 100, 60}, 0xFFCC8844)); |
| 45 | |
| 46 | sk_sp<MatrixXF> sub = MatrixXF::Make(); |
| 47 | SkMatrix m; |
| 48 | m.setScale(0.5, 0.5); |
| 49 | m.postTranslate(50, 50); |
| 50 | sub->setLocalMatrix(m); |
| 51 | |
| 52 | sk_sp<GroupShape> parent = GroupShape::Make(); |
| 53 | parent->append(g); |
| 54 | parent->append(GroupShape::Make(sub, g)); |
| 55 | fShape = parent; |
| 56 | } |
| 57 | |
| 58 | protected: |
| 59 | SkString onShortName() override { return SkString("exp_xform"); } |
| 60 | |
| 61 | SkISize onISize() override { return SkISize::Make(520, 520); } |
| 62 | |
| 63 | void onDraw(SkCanvas* canvas) override { |
| 64 | auto ctx = XContext::Make(canvas); |
| 65 | |
| 66 | if (0) { |
| 67 | canvas->translate(2, 2); |
| 68 | |
| 69 | SkRect rect{0, 0, 100, 60}; |
| 70 | SkPaint paint; paint.setStyle(SkPaint::kStroke_Style); |
| 71 | canvas->drawRect(rect, paint); |
| 72 | canvas->save(); canvas->translate(10, 10); |
| 73 | paint.setColor(SK_ColorRED); canvas->drawRect(rect, paint); canvas->restore(); |
| 74 | canvas->save(); canvas->scale(2, 2); |
| 75 | paint.setColor(SK_ColorBLUE); canvas->drawRect(rect, paint); canvas->restore(); |
| 76 | canvas->save(); canvas->scale(2, 2); canvas->translate(10, 10); |
| 77 | paint.setColor(SK_ColorBLACK); canvas->drawRect(rect, paint); canvas->restore(); |
| 78 | canvas->save(); canvas->translate(10, 10); canvas->scale(2, 2); |
| 79 | paint.setColor(SK_ColorBLACK); canvas->drawRect(rect, paint); canvas->restore(); |
| 80 | |
| 81 | auto x0 = MatrixXF::Make(); |
| 82 | auto x1 = MatrixXF::Make(x0); |
| 83 | auto x2 = MatrixXF::Make(x1); |
| 84 | x1->setScale(2, 2); |
| 85 | x2->setTranslate(10, 10); |
| 86 | |
| 87 | auto sh = GeoShape::Make(x2, {0, 0, 100, 60}, 0x8800FF00); |
| 88 | sh->draw(ctx.get()); |
| 89 | return; |
| 90 | } |
| 91 | fShape->draw(ctx.get()); |
| 92 | } |
| 93 | |
Hal Canary | 4124807 | 2019-07-11 16:32:53 -0400 | [diff] [blame] | 94 | bool onAnimate(double nanos) override { |
| 95 | float scale = 3 + sinf(TimeUtils::Scaled(1e-9 * nanos, 1, 0)) * 2; |
Mike Reed | d62d406 | 2019-06-12 10:20:44 -0400 | [diff] [blame] | 96 | fRoot->setScale(scale, scale); |
Hal Canary | 4124807 | 2019-07-11 16:32:53 -0400 | [diff] [blame] | 97 | fRA->setRotate(TimeUtils::Scaled(1e-9 * nanos, 40, 0)); |
| 98 | fB->setRotate(TimeUtils::Scaled(1e-9 * nanos, 40*sqrtf(2), 0)); |
Mike Reed | d62d406 | 2019-06-12 10:20:44 -0400 | [diff] [blame] | 99 | return true; |
| 100 | } |
| 101 | |
| 102 | private: |
John Stiles | 7571f9e | 2020-09-02 22:42:33 -0400 | [diff] [blame] | 103 | using INHERITED = skiagm::GM; |
Mike Reed | d62d406 | 2019-06-12 10:20:44 -0400 | [diff] [blame] | 104 | }; |
| 105 | DEF_GM( return new XformGM; ) |
| 106 | |
| 107 | #endif |