diff -r 000000000000 -r 6474c204b198 gfx/skia/trunk/src/utils/SkCanvasStack.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gfx/skia/trunk/src/utils/SkCanvasStack.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,53 @@ + +/* + * 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 fCanvasData; + + typedef SkNWayCanvas INHERITED; +}; + +#endif