123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- /*
- * 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<MatrixXF> fRoot, fRA, fRB, fA, fB;
- sk_sp<Shape> 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<GroupShape> 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<MatrixXF> sub = MatrixXF::Make();
- SkMatrix m;
- m.setScale(0.5, 0.5);
- m.postTranslate(50, 50);
- sub->setLocalMatrix(m);
- sk_sp<GroupShape> 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
|