blob: 860cfafc258ec6007c9d2fd6b8c1c3a230cb93a3 [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:
Florin Malita38ea40e2018-01-29 16:31:14 -050036 void onClip(SkCanvas*, bool antiAlias) const override;
Florin Malita51b8c892018-01-07 08:54:24 -050037 void onDraw(SkCanvas*, const SkPaint&) const override;
38
39 SkRect onRevalidate(InvalidationController*, const SkMatrix&) override;
40 SkPath onAsPath() const override;
41
42private:
43 explicit TrimEffect(sk_sp<GeometryNode>);
44
45 const sk_sp<GeometryNode> fChild;
46
47 SkScalar fStart = 0, // starting t
48 fEnd = 1, // ending t
49 fOffset = 0; // t offset
50};
51
52} // namespace sksg
53
54#endif // SkSGTrimEffect_DEFINED