From 3ed89cd80b033c3239fb9f57069fcf6804a34773 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Mon, 2 Dec 2024 22:02:36 +0100 Subject: Move first mouse move event to after frame has been drawn --- include/Overlay.hpp | 1 + src/Overlay.cpp | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/include/Overlay.hpp b/include/Overlay.hpp index bfa8db4..0a4a1e9 100644 --- a/include/Overlay.hpp +++ b/include/Overlay.hpp @@ -160,5 +160,6 @@ namespace gsr { XEvent *xi_output_xev = nullptr; std::array key_bindings; + bool drawn_first_frame = false; }; } \ No newline at end of file diff --git a/src/Overlay.cpp b/src/Overlay.cpp index 92eb19a..86d87a0 100644 --- a/src/Overlay.cpp +++ b/src/Overlay.cpp @@ -635,6 +635,15 @@ namespace gsr { window->display(); + if(!drawn_first_frame) { + drawn_first_frame = true; + mgl::Event event; + event.type = mgl::Event::MouseMoved; + event.mouse_move.x = window->get_mouse_position().x; + event.mouse_move.y = window->get_mouse_position().y; + on_event(event); + } + return true; } @@ -717,6 +726,7 @@ namespace gsr { if(visible) return; + drawn_first_frame = false; window.reset(); window = std::make_unique(); deinit_theme(); @@ -936,12 +946,6 @@ namespace gsr { visible = true; - mgl::Event event; - event.type = mgl::Event::MouseMoved; - event.mouse_move.x = window->get_mouse_position().x; - event.mouse_move.y = window->get_mouse_position().y; - on_event(event); - if(gpu_screen_recorder_process > 0) { switch(recording_status) { case RecordingStatus::NONE: @@ -997,6 +1001,8 @@ namespace gsr { screenshot_sprite.set_texture(nullptr); visible = false; + drawn_first_frame = false; + if(window) { const mgl::vec2i new_cursor_position = mgl::vec2i(window->internal_window()->pos.x, window->internal_window()->pos.y) + window->get_mouse_position(); window->set_visible(false); -- cgit v1.2.3