From 71e9d06bb200b142118926d6a5d53354c35eccd0 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 28 Dec 2020 01:35:53 +0100 Subject: [PATCH] WindowServer: Spruce up the move/resize geometry label a little bit Draw it in a threed style with a little shadow under it. --- Services/WindowServer/Compositor.cpp | 25 ++++++++++++++----------- Services/WindowServer/Compositor.h | 2 +- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/Services/WindowServer/Compositor.cpp b/Services/WindowServer/Compositor.cpp index b4450f1f484081..698d12bece04de 100644 --- a/Services/WindowServer/Compositor.cpp +++ b/Services/WindowServer/Compositor.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #include //#define COMPOSE_DEBUG @@ -135,7 +136,7 @@ void Compositor::compose() } auto dirty_screen_rects = move(m_dirty_screen_rects); - dirty_screen_rects.add(m_last_geometry_label_rect.intersected(ws.rect())); + dirty_screen_rects.add(m_last_geometry_label_damage_rect.intersected(ws.rect())); dirty_screen_rects.add(m_last_dnd_rect.intersected(ws.rect())); if (m_invalidated_cursor) { if (wm.dnd_client()) @@ -452,9 +453,9 @@ void Compositor::compose() for (auto& rect : flush_transparent_rects.rects()) back_painter.blit(rect.location(), *m_temp_bitmap, rect); - Gfx::IntRect geometry_label_rect; - if (draw_geometry_label(geometry_label_rect)) - flush_special_rects.add(geometry_label_rect); + Gfx::IntRect geometry_label_damage_rect; + if (draw_geometry_label(geometry_label_damage_rect)) + flush_special_rects.add(geometry_label_damage_rect); } m_invalidated_any = false; @@ -728,12 +729,12 @@ void Compositor::invalidate_cursor(bool compose_immediately) start_compose_async_timer(); } -bool Compositor::draw_geometry_label(Gfx::IntRect& geometry_label_rect) +bool Compositor::draw_geometry_label(Gfx::IntRect& geometry_label_damage_rect) { 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_rect = {}; + m_last_geometry_label_damage_rect = {}; return false; } auto geometry_string = window_being_moved_or_resized->rect().to_string(); @@ -742,13 +743,15 @@ bool Compositor::draw_geometry_label(Gfx::IntRect& geometry_label_rect) 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::format("%s (%dx%d)", geometry_string.characters(), width_steps, height_steps); } - geometry_label_rect = Gfx::IntRect { 0, 0, wm.font().width(geometry_string) + 16, wm.font().glyph_height() + 10 }; + 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& back_painter = *m_back_painter; - back_painter.fill_rect(geometry_label_rect, wm.palette().window()); - back_painter.draw_rect(geometry_label_rect, wm.palette().threed_shadow2()); - back_painter.draw_text(geometry_label_rect, geometry_string, Gfx::TextAlignment::Center, wm.palette().window_text()); - m_last_geometry_label_rect = geometry_label_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()); + + geometry_label_damage_rect = geometry_label_rect.inflated(2, 2); + m_last_geometry_label_damage_rect = geometry_label_damage_rect; return true; } diff --git a/Services/WindowServer/Compositor.h b/Services/WindowServer/Compositor.h index 18bbe8fe0d5d8a..d33f5258c737af 100644 --- a/Services/WindowServer/Compositor.h +++ b/Services/WindowServer/Compositor.h @@ -113,7 +113,7 @@ class Compositor final : public Core::Object { OwnPtr m_cursor_back_painter; Gfx::IntRect m_last_cursor_rect; Gfx::IntRect m_last_dnd_rect; - Gfx::IntRect m_last_geometry_label_rect; + Gfx::IntRect m_last_geometry_label_damage_rect; String m_wallpaper_path { "" }; WallpaperMode m_wallpaper_mode { WallpaperMode::Unchecked };