mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-26 01:20:25 +00:00
WindowServer: Allow different shadows for active/inactive windows
Also allow specifying different shadows for the task and menu bar.
This commit is contained in:
parent
8c694ed6eb
commit
cf1c159ed5
Notes:
sideshowbarker
2024-07-18 22:25:06 +09:00
Author: https://github.com/tomuta Commit: https://github.com/SerenityOS/serenity/commit/cf1c159ed54 Pull-request: https://github.com/SerenityOS/serenity/pull/5295
10 changed files with 41 additions and 12 deletions
Before Width: | Height: | Size: 6 KiB After Width: | Height: | Size: 6 KiB |
BIN
Base/res/icons/themes/Default/frame-shadow-light.png
Normal file
BIN
Base/res/icons/themes/Default/frame-shadow-light.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5 KiB |
|
@ -73,6 +73,9 @@ TitleButtonWidth=15
|
|||
TitleButtonHeight=15
|
||||
|
||||
[Paths]
|
||||
MenuShadow=/res/icons/themes/Default/window-shadow.png
|
||||
TooltipShadow=/res/icons/themes/Default/window-shadow.png
|
||||
WindowShadow=/res/icons/themes/Default/window-shadow.png
|
||||
ActiveWindowShadow=/res/icons/themes/Default/frame-shadow-dark.png
|
||||
InactiveWindowShadow=/res/icons/themes/Default/frame-shadow-light.png
|
||||
MenuBarShadow=/res/icons/themes/Default/frame-shadow-light.png
|
||||
MenuShadow=/res/icons/themes/Default/frame-shadow-light.png
|
||||
TaskBarShadow=/res/icons/themes/Default/frame-shadow-light.png
|
||||
TooltipShadow=/res/icons/themes/Default/frame-shadow-light.png
|
||||
|
|
|
@ -140,8 +140,11 @@ public:
|
|||
int window_title_button_height() const { return metric(MetricRole::TitleButtonHeight); }
|
||||
|
||||
String title_button_icons_path() const { return path(PathRole::TitleButtonIcons); }
|
||||
String window_shadow_path() const { return path(PathRole::WindowShadow); }
|
||||
String active_window_shadow_path() const { return path(PathRole::ActiveWindowShadow); }
|
||||
String inactive_window_shadow_path() const { return path(PathRole::InactiveWindowShadow); }
|
||||
String menu_bar_shadow_path() const { return path(PathRole::MenuBarShadow); }
|
||||
String menu_shadow_path() const { return path(PathRole::MenuShadow); }
|
||||
String task_bar_shadow_path() const { return path(PathRole::TaskBarShadow); }
|
||||
String tooltip_shadow_path() const { return path(PathRole::TooltipShadow); }
|
||||
|
||||
Color color(ColorRole role) const { return m_impl->color(role); }
|
||||
|
|
|
@ -119,9 +119,12 @@ Core::AnonymousBuffer load_system_theme(const String& path)
|
|||
} while (0)
|
||||
|
||||
DO_PATH(TitleButtonIcons, false);
|
||||
DO_PATH(ActiveWindowShadow, true);
|
||||
DO_PATH(InactiveWindowShadow, true);
|
||||
DO_PATH(TaskBarShadow, true);
|
||||
DO_PATH(MenuBarShadow, true);
|
||||
DO_PATH(MenuShadow, true);
|
||||
DO_PATH(TooltipShadow, true);
|
||||
DO_PATH(WindowShadow, true);
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
|
|
@ -144,7 +144,10 @@ enum class MetricRole {
|
|||
enum class PathRole {
|
||||
NoRole,
|
||||
TitleButtonIcons,
|
||||
WindowShadow,
|
||||
InactiveWindowShadow,
|
||||
ActiveWindowShadow,
|
||||
TaskBarShadow,
|
||||
MenuBarShadow,
|
||||
MenuShadow,
|
||||
TooltipShadow,
|
||||
__Count,
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue