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 SkSGDraw_DEFINED 9 #define SkSGDraw_DEFINED 10 11 #include "include/core/SkRect.h" 12 #include "include/core/SkRefCnt.h" 13 #include "modules/sksg/include/SkSGGeometryNode.h" 14 #include "modules/sksg/include/SkSGPaint.h" 15 #include "modules/sksg/include/SkSGRenderNode.h" 16 17 #include <utility> 18 19 class SkCanvas; 20 class SkMatrix; 21 struct SkPoint; 22 23 namespace sksg { 24 class InvalidationController; 25 26 /** 27 * Concrete rendering node. 28 * 29 * Wraps and draws a [geometry, paint] tuple. 30 * 31 * Think Skia SkCanvas::drawFoo(foo, paint) calls. 32 */ 33 class Draw : public RenderNode { 34 public: Make(sk_sp<GeometryNode> geo,sk_sp<PaintNode> paint)35 static sk_sp<Draw> Make(sk_sp<GeometryNode> geo, sk_sp<PaintNode> paint) { 36 return (geo && paint) ? sk_sp<Draw>(new Draw(std::move(geo), std::move(paint))) : nullptr; 37 } 38 39 protected: 40 Draw(sk_sp<GeometryNode>, sk_sp<PaintNode> paint); 41 ~Draw() override; 42 43 void onRender(SkCanvas*, const RenderContext*) const override; 44 const RenderNode* onNodeAt(const SkPoint&) const override; 45 46 SkRect onRevalidate(InvalidationController*, const SkMatrix&) override; 47 48 private: 49 sk_sp<GeometryNode> fGeometry; 50 sk_sp<PaintNode> fPaint; 51 52 using INHERITED = RenderNode; 53 }; 54 55 } // namespace sksg 56 57 #endif // SkSGDraw_DEFINED 58