Record the initial matrix when we begin picture-playback, and concat with
authorreed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Wed, 5 Sep 2012 23:14:07 +0000 (23:14 +0000)
committerreed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Wed, 5 Sep 2012 23:14:07 +0000 (23:14 +0000)
that if we see a setMatrix command. In this way we can respect the caller's
overall playback matrix environment.
Review URL: https://codereview.appspot.com/6495092

git-svn-id: http://skia.googlecode.com/svn/trunk@5409 2bbb7eff-a529-9590-31e7-b0007b416f81

src/core/SkPicturePlayback.cpp

index bcad616..cf3484b 100644 (file)
@@ -561,6 +561,9 @@ void SkPicturePlayback::draw(SkCanvas& canvas) {
     SkReader32 reader(fOpData->bytes(), fOpData->size());
     TextContainer text;
 
+    // Record this, so we can concat w/ it if we encounter a setMatrix()
+    SkMatrix initialMatrix = canvas.getTotalMatrix();
+
     while (!reader.eof()) {
         switch (reader.readInt()) {
             case CLIP_PATH: {
@@ -786,9 +789,11 @@ void SkPicturePlayback::draw(SkCanvas& canvas) {
                 SkScalar sy = reader.readScalar();
                 canvas.scale(sx, sy);
             } break;
-            case SET_MATRIX:
-                canvas.setMatrix(*getMatrix(reader));
-                break;
+            case SET_MATRIX: {
+                SkMatrix matrix;
+                matrix.setConcat(initialMatrix, *getMatrix(reader));
+                canvas.setMatrix(matrix);
+            } break;
             case SKEW: {
                 SkScalar sx = reader.readScalar();
                 SkScalar sy = reader.readScalar();