/* * Copyright (c) 2023, MacDue * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace Web::SVG { class SVGLinearGradientElement : public SVGGradientElement { WEB_PLATFORM_OBJECT(SVGLinearGradientElement, SVGGradientElement); JS_DECLARE_ALLOCATOR(SVGLinearGradientElement); public: virtual ~SVGLinearGradientElement() override = default; virtual void attribute_changed(FlyString const& name, Optional const& value) override; virtual Optional to_gfx_paint_style(SVGPaintContext const&) const override; JS::NonnullGCPtr x1() const; JS::NonnullGCPtr y1() const; JS::NonnullGCPtr x2() const; JS::NonnullGCPtr y2() const; protected: SVGLinearGradientElement(DOM::Document&, DOM::QualifiedName); virtual void initialize(JS::Realm&) override; private: JS::GCPtr linked_linear_gradient(HashTable& seen_gradients) const { if (auto gradient = linked_gradient(seen_gradients); gradient && is(*gradient)) return &verify_cast(*gradient); return {}; } NumberPercentage start_x() const; NumberPercentage start_y() const; NumberPercentage end_x() const; NumberPercentage end_y() const; NumberPercentage start_x_impl(HashTable& seen_gradients) const; NumberPercentage start_y_impl(HashTable& seen_gradients) const; NumberPercentage end_x_impl(HashTable& seen_gradients) const; NumberPercentage end_y_impl(HashTable& seen_gradients) const; Optional m_x1; Optional m_y1; Optional m_x2; Optional m_y2; mutable RefPtr m_paint_style; }; }