michael@0: michael@0: /* michael@0: * Copyright 2012 Google Inc. michael@0: * michael@0: * Use of this source code is governed by a BSD-style license that can be michael@0: * found in the LICENSE file. michael@0: */ michael@0: michael@0: #ifndef SKDRAWCOMMAND_H_ michael@0: #define SKDRAWCOMMAND_H_ michael@0: michael@0: #include "SkPictureFlat.h" michael@0: #include "SkCanvas.h" michael@0: #include "SkString.h" michael@0: michael@0: class SK_API SkDrawCommand { michael@0: public: michael@0: /* TODO(chudy): Remove subclasses. */ michael@0: SkDrawCommand(DrawType drawType); michael@0: SkDrawCommand(); michael@0: michael@0: virtual ~SkDrawCommand(); michael@0: michael@0: virtual SkString toString(); michael@0: michael@0: virtual const char* toCString() { michael@0: return GetCommandString(fDrawType); michael@0: } michael@0: michael@0: bool isVisible() const { michael@0: return fVisible; michael@0: } michael@0: michael@0: void setVisible(bool toggle) { michael@0: fVisible = toggle; michael@0: } michael@0: michael@0: SkTDArray* Info() {return &fInfo; }; michael@0: virtual void execute(SkCanvas* canvas) = 0; michael@0: virtual void vizExecute(SkCanvas* canvas) { }; michael@0: /** Does nothing by default, but used by save() and restore()-type michael@0: subclasses to track unresolved save() calls. */ michael@0: virtual void trackSaveState(int* state) { }; michael@0: michael@0: // The next "active" system is only used by save, saveLayer, restore, michael@0: // pushCull and popCull. It is used in two ways: michael@0: // To determine which saveLayers are currently active (at a michael@0: // given point in the rendering). michael@0: // save just return a kPushLayer action but don't track active state michael@0: // restore just return a kPopLayer action michael@0: // saveLayers return kPushLayer but also track the active state michael@0: // To determine which culls are currently active (at a given point) michael@0: // in the rendering). michael@0: // pushCull returns a kPushCull action michael@0: // popCull returns a kPopCull action michael@0: enum Action { michael@0: kNone_Action, michael@0: kPopLayer_Action, michael@0: kPushLayer_Action, michael@0: kPopCull_Action, michael@0: kPushCull_Action michael@0: }; michael@0: virtual Action action() const { return kNone_Action; } michael@0: virtual void setActive(bool active) {} michael@0: virtual bool active() const { return false; } michael@0: michael@0: DrawType getType() { return fDrawType; }; michael@0: michael@0: virtual bool render(SkCanvas* canvas) const { return false; } michael@0: michael@0: static const char* GetCommandString(DrawType type); michael@0: michael@0: protected: michael@0: DrawType fDrawType; michael@0: SkTDArray fInfo; michael@0: michael@0: private: michael@0: bool fVisible; michael@0: }; michael@0: michael@0: class SkRestoreCommand : public SkDrawCommand { michael@0: public: michael@0: SkRestoreCommand(); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: virtual void trackSaveState(int* state) SK_OVERRIDE; michael@0: virtual Action action() const SK_OVERRIDE { return kPopLayer_Action; } michael@0: michael@0: private: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkClearCommand : public SkDrawCommand { michael@0: public: michael@0: SkClearCommand(SkColor color); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: private: michael@0: SkColor fColor; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkClipPathCommand : public SkDrawCommand { michael@0: public: michael@0: SkClipPathCommand(const SkPath& path, SkRegion::Op op, bool doAA); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: virtual bool render(SkCanvas* canvas) const SK_OVERRIDE; michael@0: private: michael@0: SkPath fPath; michael@0: SkRegion::Op fOp; michael@0: bool fDoAA; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkClipRegionCommand : public SkDrawCommand { michael@0: public: michael@0: SkClipRegionCommand(const SkRegion& region, SkRegion::Op op); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: private: michael@0: SkRegion fRegion; michael@0: SkRegion::Op fOp; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkClipRectCommand : public SkDrawCommand { michael@0: public: michael@0: SkClipRectCommand(const SkRect& rect, SkRegion::Op op, bool doAA); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: michael@0: const SkRect& rect() const { return fRect; } michael@0: SkRegion::Op op() const { return fOp; } michael@0: bool doAA() const { return fDoAA; } michael@0: michael@0: private: michael@0: SkRect fRect; michael@0: SkRegion::Op fOp; michael@0: bool fDoAA; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkClipRRectCommand : public SkDrawCommand { michael@0: public: michael@0: SkClipRRectCommand(const SkRRect& rrect, SkRegion::Op op, bool doAA); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: virtual bool render(SkCanvas* canvas) const SK_OVERRIDE; michael@0: michael@0: const SkRRect& rrect() const { return fRRect; } michael@0: SkRegion::Op op() const { return fOp; } michael@0: bool doAA() const { return fDoAA; } michael@0: michael@0: private: michael@0: SkRRect fRRect; michael@0: SkRegion::Op fOp; michael@0: bool fDoAA; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkConcatCommand : public SkDrawCommand { michael@0: public: michael@0: SkConcatCommand(const SkMatrix& matrix); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: private: michael@0: SkMatrix fMatrix; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkDrawBitmapCommand : public SkDrawCommand { michael@0: public: michael@0: SkDrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top, michael@0: const SkPaint* paint); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: virtual bool render(SkCanvas* canvas) const SK_OVERRIDE; michael@0: private: michael@0: SkBitmap fBitmap; michael@0: SkScalar fLeft; michael@0: SkScalar fTop; michael@0: SkPaint fPaint; michael@0: SkPaint* fPaintPtr; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkDrawBitmapMatrixCommand : public SkDrawCommand { michael@0: public: michael@0: SkDrawBitmapMatrixCommand(const SkBitmap& bitmap, const SkMatrix& matrix, michael@0: const SkPaint* paint); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: virtual bool render(SkCanvas* canvas) const SK_OVERRIDE; michael@0: private: michael@0: SkBitmap fBitmap; michael@0: SkMatrix fMatrix; michael@0: SkPaint fPaint; michael@0: SkPaint* fPaintPtr; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkDrawBitmapNineCommand : public SkDrawCommand { michael@0: public: michael@0: SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center, michael@0: const SkRect& dst, const SkPaint* paint); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: virtual bool render(SkCanvas* canvas) const SK_OVERRIDE; michael@0: private: michael@0: SkBitmap fBitmap; michael@0: SkIRect fCenter; michael@0: SkRect fDst; michael@0: SkPaint fPaint; michael@0: SkPaint* fPaintPtr; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkDrawBitmapRectCommand : public SkDrawCommand { michael@0: public: michael@0: SkDrawBitmapRectCommand(const SkBitmap& bitmap, const SkRect* src, michael@0: const SkRect& dst, const SkPaint* paint, michael@0: SkCanvas::DrawBitmapRectFlags flags); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: virtual bool render(SkCanvas* canvas) const SK_OVERRIDE; michael@0: michael@0: const SkBitmap& bitmap() const { return fBitmap; } michael@0: michael@0: // The non-const 'paint' method allows modification of this object's michael@0: // SkPaint. For this reason the ctor and setPaint method make a local copy. michael@0: // The 'fPaintPtr' member acts a signal that the local SkPaint is valid michael@0: // (since only an SkPaint* is passed into the ctor). michael@0: const SkPaint* paint() const { return fPaintPtr; } michael@0: SkPaint* paint() { return fPaintPtr; } michael@0: michael@0: void setPaint(const SkPaint& paint) { fPaint = paint; fPaintPtr = &fPaint; } michael@0: michael@0: const SkRect* srcRect() const { return fSrc.isEmpty() ? NULL : &fSrc; } michael@0: void setSrcRect(const SkRect& src) { fSrc = src; } michael@0: michael@0: const SkRect& dstRect() const { return fDst; } michael@0: void setDstRect(const SkRect& dst) { fDst = dst; } michael@0: michael@0: SkCanvas::DrawBitmapRectFlags flags() const { return fFlags; } michael@0: void setFlags(SkCanvas::DrawBitmapRectFlags flags) { fFlags = flags; } michael@0: michael@0: private: michael@0: SkBitmap fBitmap; michael@0: SkRect fSrc; michael@0: SkRect fDst; michael@0: SkPaint fPaint; michael@0: SkPaint* fPaintPtr; michael@0: SkCanvas::DrawBitmapRectFlags fFlags; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkDrawDataCommand : public SkDrawCommand { michael@0: public: michael@0: SkDrawDataCommand(const void* data, size_t length); michael@0: virtual ~SkDrawDataCommand() { delete [] fData; } michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: private: michael@0: char* fData; michael@0: size_t fLength; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkBeginCommentGroupCommand : public SkDrawCommand { michael@0: public: michael@0: SkBeginCommentGroupCommand(const char* description); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE { michael@0: canvas->beginCommentGroup(fDescription.c_str()); michael@0: }; michael@0: private: michael@0: SkString fDescription; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkCommentCommand : public SkDrawCommand { michael@0: public: michael@0: SkCommentCommand(const char* kywd, const char* value); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE { michael@0: canvas->addComment(fKywd.c_str(), fValue.c_str()); michael@0: }; michael@0: private: michael@0: SkString fKywd; michael@0: SkString fValue; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkEndCommentGroupCommand : public SkDrawCommand { michael@0: public: michael@0: SkEndCommentGroupCommand(); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE { michael@0: canvas->endCommentGroup(); michael@0: }; michael@0: private: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkDrawOvalCommand : public SkDrawCommand { michael@0: public: michael@0: SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: virtual bool render(SkCanvas* canvas) const SK_OVERRIDE; michael@0: private: michael@0: SkRect fOval; michael@0: SkPaint fPaint; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkDrawPaintCommand : public SkDrawCommand { michael@0: public: michael@0: SkDrawPaintCommand(const SkPaint& paint); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: virtual bool render(SkCanvas* canvas) const SK_OVERRIDE; michael@0: private: michael@0: SkPaint fPaint; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkDrawPathCommand : public SkDrawCommand { michael@0: public: michael@0: SkDrawPathCommand(const SkPath& path, const SkPaint& paint); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: virtual bool render(SkCanvas* canvas) const SK_OVERRIDE; michael@0: michael@0: private: michael@0: SkPath fPath; michael@0: SkPaint fPaint; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkDrawPictureCommand : public SkDrawCommand { michael@0: public: michael@0: SkDrawPictureCommand(SkPicture& picture); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: virtual bool render(SkCanvas* canvas) const SK_OVERRIDE; michael@0: michael@0: private: michael@0: SkPicture fPicture; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkDrawPointsCommand : public SkDrawCommand { michael@0: public: michael@0: SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, const SkPoint pts[], michael@0: const SkPaint& paint); michael@0: virtual ~SkDrawPointsCommand() { delete [] fPts; } michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: virtual bool render(SkCanvas* canvas) const SK_OVERRIDE; michael@0: private: michael@0: SkCanvas::PointMode fMode; michael@0: size_t fCount; michael@0: SkPoint* fPts; michael@0: SkPaint fPaint; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkDrawTextCommand : public SkDrawCommand { michael@0: public: michael@0: SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y, michael@0: const SkPaint& paint); michael@0: virtual ~SkDrawTextCommand() { delete [] fText; } michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: private: michael@0: char* fText; michael@0: size_t fByteLength; michael@0: SkScalar fX; michael@0: SkScalar fY; michael@0: SkPaint fPaint; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkDrawPosTextCommand : public SkDrawCommand { michael@0: public: michael@0: SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[], michael@0: const SkPaint& paint); michael@0: virtual ~SkDrawPosTextCommand() { delete [] fPos; delete [] fText; } michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: private: michael@0: char* fText; michael@0: size_t fByteLength; michael@0: SkPoint* fPos; michael@0: SkPaint fPaint; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkDrawTextOnPathCommand : public SkDrawCommand { michael@0: public: michael@0: SkDrawTextOnPathCommand(const void* text, size_t byteLength, const SkPath& path, michael@0: const SkMatrix* matrix, const SkPaint& paint); michael@0: virtual ~SkDrawTextOnPathCommand() { delete [] fText; } michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: private: michael@0: char* fText; michael@0: size_t fByteLength; michael@0: SkPath fPath; michael@0: SkMatrix fMatrix; michael@0: SkPaint fPaint; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkDrawPosTextHCommand : public SkDrawCommand { michael@0: public: michael@0: SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[], michael@0: SkScalar constY, const SkPaint& paint); michael@0: virtual ~SkDrawPosTextHCommand() { delete [] fXpos; delete [] fText; } michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: private: michael@0: SkScalar* fXpos; michael@0: char* fText; michael@0: size_t fByteLength; michael@0: SkScalar fConstY; michael@0: SkPaint fPaint; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkDrawRectCommand : public SkDrawCommand { michael@0: public: michael@0: SkDrawRectCommand(const SkRect& rect, const SkPaint& paint); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: michael@0: const SkRect& rect() const { return fRect; } michael@0: const SkPaint& paint() const { return fPaint; } michael@0: private: michael@0: SkRect fRect; michael@0: SkPaint fPaint; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkDrawRRectCommand : public SkDrawCommand { michael@0: public: michael@0: SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: virtual bool render(SkCanvas* canvas) const SK_OVERRIDE; michael@0: private: michael@0: SkRRect fRRect; michael@0: SkPaint fPaint; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkDrawDRRectCommand : public SkDrawCommand { michael@0: public: michael@0: SkDrawDRRectCommand(const SkRRect& outer, const SkRRect& inner, michael@0: const SkPaint& paint); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: virtual bool render(SkCanvas* canvas) const SK_OVERRIDE; michael@0: private: michael@0: SkRRect fOuter; michael@0: SkRRect fInner; michael@0: SkPaint fPaint; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkDrawSpriteCommand : public SkDrawCommand { michael@0: public: michael@0: SkDrawSpriteCommand(const SkBitmap& bitmap, int left, int top, const SkPaint* paint); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: virtual bool render(SkCanvas* canvas) const SK_OVERRIDE; michael@0: private: michael@0: SkBitmap fBitmap; michael@0: int fLeft; michael@0: int fTop; michael@0: SkPaint fPaint; michael@0: SkPaint* fPaintPtr; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkDrawVerticesCommand : public SkDrawCommand { michael@0: public: michael@0: SkDrawVerticesCommand(SkCanvas::VertexMode vmode, int vertexCount, michael@0: const SkPoint vertices[], const SkPoint texs[], michael@0: const SkColor colors[], SkXfermode* xfermode, michael@0: const uint16_t indices[], int indexCount, michael@0: const SkPaint& paint); michael@0: virtual ~SkDrawVerticesCommand(); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: private: michael@0: SkCanvas::VertexMode fVmode; michael@0: int fVertexCount; michael@0: SkPoint* fVertices; michael@0: SkPoint* fTexs; michael@0: SkColor* fColors; michael@0: SkXfermode* fXfermode; michael@0: uint16_t* fIndices; michael@0: int fIndexCount; michael@0: SkPaint fPaint; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkRotateCommand : public SkDrawCommand { michael@0: public: michael@0: SkRotateCommand(SkScalar degrees); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: private: michael@0: SkScalar fDegrees; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkSaveCommand : public SkDrawCommand { michael@0: public: michael@0: SkSaveCommand(SkCanvas::SaveFlags flags); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: virtual void trackSaveState(int* state) SK_OVERRIDE; michael@0: virtual Action action() const SK_OVERRIDE { return kPushLayer_Action; } michael@0: private: michael@0: SkCanvas::SaveFlags fFlags; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkSaveLayerCommand : public SkDrawCommand { michael@0: public: michael@0: SkSaveLayerCommand(const SkRect* bounds, const SkPaint* paint, michael@0: SkCanvas::SaveFlags flags); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: virtual void vizExecute(SkCanvas* canvas) SK_OVERRIDE; michael@0: virtual void trackSaveState(int* state) SK_OVERRIDE; michael@0: virtual Action action() const SK_OVERRIDE{ return kPushLayer_Action; } michael@0: virtual void setActive(bool active) SK_OVERRIDE { fActive = active; } michael@0: virtual bool active() const SK_OVERRIDE { return fActive; } michael@0: michael@0: const SkPaint* paint() const { return fPaintPtr; } michael@0: michael@0: private: michael@0: SkRect fBounds; michael@0: SkPaint fPaint; michael@0: SkPaint* fPaintPtr; michael@0: SkCanvas::SaveFlags fFlags; michael@0: michael@0: bool fActive; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkScaleCommand : public SkDrawCommand { michael@0: public: michael@0: SkScaleCommand(SkScalar sx, SkScalar sy); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: michael@0: SkScalar x() const { return fSx; } michael@0: SkScalar y() const { return fSy; } michael@0: michael@0: private: michael@0: SkScalar fSx; michael@0: SkScalar fSy; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkSetMatrixCommand : public SkDrawCommand { michael@0: public: michael@0: SkSetMatrixCommand(const SkMatrix& matrix); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: private: michael@0: SkMatrix fMatrix; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkSkewCommand : public SkDrawCommand { michael@0: public: michael@0: SkSkewCommand(SkScalar sx, SkScalar sy); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: private: michael@0: SkScalar fSx; michael@0: SkScalar fSy; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkTranslateCommand : public SkDrawCommand { michael@0: public: michael@0: SkTranslateCommand(SkScalar dx, SkScalar dy); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: michael@0: SkScalar x() const { return fDx; } michael@0: SkScalar y() const { return fDy; } michael@0: michael@0: private: michael@0: SkScalar fDx; michael@0: SkScalar fDy; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkPushCullCommand : public SkDrawCommand { michael@0: public: michael@0: SkPushCullCommand(const SkRect&); michael@0: virtual void execute(SkCanvas*) SK_OVERRIDE; michael@0: virtual void vizExecute(SkCanvas* canvas) SK_OVERRIDE; michael@0: virtual Action action() const { return kPushCull_Action; } michael@0: virtual void setActive(bool active) { fActive = active; } michael@0: virtual bool active() const { return fActive; } michael@0: private: michael@0: SkRect fCullRect; michael@0: bool fActive; michael@0: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: class SkPopCullCommand : public SkDrawCommand { michael@0: public: michael@0: SkPopCullCommand(); michael@0: virtual void execute(SkCanvas* canvas) SK_OVERRIDE; michael@0: virtual Action action() const { return kPopCull_Action; } michael@0: private: michael@0: typedef SkDrawCommand INHERITED; michael@0: }; michael@0: michael@0: #endif