/* * Copyright 2018 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkSGGeometryTransform_DEFINED #define SkSGGeometryTransform_DEFINED #include "SkSGGeometryNode.h" #include "SkPath.h" #include "SkSGTransform.h" class SkMatrix; namespace sksg { /** * Concrete Effect node, binding a Matrix to a GeometryNode. */ class GeometryTransform final : public GeometryNode { public: static sk_sp Make(sk_sp child, sk_sp matrix) { return child && matrix ? sk_sp(new GeometryTransform(std::move(child), std::move(matrix))) : nullptr; } static sk_sp Make(sk_sp child, const SkMatrix& m) { return Make(std::move(child), Matrix::Make(m)); } ~GeometryTransform() override; const sk_sp& getMatrix() const { return fMatrix; } protected: SkRect onRevalidate(InvalidationController*, const SkMatrix&) override; SkPath onAsPath() const override; void onDraw(SkCanvas*, const SkPaint&) const override; private: GeometryTransform(sk_sp, sk_sp); const sk_sp fChild; const sk_sp fMatrix; SkPath fTransformed; typedef GeometryNode INHERITED; }; } #endif // SkSGGeometryTransform_DEFINED