diff options
author | Tom <tomut@yahoo.com> | 2021-02-11 15:12:19 -0700 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-02-11 23:36:11 +0100 |
commit | cf1c159ed541222aeeb03d249f1e64ef0650b2df (patch) | |
tree | 816393140c8a3c01fb046c9a7cef73de289d67b2 /Userland/Services | |
parent | 8c694ed6ebd8ea7f036dcaa6306cf49225c377e8 (diff) | |
download | serenity-cf1c159ed541222aeeb03d249f1e64ef0650b2df.zip |
WindowServer: Allow different shadows for active/inactive windows
Also allow specifying different shadows for the task and menu bar.
Diffstat (limited to 'Userland/Services')
-rw-r--r-- | Userland/Services/WindowServer/Window.cpp | 2 | ||||
-rw-r--r-- | Userland/Services/WindowServer/WindowFrame.cpp | 21 | ||||
-rw-r--r-- | Userland/Services/WindowServer/WindowFrame.h | 3 | ||||
-rw-r--r-- | Userland/Services/WindowServer/WindowManager.cpp | 3 |
4 files changed, 23 insertions, 6 deletions
diff --git a/Userland/Services/WindowServer/Window.cpp b/Userland/Services/WindowServer/Window.cpp index 385a9851da..0a28629e16 100644 --- a/Userland/Services/WindowServer/Window.cpp +++ b/Userland/Services/WindowServer/Window.cpp @@ -474,7 +474,7 @@ void Window::invalidate(bool invalidate_frame, bool re_render_frame) m_invalidated_frame = true; } if (re_render_frame) - frame().set_dirty(); + frame().set_dirty(true); m_dirty_rects.clear(); Compositor::the().invalidate_window(); } diff --git a/Userland/Services/WindowServer/WindowFrame.cpp b/Userland/Services/WindowServer/WindowFrame.cpp index ac8644de01..9c17e967d9 100644 --- a/Userland/Services/WindowServer/WindowFrame.cpp +++ b/Userland/Services/WindowServer/WindowFrame.cpp @@ -60,11 +60,17 @@ static Gfx::Bitmap* s_close_icon; static String s_last_title_button_icons_path; static int s_last_title_button_icons_scale; -static Gfx::Bitmap* s_window_shadow; +static Gfx::Bitmap* s_active_window_shadow; +static Gfx::Bitmap* s_inactive_window_shadow; +static Gfx::Bitmap* s_menu_bar_shadow; static Gfx::Bitmap* s_menu_shadow; +static Gfx::Bitmap* s_task_bar_shadow; static Gfx::Bitmap* s_tooltip_shadow; -static String s_last_window_shadow_path; +static String s_last_active_window_shadow_path; +static String s_last_inactive_window_shadow_path; +static String s_last_menu_bar_shadow_path; static String s_last_menu_shadow_path; +static String s_last_task_bar_shadow_path; static String s_last_tooltip_shadow_path; static Gfx::IntRect frame_rect_for_window(Window& window, const Gfx::IntRect& rect) @@ -185,8 +191,11 @@ void WindowFrame::reload_config() last_path = String::empty(); } }; - load_shadow(WindowManager::the().palette().window_shadow_path(), s_last_window_shadow_path, s_window_shadow); + load_shadow(WindowManager::the().palette().active_window_shadow_path(), s_last_active_window_shadow_path, s_active_window_shadow); + load_shadow(WindowManager::the().palette().inactive_window_shadow_path(), s_last_inactive_window_shadow_path, s_inactive_window_shadow); + load_shadow(WindowManager::the().palette().menu_bar_shadow_path(), s_last_menu_bar_shadow_path, s_menu_bar_shadow); load_shadow(WindowManager::the().palette().menu_shadow_path(), s_last_menu_shadow_path, s_menu_shadow); + load_shadow(WindowManager::the().palette().task_bar_shadow_path(), s_last_task_bar_shadow_path, s_task_bar_shadow); load_shadow(WindowManager::the().palette().tooltip_shadow_path(), s_last_tooltip_shadow_path, s_tooltip_shadow); } @@ -201,8 +210,12 @@ Gfx::Bitmap* WindowFrame::window_shadow() const return s_menu_shadow; case WindowType::Tooltip: return s_tooltip_shadow; + case WindowType::Menubar: + return s_menu_bar_shadow; + case WindowType::Taskbar: + return s_task_bar_shadow; default: - return s_window_shadow; + return m_window.is_active() ? s_active_window_shadow : s_inactive_window_shadow; } } diff --git a/Userland/Services/WindowServer/WindowFrame.h b/Userland/Services/WindowServer/WindowFrame.h index fa838c8a5b..992ce11921 100644 --- a/Userland/Services/WindowServer/WindowFrame.h +++ b/Userland/Services/WindowServer/WindowFrame.h @@ -82,9 +82,10 @@ public: return true; } - void set_dirty() + void set_dirty(bool re_render_shadow = false) { m_dirty = true; + m_shadow_dirty |= re_render_shadow; } void theme_changed() diff --git a/Userland/Services/WindowServer/WindowManager.cpp b/Userland/Services/WindowServer/WindowManager.cpp index a9b4c404ca..e2dc90e86a 100644 --- a/Userland/Services/WindowServer/WindowManager.cpp +++ b/Userland/Services/WindowServer/WindowManager.cpp @@ -1287,6 +1287,9 @@ void WindowManager::set_active_window(Window* window, bool make_input) } else { MenuManager::the().set_current_menubar(nullptr); } + + // Window shapes may have changed (e.g. shadows for inactive/active windows) + Compositor::the().invalidate_occlusions(); } void WindowManager::set_hovered_window(Window* window) |