Home | History | Annotate | Download | only in utils
      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 protected:
     33     virtual void didSetMatrix(const SkMatrix&) SK_OVERRIDE;
     34 
     35     virtual void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
     36     virtual void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
     37     virtual void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
     38     virtual void onClipRegion(const SkRegion&, SkRegion::Op) SK_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