blob: 27da3c9188fd975279f0e35df00e6f3b8b76396c [file] [log] [blame]
rileya@google.com9f5898d2012-09-11 20:21:44 +00001
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
commit-bot@chromium.org4b32bd52013-03-15 15:06:03 +000012#include "SkBBoxHierarchy.h"
rileya@google.com9f5898d2012-09-11 20:21:44 +000013#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 */
commit-bot@chromium.org4b32bd52013-03-15 15:06:03 +000019class SkBBoxHierarchyRecord : public SkBBoxRecord, public SkBBoxHierarchyClient {
rileya@google.com9f5898d2012-09-11 20:21:44 +000020public:
21 /** This will take a ref of h */
reed@google.comd86e7ab2012-09-27 20:31:31 +000022 SkBBoxHierarchyRecord(uint32_t recordFlags, SkBBoxHierarchy* h,
robertphillips@google.com9b051a32013-08-20 20:06:40 +000023 SkDevice*);
rileya@google.com9f5898d2012-09-11 20:21:44 +000024
25 virtual void handleBBox(const SkRect& bounds) SK_OVERRIDE;
26
skia.committer@gmail.coma9279f02012-09-12 02:00:57 +000027 virtual int save(SaveFlags flags = kMatrixClip_SaveFlag) SK_OVERRIDE;
rileya@google.com9f5898d2012-09-11 20:21:44 +000028 virtual int saveLayer(const SkRect* bounds, const SkPaint* paint,
skia.committer@gmail.coma9279f02012-09-12 02:00:57 +000029 SaveFlags flags = kARGB_ClipLayer_SaveFlag) SK_OVERRIDE;
30 virtual void restore() SK_OVERRIDE;
rileya@google.com9f5898d2012-09-11 20:21:44 +000031
skia.committer@gmail.coma9279f02012-09-12 02:00:57 +000032 virtual bool translate(SkScalar dx, SkScalar dy) SK_OVERRIDE;
33 virtual bool scale(SkScalar sx, SkScalar sy) SK_OVERRIDE;
rileya@google.com9f5898d2012-09-11 20:21:44 +000034 virtual bool rotate(SkScalar degrees) SK_OVERRIDE;
35 virtual bool skew(SkScalar sx, SkScalar sy) SK_OVERRIDE;
36 virtual bool concat(const SkMatrix& matrix) SK_OVERRIDE;
37 virtual void setMatrix(const SkMatrix& matrix) SK_OVERRIDE;
38
39 virtual bool clipRect(const SkRect& rect,
40 SkRegion::Op op = SkRegion::kIntersect_Op,
skia.committer@gmail.coma9279f02012-09-12 02:00:57 +000041 bool doAntiAlias = false) SK_OVERRIDE;
rileya@google.com9f5898d2012-09-11 20:21:44 +000042 virtual bool clipRegion(const SkRegion& region,
skia.committer@gmail.coma9279f02012-09-12 02:00:57 +000043 SkRegion::Op op = SkRegion::kIntersect_Op) SK_OVERRIDE;
rileya@google.com9f5898d2012-09-11 20:21:44 +000044 virtual bool clipPath(const SkPath& path,
45 SkRegion::Op op = SkRegion::kIntersect_Op,
skia.committer@gmail.coma9279f02012-09-12 02:00:57 +000046 bool doAntiAlias = false) SK_OVERRIDE;
junov@chromium.org675de162012-12-18 19:37:49 +000047 virtual bool clipRRect(const SkRRect& rrect,
48 SkRegion::Op op = SkRegion::kIntersect_Op,
49 bool doAntiAlias = false) SK_OVERRIDE;
rileya@google.com9f5898d2012-09-11 20:21:44 +000050
commit-bot@chromium.org4b32bd52013-03-15 15:06:03 +000051 // Implementation of the SkBBoxHierarchyClient interface
52 virtual bool shouldRewind(void* data) SK_OVERRIDE;
53
rileya@google.com9f5898d2012-09-11 20:21:44 +000054private:
55 typedef SkBBoxRecord INHERITED;
56};
57
58#endif