Index: src/pipe/SkGPipeWrite.cpp |
diff --git a/src/pipe/SkGPipeWrite.cpp b/src/pipe/SkGPipeWrite.cpp |
index 637778500a2097539efe6cde01e0f711f27c2d96..17695ae63f6f082206ef071e6f6316bd21f88096 100644 |
--- a/src/pipe/SkGPipeWrite.cpp |
+++ b/src/pipe/SkGPipeWrite.cpp |
@@ -281,10 +281,6 @@ protected: |
virtual SaveLayerStrategy willSaveLayer(const SkRect*, const SkPaint*, SaveFlags) SK_OVERRIDE; |
virtual void willRestore() SK_OVERRIDE; |
- virtual void didTranslate(SkScalar, SkScalar) SK_OVERRIDE; |
- virtual void didScale(SkScalar, SkScalar) SK_OVERRIDE; |
- virtual void didRotate(SkScalar) SK_OVERRIDE; |
- virtual void didSkew(SkScalar, SkScalar) SK_OVERRIDE; |
virtual void didConcat(const SkMatrix&) SK_OVERRIDE; |
virtual void didSetMatrix(const SkMatrix&) SK_OVERRIDE; |
@@ -296,6 +292,10 @@ protected: |
virtual void onClipRegion(const SkRegion&, SkRegion::Op) SK_OVERRIDE; |
private: |
+ void recordTranslate(const SkMatrix&); |
+ void recordScale(const SkMatrix&); |
+ void recordConcat(const SkMatrix&); |
+ |
enum { |
kNoSaveLayer = -1, |
}; |
@@ -572,61 +572,45 @@ bool SkGPipeCanvas::isDrawingToLayer() const { |
return kNoSaveLayer != fFirstSaveLayerStackLevel; |
} |
-void SkGPipeCanvas::didTranslate(SkScalar dx, SkScalar dy) { |
- if (dx || dy) { |
- NOTIFY_SETUP(this); |
- if (this->needOpBytes(2 * sizeof(SkScalar))) { |
- this->writeOp(kTranslate_DrawOp); |
- fWriter.writeScalar(dx); |
- fWriter.writeScalar(dy); |
- } |
+void SkGPipeCanvas::recordTranslate(const SkMatrix& m) { |
+ if (this->needOpBytes(2 * sizeof(SkScalar))) { |
+ this->writeOp(kTranslate_DrawOp); |
+ fWriter.writeScalar(m.getTranslateX()); |
+ fWriter.writeScalar(m.getTranslateY()); |
} |
- this->INHERITED::didTranslate(dx, dy); |
} |
-void SkGPipeCanvas::didScale(SkScalar sx, SkScalar sy) { |
- if (sx || sy) { |
- NOTIFY_SETUP(this); |
- if (this->needOpBytes(2 * sizeof(SkScalar))) { |
- this->writeOp(kScale_DrawOp); |
- fWriter.writeScalar(sx); |
- fWriter.writeScalar(sy); |
- } |
+void SkGPipeCanvas::recordScale(const SkMatrix& m) { |
+ if (this->needOpBytes(2 * sizeof(SkScalar))) { |
+ this->writeOp(kScale_DrawOp); |
+ fWriter.writeScalar(m.getScaleX()); |
+ fWriter.writeScalar(m.getScaleY()); |
} |
- this->INHERITED::didScale(sx, sy); |
} |
-void SkGPipeCanvas::didRotate(SkScalar degrees) { |
- if (degrees) { |
- NOTIFY_SETUP(this); |
- if (this->needOpBytes(sizeof(SkScalar))) { |
- this->writeOp(kRotate_DrawOp); |
- fWriter.writeScalar(degrees); |
- } |
+void SkGPipeCanvas::recordConcat(const SkMatrix& m) { |
+ if (this->needOpBytes(m.writeToMemory(NULL))) { |
+ this->writeOp(kConcat_DrawOp); |
+ fWriter.writeMatrix(m); |
} |
- this->INHERITED::didRotate(degrees); |
-} |
- |
-void SkGPipeCanvas::didSkew(SkScalar sx, SkScalar sy) { |
- if (sx || sy) { |
- NOTIFY_SETUP(this); |
- if (this->needOpBytes(2 * sizeof(SkScalar))) { |
- this->writeOp(kSkew_DrawOp); |
- fWriter.writeScalar(sx); |
- fWriter.writeScalar(sy); |
- } |
- } |
- this->INHERITED::didSkew(sx, sy); |
} |
void SkGPipeCanvas::didConcat(const SkMatrix& matrix) { |
if (!matrix.isIdentity()) { |
NOTIFY_SETUP(this); |
- if (this->needOpBytes(matrix.writeToMemory(NULL))) { |
- this->writeOp(kConcat_DrawOp); |
- fWriter.writeMatrix(matrix); |
+ switch (matrix.getType()) { |
+ case SkMatrix::kTranslate_Mask: |
+ this->recordTranslate(matrix); |
+ break; |
+ case SkMatrix::kScale_Mask: |
+ this->recordScale(matrix); |
+ break; |
+ default: |
+ this->recordConcat(matrix); |
+ break; |
} |
} |
+ |
this->INHERITED::didConcat(matrix); |
} |