1 /*
2  * Copyright 2017 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef SkSGRect_DEFINED
9 #define SkSGRect_DEFINED
10 
11 #include "SkSGGeometryNode.h"
12 
13 #include "SkRect.h"
14 #include "SkRRect.h"
15 
16 class SkCanvas;
17 class SkPaint;
18 
19 namespace sksg {
20 
21 /**
22  * Concrete Geometry node, wrapping an SkRect.
23  */
24 class Rect final : public GeometryNode {
25 public:
Make()26     static sk_sp<Rect> Make()                { return sk_sp<Rect>(new Rect(SkRect::MakeEmpty())); }
Make(const SkRect & r)27     static sk_sp<Rect> Make(const SkRect& r) { return sk_sp<Rect>(new Rect(r)); }
28 
29     SG_ATTRIBUTE(L, SkScalar, fRect.fLeft  )
30     SG_ATTRIBUTE(T, SkScalar, fRect.fTop   )
31     SG_ATTRIBUTE(R, SkScalar, fRect.fRight )
32     SG_ATTRIBUTE(B, SkScalar, fRect.fBottom)
33 
34 protected:
35     void onClip(SkCanvas*, bool antiAlias) const override;
36     void onDraw(SkCanvas*, const SkPaint&) const override;
37 
38     SkRect onRevalidate(InvalidationController*, const SkMatrix&) override;
39     SkPath onAsPath() const override;
40 
41 private:
42     explicit Rect(const SkRect&);
43 
44     SkRect fRect;
45 
46     using INHERITED = GeometryNode;
47 };
48 
49 /**
50  * Concrete Geometry node, wrapping an SkRRect.
51  */
52 class RRect final : public GeometryNode {
53 public:
Make()54     static sk_sp<RRect> Make()                  { return sk_sp<RRect>(new RRect(SkRRect())); }
Make(const SkRRect & rr)55     static sk_sp<RRect> Make(const SkRRect& rr) { return sk_sp<RRect>(new RRect(rr)); }
56 
57     SG_ATTRIBUTE(RRect, SkRRect, fRRect)
58 
59 protected:
60     void onClip(SkCanvas*, bool antiAlias) const override;
61     void onDraw(SkCanvas*, const SkPaint&) const override;
62 
63     SkRect onRevalidate(InvalidationController*, const SkMatrix&) override;
64     SkPath onAsPath() const override;
65 
66 private:
67     explicit RRect(const SkRRect&);
68 
69     SkRRect fRRect;
70 
71     using INHERITED = GeometryNode;
72 };
73 
74 } // namespace sksg
75 
76 #endif // SkSGRect_DEFINED
77