123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- /*
- * 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 "include/core/SkRegion.h"
- #include "include/private/SkTArray.h"
- #include "include/utils/SkNWayCanvas.h"
- /**
- * Like NWayCanvas, in that it forwards all canvas methods to each sub-canvas that is "pushed".
- *
- * Unlike NWayCanvas, this takes ownership of each subcanvas, and deletes them when this canvas
- * is deleted.
- */
- class SkCanvasStack : public SkNWayCanvas {
- public:
- SkCanvasStack(int width, int height);
- ~SkCanvasStack() override;
- void pushCanvas(std::unique_ptr<SkCanvas>, const SkIPoint& origin);
- void removeAll() 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.
- */
- void addCanvas(SkCanvas*) override { SkDEBUGFAIL("Invalid Op"); }
- void removeCanvas(SkCanvas*) override { SkDEBUGFAIL("Invalid Op"); }
- protected:
- void didSetMatrix(const SkMatrix&) override;
- void onClipRect(const SkRect&, SkClipOp, ClipEdgeStyle) override;
- void onClipRRect(const SkRRect&, SkClipOp, ClipEdgeStyle) override;
- void onClipPath(const SkPath&, SkClipOp, ClipEdgeStyle) override;
- void onClipRegion(const SkRegion&, SkClipOp) override;
- private:
- void clipToZOrderedBounds();
- struct CanvasData {
- SkIPoint origin;
- SkRegion requiredClip;
- std::unique_ptr<SkCanvas> ownedCanvas;
- };
- SkTArray<CanvasData> fCanvasData;
- typedef SkNWayCanvas INHERITED;
- };
- #endif
|