mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 01:17:35 +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
|
@ -157,13 +157,8 @@ void Compositor::compose()
|
|||
|
||||
auto dirty_screen_rects = move(m_dirty_screen_rects);
|
||||
auto* dnd_client = wm.dnd_client();
|
||||
if (!m_last_geometry_label_damage_rect.is_empty() || !m_last_dnd_rect.is_empty() || (m_invalidated_cursor && dnd_client)) {
|
||||
if (!m_last_dnd_rect.is_empty() || (m_invalidated_cursor && dnd_client)) {
|
||||
Screen::for_each([&](auto& screen) {
|
||||
if (!m_last_geometry_label_damage_rect.is_empty()) {
|
||||
auto rect = m_last_geometry_label_damage_rect.intersected(screen.rect());
|
||||
if (!rect.is_empty())
|
||||
dirty_screen_rects.add(rect);
|
||||
}
|
||||
if (!m_last_dnd_rect.is_empty()) {
|
||||
auto rect = m_last_dnd_rect.intersected(screen.rect());
|
||||
if (!rect.is_empty())
|
||||
|
@ -542,8 +537,6 @@ void Compositor::compose()
|
|||
screen_data.m_back_painter->blit(rect.location(), *screen_data.m_temp_bitmap, rect.translated(-screen_rect.location()));
|
||||
return IterationDecision::Continue;
|
||||
});
|
||||
|
||||
draw_geometry_label(cursor_screen);
|
||||
}
|
||||
|
||||
m_invalidated_any = false;
|
||||
|
@ -869,46 +862,6 @@ void Compositor::invalidate_cursor(bool compose_immediately)
|
|||
start_compose_async_timer();
|
||||
}
|
||||
|
||||
void Compositor::draw_geometry_label(Screen& screen)
|
||||
{
|
||||
auto& wm = WindowManager::the();
|
||||
auto* window_being_moved_or_resized = wm.m_move_window ? wm.m_move_window.ptr() : (wm.m_resize_window ? wm.m_resize_window.ptr() : nullptr);
|
||||
if (!window_being_moved_or_resized) {
|
||||
m_last_geometry_label_damage_rect = {};
|
||||
return;
|
||||
}
|
||||
auto geometry_string = window_being_moved_or_resized->rect().to_string();
|
||||
if (!window_being_moved_or_resized->size_increment().is_null()) {
|
||||
int width_steps = (window_being_moved_or_resized->width() - window_being_moved_or_resized->base_size().width()) / window_being_moved_or_resized->size_increment().width();
|
||||
int height_steps = (window_being_moved_or_resized->height() - window_being_moved_or_resized->base_size().height()) / window_being_moved_or_resized->size_increment().height();
|
||||
geometry_string = String::formatted("{} ({}x{})", geometry_string, width_steps, height_steps);
|
||||
}
|
||||
|
||||
auto geometry_label_rect = Gfx::IntRect { 0, 0, wm.font().width(geometry_string) + 16, wm.font().glyph_height() + 10 };
|
||||
geometry_label_rect.center_within(window_being_moved_or_resized->rect());
|
||||
auto desktop_rect = wm.desktop_rect(screen);
|
||||
if (geometry_label_rect.left() < desktop_rect.left())
|
||||
geometry_label_rect.set_left(desktop_rect.left());
|
||||
if (geometry_label_rect.top() < desktop_rect.top())
|
||||
geometry_label_rect.set_top(desktop_rect.top());
|
||||
if (geometry_label_rect.right() > desktop_rect.right())
|
||||
geometry_label_rect.set_right_without_resize(desktop_rect.right());
|
||||
if (geometry_label_rect.bottom() > desktop_rect.bottom())
|
||||
geometry_label_rect.set_bottom_without_resize(desktop_rect.bottom());
|
||||
|
||||
auto& screen_data = m_screen_data[screen.index()];
|
||||
auto& back_painter = *screen_data.m_back_painter;
|
||||
auto geometry_label_damage_rect = geometry_label_rect.inflated(2, 2);
|
||||
Gfx::PainterStateSaver saver(back_painter);
|
||||
back_painter.add_clip_rect(geometry_label_damage_rect);
|
||||
|
||||
back_painter.fill_rect(geometry_label_rect.translated(1, 1), Color(Color::Black).with_alpha(80));
|
||||
Gfx::StylePainter::paint_button(back_painter, geometry_label_rect.translated(-1, -1), wm.palette(), Gfx::ButtonStyle::Normal, false);
|
||||
back_painter.draw_text(geometry_label_rect.translated(-1, -1), geometry_string, Gfx::TextAlignment::Center, wm.palette().window_text());
|
||||
|
||||
m_last_geometry_label_damage_rect = geometry_label_damage_rect;
|
||||
}
|
||||
|
||||
void Compositor::change_cursor(const Cursor* cursor)
|
||||
{
|
||||
if (m_current_cursor == cursor)
|
||||
|
@ -1103,6 +1056,7 @@ void Compositor::overlay_rects_changed()
|
|||
{
|
||||
if (m_overlay_rects_changed)
|
||||
return;
|
||||
|
||||
m_overlay_rects_changed = true;
|
||||
m_invalidated_any = true;
|
||||
invalidate_occlusions();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue