/src/serenity/Userland/Libraries/LibWeb/UIEvents/WheelEvent.h
Line | Count | Source |
1 | | /* |
2 | | * Copyright (c) 2022, Aliaksandr Kalenik <kalenik.aliaksandr@gmail.com> |
3 | | * |
4 | | * SPDX-License-Identifier: BSD-2-Clause |
5 | | */ |
6 | | |
7 | | #pragma once |
8 | | |
9 | | #include <LibWeb/UIEvents/MouseEvent.h> |
10 | | #include <LibWeb/UIEvents/UIEvent.h> |
11 | | #include <LibWeb/WebIDL/Types.h> |
12 | | |
13 | | namespace Web::UIEvents { |
14 | | |
15 | | enum WheelDeltaMode : WebIDL::UnsignedLong { |
16 | | DOM_DELTA_PIXEL = 0, |
17 | | DOM_DELTA_LINE = 1, |
18 | | DOM_DELTA_PAGE = 2, |
19 | | }; |
20 | | |
21 | | struct WheelEventInit : public MouseEventInit { |
22 | | double delta_x = 0; |
23 | | double delta_y = 0; |
24 | | double delta_z = 0; |
25 | | |
26 | | WebIDL::UnsignedLong delta_mode = WheelDeltaMode::DOM_DELTA_PIXEL; |
27 | | }; |
28 | | |
29 | | class WheelEvent final : public MouseEvent { |
30 | | WEB_PLATFORM_OBJECT(WheelEvent, MouseEvent); |
31 | | JS_DECLARE_ALLOCATOR(WheelEvent); |
32 | | |
33 | | public: |
34 | | [[nodiscard]] static JS::NonnullGCPtr<WheelEvent> create(JS::Realm&, FlyString const& event_name, WheelEventInit const& = {}, double page_x = 0, double page_y = 0, double offset_x = 0, double offset_y = 0); |
35 | | [[nodiscard]] static JS::NonnullGCPtr<WheelEvent> construct_impl(JS::Realm&, FlyString const& event_name, WheelEventInit const& = {}); |
36 | | |
37 | | static WebIDL::ExceptionOr<JS::NonnullGCPtr<WheelEvent>> create_from_platform_event(JS::Realm&, FlyString const& event_name, CSSPixelPoint screen, CSSPixelPoint page, CSSPixelPoint client, CSSPixelPoint offset, double delta_x, double delta_y, unsigned button, unsigned buttons, unsigned modifiers); |
38 | | |
39 | | virtual ~WheelEvent() override; |
40 | | |
41 | 0 | double delta_x() const { return m_delta_x; } |
42 | 0 | double delta_y() const { return m_delta_y; } |
43 | 0 | double delta_z() const { return m_delta_z; } |
44 | 0 | WebIDL::UnsignedLong delta_mode() const { return m_delta_mode; } |
45 | | |
46 | | private: |
47 | | WheelEvent(JS::Realm&, FlyString const& event_name, WheelEventInit const& event_init, double page_x, double page_y, double offset_x, double offset_y); |
48 | | |
49 | | virtual void initialize(JS::Realm&) override; |
50 | | |
51 | | double m_delta_x { 0 }; |
52 | | double m_delta_y { 0 }; |
53 | | double m_delta_z { 0 }; |
54 | | WebIDL::UnsignedLong m_delta_mode { WheelDeltaMode::DOM_DELTA_PIXEL }; |
55 | | }; |
56 | | |
57 | | } |