From e1bd815a6a6f460738cd2e0206bb1f3deb77d0d2 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 21 Jun 2020 16:10:48 +0200 Subject: LibWeb: Generate Event and MouseEvent bindings from IDL :^) We still have to hand-write a function to turn an Event& into a wrapper but this is still a hue improvement. Eventually we'll find a way to auto-generate that function as well. --- Libraries/LibWeb/Bindings/EventWrapper.cpp | 54 -------------- Libraries/LibWeb/Bindings/EventWrapper.h | 51 ------------- Libraries/LibWeb/Bindings/EventWrapperFactory.cpp | 42 +++++++++++ Libraries/LibWeb/Bindings/EventWrapperFactory.h | 38 ++++++++++ Libraries/LibWeb/Bindings/MouseEventWrapper.cpp | 88 ----------------------- Libraries/LibWeb/Bindings/MouseEventWrapper.h | 51 ------------- Libraries/LibWeb/Bindings/NodeWrapperFactory.h | 2 +- 7 files changed, 81 insertions(+), 245 deletions(-) delete mode 100644 Libraries/LibWeb/Bindings/EventWrapper.cpp delete mode 100644 Libraries/LibWeb/Bindings/EventWrapper.h create mode 100644 Libraries/LibWeb/Bindings/EventWrapperFactory.cpp create mode 100644 Libraries/LibWeb/Bindings/EventWrapperFactory.h delete mode 100644 Libraries/LibWeb/Bindings/MouseEventWrapper.cpp delete mode 100644 Libraries/LibWeb/Bindings/MouseEventWrapper.h (limited to 'Libraries/LibWeb/Bindings') diff --git a/Libraries/LibWeb/Bindings/EventWrapper.cpp b/Libraries/LibWeb/Bindings/EventWrapper.cpp deleted file mode 100644 index 129a110eec..0000000000 --- a/Libraries/LibWeb/Bindings/EventWrapper.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2020, Andreas Kling - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -#include -#include -#include -#include - -namespace Web { -namespace Bindings { - -EventWrapper* wrap(JS::Heap& heap, Event& event) -{ - if (event.is_mouse_event()) - return static_cast(wrap_impl(heap, static_cast(event))); - return static_cast(wrap_impl(heap, event)); -} - -EventWrapper::EventWrapper(JS::GlobalObject& global_object, Event& event) - : Wrapper(*global_object.object_prototype()) - , m_event(event) -{ -} - -EventWrapper::~EventWrapper() -{ -} - -} -} diff --git a/Libraries/LibWeb/Bindings/EventWrapper.h b/Libraries/LibWeb/Bindings/EventWrapper.h deleted file mode 100644 index 1e9f4b04b2..0000000000 --- a/Libraries/LibWeb/Bindings/EventWrapper.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2020, Andreas Kling - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#pragma once - -#include - -namespace Web { -namespace Bindings { - -class EventWrapper : public Wrapper { - JS_OBJECT(EventWrapper, Wrapper); - -public: - EventWrapper(JS::GlobalObject&, Event&); - virtual ~EventWrapper() override; - - Event& event() { return m_event; } - const Event& event() const { return m_event; } - -private: - NonnullRefPtr m_event; -}; - -EventWrapper* wrap(JS::Heap&, Event&); - -} -} diff --git a/Libraries/LibWeb/Bindings/EventWrapperFactory.cpp b/Libraries/LibWeb/Bindings/EventWrapperFactory.cpp new file mode 100644 index 0000000000..ced48a4155 --- /dev/null +++ b/Libraries/LibWeb/Bindings/EventWrapperFactory.cpp @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2020, Andreas Kling + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include + +namespace Web { +namespace Bindings { + +EventWrapper* wrap(JS::Heap& heap, Event& event) +{ + if (event.is_mouse_event()) + return static_cast(wrap_impl(heap, static_cast(event))); + return static_cast(wrap_impl(heap, event)); +} + +} +} diff --git a/Libraries/LibWeb/Bindings/EventWrapperFactory.h b/Libraries/LibWeb/Bindings/EventWrapperFactory.h new file mode 100644 index 0000000000..dee3c5422a --- /dev/null +++ b/Libraries/LibWeb/Bindings/EventWrapperFactory.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2020, Andreas Kling + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#pragma once + +#include +#include + +namespace Web { +namespace Bindings { + +EventWrapper* wrap(JS::Heap&, Event&); + +} +} diff --git a/Libraries/LibWeb/Bindings/MouseEventWrapper.cpp b/Libraries/LibWeb/Bindings/MouseEventWrapper.cpp deleted file mode 100644 index 6d3ff58fb9..0000000000 --- a/Libraries/LibWeb/Bindings/MouseEventWrapper.cpp +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (c) 2020, Andreas Kling - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -#include -#include -#include -#include -#include -#include - -namespace Web { -namespace Bindings { - -MouseEventWrapper::MouseEventWrapper(JS::GlobalObject& global_object, MouseEvent& event) - : EventWrapper(global_object, event) -{ -} - -void MouseEventWrapper::initialize(JS::Interpreter& interpreter, JS::GlobalObject& global_object) -{ - EventWrapper::initialize(interpreter, global_object); - define_native_property("offsetX", offset_x_getter, nullptr); - define_native_property("offsetY", offset_y_getter, nullptr); -} - -MouseEventWrapper::~MouseEventWrapper() -{ -} - -const MouseEvent& MouseEventWrapper::event() const -{ - return static_cast(EventWrapper::event()); -} - -MouseEvent& MouseEventWrapper::event() -{ - return static_cast(EventWrapper::event()); -} - -static MouseEvent* impl_from(JS::Interpreter& interpreter, JS::GlobalObject& global_object) -{ - auto* this_object = interpreter.this_value(global_object).to_object(interpreter, global_object); - if (!this_object) - return nullptr; - // FIXME: Verify that it's a CanvasRenderingContext2DWrapper somehow! - return &static_cast(this_object)->event(); -} - -JS_DEFINE_NATIVE_GETTER(MouseEventWrapper::offset_x_getter) -{ - if (auto* impl = impl_from(interpreter, global_object)) - return JS::Value(impl->offset_x()); - return {}; -} - -JS_DEFINE_NATIVE_GETTER(MouseEventWrapper::offset_y_getter) -{ - if (auto* impl = impl_from(interpreter, global_object)) - return JS::Value(impl->offset_y()); - return {}; -} - -} -} diff --git a/Libraries/LibWeb/Bindings/MouseEventWrapper.h b/Libraries/LibWeb/Bindings/MouseEventWrapper.h deleted file mode 100644 index 9e7cb96b8e..0000000000 --- a/Libraries/LibWeb/Bindings/MouseEventWrapper.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2020, Andreas Kling - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#pragma once - -#include - -namespace Web { -namespace Bindings { - -class MouseEventWrapper : public EventWrapper { -public: - MouseEventWrapper(JS::GlobalObject&, MouseEvent&); - virtual void initialize(JS::Interpreter&, JS::GlobalObject&) override; - virtual ~MouseEventWrapper() override; - - MouseEvent& event(); - const MouseEvent& event() const; - -private: - virtual const char* class_name() const override { return "MouseEventWrapper"; } - - JS_DECLARE_NATIVE_GETTER(offset_x_getter); - JS_DECLARE_NATIVE_GETTER(offset_y_getter); -}; - -} -} diff --git a/Libraries/LibWeb/Bindings/NodeWrapperFactory.h b/Libraries/LibWeb/Bindings/NodeWrapperFactory.h index 33f162bbe3..b8fa0cd10b 100644 --- a/Libraries/LibWeb/Bindings/NodeWrapperFactory.h +++ b/Libraries/LibWeb/Bindings/NodeWrapperFactory.h @@ -26,8 +26,8 @@ #pragma once -#include #include +#include namespace Web { namespace Bindings { -- cgit v1.2.3