/* * Copyright 2017 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkSGTrimEffect_DEFINED #define SkSGTrimEffect_DEFINED #include "SkSGGeometryNode.h" #include "SkPath.h" class SkCanvas; class SkPaint; namespace sksg { /** * Concrete Geometry node, applying a trim effect to its child. */ class TrimEffect final : public GeometryNode { public: static sk_sp Make(sk_sp child) { return child ? sk_sp(new TrimEffect(std::move(child))) : nullptr; } ~TrimEffect() override; SG_ATTRIBUTE(Start , SkScalar, fStart ) SG_ATTRIBUTE(End , SkScalar, fEnd ) SG_ATTRIBUTE(Offset, SkScalar, fOffset) protected: void onDraw(SkCanvas*, const SkPaint&) const override; SkRect onRevalidate(InvalidationController*, const SkMatrix&) override; SkPath onAsPath() const override; private: explicit TrimEffect(sk_sp); const sk_sp fChild; SkScalar fStart = 0, // starting t fEnd = 1, // ending t fOffset = 0; // t offset }; } // namespace sksg #endif // SkSGTrimEffect_DEFINED