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 virtual void removeAll() SK_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 */ 29 virtual void addCanvas(SkCanvas*) SK_OVERRIDE { SkDEBUGFAIL("Invalid Op"); } 30 virtual void removeCanvas(SkCanvas*) SK_OVERRIDE { SkDEBUGFAIL("Invalid Op"); } 31 32 virtual void setMatrix(const SkMatrix& matrix) SK_OVERRIDE; 33 virtual bool clipRect(const SkRect&, SkRegion::Op, bool) SK_OVERRIDE; 34 virtual bool clipRRect(const SkRRect&, SkRegion::Op, bool) SK_OVERRIDE; 35 virtual bool clipPath(const SkPath&, SkRegion::Op, bool) SK_OVERRIDE; 36 virtual bool clipRegion(const SkRegion& deviceRgn, 37 SkRegion::Op) SK_OVERRIDE; 38 39 private: 40 void clipToZOrderedBounds(); 41 42 struct CanvasData { 43 SkIPoint origin; 44 SkRegion requiredClip; 45 }; 46 47 SkTArray<CanvasData> fCanvasData; 48 49 typedef SkNWayCanvas INHERITED; 50 }; 51 52 #endif 53