mirror of
https://github.com/RGBCube/serenity
synced 2025-06-01 10:08:10 +00:00
WindowServer: Change window geometry label to use the Overlay class
This enables flicker-free rendering.
This commit is contained in:
parent
8b26debda1
commit
84cab29c59
7 changed files with 93 additions and 50 deletions
|
@ -256,6 +256,8 @@ void WindowManager::do_move_to_front(Window& window, bool make_active, bool make
|
|||
|
||||
void WindowManager::remove_window(Window& window)
|
||||
{
|
||||
|
||||
check_hide_geometry_overlay(window);
|
||||
m_window_stack.remove(window);
|
||||
auto* active = active_window();
|
||||
auto* active_input = active_input_window();
|
||||
|
@ -481,6 +483,12 @@ bool WindowManager::pick_new_active_window(Window* previous_active)
|
|||
return new_window_picked;
|
||||
}
|
||||
|
||||
void WindowManager::check_hide_geometry_overlay(Window& window)
|
||||
{
|
||||
if (&window == m_move_window.ptr() || &window == m_resize_window.ptr())
|
||||
m_geometry_overlay = nullptr;
|
||||
}
|
||||
|
||||
void WindowManager::start_window_move(Window& window, Gfx::IntPoint const& origin)
|
||||
{
|
||||
MenuManager::the().close_everyone();
|
||||
|
@ -492,6 +500,8 @@ void WindowManager::start_window_move(Window& window, Gfx::IntPoint const& origi
|
|||
m_move_window->set_default_positioned(false);
|
||||
m_move_origin = origin;
|
||||
m_move_window_origin = window.position();
|
||||
m_geometry_overlay = Compositor::the().create_overlay<WindowGeometryOverlay>(window);
|
||||
m_geometry_overlay->set_enabled(true);
|
||||
window.invalidate(true, true);
|
||||
}
|
||||
|
||||
|
@ -531,6 +541,8 @@ void WindowManager::start_window_resize(Window& window, Gfx::IntPoint const& pos
|
|||
m_resize_window = window;
|
||||
m_resize_origin = position;
|
||||
m_resize_window_original_rect = window.rect();
|
||||
m_geometry_overlay = Compositor::the().create_overlay<WindowGeometryOverlay>(window);
|
||||
m_geometry_overlay->set_enabled(true);
|
||||
|
||||
m_active_input_tracking_window = nullptr;
|
||||
|
||||
|
@ -563,6 +575,7 @@ bool WindowManager::process_ongoing_window_move(MouseEvent& event)
|
|||
}
|
||||
}
|
||||
m_move_window = nullptr;
|
||||
m_geometry_overlay = nullptr;
|
||||
return true;
|
||||
}
|
||||
if (event.type() == Event::MouseMove) {
|
||||
|
@ -623,6 +636,8 @@ bool WindowManager::process_ongoing_window_move(MouseEvent& event)
|
|||
m_move_window_origin = m_move_window->position();
|
||||
}
|
||||
}
|
||||
|
||||
m_geometry_overlay->window_rect_changed();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -640,6 +655,7 @@ bool WindowManager::process_ongoing_window_resize(MouseEvent const& event)
|
|||
dbgln_if(RESIZE_DEBUG, "Should Maximize vertically");
|
||||
m_resize_window->set_vertically_maximized();
|
||||
m_resize_window = nullptr;
|
||||
m_geometry_overlay = nullptr;
|
||||
m_resizing_mouse_button = MouseButton::None;
|
||||
return true;
|
||||
}
|
||||
|
@ -647,6 +663,7 @@ bool WindowManager::process_ongoing_window_resize(MouseEvent const& event)
|
|||
Core::EventLoop::current().post_event(*m_resize_window, make<ResizeEvent>(m_resize_window->rect()));
|
||||
m_resize_window->invalidate(true, true);
|
||||
m_resize_window = nullptr;
|
||||
m_geometry_overlay = nullptr;
|
||||
m_resizing_mouse_button = MouseButton::None;
|
||||
return true;
|
||||
}
|
||||
|
@ -748,6 +765,7 @@ bool WindowManager::process_ongoing_window_resize(MouseEvent const& event)
|
|||
dbgln_if(RESIZE_DEBUG, "[WM] Resizing, original: {}, now: {}", m_resize_window_original_rect, new_rect);
|
||||
|
||||
m_resize_window->set_rect(new_rect);
|
||||
m_geometry_overlay->window_rect_changed();
|
||||
Core::EventLoop::current().post_event(*m_resize_window, make<ResizeEvent>(new_rect));
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue