blob: ea2fd253e1492b3d83a502ab034196f57d9b9f4d [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"
Florin Malita69526b02018-03-22 12:20:02 -040014#include "SkTrimPathEffect.h"
Florin Malita51b8c892018-01-07 08:54:24 -050015
16class SkCanvas;
17class SkPaint;
18
19namespace sksg {
20
21/**
22 * Concrete Geometry node, applying a trim effect to its child.
23 */
24class TrimEffect final : public GeometryNode {
25public:
26 static sk_sp<TrimEffect> Make(sk_sp<GeometryNode> child) {
27 return child ? sk_sp<TrimEffect>(new TrimEffect(std::move(child))) : nullptr;
28 }
29
30 ~TrimEffect() override;
31
Florin Malita69526b02018-03-22 12:20:02 -040032 SG_ATTRIBUTE(Start , SkScalar , fStart )
33 SG_ATTRIBUTE(Stop , SkScalar , fStop )
34 SG_ATTRIBUTE(Mode , SkTrimPathEffect::Mode, fMode )
Florin Malita51b8c892018-01-07 08:54:24 -050035
36protected:
Florin Malita38ea40e2018-01-29 16:31:14 -050037 void onClip(SkCanvas*, bool antiAlias) const override;
Florin Malita51b8c892018-01-07 08:54:24 -050038 void onDraw(SkCanvas*, const SkPaint&) const override;
Florin Malitaeb46bd82019-02-12 09:33:21 -050039 bool onContains(const SkPoint&) const override;
Florin Malita51b8c892018-01-07 08:54:24 -050040
41 SkRect onRevalidate(InvalidationController*, const SkMatrix&) override;
42 SkPath onAsPath() const override;
43
44private:
45 explicit TrimEffect(sk_sp<GeometryNode>);
46
47 const sk_sp<GeometryNode> fChild;
48
Florin Malita19f29222018-03-07 16:37:38 -050049 SkPath fTrimmedPath;
Florin Malita69526b02018-03-22 12:20:02 -040050 SkScalar fStart = 0,
51 fStop = 1;
52 SkTrimPathEffect::Mode fMode = SkTrimPathEffect::Mode::kNormal;
Florin Malita51012ce2018-01-31 17:06:59 -050053
54 using INHERITED = GeometryNode;
Florin Malita51b8c892018-01-07 08:54:24 -050055};
56
57} // namespace sksg
58
59#endif // SkSGTrimEffect_DEFINED