1 2 /* 3 * Copyright 2013 Google Inc. 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 #ifndef SkCanvasStack_DEFINED 10 #define SkCanvasStack_DEFINED 11 12 #include "SkNWayCanvas.h" 13 #include "SkTArray.h" 14 15 class SkCanvasStack : public SkNWayCanvas { 16 public: 17 SkCanvasStack(int width, int height); 18 virtual ~SkCanvasStack(); 19 20 void pushCanvas(SkCanvas* canvas, const SkIPoint& origin); 21 void removeAll() override; 22 23 /* 24 * The following add/remove canvas methods are overrides from SkNWayCanvas 25 * that do not make sense in the context of our CanvasStack, but since we 26 * can share most of the other implementation of NWay we override those 27 * methods to be no-ops. 28 */ addCanvas(SkCanvas *)29 void addCanvas(SkCanvas*) override { SkDEBUGFAIL("Invalid Op"); } removeCanvas(SkCanvas *)30 void removeCanvas(SkCanvas*) override { SkDEBUGFAIL("Invalid Op"); } 31 32 protected: 33 void didSetMatrix(const SkMatrix&) override; 34 35 void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) override; 36 void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) override; 37 void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) override; 38 void onClipRegion(const SkRegion&, SkRegion::Op) override; 39 40 private: 41 void clipToZOrderedBounds(); 42 43 struct CanvasData { 44 SkIPoint origin; 45 SkRegion requiredClip; 46 }; 47 48 SkTArray<CanvasData> fCanvasData; 49 50 typedef SkNWayCanvas INHERITED; 51 }; 52 53 #endif 54