Index: src/core/SkRecordDraw.h |
diff --git a/src/core/SkRecordDraw.h b/src/core/SkRecordDraw.h |
index 033b76d34ae5d1cc0934a7d347a3f2136ff92c7e..75921d182fd3de1e5596114b7fce2e033cba696c 100644 |
--- a/src/core/SkRecordDraw.h |
+++ b/src/core/SkRecordDraw.h |
@@ -11,6 +11,7 @@ |
#include "SkBBoxHierarchy.h" |
#include "SkCanvas.h" |
#include "SkDrawPictureCallback.h" |
+#include "SkMatrix.h" |
#include "SkRecord.h" |
// Fill a BBH to be used by SkRecordDraw to accelerate playback. |
@@ -20,15 +21,21 @@ void SkRecordFillBounds(const SkRecord&, SkBBoxHierarchy*); |
void SkRecordDraw(const SkRecord&, SkCanvas*, const SkBBoxHierarchy*, SkDrawPictureCallback*); |
// Draw a portion of an SkRecord into an SkCanvas while replacing clears with drawRects. |
-void SkRecordPartialDraw(const SkRecord&, SkCanvas*, const SkRect&, unsigned start, unsigned stop); |
+// When drawing a portion of an SkRecord the CTM on the passed in canvas must be |
+// the composition of the replay matrix with the record-time CTM (for the portion |
+// of the record that is being replayed). For setMatrix calls to behave correctly |
+// the initialCTM parameter must set to just the replay matrix. |
+void SkRecordPartialDraw(const SkRecord&, SkCanvas*, const SkRect&, unsigned start, unsigned stop, |
+ const SkMatrix& initialCTM); |
namespace SkRecords { |
// This is an SkRecord visitor that will draw that SkRecord to an SkCanvas. |
class Draw : SkNoncopyable { |
public: |
- explicit Draw(SkCanvas* canvas) |
- : fInitialCTM(canvas->getTotalMatrix()), fCanvas(canvas) {} |
+ explicit Draw(SkCanvas* canvas, const SkMatrix* initialCTM = NULL) |
+ : fInitialCTM(initialCTM ? *initialCTM : canvas->getTotalMatrix()) |
+ , fCanvas(canvas) {} |
template <typename T> void operator()(const T& r) { |
this->draw(r); |
@@ -45,8 +52,8 @@ private: |
// Used by SkRecordPartialDraw. |
class PartialDraw : public Draw { |
public: |
- PartialDraw(SkCanvas* canvas, const SkRect& clearRect) |
- : INHERITED(canvas), fClearRect(clearRect) {} |
+ PartialDraw(SkCanvas* canvas, const SkRect& clearRect, const SkMatrix& initialCTM) |
+ : INHERITED(canvas, &initialCTM), fClearRect(clearRect) {} |
// Same as Draw for all ops except Clear. |
template <typename T> void operator()(const T& r) { |