diff --git a/Userland/Libraries/LibWeb/Forward.h b/Userland/Libraries/LibWeb/Forward.h index dff2c3eea80..6243b521c29 100644 --- a/Userland/Libraries/LibWeb/Forward.h +++ b/Userland/Libraries/LibWeb/Forward.h @@ -449,7 +449,6 @@ class URLSearchParamsIterator; namespace Web::Bindings { class BlobWrapper; -class CanvasGradientWrapper; class CryptoWrapper; class DOMExceptionWrapper; class DOMPointWrapper; diff --git a/Userland/Libraries/LibWeb/HTML/Canvas/CanvasFillStrokeStyles.h b/Userland/Libraries/LibWeb/HTML/Canvas/CanvasFillStrokeStyles.h index d65da169329..9e9b3e6eba0 100644 --- a/Userland/Libraries/LibWeb/HTML/Canvas/CanvasFillStrokeStyles.h +++ b/Userland/Libraries/LibWeb/HTML/Canvas/CanvasFillStrokeStyles.h @@ -42,19 +42,22 @@ public: return my_drawing_state().stroke_style.to_string(); } - NonnullRefPtr create_radial_gradient(double x0, double y0, double r0, double x1, double y1, double r1) + JS::NonnullGCPtr create_radial_gradient(double x0, double y0, double r0, double x1, double y1, double r1) { - return CanvasGradient::create_radial(x0, y0, r0, x1, y1, r1); + auto& window = static_cast(*this).global_object(); + return CanvasGradient::create_radial(window, x0, y0, r0, x1, y1, r1); } - NonnullRefPtr create_linear_gradient(double x0, double y0, double x1, double y1) + JS::NonnullGCPtr create_linear_gradient(double x0, double y0, double x1, double y1) { - return CanvasGradient::create_linear(x0, y0, x1, y1); + auto& window = static_cast(*this).global_object(); + return CanvasGradient::create_linear(window, x0, y0, x1, y1); } - NonnullRefPtr create_conic_gradient(double start_angle, double x, double y) + JS::NonnullGCPtr create_conic_gradient(double start_angle, double x, double y) { - return CanvasGradient::create_conic(start_angle, x, y); + auto& window = static_cast(*this).global_object(); + return CanvasGradient::create_conic(window, start_angle, x, y); } protected: diff --git a/Userland/Libraries/LibWeb/HTML/CanvasGradient.cpp b/Userland/Libraries/LibWeb/HTML/CanvasGradient.cpp index ff9824ab17b..ffe65f2924c 100644 --- a/Userland/Libraries/LibWeb/HTML/CanvasGradient.cpp +++ b/Userland/Libraries/LibWeb/HTML/CanvasGradient.cpp @@ -5,12 +5,14 @@ */ #include +#include #include #include +#include namespace Web::HTML { -NonnullRefPtr CanvasGradient::create_radial(double x0, double y0, double r0, double x1, double y1, double r1) +JS::NonnullGCPtr CanvasGradient::create_radial(HTML::Window& window, double x0, double y0, double r0, double x1, double y1, double r1) { (void)x0; (void)y0; @@ -18,29 +20,31 @@ NonnullRefPtr CanvasGradient::create_radial(double x0, double y0 (void)x1; (void)y1; (void)r1; - return adopt_ref(*new CanvasGradient(Type::Radial)); + return *window.heap().allocate(window.realm(), window, Type::Radial); } -NonnullRefPtr CanvasGradient::create_linear(double x0, double y0, double x1, double y1) +JS::NonnullGCPtr CanvasGradient::create_linear(HTML::Window& window, double x0, double y0, double x1, double y1) { (void)x0; (void)y0; (void)x1; (void)y1; - return adopt_ref(*new CanvasGradient(Type::Linear)); + return *window.heap().allocate(window.realm(), window, Type::Linear); } -NonnullRefPtr CanvasGradient::create_conic(double start_angle, double x, double y) +JS::NonnullGCPtr CanvasGradient::create_conic(HTML::Window& window, double start_angle, double x, double y) { (void)start_angle; (void)x; (void)y; - return adopt_ref(*new CanvasGradient(Type::Conic)); + return *window.heap().allocate(window.realm(), window, Type::Conic); } -CanvasGradient::CanvasGradient(Type type) - : m_type(type) +CanvasGradient::CanvasGradient(HTML::Window& window, Type type) + : PlatformObject(window.realm()) + , m_type(type) { + set_prototype(&window.ensure_web_prototype("CanvasGradient")); } CanvasGradient::~CanvasGradient() = default; diff --git a/Userland/Libraries/LibWeb/HTML/CanvasGradient.h b/Userland/Libraries/LibWeb/HTML/CanvasGradient.h index 5aa89d10cb7..a9efb1ff33e 100644 --- a/Userland/Libraries/LibWeb/HTML/CanvasGradient.h +++ b/Userland/Libraries/LibWeb/HTML/CanvasGradient.h @@ -6,15 +6,14 @@ #pragma once -#include #include -#include +#include namespace Web::HTML { -class CanvasGradient final - : public RefCounted - , public Bindings::Wrappable { +class CanvasGradient final : public Bindings::PlatformObject { + WEB_PLATFORM_OBJECT(CanvasGradient, Bindings::PlatformObject); + public: enum class Type { Linear, @@ -22,18 +21,16 @@ public: Conic, }; - using WrapperType = Bindings::CanvasGradientWrapper; - - static NonnullRefPtr create_radial(double x0, double y0, double r0, double x1, double y1, double r1); - static NonnullRefPtr create_linear(double x0, double y0, double x1, double y1); - static NonnullRefPtr create_conic(double start_angle, double x, double y); + static JS::NonnullGCPtr create_radial(HTML::Window&, double x0, double y0, double r0, double x1, double y1, double r1); + static JS::NonnullGCPtr create_linear(HTML::Window&, double x0, double y0, double x1, double y1); + static JS::NonnullGCPtr create_conic(HTML::Window&, double start_angle, double x, double y); DOM::ExceptionOr add_color_stop(double offset, String const& color); ~CanvasGradient(); private: - explicit CanvasGradient(Type); + CanvasGradient(HTML::Window&, Type); Type m_type {}; @@ -46,3 +43,5 @@ private: }; } + +WRAPPER_HACK(CanvasGradient, Web::HTML) diff --git a/Userland/Libraries/LibWeb/idl_files.cmake b/Userland/Libraries/LibWeb/idl_files.cmake index 17643b5fbaa..02af86c3022 100644 --- a/Userland/Libraries/LibWeb/idl_files.cmake +++ b/Userland/Libraries/LibWeb/idl_files.cmake @@ -61,7 +61,7 @@ libweb_js_wrapper(Geometry/DOMPointReadOnly) libweb_js_wrapper(Geometry/DOMRect) libweb_js_wrapper(Geometry/DOMRectList) libweb_js_wrapper(Geometry/DOMRectReadOnly) -libweb_js_wrapper(HTML/CanvasGradient) +libweb_js_wrapper(HTML/CanvasGradient NO_INSTANCE) libweb_js_wrapper(HTML/CanvasRenderingContext2D NO_INSTANCE) libweb_js_wrapper(HTML/CloseEvent NO_INSTANCE) libweb_js_wrapper(HTML/DOMParser NO_INSTANCE)