From b0c2aee2e4d7e38913259a2fb6fc024db9a12718 Mon Sep 17 00:00:00 2001 From: Luke Wilde Date: Sat, 4 Jun 2022 04:18:32 +0100 Subject: [PATCH] LibWeb: Introduce the WebGL namespace and add WebGLContextEvent --- .../LibWeb/WrapperGenerator/IDLGenerators.cpp | 5 +++ .../LibWeb/WrapperGenerator/main.cpp | 2 +- .../LibWeb/Bindings/EventWrapperFactory.cpp | 3 ++ .../LibWeb/Bindings/WindowObjectHelper.h | 3 ++ Userland/Libraries/LibWeb/Forward.h | 5 +++ .../LibWeb/WebGL/WebGLContextEvent.h | 45 +++++++++++++++++++ .../LibWeb/WebGL/WebGLContextEvent.idl | 11 +++++ Userland/Libraries/LibWeb/idl_files.cmake | 1 + 8 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 Userland/Libraries/LibWeb/WebGL/WebGLContextEvent.h create mode 100644 Userland/Libraries/LibWeb/WebGL/WebGLContextEvent.idl diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/IDLGenerators.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/IDLGenerators.cpp index 062c6c4ffe..1d5fd43c74 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/IDLGenerators.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/IDLGenerators.cpp @@ -1895,6 +1895,7 @@ using namespace Web::IntersectionObserver; using namespace Web::RequestIdleCallback; using namespace Web::ResizeObserver; using namespace Web::Selection; +using namespace Web::WebGL; namespace Web::Bindings { @@ -2811,6 +2812,7 @@ using namespace Web::ResizeObserver; using namespace Web::Selection; using namespace Web::UIEvents; using namespace Web::XHR; +using namespace Web::WebGL; namespace Web::Bindings { @@ -3090,6 +3092,7 @@ using namespace Web::SVG; using namespace Web::URL; using namespace Web::WebSockets; using namespace Web::XHR; +using namespace Web::WebGL; namespace Web::Bindings { @@ -3533,6 +3536,7 @@ using namespace Web::IntersectionObserver; using namespace Web::RequestIdleCallback; using namespace Web::ResizeObserver; using namespace Web::Selection; +using namespace Web::WebGL; namespace Web::Bindings { @@ -3648,6 +3652,7 @@ using namespace Web::ResizeObserver; using namespace Web::Selection; using namespace Web::XHR; using namespace Web::URL; +using namespace Web::WebGL; namespace Web::Bindings { diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/main.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/main.cpp index 8f501a9709..cf95734588 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/main.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/main.cpp @@ -85,7 +85,7 @@ int main(int argc, char** argv) auto& interface = IDL::Parser(path, data, import_base_path).parse(); - if (namespace_.is_one_of("Crypto", "CSS", "DOM", "Encoding", "HTML", "UIEvents", "Geometry", "HighResolutionTime", "IntersectionObserver", "NavigationTiming", "RequestIdleCallback", "ResizeObserver", "SVG", "Selection", "URL", "WebSockets", "XHR")) { + if (namespace_.is_one_of("Crypto", "CSS", "DOM", "Encoding", "HTML", "UIEvents", "Geometry", "HighResolutionTime", "IntersectionObserver", "NavigationTiming", "RequestIdleCallback", "ResizeObserver", "SVG", "Selection", "URL", "WebGL", "WebSockets", "XHR")) { StringBuilder builder; builder.append(namespace_); builder.append("::"); diff --git a/Userland/Libraries/LibWeb/Bindings/EventWrapperFactory.cpp b/Userland/Libraries/LibWeb/Bindings/EventWrapperFactory.cpp index e5d974cef4..32c38fdeb4 100644 --- a/Userland/Libraries/LibWeb/Bindings/EventWrapperFactory.cpp +++ b/Userland/Libraries/LibWeb/Bindings/EventWrapperFactory.cpp @@ -17,6 +17,7 @@ #include #include #include +#include namespace Web::Bindings { @@ -47,6 +48,8 @@ EventWrapper* wrap(JS::GlobalObject& global_object, DOM::Event& event) return static_cast(wrap_impl(global_object, static_cast(event))); if (is(event)) return static_cast(wrap_impl(global_object, static_cast(event))); + if (is(event)) + return static_cast(wrap_impl(global_object, static_cast(event))); return static_cast(wrap_impl(global_object, event)); } diff --git a/Userland/Libraries/LibWeb/Bindings/WindowObjectHelper.h b/Userland/Libraries/LibWeb/Bindings/WindowObjectHelper.h index 10f4ecec5d..83e47af739 100644 --- a/Userland/Libraries/LibWeb/Bindings/WindowObjectHelper.h +++ b/Userland/Libraries/LibWeb/Bindings/WindowObjectHelper.h @@ -339,6 +339,8 @@ #include #include #include +#include +#include #include #include #include @@ -526,6 +528,7 @@ ADD_WINDOW_OBJECT_INTERFACE(UIEvent) \ ADD_WINDOW_OBJECT_INTERFACE(URLSearchParams) \ ADD_WINDOW_OBJECT_INTERFACE(URL) \ + ADD_WINDOW_OBJECT_INTERFACE(WebGLContextEvent) \ ADD_WINDOW_OBJECT_INTERFACE(WebSocket) \ ADD_WINDOW_OBJECT_INTERFACE(Worker) \ ADD_WINDOW_OBJECT_INTERFACE(XMLHttpRequest) \ diff --git a/Userland/Libraries/LibWeb/Forward.h b/Userland/Libraries/LibWeb/Forward.h index 71a6c8922a..58617d8829 100644 --- a/Userland/Libraries/LibWeb/Forward.h +++ b/Userland/Libraries/LibWeb/Forward.h @@ -377,6 +377,10 @@ class Resource; class ResourceLoader; } +namespace Web::WebGL { +class WebGLContextEvent; +} + namespace Web::XHR { class ProgressEvent; class XMLHttpRequest; @@ -576,6 +580,7 @@ class URLSearchParamsIteratorWrapper; class URLSearchParamsPrototype; class URLSearchParamsWrapper; class URLWrapper; +class WebGLContextEventWrapper; class WebSocketWrapper; class WindowObject; class WindowProxy; diff --git a/Userland/Libraries/LibWeb/WebGL/WebGLContextEvent.h b/Userland/Libraries/LibWeb/WebGL/WebGLContextEvent.h new file mode 100644 index 0000000000..a574da2b90 --- /dev/null +++ b/Userland/Libraries/LibWeb/WebGL/WebGLContextEvent.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2022, Luke Wilde + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include + +namespace Web::WebGL { + +struct WebGLContextEventInit final : public DOM::EventInit { + String status_message { String::empty() }; +}; + +class WebGLContextEvent final : public DOM::Event { +public: + using WrapperType = Bindings::WebGLContextEventWrapper; + + static NonnullRefPtr create(FlyString const& type, WebGLContextEventInit const& event_init) + { + return adopt_ref(*new WebGLContextEvent(type, event_init)); + } + + static NonnullRefPtr create_with_global_object(Bindings::WindowObject&, FlyString const& type, WebGLContextEventInit const& event_init) + { + return adopt_ref(*new WebGLContextEvent(type, event_init)); + } + + virtual ~WebGLContextEvent() override = default; + + String const& status_message() const { return m_status_message; } + +private: + WebGLContextEvent(FlyString const& type, WebGLContextEventInit const& event_init) + : DOM::Event(type, event_init) + , m_status_message(event_init.status_message) + { + } + + String m_status_message { String::empty() }; +}; + +} diff --git a/Userland/Libraries/LibWeb/WebGL/WebGLContextEvent.idl b/Userland/Libraries/LibWeb/WebGL/WebGLContextEvent.idl new file mode 100644 index 0000000000..5104d69396 --- /dev/null +++ b/Userland/Libraries/LibWeb/WebGL/WebGLContextEvent.idl @@ -0,0 +1,11 @@ +#import + +[Exposed=(Window,Worker)] +interface WebGLContextEvent : Event { + constructor(DOMString type, optional WebGLContextEventInit eventInit = {}); + readonly attribute DOMString statusMessage; +}; + +dictionary WebGLContextEventInit : EventInit { + DOMString statusMessage = ""; +}; diff --git a/Userland/Libraries/LibWeb/idl_files.cmake b/Userland/Libraries/LibWeb/idl_files.cmake index 3e0ba9e24c..2bb2bcc731 100644 --- a/Userland/Libraries/LibWeb/idl_files.cmake +++ b/Userland/Libraries/LibWeb/idl_files.cmake @@ -172,6 +172,7 @@ libweb_js_wrapper(UIEvents/MouseEvent) libweb_js_wrapper(UIEvents/UIEvent) libweb_js_wrapper(URL/URL) libweb_js_wrapper(URL/URLSearchParams ITERABLE) +libweb_js_wrapper(WebGL/WebGLContextEvent) libweb_js_wrapper(WebSockets/WebSocket) libweb_js_wrapper(XHR/ProgressEvent) libweb_js_wrapper(XHR/XMLHttpRequest)