1
2/*
3 * Copyright 2012 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 SkRTreeCanvas_DEFINED
10#define SkRTreeCanvas_DEFINED
11
12#include "SkBBoxHierarchy.h"
13#include "SkBBoxRecord.h"
14
15/**
16 * This records bounding box information into an SkBBoxHierarchy, and clip/transform information
17 * into an SkPictureStateTree to allow for efficient culling and correct playback of draws.
18 */
19class SkBBoxHierarchyRecord : public SkBBoxRecord, public SkBBoxHierarchyClient {
20public:
21    /** This will take a ref of h */
22    SkBBoxHierarchyRecord(const SkISize& size, uint32_t recordFlags, SkBBoxHierarchy* h);
23    virtual ~SkBBoxHierarchyRecord() { };
24
25    virtual void handleBBox(const SkRect& bounds) SK_OVERRIDE;
26
27    // Implementation of the SkBBoxHierarchyClient interface
28    virtual bool shouldRewind(void* data) SK_OVERRIDE;
29
30protected:
31    virtual void willSave() SK_OVERRIDE;
32    virtual SaveLayerStrategy willSaveLayer(const SkRect*, const SkPaint*, SaveFlags) SK_OVERRIDE;
33    virtual void willRestore() SK_OVERRIDE;
34
35    virtual void didConcat(const SkMatrix&) SK_OVERRIDE;
36    virtual void didSetMatrix(const SkMatrix&) SK_OVERRIDE;
37
38    virtual void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
39    virtual void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
40    virtual void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
41    virtual void onClipRegion(const SkRegion&, SkRegion::Op) SK_OVERRIDE;
42
43private:
44    typedef SkBBoxRecord INHERITED;
45};
46
47#endif
48