diff --git a/Libraries/LibWeb/Bindings/CanvasRenderingContext2DWrapper.cpp b/Libraries/LibWeb/Bindings/CanvasRenderingContext2DWrapper.cpp index 194d16361b..eb99184b65 100644 --- a/Libraries/LibWeb/Bindings/CanvasRenderingContext2DWrapper.cpp +++ b/Libraries/LibWeb/Bindings/CanvasRenderingContext2DWrapper.cpp @@ -35,6 +35,7 @@ #include #include #include +#include #include #include @@ -50,14 +51,11 @@ CanvasRenderingContext2DWrapper::CanvasRenderingContext2DWrapper(CanvasRendering : Wrapper(*interpreter().global_object().object_prototype()) , m_impl(impl) { - put_native_property("fillStyle", fill_style_getter, fill_style_setter); put_native_function("fillRect", fill_rect, 4); put_native_function("scale", scale, 2); put_native_function("translate", translate, 2); - put_native_property("strokeStyle", stroke_style_getter, stroke_style_setter); put_native_function("strokeRect", stroke_rect, 4); put_native_function("drawImage", draw_image, 3); - put_native_function("beginPath", begin_path, 0); put_native_function("closePath", close_path, 0); put_native_function("stroke", stroke, 0); @@ -65,11 +63,13 @@ CanvasRenderingContext2DWrapper::CanvasRenderingContext2DWrapper(CanvasRendering put_native_function("moveTo", move_to, 2); put_native_function("lineTo", line_to, 2); put_native_function("quadraticCurveTo", quadratic_curve_to, 4); - put_native_function("createImageData", create_image_data, 1); put_native_function("putImageData", put_image_data, 3); + put_native_property("fillStyle", fill_style_getter, fill_style_setter); + put_native_property("strokeStyle", stroke_style_getter, stroke_style_setter); put_native_property("lineWidth", line_width_getter, line_width_setter); + put_native_property("canvas", canvas_getter, nullptr); } CanvasRenderingContext2DWrapper::~CanvasRenderingContext2DWrapper() @@ -397,5 +397,16 @@ JS::Value CanvasRenderingContext2DWrapper::put_image_data(JS::Interpreter& inter return JS::js_undefined(); } +JS::Value CanvasRenderingContext2DWrapper::canvas_getter(JS::Interpreter& interpreter) +{ + auto* impl = impl_from(interpreter); + if (!impl) + return {}; + auto* element = impl->element(); + if (!element) + return JS::js_null(); + return wrap(interpreter.heap(), *element); +} + } } diff --git a/Libraries/LibWeb/Bindings/CanvasRenderingContext2DWrapper.h b/Libraries/LibWeb/Bindings/CanvasRenderingContext2DWrapper.h index bd8fb1fafc..eed7cc1771 100644 --- a/Libraries/LibWeb/Bindings/CanvasRenderingContext2DWrapper.h +++ b/Libraries/LibWeb/Bindings/CanvasRenderingContext2DWrapper.h @@ -47,12 +47,6 @@ private: static JS::Value draw_image(JS::Interpreter&); static JS::Value scale(JS::Interpreter&); static JS::Value translate(JS::Interpreter&); - static JS::Value fill_style_getter(JS::Interpreter&); - static void fill_style_setter(JS::Interpreter&, JS::Value); - static JS::Value stroke_style_getter(JS::Interpreter&); - static void stroke_style_setter(JS::Interpreter&, JS::Value); - static JS::Value line_width_getter(JS::Interpreter&); - static void line_width_setter(JS::Interpreter&, JS::Value); static JS::Value begin_path(JS::Interpreter&); static JS::Value close_path(JS::Interpreter&); static JS::Value stroke(JS::Interpreter&); @@ -60,10 +54,20 @@ private: static JS::Value move_to(JS::Interpreter&); static JS::Value line_to(JS::Interpreter&); static JS::Value quadratic_curve_to(JS::Interpreter&); - static JS::Value create_image_data(JS::Interpreter&); static JS::Value put_image_data(JS::Interpreter&); + static JS::Value fill_style_getter(JS::Interpreter&); + static void fill_style_setter(JS::Interpreter&, JS::Value); + + static JS::Value stroke_style_getter(JS::Interpreter&); + static void stroke_style_setter(JS::Interpreter&, JS::Value); + + static void line_width_setter(JS::Interpreter&, JS::Value); + static JS::Value line_width_getter(JS::Interpreter&); + + static JS::Value canvas_getter(JS::Interpreter&); + NonnullRefPtr m_impl; }; diff --git a/Libraries/LibWeb/DOM/CanvasRenderingContext2D.h b/Libraries/LibWeb/DOM/CanvasRenderingContext2D.h index a2ffb5852b..618187ea77 100644 --- a/Libraries/LibWeb/DOM/CanvasRenderingContext2D.h +++ b/Libraries/LibWeb/DOM/CanvasRenderingContext2D.h @@ -77,6 +77,8 @@ public: RefPtr create_image_data(JS::GlobalObject&, int width, int height) const; void put_image_data(const ImageData&, float x, float y); + HTMLCanvasElement* element() { return m_element; } + private: explicit CanvasRenderingContext2D(HTMLCanvasElement&);