SkSGGeometryTransform.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /*
  2. * Copyright 2018 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. #ifndef SkSGGeometryTransform_DEFINED
  8. #define SkSGGeometryTransform_DEFINED
  9. #include "modules/sksg/include/SkSGGeometryNode.h"
  10. #include "include/core/SkPath.h"
  11. class SkMatrix;
  12. namespace sksg {
  13. class Transform;
  14. /**
  15. * Concrete Effect node, binding a Matrix to a GeometryNode.
  16. */
  17. class GeometryTransform final : public GeometryNode {
  18. public:
  19. static sk_sp<GeometryTransform> Make(sk_sp<GeometryNode> child, sk_sp<Transform> transform) {
  20. return child && transform
  21. ? sk_sp<GeometryTransform>(new GeometryTransform(std::move(child),
  22. std::move(transform)))
  23. : nullptr;
  24. }
  25. ~GeometryTransform() override;
  26. const sk_sp<Transform>& getTransform() const { return fTransform; }
  27. protected:
  28. void onClip(SkCanvas*, bool antiAlias) const override;
  29. void onDraw(SkCanvas*, const SkPaint&) const override;
  30. bool onContains(const SkPoint&) const override;
  31. SkRect onRevalidate(InvalidationController*, const SkMatrix&) override;
  32. SkPath onAsPath() const override;
  33. private:
  34. GeometryTransform(sk_sp<GeometryNode>, sk_sp<Transform>);
  35. const sk_sp<GeometryNode> fChild;
  36. const sk_sp<Transform> fTransform;
  37. SkPath fTransformedPath;
  38. using INHERITED = GeometryNode;
  39. };
  40. }
  41. #endif // SkSGGeometryTransform_DEFINED