/* * Copyright (c) 2024, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include #include #include namespace Web { struct ChromeInputData { virtual ~ChromeInputData() = default; }; struct KeyEvent { enum class Type { KeyDown, KeyUp, }; KeyEvent clone_without_chrome_data() const; Type type; UIEvents::KeyCode key { UIEvents::KeyCode::Key_Invalid }; UIEvents::KeyModifier modifiers { UIEvents::KeyModifier::Mod_None }; u32 code_point { 0 }; bool repeat { false }; OwnPtr chrome_data; }; struct MouseEvent { enum class Type { MouseDown, MouseUp, MouseMove, MouseWheel, DoubleClick, }; MouseEvent clone_without_chrome_data() const; Type type; Web::DevicePixelPoint position; Web::DevicePixelPoint screen_position; UIEvents::MouseButton button { UIEvents::MouseButton::None }; UIEvents::MouseButton buttons { UIEvents::MouseButton::None }; UIEvents::KeyModifier modifiers { UIEvents::KeyModifier::Mod_None }; int wheel_delta_x { 0 }; int wheel_delta_y { 0 }; OwnPtr chrome_data; }; struct DragEvent { enum class Type { DragStart, DragMove, DragEnd, Drop, }; DragEvent clone_without_chrome_data() const; Type type; Web::DevicePixelPoint position; Web::DevicePixelPoint screen_position; UIEvents::MouseButton button { UIEvents::MouseButton::None }; UIEvents::MouseButton buttons { UIEvents::MouseButton::None }; UIEvents::KeyModifier modifiers { UIEvents::KeyModifier::Mod_None }; Vector files; OwnPtr chrome_data; }; using InputEvent = Variant; } namespace IPC { template<> ErrorOr encode(Encoder&, Web::KeyEvent const&); template<> ErrorOr decode(Decoder&); template<> ErrorOr encode(Encoder&, Web::MouseEvent const&); template<> ErrorOr decode(Decoder&); template<> ErrorOr encode(Encoder&, Web::DragEvent const&); template<> ErrorOr decode(Decoder&); }