Index: include/core/SkCanvas.h |
diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h |
index 5ac137d4f0f95af8265c9e2c5e04106fc1b82bfe..bcfba16cd93c14b869ef794d7727a0ba18941ee9 100644 |
--- a/include/core/SkCanvas.h |
+++ b/include/core/SkCanvas.h |
@@ -378,7 +378,7 @@ public: |
by calls to save/restore. |
@return The value to pass to restoreToCount() to balance this save() |
*/ |
- virtual int save(SaveFlags flags = kMatrixClip_SaveFlag); |
+ int save(SaveFlags flags = kMatrixClip_SaveFlag); |
/** This behaves the same as save(), but in addition it allocates an |
offscreen bitmap. All drawing calls are directed there, and only when |
@@ -393,8 +393,8 @@ public: |
@param flags LayerFlags |
@return The value to pass to restoreToCount() to balance this save() |
*/ |
- virtual int saveLayer(const SkRect* bounds, const SkPaint* paint, |
- SaveFlags flags = kARGB_ClipLayer_SaveFlag); |
+ int saveLayer(const SkRect* bounds, const SkPaint* paint, |
+ SaveFlags flags = kARGB_ClipLayer_SaveFlag); |
/** This behaves the same as save(), but in addition it allocates an |
offscreen bitmap. All drawing calls are directed there, and only when |
@@ -416,7 +416,7 @@ public: |
call. |
It is an error to call restore() more times than save() was called. |
*/ |
- virtual void restore(); |
+ void restore(); |
/** Returns the number of matrix/clip states on the SkCanvas' private stack. |
This will equal # save() calls - # restore() calls + 1. The save count on |
@@ -1201,6 +1201,17 @@ protected: |
virtual const void* onPeekPixels(SkImageInfo*, size_t* rowBytes); |
virtual void* onAccessTopLayerPixels(SkImageInfo*, size_t* rowBytes); |
+ // Subclass save/restore notifiers. |
+ // Overriders should call the corresponding INHERITED method up the inheritance chain. |
+ // willSaveLayer()'s return value may suppress full layer allocation. |
+ enum SaveLayerStrategy { |
+ kFullLayer_SaveLayerStrategy, |
+ kNoLayer_SaveLayerStrategy |
+ }; |
+ virtual void willSave(SaveFlags); |
+ virtual SaveLayerStrategy willSaveLayer(const SkRect*, const SkPaint*, SaveFlags); |
+ virtual void willRestore(); |
+ |
virtual void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&); |
enum ClipEdgeStyle { |
@@ -1301,7 +1312,7 @@ private: |
const SkRect& dst, const SkPaint* paint); |
void internalDrawPaint(const SkPaint& paint); |
int internalSaveLayer(const SkRect* bounds, const SkPaint* paint, |
- SaveFlags, bool justForImageFilter); |
+ SaveFlags, bool justForImageFilter, SaveLayerStrategy strategy); |
void internalDrawDevice(SkBaseDevice*, int x, int y, const SkPaint*); |
// shared by save() and saveLayer() |