diff options
Diffstat (limited to 'Libraries/LibWeb')
-rw-r--r-- | Libraries/LibWeb/Bindings/EventWrapperFactory.cpp (renamed from Libraries/LibWeb/Bindings/EventWrapper.cpp) | 14 | ||||
-rw-r--r-- | Libraries/LibWeb/Bindings/EventWrapperFactory.h (renamed from Libraries/LibWeb/Bindings/EventWrapper.h) | 17 | ||||
-rw-r--r-- | Libraries/LibWeb/Bindings/MouseEventWrapper.cpp | 88 | ||||
-rw-r--r-- | Libraries/LibWeb/Bindings/MouseEventWrapper.h | 51 | ||||
-rw-r--r-- | Libraries/LibWeb/Bindings/NodeWrapperFactory.h | 2 | ||||
-rw-r--r-- | Libraries/LibWeb/CMakeLists.txt | 5 | ||||
-rw-r--r-- | Libraries/LibWeb/CodeGenerators/WrapperGenerator.cpp | 4 | ||||
-rw-r--r-- | Libraries/LibWeb/DOM/Event.h | 8 | ||||
-rw-r--r-- | Libraries/LibWeb/DOM/Event.idl | 5 | ||||
-rw-r--r-- | Libraries/LibWeb/DOM/MouseEvent.idl | 6 | ||||
-rw-r--r-- | Libraries/LibWeb/DOM/Node.cpp | 3 | ||||
-rw-r--r-- | Libraries/LibWeb/DOM/XMLHttpRequest.cpp | 3 |
12 files changed, 29 insertions, 177 deletions
diff --git a/Libraries/LibWeb/Bindings/EventWrapper.cpp b/Libraries/LibWeb/Bindings/EventWrapperFactory.cpp index 129a110eec..ced48a4155 100644 --- a/Libraries/LibWeb/Bindings/EventWrapper.cpp +++ b/Libraries/LibWeb/Bindings/EventWrapperFactory.cpp @@ -25,10 +25,8 @@ */ #include <LibJS/Interpreter.h> -#include <LibJS/Runtime/GlobalObject.h> #include <LibWeb/Bindings/EventWrapper.h> #include <LibWeb/Bindings/MouseEventWrapper.h> -#include <LibWeb/DOM/MouseEvent.h> namespace Web { namespace Bindings { @@ -36,19 +34,9 @@ namespace Bindings { EventWrapper* wrap(JS::Heap& heap, Event& event) { if (event.is_mouse_event()) - return static_cast<EventWrapper*>(wrap_impl(heap, static_cast<MouseEvent&>(event))); + return static_cast<MouseEventWrapper*>(wrap_impl(heap, static_cast<MouseEvent&>(event))); return static_cast<EventWrapper*>(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/EventWrapperFactory.h index 1e9f4b04b2..dee3c5422a 100644 --- a/Libraries/LibWeb/Bindings/EventWrapper.h +++ b/Libraries/LibWeb/Bindings/EventWrapperFactory.h @@ -26,25 +26,12 @@ #pragma once -#include <LibWeb/Bindings/Wrapper.h> +#include <LibJS/Forward.h> +#include <LibWeb/Forward.h> 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<Event> m_event; -}; - 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 <kling@serenityos.org> - * 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 <AK/FlyString.h> -#include <AK/Function.h> -#include <LibJS/Interpreter.h> -#include <LibJS/Runtime/Function.h> -#include <LibJS/Runtime/GlobalObject.h> -#include <LibWeb/Bindings/MouseEventWrapper.h> -#include <LibWeb/DOM/MouseEvent.h> - -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<const MouseEvent&>(EventWrapper::event()); -} - -MouseEvent& MouseEventWrapper::event() -{ - return static_cast<MouseEvent&>(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<MouseEventWrapper*>(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 <kling@serenityos.org> - * 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 <LibWeb/Bindings/EventWrapper.h> - -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 <LibWeb/Forward.h> #include <LibJS/Forward.h> +#include <LibWeb/Forward.h> namespace Web { namespace Bindings { diff --git a/Libraries/LibWeb/CMakeLists.txt b/Libraries/LibWeb/CMakeLists.txt index a42b71585f..9c36c2cc49 100644 --- a/Libraries/LibWeb/CMakeLists.txt +++ b/Libraries/LibWeb/CMakeLists.txt @@ -1,9 +1,8 @@ set(SOURCES Bindings/CanvasRenderingContext2DWrapper.cpp Bindings/EventListenerWrapper.cpp - Bindings/EventWrapper.cpp + Bindings/EventWrapperFactory.cpp Bindings/LocationObject.cpp - Bindings/MouseEventWrapper.cpp Bindings/NavigatorObject.cpp Bindings/NodeWrapperFactory.cpp Bindings/WindowObject.cpp @@ -158,6 +157,8 @@ libweb_js_wrapper(HTMLElement) libweb_js_wrapper(HTMLImageElement) libweb_js_wrapper(HTMLCanvasElement) libweb_js_wrapper(ImageData) +libweb_js_wrapper(Event) +libweb_js_wrapper(MouseEvent) get_property(WRAPPER_SOURCES GLOBAL PROPERTY wrapper_sources) set(SOURCES ${SOURCES} ${WRAPPER_SOURCES}) diff --git a/Libraries/LibWeb/CodeGenerators/WrapperGenerator.cpp b/Libraries/LibWeb/CodeGenerators/WrapperGenerator.cpp index b7089a0dbc..ec47efa551 100644 --- a/Libraries/LibWeb/CodeGenerators/WrapperGenerator.cpp +++ b/Libraries/LibWeb/CodeGenerators/WrapperGenerator.cpp @@ -322,6 +322,8 @@ static bool should_emit_wrapper_factory(const IDL::Interface& interface) return false; if (interface.name.ends_with("Element")) return false; + if (interface.name.ends_with("Event")) + return false; return true; } @@ -521,7 +523,7 @@ void generate_implementation(const IDL::Interface& interface) out() << " new_array->indexed_properties().append(wrap(interpreter.heap(), element));"; out() << " }"; out() << " return new_array;"; - } else if (return_type.name == "long") { + } else if (return_type.name == "long" || return_type.name == "double") { out() << " return JS::Value(retval);"; } else if (return_type.name == "Uint8ClampedArray") { out() << " return retval;"; diff --git a/Libraries/LibWeb/DOM/Event.h b/Libraries/LibWeb/DOM/Event.h index 33ceabffba..67c5a5da6a 100644 --- a/Libraries/LibWeb/DOM/Event.h +++ b/Libraries/LibWeb/DOM/Event.h @@ -44,18 +44,18 @@ public: virtual ~Event() {} - const FlyString& name() const { return m_event_name; } + const FlyString& type() const { return m_type; } virtual bool is_mouse_event() const { return false; } protected: - Event(const FlyString& event_name) - : m_event_name(event_name) + explicit Event(const FlyString& type) + : m_type(type) { } private: - FlyString m_event_name; + FlyString m_type; }; } diff --git a/Libraries/LibWeb/DOM/Event.idl b/Libraries/LibWeb/DOM/Event.idl new file mode 100644 index 0000000000..6a33752d50 --- /dev/null +++ b/Libraries/LibWeb/DOM/Event.idl @@ -0,0 +1,5 @@ +interface Event { + + readonly attribute DOMString type; + +} diff --git a/Libraries/LibWeb/DOM/MouseEvent.idl b/Libraries/LibWeb/DOM/MouseEvent.idl new file mode 100644 index 0000000000..4cecda9462 --- /dev/null +++ b/Libraries/LibWeb/DOM/MouseEvent.idl @@ -0,0 +1,6 @@ +interface MouseEvent : Event { + + readonly attribute double offsetX; + readonly attribute double offsetY; + +} diff --git a/Libraries/LibWeb/DOM/Node.cpp b/Libraries/LibWeb/DOM/Node.cpp index 0abb77b750..4f66b7de38 100644 --- a/Libraries/LibWeb/DOM/Node.cpp +++ b/Libraries/LibWeb/DOM/Node.cpp @@ -31,6 +31,7 @@ #include <LibJS/Runtime/MarkedValueList.h> #include <LibJS/Runtime/ScriptFunction.h> #include <LibWeb/Bindings/EventWrapper.h> +#include <LibWeb/Bindings/EventWrapperFactory.h> #include <LibWeb/Bindings/NodeWrapper.h> #include <LibWeb/Bindings/NodeWrapperFactory.h> #include <LibWeb/CSS/StyleResolver.h> @@ -131,7 +132,7 @@ bool Node::is_link() const void Node::dispatch_event(NonnullRefPtr<Event> event) { for (auto& listener : listeners()) { - if (listener.event_name == event->name()) { + if (listener.event_name == event->type()) { auto& function = const_cast<EventListener&>(*listener.listener).function(); #ifdef EVENT_DEBUG static_cast<const JS::ScriptFunction*>(function)->body().dump(0); diff --git a/Libraries/LibWeb/DOM/XMLHttpRequest.cpp b/Libraries/LibWeb/DOM/XMLHttpRequest.cpp index 47b2f59f0a..89789c2a63 100644 --- a/Libraries/LibWeb/DOM/XMLHttpRequest.cpp +++ b/Libraries/LibWeb/DOM/XMLHttpRequest.cpp @@ -27,6 +27,7 @@ #include <LibJS/Interpreter.h> #include <LibJS/Runtime/Function.h> #include <LibWeb/Bindings/EventWrapper.h> +#include <LibWeb/Bindings/EventWrapperFactory.h> #include <LibWeb/Bindings/XMLHttpRequestWrapper.h> #include <LibWeb/DOM/Document.h> #include <LibWeb/DOM/Event.h> @@ -91,7 +92,7 @@ void XMLHttpRequest::send() void XMLHttpRequest::dispatch_event(NonnullRefPtr<Event> event) { for (auto& listener : listeners()) { - if (listener.event_name == event->name()) { + if (listener.event_name == event->type()) { auto& function = const_cast<EventListener&>(*listener.listener).function(); auto& heap = function.heap(); auto* this_value = wrap(heap, *this); |