diff options
author | Idan Horowitz <idan.horowitz@gmail.com> | 2021-10-01 20:25:37 +0300 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-10-01 20:14:45 +0200 |
commit | f74b612aa4867b5e985bb34feab610f49067183f (patch) | |
tree | 497a516aee6e48337821ef58883cb82503f59289 /Userland/Libraries/LibWeb/UIEvents | |
parent | c5b924b1e632a965547daedc0b63f17ce00f31fc (diff) | |
download | serenity-f74b612aa4867b5e985bb34feab610f49067183f.zip |
LibWeb: Add the missing KeyboardEvent IDL constructor
This commit also does a bit of general cleanup on the header file.
Diffstat (limited to 'Userland/Libraries/LibWeb/UIEvents')
-rw-r--r-- | Userland/Libraries/LibWeb/UIEvents/EventModifier.h | 21 | ||||
-rw-r--r-- | Userland/Libraries/LibWeb/UIEvents/EventModifier.idl | 10 | ||||
-rw-r--r-- | Userland/Libraries/LibWeb/UIEvents/KeyboardEvent.cpp | 39 | ||||
-rw-r--r-- | Userland/Libraries/LibWeb/UIEvents/KeyboardEvent.h | 49 | ||||
-rw-r--r-- | Userland/Libraries/LibWeb/UIEvents/KeyboardEvent.idl | 15 |
5 files changed, 99 insertions, 35 deletions
diff --git a/Userland/Libraries/LibWeb/UIEvents/EventModifier.h b/Userland/Libraries/LibWeb/UIEvents/EventModifier.h new file mode 100644 index 0000000000..bc0ad5ef9e --- /dev/null +++ b/Userland/Libraries/LibWeb/UIEvents/EventModifier.h @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2021, Idan Horowitz <idan.horowitz@serenityos.org> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include <LibWeb/UIEvents/UIEvent.h> + +namespace Web::UIEvents { + +// https://w3c.github.io/uievents/#event-modifier-initializers +struct EventModifierInit : public UIEventInit { + bool ctrl_key { false }; + bool shift_key { false }; + bool alt_key { false }; + bool meta_key { false }; +}; + +} diff --git a/Userland/Libraries/LibWeb/UIEvents/EventModifier.idl b/Userland/Libraries/LibWeb/UIEvents/EventModifier.idl new file mode 100644 index 0000000000..907616c5e1 --- /dev/null +++ b/Userland/Libraries/LibWeb/UIEvents/EventModifier.idl @@ -0,0 +1,10 @@ +#import <UIEvents/UIEvent.idl> + +dictionary EventModifierInit : UIEventInit { + boolean ctrlKey = false; + boolean shiftKey = false; + boolean altKey = false; + boolean metaKey = false; + + // FIXME: modifier* fields +}; diff --git a/Userland/Libraries/LibWeb/UIEvents/KeyboardEvent.cpp b/Userland/Libraries/LibWeb/UIEvents/KeyboardEvent.cpp index 0e00d17362..ab5d29d35f 100644 --- a/Userland/Libraries/LibWeb/UIEvents/KeyboardEvent.cpp +++ b/Userland/Libraries/LibWeb/UIEvents/KeyboardEvent.cpp @@ -65,34 +65,29 @@ static unsigned long determine_key_code(KeyCode platform_key, u32 code_point) return platform_key; } -NonnullRefPtr<KeyboardEvent> KeyboardEvent::create_from_platform_event(FlyString event_name, KeyCode platform_key, unsigned modifiers, u32 code_point) +NonnullRefPtr<KeyboardEvent> KeyboardEvent::create_from_platform_event(FlyString const& event_name, KeyCode platform_key, unsigned modifiers, u32 code_point) { // FIXME: Figure out what these should actually contain. String event_key = key_code_to_string(platform_key); String event_code = "FIXME"; auto key_code = determine_key_code(platform_key, code_point); - return KeyboardEvent::create(move(event_name), move(event_key), move(event_code), 0, modifiers & Mod_Ctrl, modifiers & Mod_Shift, modifiers & Mod_Alt, false, false, false, key_code, code_point); -} - -KeyboardEvent::KeyboardEvent(FlyString event_name, String key, String code, unsigned long location, bool ctrl_key, bool shift_key, bool alt_key, bool meta_key, bool repeat, bool is_composing, unsigned long key_code, unsigned long char_code) - : UIEvent(move(event_name)) - , m_key(move(key)) - , m_code(move(code)) - , m_location(location) - , m_ctrl_key(ctrl_key) - , m_shift_key(shift_key) - , m_alt_key(alt_key) - , m_meta_key(meta_key) - , m_repeat(repeat) - , m_is_composing(is_composing) - , m_key_code(key_code) - , m_char_code(char_code) -{ -} - -KeyboardEvent::~KeyboardEvent() -{ + KeyboardEventInit event_init {}; + event_init.key = move(event_key); + event_init.code = move(event_code); + event_init.location = 0; + event_init.ctrl_key = modifiers & Mod_Ctrl; + event_init.shift_key = modifiers & Mod_Shift; + event_init.alt_key = modifiers & Mod_Alt; + event_init.meta_key = false; + event_init.repeat = false; + event_init.is_composing = false; + event_init.key_code = key_code; + event_init.char_code = code_point; + event_init.bubbles = true; + event_init.cancelable = true; + event_init.composed = true; + return KeyboardEvent::create(event_name, event_init); } bool KeyboardEvent::get_modifier_state(String const& key_arg) diff --git a/Userland/Libraries/LibWeb/UIEvents/KeyboardEvent.h b/Userland/Libraries/LibWeb/UIEvents/KeyboardEvent.h index 14411972ba..3276d54cec 100644 --- a/Userland/Libraries/LibWeb/UIEvents/KeyboardEvent.h +++ b/Userland/Libraries/LibWeb/UIEvents/KeyboardEvent.h @@ -8,30 +8,45 @@ #include <AK/TypeCasts.h> #include <Kernel/API/KeyCode.h> +#include <LibWeb/UIEvents/EventModifier.h> #include <LibWeb/UIEvents/UIEvent.h> namespace Web::UIEvents { +struct KeyboardEventInit : public EventModifierInit { + String key { "" }; + String code { "" }; + u32 location { 0 }; + bool repeat { false }; + bool is_composing { false }; + u32 key_code { 0 }; + u32 char_code { 0 }; +}; + // https://www.w3.org/TR/uievents/#interface-keyboardevent class KeyboardEvent final : public UIEvent { public: using WrapperType = Bindings::KeyboardEventWrapper; - static NonnullRefPtr<KeyboardEvent> create(FlyString event_name, String key, String code, unsigned long location, bool ctrl_key, bool shift_key, bool alt_key, bool meta_key, bool repeat, bool is_composing, unsigned long key_code, unsigned long char_code) + static NonnullRefPtr<KeyboardEvent> create(FlyString const& event_name, KeyboardEventInit const& event_init = {}) + { + return adopt_ref(*new KeyboardEvent(event_name, event_init)); + } + static NonnullRefPtr<KeyboardEvent> create_with_global_object(Bindings::WindowObject&, FlyString const& event_name, KeyboardEventInit const& event_init) { - return adopt_ref(*new KeyboardEvent(move(event_name), move(key), move(code), location, ctrl_key, shift_key, alt_key, meta_key, repeat, is_composing, key_code, char_code)); + return KeyboardEvent::create(event_name, event_init); } - static NonnullRefPtr<KeyboardEvent> create_from_platform_event(FlyString event_name, KeyCode, unsigned modifiers, u32 code_point); + static NonnullRefPtr<KeyboardEvent> create_from_platform_event(FlyString const& event_name, KeyCode, unsigned modifiers, u32 code_point); - virtual ~KeyboardEvent() override; + virtual ~KeyboardEvent() override = default; - unsigned long key_code() const { return m_key_code; } - unsigned long char_code() const { return m_char_code; } + u32 key_code() const { return m_key_code; } + u32 char_code() const { return m_char_code; } String key() const { return m_key; } String code() const { return m_code; } - unsigned long location() const { return m_location; } + u32 location() const { return m_location; } bool ctrl_key() const { return m_ctrl_key; } bool shift_key() const { return m_shift_key; } @@ -44,19 +59,31 @@ public: bool get_modifier_state(String const& key_arg); private: - KeyboardEvent(FlyString event_name, String key, String code, unsigned long location, bool ctrl_key, bool shift_key, bool alt_key, bool meta_key, bool repeat, bool is_composing, unsigned long key_code, unsigned long char_code); + KeyboardEvent(FlyString const& event_name, KeyboardEventInit const& event_init) + : UIEvent(event_name, event_init) + , m_key(event_init.key) + , m_code(event_init.code) + , m_location(event_init.location) + , m_ctrl_key(event_init.ctrl_key) + , m_shift_key(event_init.shift_key) + , m_alt_key(event_init.alt_key) + , m_meta_key(event_init.meta_key) + , m_repeat(event_init.repeat) + , m_is_composing(event_init.is_composing) + , m_key_code(event_init.key_code) + , m_char_code(event_init.char_code) {}; String m_key; String m_code; - unsigned long m_location { 0 }; + u32 m_location { 0 }; bool m_ctrl_key { false }; bool m_shift_key { false }; bool m_alt_key { false }; bool m_meta_key { false }; bool m_repeat { false }; bool m_is_composing { false }; - unsigned long m_key_code { 0 }; - unsigned long m_char_code { 0 }; + u32 m_key_code { 0 }; + u32 m_char_code { 0 }; }; } diff --git a/Userland/Libraries/LibWeb/UIEvents/KeyboardEvent.idl b/Userland/Libraries/LibWeb/UIEvents/KeyboardEvent.idl index 94feed15e1..e6685ca795 100644 --- a/Userland/Libraries/LibWeb/UIEvents/KeyboardEvent.idl +++ b/Userland/Libraries/LibWeb/UIEvents/KeyboardEvent.idl @@ -1,8 +1,9 @@ +#import <UIEvents/EventModifier.idl> + [Exposed=Window] interface KeyboardEvent : UIEvent { - // FIXME: Implement this. - // constructor(DOMString type, optional KeyboardEventInit eventInitDict = {}); + constructor(DOMString type, optional KeyboardEventInit eventInitDict = {}); // KeyLocationCode const unsigned long DOM_KEY_LOCATION_STANDARD = 0x00; @@ -28,3 +29,13 @@ interface KeyboardEvent : UIEvent { boolean getModifierState(DOMString keyArg); }; + +dictionary KeyboardEventInit : EventModifierInit { + DOMString key = ""; + DOMString code = ""; + unsigned long location = 0; + boolean repeat = false; + boolean isComposing = false; + unsigned long charCode = 0; + unsigned long keyCode = 0; +}; |