| /* | |
| * Copyright 2013 Google Inc. | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #ifndef SkCanvasStack_DEFINED | |
| #define SkCanvasStack_DEFINED | |
| #include "SkNWayCanvas.h" | |
| #include "SkTArray.h" | |
| class SkCanvasStack : public SkNWayCanvas { | |
| public: | |
| SkCanvasStack(int width, int height); | |
| virtual ~SkCanvasStack(); | |
| void pushCanvas(SkCanvas* canvas, const SkIPoint& origin); | |
| virtual void removeAll() SK_OVERRIDE; | |
| /* | |
| * The following add/remove canvas methods are overrides from SkNWayCanvas | |
| * that do not make sense in the context of our CanvasStack, but since we | |
| * can share most of the other implementation of NWay we override those | |
| * methods to be no-ops. | |
| */ | |
| virtual void addCanvas(SkCanvas*) SK_OVERRIDE { SkDEBUGFAIL("Invalid Op"); } | |
| virtual void removeCanvas(SkCanvas*) SK_OVERRIDE { SkDEBUGFAIL("Invalid Op"); } | |
| protected: | |
| virtual void didSetMatrix(const SkMatrix&) 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; | |
| virtual void onClipRegion(const SkRegion&, SkRegion::Op) SK_OVERRIDE; | |
| private: | |
| void clipToZOrderedBounds(); | |
| struct CanvasData { | |
| SkIPoint origin; | |
| SkRegion requiredClip; | |
| }; | |
| SkTArray<CanvasData> fCanvasData; | |
| typedef SkNWayCanvas INHERITED; | |
| }; | |
| #endif |