SVGRadialGradientElement.h 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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 SVGRadialGradientElement : public SVGGradientElement {
  12. WEB_PLATFORM_OBJECT(SVGRadialGradientElement, SVGGradientElement);
  13. JS_DECLARE_ALLOCATOR(SVGRadialGradientElement);
  14. public:
  15. virtual ~SVGRadialGradientElement() 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> cx() const;
  19. JS::NonnullGCPtr<SVGAnimatedLength> cy() const;
  20. JS::NonnullGCPtr<SVGAnimatedLength> fx() const;
  21. JS::NonnullGCPtr<SVGAnimatedLength> fy() const;
  22. JS::NonnullGCPtr<SVGAnimatedLength> fr() const;
  23. JS::NonnullGCPtr<SVGAnimatedLength> r() const;
  24. protected:
  25. SVGRadialGradientElement(DOM::Document&, DOM::QualifiedName);
  26. virtual void initialize(JS::Realm&) override;
  27. private:
  28. JS::GCPtr<SVGRadialGradientElement const> linked_radial_gradient(HashTable<SVGGradientElement const*>& seen_gradients) const
  29. {
  30. if (auto gradient = linked_gradient(seen_gradients); gradient && is<SVGRadialGradientElement>(*gradient))
  31. return &verify_cast<SVGRadialGradientElement>(*gradient);
  32. return {};
  33. }
  34. NumberPercentage start_circle_x() const;
  35. NumberPercentage start_circle_y() const;
  36. NumberPercentage start_circle_radius() const;
  37. NumberPercentage end_circle_x() const;
  38. NumberPercentage end_circle_y() const;
  39. NumberPercentage end_circle_radius() const;
  40. NumberPercentage start_circle_x_impl(HashTable<SVGGradientElement const*>& seen_gradients) const;
  41. NumberPercentage start_circle_y_impl(HashTable<SVGGradientElement const*>& seen_gradients) const;
  42. NumberPercentage start_circle_radius_impl(HashTable<SVGGradientElement const*>& seen_gradients) const;
  43. NumberPercentage end_circle_x_impl(HashTable<SVGGradientElement const*>& seen_gradients) const;
  44. NumberPercentage end_circle_y_impl(HashTable<SVGGradientElement const*>& seen_gradients) const;
  45. NumberPercentage end_circle_radius_impl(HashTable<SVGGradientElement const*>& seen_gradients) const;
  46. Optional<NumberPercentage> m_cx;
  47. Optional<NumberPercentage> m_cy;
  48. Optional<NumberPercentage> m_fx;
  49. Optional<NumberPercentage> m_fy;
  50. Optional<NumberPercentage> m_fr;
  51. Optional<NumberPercentage> m_r;
  52. mutable RefPtr<Gfx::SVGRadialGradientPaintStyle> m_paint_style;
  53. };
  54. }