add drawPicture variant that takes a matrix and paint
will need some staging strategy, since chrome and blink have overrides of onDrawPicture
R=robertphillips@google.com, fmalita@google.com, bsalomon@google.com, mtklein@google.com
Author: reed@google.com
Review URL: https://codereview.chromium.org/448793004
diff --git a/src/core/SkPictureRecord.cpp b/src/core/SkPictureRecord.cpp
index 31a66ab..66aa46d 100644
--- a/src/core/SkPictureRecord.cpp
+++ b/src/core/SkPictureRecord.cpp
@@ -1387,7 +1387,8 @@
this->validate(initialOffset, size);
}
-void SkPictureRecord::onDrawPicture(const SkPicture* picture) {
+void SkPictureRecord::onDrawPicture(const SkPicture* picture, const SkMatrix* matrix,
+ const SkPaint* paint) {
#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
fMCMgr.call(SkMatrixClipStateMgr::kOther_CallType);
@@ -1395,8 +1396,19 @@
// op + picture index
size_t size = 2 * kUInt32Size;
- size_t initialOffset = this->addDraw(DRAW_PICTURE, &size);
- this->addPicture(picture);
+ size_t initialOffset;
+
+ if (NULL == matrix && NULL == paint) {
+ initialOffset = this->addDraw(DRAW_PICTURE, &size);
+ this->addPicture(picture);
+ } else {
+ const SkMatrix& m = matrix ? *matrix : SkMatrix::I();
+ size += m.writeToMemory(NULL) + kUInt32Size; // matrix + paint
+ initialOffset = this->addDraw(DRAW_PICTURE_MATRIX_PAINT, &size);
+ this->addPicture(picture);
+ this->addMatrix(m);
+ this->addPaintPtr(paint);
+ }
this->validate(initialOffset, size);
}