зеркало из https://github.com/mozilla/moz-skia.git
Revert of Revert of Revert "De-virtualize SkCanvas save/restore." (https://codereview.chromium.org/196323003/)
Reason for revert: Pulling out to rename the virtuals. Original issue's description: > 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 > > TBR=halcanary@google.com,fmalita@chromium.org > NOTREECHECKS=true > NOTRY=true > > Committed: http://code.google.com/p/skia/source/detail?r=13754 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/197553002 git-svn-id: http://skia.googlecode.com/svn/trunk@13765 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
Родитель
9e5f85e89d
Коммит
069a55a7fe
|
@ -26,6 +26,13 @@ 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;}
|
||||
|
@ -99,12 +106,6 @@ 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()
|
||||
*/
|
||||
int save(SaveFlags flags = kMatrixClip_SaveFlag);
|
||||
virtual 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()
|
||||
*/
|
||||
int saveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags = kARGB_ClipLayer_SaveFlag);
|
||||
virtual 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.
|
||||
*/
|
||||
void restore();
|
||||
virtual 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,14 +1178,6 @@ 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 {
|
||||
|
@ -1285,7 +1277,7 @@ private:
|
|||
const SkRect& dst, const SkPaint* paint);
|
||||
void internalDrawPaint(const SkPaint& paint);
|
||||
int internalSaveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags, bool justForImageFilter, bool skipLayer);
|
||||
SaveFlags, bool justForImageFilter);
|
||||
void internalDrawDevice(SkBaseDevice*, int x, int y, const SkPaint*);
|
||||
|
||||
// shared by save() and saveLayer()
|
||||
|
|
|
@ -138,6 +138,10 @@ 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;
|
||||
|
@ -189,10 +193,6 @@ 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,6 +74,11 @@ 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;
|
||||
|
@ -119,10 +124,6 @@ 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,6 +20,11 @@ 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;
|
||||
|
@ -62,10 +67,6 @@ 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,6 +23,10 @@ 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;
|
||||
|
@ -77,10 +81,6 @@ 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,6 +26,11 @@ 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;
|
||||
|
@ -75,10 +80,6 @@ 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);
|
||||
}
|
||||
|
||||
void SkBBoxHierarchyRecord::onSave(SaveFlags flags) {
|
||||
int SkBBoxHierarchyRecord::save(SaveFlags flags) {
|
||||
fStateTree->appendSave();
|
||||
this->INHERITED::onSave(flags);
|
||||
return INHERITED::save(flags);
|
||||
}
|
||||
|
||||
bool SkBBoxHierarchyRecord::onSaveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
int SkBBoxHierarchyRecord::saveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
fStateTree->appendSaveLayer(this->writeStream().bytesWritten());
|
||||
return this->INHERITED::onSaveLayer(bounds, paint, flags);
|
||||
return INHERITED::saveLayer(bounds, paint, flags);
|
||||
}
|
||||
|
||||
void SkBBoxHierarchyRecord::onRestore() {
|
||||
void SkBBoxHierarchyRecord::restore() {
|
||||
fStateTree->appendRestore();
|
||||
this->INHERITED::onRestore();
|
||||
INHERITED::restore();
|
||||
}
|
||||
|
||||
bool SkBBoxHierarchyRecord::translate(SkScalar dx, SkScalar dy) {
|
||||
|
|
|
@ -23,6 +23,11 @@ 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;
|
||||
|
@ -34,10 +39,6 @@ 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, false);
|
||||
SkCanvas::kARGB_ClipLayer_SaveFlag, true);
|
||||
// we'll clear the imageFilter for the actual draws in next(), so
|
||||
// it will only be applied during the restore().
|
||||
fDoClearImageFilter = true;
|
||||
|
@ -810,12 +810,7 @@ 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);
|
||||
}
|
||||
|
@ -872,16 +867,9 @@ 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) {
|
||||
// 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);
|
||||
return this->internalSaveLayer(bounds, paint, flags, false);
|
||||
}
|
||||
|
||||
static SkBaseDevice* createCompatibleDevice(SkCanvas* canvas,
|
||||
|
@ -891,7 +879,7 @@ static SkBaseDevice* createCompatibleDevice(SkCanvas* canvas,
|
|||
}
|
||||
|
||||
int SkCanvas::internalSaveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags, bool justForImageFilter, bool skipLayer) {
|
||||
SaveFlags flags, bool justForImageFilter) {
|
||||
#ifndef SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG
|
||||
flags = (SaveFlags)(flags | kClipToLayer_SaveFlag);
|
||||
#endif
|
||||
|
@ -907,11 +895,6 @@ 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()) {
|
||||
|
@ -964,14 +947,9 @@ 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;
|
||||
}
|
||||
|
||||
void SkPictureRecord::onSave(SaveFlags flags) {
|
||||
int SkPictureRecord::save(SaveFlags flags) {
|
||||
|
||||
#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
||||
fMCMgr.save(flags);
|
||||
|
@ -156,8 +156,7 @@ void SkPictureRecord::onSave(SaveFlags flags) {
|
|||
fRestoreOffsetStack.push(-(int32_t)fWriter.bytesWritten());
|
||||
this->recordSave(flags);
|
||||
#endif
|
||||
|
||||
this->INHERITED::onSave(flags);
|
||||
return this->INHERITED::save(flags);
|
||||
}
|
||||
|
||||
void SkPictureRecord::recordSave(SaveFlags flags) {
|
||||
|
@ -169,11 +168,12 @@ void SkPictureRecord::recordSave(SaveFlags flags) {
|
|||
this->validate(initialOffset, size);
|
||||
}
|
||||
|
||||
bool SkPictureRecord::onSaveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
int SkPictureRecord::saveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
|
||||
int count;
|
||||
#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
||||
fMCMgr.saveLayer(bounds, paint, flags);
|
||||
count = fMCMgr.saveLayer(bounds, paint, flags);
|
||||
#else
|
||||
// record the offset to us, making it non-positive to distinguish a save
|
||||
// from a clip entry.
|
||||
|
@ -184,13 +184,15 @@ bool SkPictureRecord::onSaveLayer(const SkRect* bounds, const SkPaint* paint,
|
|||
}
|
||||
#endif
|
||||
|
||||
this->INHERITED::onSaveLayer(bounds, paint, flags);
|
||||
/* No need for a (potentially very big) layer which we don't actually need
|
||||
/* Don't actually call INHERITED::saveLayer, because that will try to allocate
|
||||
an offscreen device (potentially very big) 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).
|
||||
*/
|
||||
return false;
|
||||
count = this->INHERITED::save(flags);
|
||||
this->clipRectBounds(bounds, flags, NULL);
|
||||
return count;
|
||||
}
|
||||
|
||||
void SkPictureRecord::recordSaveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
|
@ -603,7 +605,7 @@ static void apply_optimization_to_bbh(PictureRecordOptType opt, SkPictureStateTr
|
|||
}
|
||||
}
|
||||
|
||||
void SkPictureRecord::onRestore() {
|
||||
void SkPictureRecord::restore() {
|
||||
// FIXME: SkDeferredCanvas needs to be refactored to respect
|
||||
// save/restore balancing so that the following test can be
|
||||
// turned on permanently.
|
||||
|
@ -651,7 +653,7 @@ void SkPictureRecord::onRestore() {
|
|||
fRestoreOffsetStack.pop();
|
||||
#endif
|
||||
|
||||
this->INHERITED::onRestore();
|
||||
return this->INHERITED::restore();
|
||||
}
|
||||
|
||||
void SkPictureRecord::recordRestore(bool fillInSkips) {
|
||||
|
|
|
@ -37,6 +37,9 @@ 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;
|
||||
|
@ -224,11 +227,6 @@ 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,6 +229,10 @@ 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;
|
||||
|
@ -283,10 +287,6 @@ 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,17 +514,16 @@ uint32_t SkGPipeCanvas::getTypefaceID(SkTypeface* face) {
|
|||
#define NOTIFY_SETUP(canvas) \
|
||||
AutoPipeNotify apn(canvas)
|
||||
|
||||
void SkGPipeCanvas::onSave(SaveFlags flags) {
|
||||
int SkGPipeCanvas::save(SaveFlags flags) {
|
||||
NOTIFY_SETUP(this);
|
||||
if (this->needOpBytes()) {
|
||||
this->writeOp(kSave_DrawOp, 0, flags);
|
||||
}
|
||||
|
||||
this->INHERITED::onSave(flags);
|
||||
return this->INHERITED::save(flags);
|
||||
}
|
||||
|
||||
bool SkGPipeCanvas::onSaveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags saveFlags) {
|
||||
int SkGPipeCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags saveFlags) {
|
||||
NOTIFY_SETUP(this);
|
||||
size_t size = 0;
|
||||
unsigned opFlags = 0;
|
||||
|
@ -548,23 +547,21 @@ bool SkGPipeCanvas::onSaveLayer(const SkRect* bounds, const SkPaint* paint,
|
|||
if (kNoSaveLayer == fFirstSaveLayerStackLevel){
|
||||
fFirstSaveLayerStackLevel = this->getSaveCount();
|
||||
}
|
||||
|
||||
this->INHERITED::onSaveLayer(bounds, paint, saveFlags);
|
||||
// we don't create a layer
|
||||
return false;
|
||||
// we just pass on the save, so we don't create a layer
|
||||
return this->INHERITED::save(saveFlags);
|
||||
}
|
||||
|
||||
void SkGPipeCanvas::onRestore() {
|
||||
void SkGPipeCanvas::restore() {
|
||||
NOTIFY_SETUP(this);
|
||||
if (this->needOpBytes()) {
|
||||
this->writeOp(kRestore_DrawOp);
|
||||
}
|
||||
|
||||
if (this->getSaveCount() - 1 == fFirstSaveLayerStackLevel){
|
||||
this->INHERITED::restore();
|
||||
|
||||
if (this->getSaveCount() == fFirstSaveLayerStackLevel){
|
||||
fFirstSaveLayerStackLevel = kNoSaveLayer;
|
||||
}
|
||||
|
||||
this->INHERITED::onRestore();
|
||||
}
|
||||
|
||||
bool SkGPipeCanvas::isDrawingToLayer() const {
|
||||
|
|
|
@ -739,25 +739,28 @@ bool SkDeferredCanvas::isFullFrame(const SkRect* rect,
|
|||
SkIntToScalar(canvasSize.fWidth), SkIntToScalar(canvasSize.fHeight)));
|
||||
}
|
||||
|
||||
void SkDeferredCanvas::onSave(SaveFlags flags) {
|
||||
int SkDeferredCanvas::save(SaveFlags flags) {
|
||||
this->drawingCanvas()->save(flags);
|
||||
int val = this->INHERITED::save(flags);
|
||||
this->recordedDrawCommand();
|
||||
this->INHERITED::onSave(flags);
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
bool SkDeferredCanvas::onSaveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
int SkDeferredCanvas::saveLayer(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();
|
||||
this->INHERITED::onSaveLayer(bounds, paint, flags);
|
||||
// No need for a full layer.
|
||||
return false;
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
void SkDeferredCanvas::onRestore() {
|
||||
void SkDeferredCanvas::restore() {
|
||||
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,
|
|||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void SkDumpCanvas::onSave(SaveFlags flags) {
|
||||
int SkDumpCanvas::save(SaveFlags flags) {
|
||||
this->dump(kSave_Verb, NULL, "save(0x%X)", flags);
|
||||
this->INHERITED::onSave(flags);
|
||||
return this->INHERITED::save(flags);
|
||||
}
|
||||
|
||||
bool SkDumpCanvas::onSaveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
int SkDumpCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
SkString str;
|
||||
str.printf("saveLayer(0x%X)", flags);
|
||||
if (bounds) {
|
||||
|
@ -214,12 +214,12 @@ bool SkDumpCanvas::onSaveLayer(const SkRect* bounds, const SkPaint* paint,
|
|||
}
|
||||
}
|
||||
this->dump(kSave_Verb, paint, str.c_str());
|
||||
return this->INHERITED::onSaveLayer(bounds, paint, flags);
|
||||
return this->INHERITED::saveLayer(bounds, paint, flags);
|
||||
}
|
||||
|
||||
void SkDumpCanvas::onRestore() {
|
||||
void SkDumpCanvas::restore() {
|
||||
this->INHERITED::restore();
|
||||
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() {}
|
||||
|
||||
void SkLuaCanvas::onSave(SaveFlags flags) {
|
||||
int SkLuaCanvas::save(SaveFlags flags) {
|
||||
AUTO_LUA("save");
|
||||
this->INHERITED::onSave(flags);
|
||||
return this->INHERITED::save(flags);
|
||||
}
|
||||
|
||||
bool SkLuaCanvas::onSaveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
int SkLuaCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
AUTO_LUA("saveLayer");
|
||||
if (bounds) {
|
||||
lua.pushRect(*bounds, "bounds");
|
||||
|
@ -95,15 +95,12 @@ bool SkLuaCanvas::onSaveLayer(const SkRect* bounds, const SkPaint* paint,
|
|||
if (paint) {
|
||||
lua.pushPaint(*paint, "paint");
|
||||
}
|
||||
|
||||
this->INHERITED::onSaveLayer(bounds, paint, flags);
|
||||
// No need for a layer.
|
||||
return false;
|
||||
return this->INHERITED::save(flags);
|
||||
}
|
||||
|
||||
void SkLuaCanvas::onRestore() {
|
||||
void SkLuaCanvas::restore() {
|
||||
AUTO_LUA("restore");
|
||||
this->INHERITED::onRestore();
|
||||
this->INHERITED::restore();
|
||||
}
|
||||
|
||||
bool SkLuaCanvas::translate(SkScalar dx, SkScalar dy) {
|
||||
|
|
|
@ -57,33 +57,29 @@ private:
|
|||
SkCanvas* fCanvas;
|
||||
};
|
||||
|
||||
void SkNWayCanvas::onSave(SaveFlags flags) {
|
||||
int SkNWayCanvas::save(SaveFlags flags) {
|
||||
Iter iter(fList);
|
||||
while (iter.next()) {
|
||||
iter->save(flags);
|
||||
}
|
||||
|
||||
this->INHERITED::onSave(flags);
|
||||
return this->INHERITED::save(flags);
|
||||
}
|
||||
|
||||
bool SkNWayCanvas::onSaveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
int SkNWayCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
Iter iter(fList);
|
||||
while (iter.next()) {
|
||||
iter->saveLayer(bounds, paint, flags);
|
||||
}
|
||||
|
||||
this->INHERITED::onSaveLayer(bounds, paint, flags);
|
||||
// No need for a layer.
|
||||
return false;
|
||||
return this->INHERITED::saveLayer(bounds, paint, flags);
|
||||
}
|
||||
|
||||
void SkNWayCanvas::onRestore() {
|
||||
void SkNWayCanvas::restore() {
|
||||
Iter iter(fList);
|
||||
while (iter.next()) {
|
||||
iter->restore();
|
||||
}
|
||||
this->INHERITED::onRestore();
|
||||
this->INHERITED::restore();
|
||||
}
|
||||
|
||||
bool SkNWayCanvas::translate(SkScalar dx, SkScalar dy) {
|
||||
|
|
|
@ -18,13 +18,21 @@ class SkNoSaveLayerCanvas : public SkCanvas {
|
|||
public:
|
||||
SkNoSaveLayerCanvas(SkBaseDevice* device) : INHERITED(device) {}
|
||||
|
||||
protected:
|
||||
virtual bool onSaveLayer(const SkRect* bounds, const SkPaint* paint, SaveFlags flags)
|
||||
SK_OVERRIDE {
|
||||
this->INHERITED::onSaveLayer(bounds, paint, flags);
|
||||
return false;
|
||||
// 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:
|
||||
// disable aa for speed
|
||||
virtual void onClipRect(const SkRect& rect, SkRegion::Op op, ClipEdgeStyle) SK_OVERRIDE {
|
||||
this->INHERITED::onClipRect(rect, op, kHard_ClipEdgeStyle);
|
||||
|
|
|
@ -21,22 +21,17 @@ void SkProxyCanvas::setProxy(SkCanvas* proxy) {
|
|||
|
||||
///////////////////////////////// Overrides ///////////
|
||||
|
||||
void SkProxyCanvas::onSave(SaveFlags flags) {
|
||||
fProxy->save(flags);
|
||||
this->INHERITED::onSave(flags);
|
||||
int SkProxyCanvas::save(SaveFlags flags) {
|
||||
return fProxy->save(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;
|
||||
int SkProxyCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
return fProxy->saveLayer(bounds, paint, flags);
|
||||
}
|
||||
|
||||
void SkProxyCanvas::onRestore() {
|
||||
void SkProxyCanvas::restore() {
|
||||
fProxy->restore();
|
||||
this->INHERITED::onRestore();
|
||||
}
|
||||
|
||||
bool SkProxyCanvas::translate(SkScalar dx, SkScalar dy) {
|
||||
|
|
|
@ -530,9 +530,8 @@ void SkDebugCanvas::onPopCull() {
|
|||
this->addDrawCommand(new SkPopCullCommand());
|
||||
}
|
||||
|
||||
void SkDebugCanvas::onRestore() {
|
||||
this->addDrawCommand(new SkRestoreCommand());
|
||||
this->INHERITED::onRestore();
|
||||
void SkDebugCanvas::restore() {
|
||||
addDrawCommand(new SkRestoreCommand());
|
||||
}
|
||||
|
||||
bool SkDebugCanvas::rotate(SkScalar degrees) {
|
||||
|
@ -540,17 +539,15 @@ bool SkDebugCanvas::rotate(SkScalar degrees) {
|
|||
return true;
|
||||
}
|
||||
|
||||
void SkDebugCanvas::onSave(SaveFlags flags) {
|
||||
this->addDrawCommand(new SkSaveCommand(flags));
|
||||
this->INHERITED::onSave(flags);
|
||||
int SkDebugCanvas::save(SaveFlags flags) {
|
||||
addDrawCommand(new SkSaveCommand(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;
|
||||
int SkDebugCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint,
|
||||
SaveFlags flags) {
|
||||
addDrawCommand(new SkSaveLayerCommand(bounds, paint, flags));
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SkDebugCanvas::scale(SkScalar sx, SkScalar sy) {
|
||||
|
|
|
@ -206,8 +206,14 @@ 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;
|
||||
|
@ -242,10 +248,6 @@ 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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче