diff options
Diffstat (limited to 'experimental/sksg/geometry/SkSGGeometryTransform.h')
-rw-r--r-- | experimental/sksg/geometry/SkSGGeometryTransform.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/experimental/sksg/geometry/SkSGGeometryTransform.h b/experimental/sksg/geometry/SkSGGeometryTransform.h new file mode 100644 index 0000000000..31a3371408 --- /dev/null +++ b/experimental/sksg/geometry/SkSGGeometryTransform.h @@ -0,0 +1,56 @@ +/* + * 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<GeometryTransform> Make(sk_sp<GeometryNode> child, sk_sp<Matrix> matrix) { + return child && matrix + ? sk_sp<GeometryTransform>(new GeometryTransform(std::move(child), std::move(matrix))) + : nullptr; + } + + static sk_sp<GeometryTransform> Make(sk_sp<GeometryNode> child, const SkMatrix& m) { + return Make(std::move(child), Matrix::Make(m)); + } + + ~GeometryTransform() override; + + const sk_sp<Matrix>& 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<GeometryNode>, sk_sp<Matrix>); + + const sk_sp<GeometryNode> fChild; + const sk_sp<Matrix> fMatrix; + SkPath fTransformed; + + typedef GeometryNode INHERITED; +}; + +} + +#endif // SkSGGeometryTransform_DEFINED |