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