76 utc_nanoseconds time_point,
77 hi::keyboard_modifiers keyboard_modifiers,
78 hi::keyboard_state keyboard_state) noexcept :
79 _type(gui_event_type::none), time_point(time_point), keyboard_modifiers(keyboard_modifiers), keyboard_state(keyboard_state)
85 gui_event(gui_event_type::none, utc_nanoseconds{}, keyboard_modifiers::none, keyboard_state::idle)
89 gui_event(gui_event_type type) noexcept :
90 gui_event(type, std::chrono::utc_clock::now(), keyboard_modifiers::none, keyboard_state::idle)
94 gui_event(gui_event_type type, hi::grapheme grapheme) noexcept :
95 gui_event(type, std::chrono::utc_clock::now(), keyboard_modifiers::none, keyboard_state::idle)
97 hi_axiom(variant() == gui_event_variant::grapheme);
98 this->grapheme() = grapheme;
103 keyboard_virtual_key key,
104 hi::keyboard_modifiers keyboard_modifiers = keyboard_modifiers::none,
105 hi::keyboard_state keyboard_state = keyboard_state::idle) noexcept :
106 gui_event(type, std::chrono::utc_clock::now(), keyboard_modifiers, keyboard_state)
108 hi_axiom(variant() == gui_event_variant::keyboard);
112 constexpr gui_event(gui_event
const&)
noexcept =
default;
113 constexpr gui_event(gui_event&&) noexcept = default;
114 constexpr gui_event& operator=(gui_event const&) noexcept = default;
115 constexpr gui_event& operator=(gui_event&&) noexcept = default;
117 [[nodiscard]] static gui_event make_mouse_enter(point2 position) noexcept
119 auto r = gui_event{gui_event_type::mouse_enter};
120 r.mouse().position = position;
124 [[nodiscard]]
constexpr gui_event_type type() const noexcept
134 [[nodiscard]]
constexpr void set_type(gui_event_type type)
noexcept
136 hilet previous_variant = variant();
139 if (previous_variant != variant()) {
141 case gui_event_variant::mouse:
144 case gui_event_variant::grapheme:
145 _grapheme = hi::grapheme{};
147 case gui_event_variant::keyboard:
157 hi_axiom(variant() == gui_event_variant::mouse);
161 [[nodiscard]] mouse_event_data
const& mouse() const noexcept
163 hi_axiom(variant() == gui_event_variant::mouse);
167 [[nodiscard]] keyboard_virtual_key& key() noexcept
169 hi_axiom(variant() == gui_event_variant::keyboard);
173 [[nodiscard]] keyboard_virtual_key
const& key() const noexcept
175 hi_axiom(variant() == gui_event_variant::keyboard);
179 [[nodiscard]] hi::grapheme& grapheme() noexcept
181 hi_axiom(variant() == gui_event_variant::grapheme);
185 [[nodiscard]] hi::grapheme
const& grapheme() const noexcept
187 hi_axiom(variant() == gui_event_variant::grapheme);
191 [[nodiscard]]
constexpr bool operator==(gui_event_type event_type)
const noexcept
193 return type() == event_type;
196 [[nodiscard]]
constexpr bool operator==(gui_event_variant event_variant)
const noexcept
198 return variant() == event_variant;
201 [[nodiscard]]
constexpr bool empty() const noexcept
203 return type() == gui_event_type::none;
206 constexpr operator bool() const noexcept
211 [[nodiscard]]
constexpr gui_event_variant variant() const noexcept
213 return to_gui_event_variant(type());
220 using enum gui_event_type;
221 return type() == mouse_up and mouse().cause.left_button and active_area.contains(mouse().position);
228 using enum gui_event_type;
229 return type() == mouse_drag ? mouse().position - mouse().down_position :
vector2{};
235 if (rhs == gui_event_variant::mouse) {
236 r.mouse().position =
point2{transform * rhs.mouse().position};
237 r.mouse().down_position = point2{transform * rhs.mouse().down_position};
238 r.mouse().wheel_delta = vector2{
transform * rhs.mouse().wheel_delta};
244 gui_event_type _type;
247 mouse_event_data _mouse;
248 keyboard_virtual_key _key;
249 hi::grapheme _grapheme;