/* * Copyright 2015 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "gm/gm.h" #ifndef SK_BUILD_FOR_GOOGLE3 #include "experimental/xform/SkShape.h" #include "experimental/xform/SkXform.h" #include "include/core/SkCanvas.h" #include "include/core/SkPaint.h" #include "tools/timer/TimeUtils.h" class XformGM : public skiagm::GM { sk_sp fRoot, fRA, fRB, fA, fB; sk_sp fShape; public: XformGM() { fRoot = MatrixXF::Make(); fRA = MatrixXF::Make(fRoot); fRB = MatrixXF::Make(fRoot); fA = MatrixXF::Make(fRA); fB = MatrixXF::Make(fRB); fRA->setRotate(30); fA->setTranslate(100, 0); fRB->setTranslate(100, 0); fB->setRotate(30); sk_sp g = GroupShape::Make(); g->append(GeoShape::Make(fA, {0, 0, 100, 60}, SK_ColorRED)); g->append(GeoShape::Make(fB, {0, 0, 100, 60}, SK_ColorGREEN)); g->append(GeoShape::Make(fRA, {0, 0, 100, 60}, SK_ColorBLUE)); g->append(GeoShape::Make(fRB, {0, 0, 100, 60}, SK_ColorGRAY)); g->append(GeoShape::Make(fRoot, {0, 0, 100, 60}, 0xFFCC8844)); sk_sp sub = MatrixXF::Make(); SkMatrix m; m.setScale(0.5, 0.5); m.postTranslate(50, 50); sub->setLocalMatrix(m); sk_sp parent = GroupShape::Make(); parent->append(g); parent->append(GroupShape::Make(sub, g)); fShape = parent; } protected: SkString onShortName() override { return SkString("exp_xform"); } SkISize onISize() override { return SkISize::Make(520, 520); } void onDraw(SkCanvas* canvas) override { auto ctx = XContext::Make(canvas); if (0) { canvas->translate(2, 2); SkRect rect{0, 0, 100, 60}; SkPaint paint; paint.setStyle(SkPaint::kStroke_Style); canvas->drawRect(rect, paint); canvas->save(); canvas->translate(10, 10); paint.setColor(SK_ColorRED); canvas->drawRect(rect, paint); canvas->restore(); canvas->save(); canvas->scale(2, 2); paint.setColor(SK_ColorBLUE); canvas->drawRect(rect, paint); canvas->restore(); canvas->save(); canvas->scale(2, 2); canvas->translate(10, 10); paint.setColor(SK_ColorBLACK); canvas->drawRect(rect, paint); canvas->restore(); canvas->save(); canvas->translate(10, 10); canvas->scale(2, 2); paint.setColor(SK_ColorBLACK); canvas->drawRect(rect, paint); canvas->restore(); auto x0 = MatrixXF::Make(); auto x1 = MatrixXF::Make(x0); auto x2 = MatrixXF::Make(x1); x1->setScale(2, 2); x2->setTranslate(10, 10); auto sh = GeoShape::Make(x2, {0, 0, 100, 60}, 0x8800FF00); sh->draw(ctx.get()); return; } fShape->draw(ctx.get()); } bool onAnimate(double nanos) override { float scale = 3 + sinf(TimeUtils::Scaled(1e-9 * nanos, 1, 0)) * 2; fRoot->setScale(scale, scale); fRA->setRotate(TimeUtils::Scaled(1e-9 * nanos, 40, 0)); fB->setRotate(TimeUtils::Scaled(1e-9 * nanos, 40*sqrtf(2), 0)); return true; } private: typedef skiagm::GM INHERITED; }; DEF_GM( return new XformGM; ) #endif