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