• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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      */
addCanvas(SkCanvas *)29     virtual void addCanvas(SkCanvas*) SK_OVERRIDE { SkDEBUGFAIL("Invalid Op"); }
removeCanvas(SkCanvas *)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