SVGLinearGradientElement.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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(HashTable<SVGGradientElement const*>& seen_gradients) const
  27. {
  28. if (auto gradient = linked_gradient(seen_gradients); 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. NumberPercentage start_x_impl(HashTable<SVGGradientElement const*>& seen_gradients) const;
  37. NumberPercentage start_y_impl(HashTable<SVGGradientElement const*>& seen_gradients) const;
  38. NumberPercentage end_x_impl(HashTable<SVGGradientElement const*>& seen_gradients) const;
  39. NumberPercentage end_y_impl(HashTable<SVGGradientElement const*>& seen_gradients) const;
  40. Optional<NumberPercentage> m_x1;
  41. Optional<NumberPercentage> m_y1;
  42. Optional<NumberPercentage> m_x2;
  43. Optional<NumberPercentage> m_y2;
  44. mutable RefPtr<Gfx::SVGLinearGradientPaintStyle> m_paint_style;
  45. };
  46. }