SVGLinearGradientElement.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /*
  2. * Copyright (c) 2023, MacDue <macdue@dueutil.tech>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <LibWeb/SVG/AttributeParser.h>
  8. #include <LibWeb/SVG/SVGAnimatedLength.h>
  9. #include <LibWeb/SVG/SVGGradientElement.h>
  10. namespace Web::SVG {
  11. class SVGLinearGradientElement : public SVGGradientElement {
  12. WEB_PLATFORM_OBJECT(SVGLinearGradientElement, SVGGradientElement);
  13. JS_DECLARE_ALLOCATOR(SVGLinearGradientElement);
  14. public:
  15. virtual ~SVGLinearGradientElement() override = default;
  16. virtual void attribute_changed(FlyString const& name, Optional<String> const& value) override;
  17. virtual Optional<Gfx::PaintStyle const&> to_gfx_paint_style(SVGPaintContext const&) const override;
  18. JS::NonnullGCPtr<SVGAnimatedLength> x1() const;
  19. JS::NonnullGCPtr<SVGAnimatedLength> y1() const;
  20. JS::NonnullGCPtr<SVGAnimatedLength> x2() const;
  21. JS::NonnullGCPtr<SVGAnimatedLength> y2() const;
  22. protected:
  23. SVGLinearGradientElement(DOM::Document&, DOM::QualifiedName);
  24. virtual void initialize(JS::Realm&) override;
  25. private:
  26. JS::GCPtr<SVGLinearGradientElement const> linked_linear_gradient() const
  27. {
  28. if (auto gradient = linked_gradient(); gradient && is<SVGLinearGradientElement>(*gradient))
  29. return &verify_cast<SVGLinearGradientElement>(*gradient);
  30. return {};
  31. }
  32. NumberPercentage start_x() const;
  33. NumberPercentage start_y() const;
  34. NumberPercentage end_x() const;
  35. NumberPercentage end_y() const;
  36. Optional<NumberPercentage> m_x1;
  37. Optional<NumberPercentage> m_y1;
  38. Optional<NumberPercentage> m_x2;
  39. Optional<NumberPercentage> m_y2;
  40. mutable RefPtr<Gfx::SVGLinearGradientPaintStyle> m_paint_style;
  41. };
  42. }