blob: 77da3ab2d0d87d83691d548203f20477bc6c0924 [file] [log] [blame]
Florin Malita51b8c892018-01-07 08:54:24 -05001/*
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 SkSGTrimEffect_DEFINED
9#define SkSGTrimEffect_DEFINED
10
11#include "SkSGGeometryNode.h"
12
13#include "SkPath.h"
14
15class SkCanvas;
16class SkPaint;
17
18namespace sksg {
19
20/**
21 * Concrete Geometry node, applying a trim effect to its child.
22 */
23class TrimEffect final : public GeometryNode {
24public:
25 static sk_sp<TrimEffect> Make(sk_sp<GeometryNode> child) {
26 return child ? sk_sp<TrimEffect>(new TrimEffect(std::move(child))) : nullptr;
27 }
28
29 ~TrimEffect() override;
30
31 SG_ATTRIBUTE(Start , SkScalar, fStart )
32 SG_ATTRIBUTE(End , SkScalar, fEnd )
33 SG_ATTRIBUTE(Offset, SkScalar, fOffset)
34
35protected:
36 void onDraw(SkCanvas*, const SkPaint&) const override;
37
38 SkRect onRevalidate(InvalidationController*, const SkMatrix&) override;
39 SkPath onAsPath() const override;
40
41private:
42 explicit TrimEffect(sk_sp<GeometryNode>);
43
44 const sk_sp<GeometryNode> fChild;
45
46 SkScalar fStart = 0, // starting t
47 fEnd = 1, // ending t
48 fOffset = 0; // t offset
49};
50
51} // namespace sksg
52
53#endif // SkSGTrimEffect_DEFINED