animate matrixref in sample shapes
git-svn-id: http://skia.googlecode.com/svn/trunk@189 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/samplecode/SampleShapes.cpp b/samplecode/SampleShapes.cpp
index 77283fe..bee3884 100644
--- a/samplecode/SampleShapes.cpp
+++ b/samplecode/SampleShapes.cpp
@@ -42,6 +42,7 @@
class ShapesView : public SkView {
SkGroupShape fGroup;
+ SkMatrixRef* fMatrixRefs[4];
public:
ShapesView() {
SkMatrix m;
@@ -54,6 +55,18 @@
fGroup.appendShape(make_shape1(), m)->unref();
m.postTranslate(0, SkIntToScalar(120));
fGroup.appendShape(make_shape2(), m)->unref();
+
+ for (size_t i = 0; i < SK_ARRAY_COUNT(fMatrixRefs); i++) {
+ SkSafeRef(fMatrixRefs[i] = fGroup.getShapeMatrixRef(i));
+ }
+
+ fAngle = 0;
+ }
+
+ virtual ~ShapesView() {
+ for (size_t i = 0; i < SK_ARRAY_COUNT(fMatrixRefs); i++) {
+ SkSafeUnref(fMatrixRefs[i]);
+ }
}
protected:
@@ -70,14 +83,22 @@
canvas->drawColor(0xFFDDDDDD);
}
+ int fAngle;
+
virtual void onDraw(SkCanvas* canvas) {
this->drawBG(canvas);
+ SkMatrix saveM = *fMatrixRefs[3];
+ fAngle = (fAngle + 5) % 360;
+ SkScalar c = SkIntToScalar(50);
+ fMatrixRefs[3]->preRotate(SkIntToScalar(fAngle), c, c);
+
SkMatrix matrix;
#if 1
SkGroupShape gs;
gs.appendShape(&fGroup);
- matrix.setTranslate(0, SkIntToScalar(240));
+ matrix.setScale(-SK_Scalar1, SK_Scalar1);
+ matrix.postTranslate(SkIntToScalar(220), SkIntToScalar(240));
gs.appendShape(&fGroup, matrix);
matrix.setTranslate(SkIntToScalar(240), 0);
matrix.preScale(SK_Scalar1*2, SK_Scalar1*2);
@@ -88,7 +109,10 @@
fGroup.drawXY(canvas, 0, SkIntToScalar(240));
fGroup.drawMatrix(canvas, matrix);
#endif
- }
+
+ *fMatrixRefs[3] = saveM;
+ this->inval(NULL);
+}
private:
typedef SkView INHERITED;