mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 14:07:46 +00:00
WebContent: Coalesce multiple sequential MouseWheel events
Same as a58d84407f
but for MouseWheel :)
This commit is contained in:
parent
6631314874
commit
b549f2d1d9
1 changed files with 26 additions and 10 deletions
|
@ -210,6 +210,9 @@ void ConnectionFromClient::process_next_input_event()
|
||||||
event.button, event.buttons, event.modifiers));
|
event.button, event.buttons, event.modifiers));
|
||||||
break;
|
break;
|
||||||
case QueuedMouseEvent::Type::MouseWheel:
|
case QueuedMouseEvent::Type::MouseWheel:
|
||||||
|
for (size_t i = 0; i < event.coalesced_event_count; ++i) {
|
||||||
|
report_finished_handling_input_event(false);
|
||||||
|
}
|
||||||
report_finished_handling_input_event(page().handle_mousewheel(
|
report_finished_handling_input_event(page().handle_mousewheel(
|
||||||
event.position.to_type<Web::DevicePixels>(),
|
event.position.to_type<Web::DevicePixels>(),
|
||||||
event.button, event.buttons, event.modifiers, event.wheel_delta_x, event.wheel_delta_y));
|
event.button, event.buttons, event.modifiers, event.wheel_delta_x, event.wheel_delta_y));
|
||||||
|
@ -279,16 +282,29 @@ void ConnectionFromClient::mouse_up(Gfx::IntPoint position, unsigned int button,
|
||||||
|
|
||||||
void ConnectionFromClient::mouse_wheel(Gfx::IntPoint position, unsigned int button, unsigned int buttons, unsigned int modifiers, i32 wheel_delta_x, i32 wheel_delta_y)
|
void ConnectionFromClient::mouse_wheel(Gfx::IntPoint position, unsigned int button, unsigned int buttons, unsigned int modifiers, i32 wheel_delta_x, i32 wheel_delta_y)
|
||||||
{
|
{
|
||||||
enqueue_input_event(
|
auto event = QueuedMouseEvent {
|
||||||
QueuedMouseEvent {
|
.type = QueuedMouseEvent::Type::MouseWheel,
|
||||||
.type = QueuedMouseEvent::Type::MouseWheel,
|
.position = position,
|
||||||
.position = position,
|
.button = button,
|
||||||
.button = button,
|
.buttons = buttons,
|
||||||
.buttons = buttons,
|
.modifiers = modifiers,
|
||||||
.modifiers = modifiers,
|
.wheel_delta_x = wheel_delta_x,
|
||||||
.wheel_delta_x = wheel_delta_x,
|
.wheel_delta_y = wheel_delta_y,
|
||||||
.wheel_delta_y = wheel_delta_y,
|
};
|
||||||
});
|
|
||||||
|
// OPTIMIZATION: Coalesce with previous unprocessed event if the previous event is also a MouseWheel event.
|
||||||
|
if (!m_input_event_queue.is_empty()
|
||||||
|
&& m_input_event_queue.tail().has<QueuedMouseEvent>()
|
||||||
|
&& m_input_event_queue.tail().get<QueuedMouseEvent>().type == QueuedMouseEvent::Type::MouseWheel) {
|
||||||
|
auto const& last_event = m_input_event_queue.tail().get<QueuedMouseEvent>();
|
||||||
|
event.coalesced_event_count = last_event.coalesced_event_count + 1;
|
||||||
|
event.wheel_delta_x += last_event.wheel_delta_x;
|
||||||
|
event.wheel_delta_y += last_event.wheel_delta_y;
|
||||||
|
m_input_event_queue.tail() = event;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
enqueue_input_event(move(event));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConnectionFromClient::doubleclick(Gfx::IntPoint position, unsigned int button, unsigned int buttons, unsigned int modifiers)
|
void ConnectionFromClient::doubleclick(Gfx::IntPoint position, unsigned int button, unsigned int buttons, unsigned int modifiers)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue