Revert of Revert "De-virtualize SkCanvas save/restore." (https://codereview.chromium.org/194923008/)
Reason for revert: Re-landing after roll fix. Original issue's description: > Revert "De-virtualize SkCanvas save/restore." > > (To allow a roll fix into the tree). > > This reverts commit edf702204be42c945254191f9f9cd6585b3d189b. > > R=halcanary@google.com > > Committed: https://code.google.com/p/skia/source/detail?r=13748 R=halcanary@google.com, fmalita@chromium.org TBR=fmalita@chromium.org, halcanary@google.com NOTREECHECKS=true NOTRY=true Author: fmalita@google.com Review URL: https://codereview.chromium.org/196323003 git-svn-id: http://skia.googlecode.com/svn/trunk@13754 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
parent
ab373bd459
commit
4fcd92d0bf
@ -26,13 +26,6 @@ public:
|
||||
explicit SkNulCanvas(const SkBitmap& bitmap) : SkCanvas(bitmap) {}
|
||||
virtual ~SkNulCanvas() {}
|
||||
|
||||
virtual int save(SaveFlags flags = kMatrixClip_SaveFlag) SK_OVERRIDE {return 0;}
|
||||
virtual int saveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags = kARGB_ClipLayer_SaveFlag) SK_OVERRIDE {return 0;}
|
||||
int saveLayerAlpha(const SkRect* bounds, U8CPU alpha,
|
||||
SaveFlags flags = kARGB_ClipLayer_SaveFlag) {return 0;}
|
||||
virtual void restore() SK_OVERRIDE {}
|
||||
int getSaveCount() const {return 0;}
|
||||
virtual bool isDrawingToLayer() const SK_OVERRIDE {return false;}
|
||||
virtual bool translate(SkScalar dx, SkScalar dy) SK_OVERRIDE {return true;}
|
||||
virtual bool scale(SkScalar sx, SkScalar sy) SK_OVERRIDE {return true;}
|
||||
@ -106,6 +99,12 @@ protected:
|
||||
virtual SkCanvas* canvasForDrawIter() {return NULL;}
|
||||
virtual SkBaseDevice* setDevice(SkBaseDevice* device) {return NULL;}
|
||||
|
||||
virtual bool onSaveLayer(const SkRect* bounds, const SkPaint* paint, SaveFlags flags)
|
||||
SK_OVERRIDE {
|
||||
this->INHERITED::onSaveLayer(bounds, paint, flags);
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE {}
|
||||
virtual void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE {}
|
||||
virtual void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE {}
|
||||
|
@ -358,7 +358,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
|
||||
@ -373,8 +373,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
|
||||
@ -396,7 +396,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
|
||||
@ -1178,6 +1178,14 @@ protected:
|
||||
// default impl defers to its device
|
||||
virtual const void* onPeekPixels(SkImageInfo*, size_t* rowBytes);
|
||||
|
||||
// Subclass save/restore notifiers. These are called *before* updating the canvas state.
|
||||
// Overriders should call the corresponding INHERITED method up the inheritance chain.
|
||||
// For onSaveLayer(), returning false suppresses full layer allocation (and forces
|
||||
// the base impl to only perform a state save + bounds clip).
|
||||
virtual void onSave(SaveFlags);
|
||||
virtual bool onSaveLayer(const SkRect*, const SkPaint*, SaveFlags);
|
||||
virtual void onRestore();
|
||||
|
||||
virtual void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&);
|
||||
|
||||
enum ClipEdgeStyle {
|
||||
@ -1277,7 +1285,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, bool skipLayer);
|
||||
void internalDrawDevice(SkBaseDevice*, int x, int y, const SkPaint*);
|
||||
|
||||
// shared by save() and saveLayer()
|
||||
|
@ -138,10 +138,6 @@ public:
|
||||
void silentFlush();
|
||||
|
||||
// Overrides of the SkCanvas interface
|
||||
virtual int save(SaveFlags flags) SK_OVERRIDE;
|
||||
virtual int saveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) SK_OVERRIDE;
|
||||
virtual void restore() SK_OVERRIDE;
|
||||
virtual bool isDrawingToLayer() const SK_OVERRIDE;
|
||||
virtual bool translate(SkScalar dx, SkScalar dy) SK_OVERRIDE;
|
||||
virtual bool scale(SkScalar sx, SkScalar sy) SK_OVERRIDE;
|
||||
@ -193,6 +189,10 @@ public:
|
||||
virtual SkDrawFilter* setDrawFilter(SkDrawFilter* filter) SK_OVERRIDE;
|
||||
|
||||
protected:
|
||||
virtual void onSave(SaveFlags) SK_OVERRIDE;
|
||||
virtual bool onSaveLayer(const SkRect*, const SkPaint*, SaveFlags) SK_OVERRIDE;
|
||||
virtual void onRestore() SK_OVERRIDE;
|
||||
|
||||
virtual void onDrawDRRect(const SkRRect&, const SkRRect&,
|
||||
const SkPaint&) SK_OVERRIDE;
|
||||
|
||||
|
@ -74,11 +74,6 @@ public:
|
||||
|
||||
int getNestLevel() const { return fNestLevel; }
|
||||
|
||||
virtual int save(SaveFlags) SK_OVERRIDE;
|
||||
virtual int saveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags) SK_OVERRIDE;
|
||||
virtual void restore() SK_OVERRIDE;
|
||||
|
||||
virtual bool translate(SkScalar dx, SkScalar dy) SK_OVERRIDE;
|
||||
virtual bool scale(SkScalar sx, SkScalar sy) SK_OVERRIDE;
|
||||
virtual bool rotate(SkScalar degrees) SK_OVERRIDE;
|
||||
@ -124,6 +119,10 @@ public:
|
||||
virtual void endCommentGroup() SK_OVERRIDE;
|
||||
|
||||
protected:
|
||||
virtual void onSave(SaveFlags) SK_OVERRIDE;
|
||||
virtual bool onSaveLayer(const SkRect*, const SkPaint*, SaveFlags) SK_OVERRIDE;
|
||||
virtual void onRestore() SK_OVERRIDE;
|
||||
|
||||
virtual void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) SK_OVERRIDE;
|
||||
virtual void onPushCull(const SkRect& cullRect) SK_OVERRIDE;
|
||||
virtual void onPopCull() SK_OVERRIDE;
|
||||
|
@ -20,11 +20,6 @@ public:
|
||||
SkLuaCanvas(int width, int height, lua_State*, const char function[]);
|
||||
virtual ~SkLuaCanvas();
|
||||
|
||||
virtual int save(SaveFlags flags) SK_OVERRIDE;
|
||||
virtual int saveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) SK_OVERRIDE;
|
||||
virtual void restore() SK_OVERRIDE;
|
||||
|
||||
virtual bool translate(SkScalar dx, SkScalar dy) SK_OVERRIDE;
|
||||
virtual bool scale(SkScalar sx, SkScalar sy) SK_OVERRIDE;
|
||||
virtual bool rotate(SkScalar degrees) SK_OVERRIDE;
|
||||
@ -67,6 +62,10 @@ public:
|
||||
virtual void drawData(const void* data, size_t length) SK_OVERRIDE;
|
||||
|
||||
protected:
|
||||
virtual void onSave(SaveFlags) SK_OVERRIDE;
|
||||
virtual bool onSaveLayer(const SkRect*, const SkPaint*, SaveFlags) SK_OVERRIDE;
|
||||
virtual void onRestore() SK_OVERRIDE;
|
||||
|
||||
virtual void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) SK_OVERRIDE;
|
||||
|
||||
virtual void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
|
||||
|
@ -23,10 +23,6 @@ public:
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// These are forwarded to the N canvases we're referencing
|
||||
|
||||
virtual int save(SaveFlags) SK_OVERRIDE;
|
||||
virtual int saveLayer(const SkRect* bounds, const SkPaint*,
|
||||
SaveFlags) SK_OVERRIDE;
|
||||
virtual void restore() SK_OVERRIDE;
|
||||
virtual bool translate(SkScalar dx, SkScalar dy) SK_OVERRIDE;
|
||||
virtual bool scale(SkScalar sx, SkScalar sy) SK_OVERRIDE;
|
||||
virtual bool rotate(SkScalar degrees) SK_OVERRIDE;
|
||||
@ -81,6 +77,10 @@ public:
|
||||
protected:
|
||||
SkTDArray<SkCanvas*> fList;
|
||||
|
||||
virtual void onSave(SaveFlags) SK_OVERRIDE;
|
||||
virtual bool onSaveLayer(const SkRect*, const SkPaint*, SaveFlags) SK_OVERRIDE;
|
||||
virtual void onRestore() SK_OVERRIDE;
|
||||
|
||||
virtual void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) SK_OVERRIDE;
|
||||
|
||||
virtual void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
|
||||
|
@ -26,11 +26,6 @@ public:
|
||||
SkCanvas* getProxy() const { return fProxy; }
|
||||
void setProxy(SkCanvas* proxy);
|
||||
|
||||
virtual int save(SaveFlags flags = kMatrixClip_SaveFlag) SK_OVERRIDE;
|
||||
virtual int saveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags = kARGB_ClipLayer_SaveFlag) SK_OVERRIDE;
|
||||
virtual void restore() SK_OVERRIDE;
|
||||
|
||||
virtual bool translate(SkScalar dx, SkScalar dy) SK_OVERRIDE;
|
||||
virtual bool scale(SkScalar sx, SkScalar sy) SK_OVERRIDE;
|
||||
virtual bool rotate(SkScalar degrees) SK_OVERRIDE;
|
||||
@ -80,6 +75,10 @@ public:
|
||||
virtual SkDrawFilter* setDrawFilter(SkDrawFilter* filter) SK_OVERRIDE;
|
||||
|
||||
protected:
|
||||
virtual void onSave(SaveFlags) SK_OVERRIDE;
|
||||
virtual bool onSaveLayer(const SkRect*, const SkPaint*, SaveFlags) SK_OVERRIDE;
|
||||
virtual void onRestore() SK_OVERRIDE;
|
||||
|
||||
virtual void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) SK_OVERRIDE;
|
||||
|
||||
virtual void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
|
||||
|
@ -26,20 +26,20 @@ void SkBBoxHierarchyRecord::handleBBox(const SkRect& bounds) {
|
||||
fBoundingHierarchy->insert(draw, r, true);
|
||||
}
|
||||
|
||||
int SkBBoxHierarchyRecord::save(SaveFlags flags) {
|
||||
void SkBBoxHierarchyRecord::onSave(SaveFlags flags) {
|
||||
fStateTree->appendSave();
|
||||
return INHERITED::save(flags);
|
||||
this->INHERITED::onSave(flags);
|
||||
}
|
||||
|
||||
int SkBBoxHierarchyRecord::saveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
bool SkBBoxHierarchyRecord::onSaveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
fStateTree->appendSaveLayer(this->writeStream().bytesWritten());
|
||||
return INHERITED::saveLayer(bounds, paint, flags);
|
||||
return this->INHERITED::onSaveLayer(bounds, paint, flags);
|
||||
}
|
||||
|
||||
void SkBBoxHierarchyRecord::restore() {
|
||||
void SkBBoxHierarchyRecord::onRestore() {
|
||||
fStateTree->appendRestore();
|
||||
INHERITED::restore();
|
||||
this->INHERITED::onRestore();
|
||||
}
|
||||
|
||||
bool SkBBoxHierarchyRecord::translate(SkScalar dx, SkScalar dy) {
|
||||
|
@ -23,11 +23,6 @@ public:
|
||||
|
||||
virtual void handleBBox(const SkRect& bounds) SK_OVERRIDE;
|
||||
|
||||
virtual int save(SaveFlags flags = kMatrixClip_SaveFlag) SK_OVERRIDE;
|
||||
virtual int saveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags = kARGB_ClipLayer_SaveFlag) SK_OVERRIDE;
|
||||
virtual void restore() SK_OVERRIDE;
|
||||
|
||||
virtual bool translate(SkScalar dx, SkScalar dy) SK_OVERRIDE;
|
||||
virtual bool scale(SkScalar sx, SkScalar sy) SK_OVERRIDE;
|
||||
virtual bool rotate(SkScalar degrees) SK_OVERRIDE;
|
||||
@ -39,6 +34,10 @@ public:
|
||||
virtual bool shouldRewind(void* data) SK_OVERRIDE;
|
||||
|
||||
protected:
|
||||
virtual void onSave(SaveFlags) SK_OVERRIDE;
|
||||
virtual bool onSaveLayer(const SkRect*, const SkPaint*, SaveFlags) SK_OVERRIDE;
|
||||
virtual void onRestore() SK_OVERRIDE;
|
||||
|
||||
virtual void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
|
||||
virtual void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
|
||||
virtual void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
|
||||
|
@ -348,7 +348,7 @@ public:
|
||||
SkPaint tmp;
|
||||
tmp.setImageFilter(fOrigPaint.getImageFilter());
|
||||
(void)canvas->internalSaveLayer(bounds, &tmp,
|
||||
SkCanvas::kARGB_ClipLayer_SaveFlag, true);
|
||||
SkCanvas::kARGB_ClipLayer_SaveFlag, true, false);
|
||||
// we'll clear the imageFilter for the actual draws in next(), so
|
||||
// it will only be applied during the restore().
|
||||
fDoClearImageFilter = true;
|
||||
@ -806,7 +806,12 @@ int SkCanvas::internalSave(SaveFlags flags) {
|
||||
return saveCount;
|
||||
}
|
||||
|
||||
void SkCanvas::onSave(SaveFlags) {
|
||||
// Do nothing. Subclasses may do something.
|
||||
}
|
||||
|
||||
int SkCanvas::save(SaveFlags flags) {
|
||||
this->onSave(flags);
|
||||
// call shared impl
|
||||
return this->internalSave(flags);
|
||||
}
|
||||
@ -863,9 +868,16 @@ bool SkCanvas::clipRectBounds(const SkRect* bounds, SaveFlags flags,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SkCanvas::onSaveLayer(const SkRect*, const SkPaint*, SaveFlags) {
|
||||
// Do nothing. Subclasses may do something.
|
||||
return true;
|
||||
}
|
||||
|
||||
int SkCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
return this->internalSaveLayer(bounds, paint, flags, false);
|
||||
// Overriding classes may return false to signal that we don't need to create a layer.
|
||||
bool skipLayer = !this->onSaveLayer(bounds, paint, flags);
|
||||
return this->internalSaveLayer(bounds, paint, flags, false, skipLayer);
|
||||
}
|
||||
|
||||
static SkBaseDevice* createCompatibleDevice(SkCanvas* canvas,
|
||||
@ -875,7 +887,7 @@ static SkBaseDevice* createCompatibleDevice(SkCanvas* canvas,
|
||||
}
|
||||
|
||||
int SkCanvas::internalSaveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags, bool justForImageFilter) {
|
||||
SaveFlags flags, bool justForImageFilter, bool skipLayer) {
|
||||
#ifndef SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG
|
||||
flags = (SaveFlags)(flags | kClipToLayer_SaveFlag);
|
||||
#endif
|
||||
@ -891,6 +903,11 @@ int SkCanvas::internalSaveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
return count;
|
||||
}
|
||||
|
||||
// FIXME: do onSaveLayer() overriders returning false really care about the clipRectBounds()
|
||||
// call above?
|
||||
if (skipLayer)
|
||||
return count;
|
||||
|
||||
// Kill the imagefilter if our device doesn't allow it
|
||||
SkLazyPaint lazyP;
|
||||
if (paint && paint->getImageFilter()) {
|
||||
@ -943,9 +960,14 @@ int SkCanvas::saveLayerAlpha(const SkRect* bounds, U8CPU alpha,
|
||||
}
|
||||
}
|
||||
|
||||
void SkCanvas::onRestore() {
|
||||
// Do nothing. Subclasses may do something.
|
||||
}
|
||||
|
||||
void SkCanvas::restore() {
|
||||
// check for underflow
|
||||
if (fMCStack.count() > 1) {
|
||||
this->onRestore();
|
||||
this->internalRestore();
|
||||
}
|
||||
}
|
||||
|
@ -146,7 +146,7 @@ static inline uint32_t getPaintOffset(DrawType op, uint32_t opSize) {
|
||||
return gPaintOffsets[op] * sizeof(uint32_t) + overflow;
|
||||
}
|
||||
|
||||
int SkPictureRecord::save(SaveFlags flags) {
|
||||
void SkPictureRecord::onSave(SaveFlags flags) {
|
||||
|
||||
#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
||||
fMCMgr.save(flags);
|
||||
@ -156,7 +156,8 @@ int SkPictureRecord::save(SaveFlags flags) {
|
||||
fRestoreOffsetStack.push(-(int32_t)fWriter.bytesWritten());
|
||||
this->recordSave(flags);
|
||||
#endif
|
||||
return this->INHERITED::save(flags);
|
||||
|
||||
this->INHERITED::onSave(flags);
|
||||
}
|
||||
|
||||
void SkPictureRecord::recordSave(SaveFlags flags) {
|
||||
@ -168,12 +169,11 @@ void SkPictureRecord::recordSave(SaveFlags flags) {
|
||||
this->validate(initialOffset, size);
|
||||
}
|
||||
|
||||
int SkPictureRecord::saveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
bool SkPictureRecord::onSaveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
|
||||
int count;
|
||||
#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
||||
count = fMCMgr.saveLayer(bounds, paint, flags);
|
||||
fMCMgr.saveLayer(bounds, paint, flags);
|
||||
#else
|
||||
// record the offset to us, making it non-positive to distinguish a save
|
||||
// from a clip entry.
|
||||
@ -184,15 +184,13 @@ int SkPictureRecord::saveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Don't actually call INHERITED::saveLayer, because that will try to allocate
|
||||
an offscreen device (potentially very big) which we don't actually need
|
||||
this->INHERITED::onSaveLayer(bounds, paint, flags);
|
||||
/* No need for a (potentially very big) layer which we don't actually need
|
||||
at this time (and may not be able to afford since during record our
|
||||
clip starts out the size of the picture, which is often much larger
|
||||
than the size of the actual device we'll use during playback).
|
||||
*/
|
||||
count = this->INHERITED::save(flags);
|
||||
this->clipRectBounds(bounds, flags, NULL);
|
||||
return count;
|
||||
return false;
|
||||
}
|
||||
|
||||
void SkPictureRecord::recordSaveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
@ -605,7 +603,7 @@ static void apply_optimization_to_bbh(PictureRecordOptType opt, SkPictureStateTr
|
||||
}
|
||||
}
|
||||
|
||||
void SkPictureRecord::restore() {
|
||||
void SkPictureRecord::onRestore() {
|
||||
// FIXME: SkDeferredCanvas needs to be refactored to respect
|
||||
// save/restore balancing so that the following test can be
|
||||
// turned on permanently.
|
||||
@ -653,7 +651,7 @@ void SkPictureRecord::restore() {
|
||||
fRestoreOffsetStack.pop();
|
||||
#endif
|
||||
|
||||
return this->INHERITED::restore();
|
||||
this->INHERITED::onRestore();
|
||||
}
|
||||
|
||||
void SkPictureRecord::recordRestore(bool fillInSkips) {
|
||||
|
@ -37,9 +37,6 @@ public:
|
||||
SkPictureRecord(const SkISize& dimensions, uint32_t recordFlags);
|
||||
virtual ~SkPictureRecord();
|
||||
|
||||
virtual int save(SaveFlags) SK_OVERRIDE;
|
||||
virtual int saveLayer(const SkRect* bounds, const SkPaint*, SaveFlags) SK_OVERRIDE;
|
||||
virtual void restore() SK_OVERRIDE;
|
||||
virtual bool translate(SkScalar dx, SkScalar dy) SK_OVERRIDE;
|
||||
virtual bool scale(SkScalar sx, SkScalar sy) SK_OVERRIDE;
|
||||
virtual bool rotate(SkScalar degrees) SK_OVERRIDE;
|
||||
@ -227,6 +224,11 @@ protected:
|
||||
const void* onPeekPixels(SkImageInfo*, size_t*) SK_OVERRIDE {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
virtual void onSave(SaveFlags) SK_OVERRIDE;
|
||||
virtual bool onSaveLayer(const SkRect*, const SkPaint*, SaveFlags) SK_OVERRIDE;
|
||||
virtual void onRestore() SK_OVERRIDE;
|
||||
|
||||
virtual void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) SK_OVERRIDE;
|
||||
virtual void onPushCull(const SkRect&) SK_OVERRIDE;
|
||||
virtual void onPopCull() SK_OVERRIDE;
|
||||
|
@ -229,10 +229,6 @@ public:
|
||||
}
|
||||
|
||||
// overrides from SkCanvas
|
||||
virtual int save(SaveFlags) SK_OVERRIDE;
|
||||
virtual int saveLayer(const SkRect* bounds, const SkPaint*,
|
||||
SaveFlags) SK_OVERRIDE;
|
||||
virtual void restore() SK_OVERRIDE;
|
||||
virtual bool isDrawingToLayer() const SK_OVERRIDE;
|
||||
virtual bool translate(SkScalar dx, SkScalar dy) SK_OVERRIDE;
|
||||
virtual bool scale(SkScalar sx, SkScalar sy) SK_OVERRIDE;
|
||||
@ -287,6 +283,10 @@ public:
|
||||
bool shuttleBitmap(const SkBitmap&, int32_t slot);
|
||||
|
||||
protected:
|
||||
virtual void onSave(SaveFlags) SK_OVERRIDE;
|
||||
virtual bool onSaveLayer(const SkRect*, const SkPaint*, SaveFlags) SK_OVERRIDE;
|
||||
virtual void onRestore() SK_OVERRIDE;
|
||||
|
||||
virtual void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) SK_OVERRIDE;
|
||||
|
||||
virtual void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
|
||||
@ -514,16 +514,17 @@ uint32_t SkGPipeCanvas::getTypefaceID(SkTypeface* face) {
|
||||
#define NOTIFY_SETUP(canvas) \
|
||||
AutoPipeNotify apn(canvas)
|
||||
|
||||
int SkGPipeCanvas::save(SaveFlags flags) {
|
||||
void SkGPipeCanvas::onSave(SaveFlags flags) {
|
||||
NOTIFY_SETUP(this);
|
||||
if (this->needOpBytes()) {
|
||||
this->writeOp(kSave_DrawOp, 0, flags);
|
||||
}
|
||||
return this->INHERITED::save(flags);
|
||||
|
||||
this->INHERITED::onSave(flags);
|
||||
}
|
||||
|
||||
int SkGPipeCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags saveFlags) {
|
||||
bool SkGPipeCanvas::onSaveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags saveFlags) {
|
||||
NOTIFY_SETUP(this);
|
||||
size_t size = 0;
|
||||
unsigned opFlags = 0;
|
||||
@ -547,21 +548,23 @@ int SkGPipeCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
if (kNoSaveLayer == fFirstSaveLayerStackLevel){
|
||||
fFirstSaveLayerStackLevel = this->getSaveCount();
|
||||
}
|
||||
// we just pass on the save, so we don't create a layer
|
||||
return this->INHERITED::save(saveFlags);
|
||||
|
||||
this->INHERITED::onSaveLayer(bounds, paint, saveFlags);
|
||||
// we don't create a layer
|
||||
return false;
|
||||
}
|
||||
|
||||
void SkGPipeCanvas::restore() {
|
||||
void SkGPipeCanvas::onRestore() {
|
||||
NOTIFY_SETUP(this);
|
||||
if (this->needOpBytes()) {
|
||||
this->writeOp(kRestore_DrawOp);
|
||||
}
|
||||
|
||||
this->INHERITED::restore();
|
||||
|
||||
if (this->getSaveCount() == fFirstSaveLayerStackLevel){
|
||||
if (this->getSaveCount() - 1 == fFirstSaveLayerStackLevel){
|
||||
fFirstSaveLayerStackLevel = kNoSaveLayer;
|
||||
}
|
||||
|
||||
this->INHERITED::onRestore();
|
||||
}
|
||||
|
||||
bool SkGPipeCanvas::isDrawingToLayer() const {
|
||||
|
@ -739,28 +739,25 @@ bool SkDeferredCanvas::isFullFrame(const SkRect* rect,
|
||||
SkIntToScalar(canvasSize.fWidth), SkIntToScalar(canvasSize.fHeight)));
|
||||
}
|
||||
|
||||
int SkDeferredCanvas::save(SaveFlags flags) {
|
||||
void SkDeferredCanvas::onSave(SaveFlags flags) {
|
||||
this->drawingCanvas()->save(flags);
|
||||
int val = this->INHERITED::save(flags);
|
||||
this->recordedDrawCommand();
|
||||
|
||||
return val;
|
||||
this->INHERITED::onSave(flags);
|
||||
}
|
||||
|
||||
int SkDeferredCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
bool SkDeferredCanvas::onSaveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
this->drawingCanvas()->saveLayer(bounds, paint, flags);
|
||||
int count = this->INHERITED::save(flags);
|
||||
this->clipRectBounds(bounds, flags, NULL);
|
||||
this->recordedDrawCommand();
|
||||
|
||||
return count;
|
||||
this->INHERITED::onSaveLayer(bounds, paint, flags);
|
||||
// No need for a full layer.
|
||||
return false;
|
||||
}
|
||||
|
||||
void SkDeferredCanvas::restore() {
|
||||
void SkDeferredCanvas::onRestore() {
|
||||
this->drawingCanvas()->restore();
|
||||
this->INHERITED::restore();
|
||||
this->recordedDrawCommand();
|
||||
this->INHERITED::onRestore();
|
||||
}
|
||||
|
||||
bool SkDeferredCanvas::isDrawingToLayer() const {
|
||||
|
@ -192,13 +192,13 @@ void SkDumpCanvas::dump(Verb verb, const SkPaint* paint,
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
int SkDumpCanvas::save(SaveFlags flags) {
|
||||
void SkDumpCanvas::onSave(SaveFlags flags) {
|
||||
this->dump(kSave_Verb, NULL, "save(0x%X)", flags);
|
||||
return this->INHERITED::save(flags);
|
||||
this->INHERITED::onSave(flags);
|
||||
}
|
||||
|
||||
int SkDumpCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
bool SkDumpCanvas::onSaveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
SkString str;
|
||||
str.printf("saveLayer(0x%X)", flags);
|
||||
if (bounds) {
|
||||
@ -214,12 +214,12 @@ int SkDumpCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
}
|
||||
}
|
||||
this->dump(kSave_Verb, paint, str.c_str());
|
||||
return this->INHERITED::saveLayer(bounds, paint, flags);
|
||||
return this->INHERITED::onSaveLayer(bounds, paint, flags);
|
||||
}
|
||||
|
||||
void SkDumpCanvas::restore() {
|
||||
this->INHERITED::restore();
|
||||
void SkDumpCanvas::onRestore() {
|
||||
this->dump(kRestore_Verb, NULL, "restore");
|
||||
this->INHERITED::onRestore();
|
||||
}
|
||||
|
||||
bool SkDumpCanvas::translate(SkScalar dx, SkScalar dy) {
|
||||
|
@ -81,13 +81,13 @@ SkLuaCanvas::SkLuaCanvas(int width, int height, lua_State* L, const char func[])
|
||||
|
||||
SkLuaCanvas::~SkLuaCanvas() {}
|
||||
|
||||
int SkLuaCanvas::save(SaveFlags flags) {
|
||||
void SkLuaCanvas::onSave(SaveFlags flags) {
|
||||
AUTO_LUA("save");
|
||||
return this->INHERITED::save(flags);
|
||||
this->INHERITED::onSave(flags);
|
||||
}
|
||||
|
||||
int SkLuaCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
bool SkLuaCanvas::onSaveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
AUTO_LUA("saveLayer");
|
||||
if (bounds) {
|
||||
lua.pushRect(*bounds, "bounds");
|
||||
@ -95,12 +95,15 @@ int SkLuaCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
if (paint) {
|
||||
lua.pushPaint(*paint, "paint");
|
||||
}
|
||||
return this->INHERITED::save(flags);
|
||||
|
||||
this->INHERITED::onSaveLayer(bounds, paint, flags);
|
||||
// No need for a layer.
|
||||
return false;
|
||||
}
|
||||
|
||||
void SkLuaCanvas::restore() {
|
||||
void SkLuaCanvas::onRestore() {
|
||||
AUTO_LUA("restore");
|
||||
this->INHERITED::restore();
|
||||
this->INHERITED::onRestore();
|
||||
}
|
||||
|
||||
bool SkLuaCanvas::translate(SkScalar dx, SkScalar dy) {
|
||||
|
@ -57,29 +57,33 @@ private:
|
||||
SkCanvas* fCanvas;
|
||||
};
|
||||
|
||||
int SkNWayCanvas::save(SaveFlags flags) {
|
||||
void SkNWayCanvas::onSave(SaveFlags flags) {
|
||||
Iter iter(fList);
|
||||
while (iter.next()) {
|
||||
iter->save(flags);
|
||||
}
|
||||
return this->INHERITED::save(flags);
|
||||
|
||||
this->INHERITED::onSave(flags);
|
||||
}
|
||||
|
||||
int SkNWayCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
bool SkNWayCanvas::onSaveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
Iter iter(fList);
|
||||
while (iter.next()) {
|
||||
iter->saveLayer(bounds, paint, flags);
|
||||
}
|
||||
return this->INHERITED::saveLayer(bounds, paint, flags);
|
||||
|
||||
this->INHERITED::onSaveLayer(bounds, paint, flags);
|
||||
// No need for a layer.
|
||||
return false;
|
||||
}
|
||||
|
||||
void SkNWayCanvas::restore() {
|
||||
void SkNWayCanvas::onRestore() {
|
||||
Iter iter(fList);
|
||||
while (iter.next()) {
|
||||
iter->restore();
|
||||
}
|
||||
this->INHERITED::restore();
|
||||
this->INHERITED::onRestore();
|
||||
}
|
||||
|
||||
bool SkNWayCanvas::translate(SkScalar dx, SkScalar dy) {
|
||||
|
@ -18,21 +18,13 @@ class SkNoSaveLayerCanvas : public SkCanvas {
|
||||
public:
|
||||
SkNoSaveLayerCanvas(SkBaseDevice* device) : INHERITED(device) {}
|
||||
|
||||
// turn saveLayer() into save() for speed, should not affect correctness.
|
||||
virtual int saveLayer(const SkRect* bounds,
|
||||
const SkPaint* paint,
|
||||
SaveFlags flags) SK_OVERRIDE {
|
||||
|
||||
// Like SkPictureRecord, we don't want to create layers, but we do need
|
||||
// to respect the save and (possibly) its rect-clip.
|
||||
int count = this->INHERITED::save(flags);
|
||||
if (NULL != bounds) {
|
||||
this->INHERITED::clipRectBounds(bounds, flags, NULL);
|
||||
}
|
||||
return count;
|
||||
protected:
|
||||
virtual bool onSaveLayer(const SkRect* bounds, const SkPaint* paint, SaveFlags flags)
|
||||
SK_OVERRIDE {
|
||||
this->INHERITED::onSaveLayer(bounds, paint, flags);
|
||||
return false;
|
||||
}
|
||||
|
||||
protected:
|
||||
// disable aa for speed
|
||||
virtual void onClipRect(const SkRect& rect, SkRegion::Op op, ClipEdgeStyle) SK_OVERRIDE {
|
||||
this->INHERITED::onClipRect(rect, op, kHard_ClipEdgeStyle);
|
||||
|
@ -21,17 +21,22 @@ void SkProxyCanvas::setProxy(SkCanvas* proxy) {
|
||||
|
||||
///////////////////////////////// Overrides ///////////
|
||||
|
||||
int SkProxyCanvas::save(SaveFlags flags) {
|
||||
return fProxy->save(flags);
|
||||
void SkProxyCanvas::onSave(SaveFlags flags) {
|
||||
fProxy->save(flags);
|
||||
this->INHERITED::onSave(flags);
|
||||
}
|
||||
|
||||
int SkProxyCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
return fProxy->saveLayer(bounds, paint, flags);
|
||||
bool SkProxyCanvas::onSaveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
fProxy->saveLayer(bounds, paint, flags);
|
||||
this->INHERITED::onSaveLayer(bounds, paint, flags);
|
||||
// No need for a layer.
|
||||
return false;
|
||||
}
|
||||
|
||||
void SkProxyCanvas::restore() {
|
||||
void SkProxyCanvas::onRestore() {
|
||||
fProxy->restore();
|
||||
this->INHERITED::onRestore();
|
||||
}
|
||||
|
||||
bool SkProxyCanvas::translate(SkScalar dx, SkScalar dy) {
|
||||
|
@ -530,8 +530,9 @@ void SkDebugCanvas::onPopCull() {
|
||||
this->addDrawCommand(new SkPopCullCommand());
|
||||
}
|
||||
|
||||
void SkDebugCanvas::restore() {
|
||||
addDrawCommand(new SkRestoreCommand());
|
||||
void SkDebugCanvas::onRestore() {
|
||||
this->addDrawCommand(new SkRestoreCommand());
|
||||
this->INHERITED::onRestore();
|
||||
}
|
||||
|
||||
bool SkDebugCanvas::rotate(SkScalar degrees) {
|
||||
@ -539,15 +540,17 @@ bool SkDebugCanvas::rotate(SkScalar degrees) {
|
||||
return true;
|
||||
}
|
||||
|
||||
int SkDebugCanvas::save(SaveFlags flags) {
|
||||
addDrawCommand(new SkSaveCommand(flags));
|
||||
return true;
|
||||
void SkDebugCanvas::onSave(SaveFlags flags) {
|
||||
this->addDrawCommand(new SkSaveCommand(flags));
|
||||
this->INHERITED::onSave(flags);
|
||||
}
|
||||
|
||||
int SkDebugCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
addDrawCommand(new SkSaveLayerCommand(bounds, paint, flags));
|
||||
return true;
|
||||
bool SkDebugCanvas::onSaveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
this->addDrawCommand(new SkSaveLayerCommand(bounds, paint, flags));
|
||||
this->INHERITED::onSaveLayer(bounds, paint, flags);
|
||||
// No need for a full layer.
|
||||
return false;
|
||||
}
|
||||
|
||||
bool SkDebugCanvas::scale(SkScalar sx, SkScalar sy) {
|
||||
|
@ -206,14 +206,8 @@ public:
|
||||
const uint16_t indices[], int indexCount,
|
||||
const SkPaint&) SK_OVERRIDE;
|
||||
|
||||
virtual void restore() SK_OVERRIDE;
|
||||
|
||||
virtual bool rotate(SkScalar degrees) SK_OVERRIDE;
|
||||
|
||||
virtual int save(SaveFlags) SK_OVERRIDE;
|
||||
|
||||
virtual int saveLayer(const SkRect* bounds, const SkPaint*, SaveFlags) SK_OVERRIDE;
|
||||
|
||||
virtual bool scale(SkScalar sx, SkScalar sy) SK_OVERRIDE;
|
||||
|
||||
virtual void setMatrix(const SkMatrix& matrix) SK_OVERRIDE;
|
||||
@ -248,6 +242,10 @@ public:
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void onSave(SaveFlags) SK_OVERRIDE;
|
||||
virtual bool onSaveLayer(const SkRect*, const SkPaint*, SaveFlags) SK_OVERRIDE;
|
||||
virtual void onRestore() SK_OVERRIDE;
|
||||
|
||||
virtual void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) SK_OVERRIDE;
|
||||
virtual void onPushCull(const SkRect& cullRect) SK_OVERRIDE;
|
||||
virtual void onPopCull() SK_OVERRIDE;
|
||||
|
Loading…
Reference in New Issue
Block a user