瀏覽代碼

Themes: Fix default theme window stripes and shadow after #2811

Change #2811 made window title stripes and window title shadow themable,
but it used the same stripe and shadow color for all window modes.
This is fine for the new 'basalt' theme which uses the same color
in all four window modes, but it changed the default theme so that
background windows had brown stripes and a brown shadow.

Instead, make the title stripe and title shadow themable per window mode,
and change the default theme to restore the colors it had before
change #2811: The title stripe color is the same as Border1 for all
window modes, and the title shadow is the same as the title stripe
darkened by 0.6.
Nico Weber 5 年之前
父節點
當前提交
6dd10ad8dc

+ 8 - 2
Base/res/themes/Basalt.ini

@@ -3,17 +3,23 @@ DesktopBackground=#171717
 ActiveWindowBorder1=black
 ActiveWindowBorder2=#1f1f1f
 ActiveWindowTitle=white
+ActiveWindowTitleShadow=#00000000
+ActiveWindowTitleStripes=#00000000
 InactiveWindowBorder1=#171717
 InactiveWindowBorder2=#1f1f1f
 InactiveWindowTitle=#aaaaaa
+InactiveWindowTitleShadow=#00000000
+InactiveWindowTitleStripes=#00000000
 MovingWindowBorder1=black
 MovingWindowBorder2=#2f1f1f
 MovingWindowTitle=white
+MovingWindowTitleShadow=#00000000
+MovingWindowTitleStripes=#00000000
 HighlightWindowBorder1=black
 HighlightWindowBorder2=#3f2f0f
 HighlightWindowTitle=white
-WindowTitleShadow=#00000000
-WindowTitleStripes=#00000000
+HighlightWindowTitleShadow=#00000000
+HighlightWindowTitleStripes=#00000000
 MenuBase=#1f1f1f
 MenuBaseText=white
 MenuStripe=#171717

+ 8 - 2
Base/res/themes/Default.ini

@@ -3,17 +3,23 @@ DesktopBackground=#505050
 ActiveWindowBorder1=#6e2209
 ActiveWindowBorder2=#f4ca9e
 ActiveWindowTitle=white
+ActiveWindowTitleShadow=#421405
+ActiveWindowTitleStripes=#6e2209
 InactiveWindowBorder1=#808080
 InactiveWindowBorder2=#c0c0c0
 InactiveWindowTitle=#d5d0c7
+InactiveWindowTitleShadow=#4c4c4c
+InactiveWindowTitleStripes=#808080
 MovingWindowBorder1=#a1320d
 MovingWindowBorder2=#fadcbb
 MovingWindowTitle=white
+MovingWindowTitleShadow=#601e07
+MovingWindowTitleStripes=#a1320d
 HighlightWindowBorder1=#a10d0d
 HighlightWindowBorder2=#fabbbb
 HighlightWindowTitle=white
-WindowTitleShadow=#421405
-WindowTitleStripes=#6e2209
+HighlightWindowTitleShadow=#600707
+HighlightWindowTitleStripes=#a10d0d
 MenuBase=white
 MenuBaseText=black
 MenuStripe=#bbb7b0

+ 8 - 2
Libraries/LibGfx/Palette.h

@@ -72,17 +72,23 @@ public:
     Color active_window_border1() const { return color(ColorRole::ActiveWindowBorder1); }
     Color active_window_border2() const { return color(ColorRole::ActiveWindowBorder2); }
     Color active_window_title() const { return color(ColorRole::ActiveWindowTitle); }
+    Color active_window_title_stripes() const { return color(ColorRole::ActiveWindowTitleStripes); }
+    Color active_window_title_shadow() const { return color(ColorRole::ActiveWindowTitleShadow); }
     Color inactive_window_border1() const { return color(ColorRole::InactiveWindowBorder1); }
     Color inactive_window_border2() const { return color(ColorRole::InactiveWindowBorder2); }
     Color inactive_window_title() const { return color(ColorRole::InactiveWindowTitle); }
+    Color inactive_window_title_stripes() const { return color(ColorRole::InactiveWindowTitleStripes); }
+    Color inactive_window_title_shadow() const { return color(ColorRole::InactiveWindowTitleShadow); }
     Color moving_window_border1() const { return color(ColorRole::MovingWindowBorder1); }
     Color moving_window_border2() const { return color(ColorRole::MovingWindowBorder2); }
     Color moving_window_title() const { return color(ColorRole::MovingWindowTitle); }
+    Color moving_window_title_stripes() const { return color(ColorRole::MovingWindowTitleStripes); }
+    Color moving_window_title_shadow() const { return color(ColorRole::MovingWindowTitleShadow); }
     Color highlight_window_border1() const { return color(ColorRole::HighlightWindowBorder1); }
     Color highlight_window_border2() const { return color(ColorRole::HighlightWindowBorder2); }
     Color highlight_window_title() const { return color(ColorRole::HighlightWindowTitle); }
-    Color window_title_stripes() const { return color(ColorRole::WindowTitleStripes); }
-    Color window_title_shadow() const { return color(ColorRole::WindowTitleShadow); }
+    Color highlight_window_title_stripes() const { return color(ColorRole::HighlightWindowTitleStripes); }
+    Color highlight_window_title_shadow() const { return color(ColorRole::HighlightWindowTitleShadow); }
     Color menu_stripe() const { return color(ColorRole::MenuStripe); }
     Color menu_base() const { return color(ColorRole::MenuBase); }
     Color menu_base_text() const { return color(ColorRole::MenuBaseText); }

+ 8 - 2
Libraries/LibGfx/SystemTheme.cpp

@@ -120,17 +120,23 @@ RefPtr<SharedBuffer> load_system_theme(const String& path)
     DO_COLOR(ActiveWindowBorder1);
     DO_COLOR(ActiveWindowBorder2);
     DO_COLOR(ActiveWindowTitle);
+    DO_COLOR(ActiveWindowTitleShadow);
+    DO_COLOR(ActiveWindowTitleStripes);
     DO_COLOR(InactiveWindowBorder1);
     DO_COLOR(InactiveWindowBorder2);
     DO_COLOR(InactiveWindowTitle);
+    DO_COLOR(InactiveWindowTitleShadow);
+    DO_COLOR(InactiveWindowTitleStripes);
     DO_COLOR(MovingWindowBorder1);
     DO_COLOR(MovingWindowBorder2);
     DO_COLOR(MovingWindowTitle);
+    DO_COLOR(MovingWindowTitleShadow);
+    DO_COLOR(MovingWindowTitleStripes);
     DO_COLOR(HighlightWindowBorder1);
     DO_COLOR(HighlightWindowBorder2);
     DO_COLOR(HighlightWindowTitle);
-    DO_COLOR(WindowTitleShadow);
-    DO_COLOR(WindowTitleStripes);
+    DO_COLOR(HighlightWindowTitleShadow);
+    DO_COLOR(HighlightWindowTitleStripes);
     DO_COLOR(MenuStripe);
     DO_COLOR(MenuBase);
     DO_COLOR(MenuBaseText);

+ 8 - 2
Libraries/LibGfx/SystemTheme.h

@@ -39,17 +39,23 @@ enum class ColorRole {
     ActiveWindowBorder1,
     ActiveWindowBorder2,
     ActiveWindowTitle,
+    ActiveWindowTitleShadow,
+    ActiveWindowTitleStripes,
     InactiveWindowBorder1,
     InactiveWindowBorder2,
     InactiveWindowTitle,
+    InactiveWindowTitleShadow,
+    InactiveWindowTitleStripes,
     MovingWindowBorder1,
     MovingWindowBorder2,
     MovingWindowTitle,
+    MovingWindowTitleShadow,
+    MovingWindowTitleStripes,
     HighlightWindowBorder1,
     HighlightWindowBorder2,
     HighlightWindowTitle,
-    WindowTitleShadow,
-    WindowTitleStripes,
+    HighlightWindowTitleStripes,
+    HighlightWindowTitleShadow,
     MenuStripe,
     MenuBase,
     MenuBaseText,

+ 8 - 8
Services/WindowServer/WindowFrame.cpp

@@ -170,12 +170,12 @@ WindowFrame::FrameColors WindowFrame::compute_frame_colors() const
     auto& wm = WindowManager::the();
     auto palette = wm.palette();
     if (&m_window == wm.m_highlight_window)
-        return { palette.highlight_window_title(), palette.highlight_window_border1(), palette.highlight_window_border2() };
+        return { palette.highlight_window_title(), palette.highlight_window_border1(), palette.highlight_window_border2(), palette.highlight_window_title_stripes(), palette.highlight_window_title_shadow() };
     if (&m_window == wm.m_move_window)
-        return { palette.moving_window_title(), palette.moving_window_border1(), palette.moving_window_border2() };
+        return { palette.moving_window_title(), palette.moving_window_border1(), palette.moving_window_border2(), palette.moving_window_title_stripes(), palette.moving_window_title_shadow() };
     if (wm.is_active_window_or_accessory(m_window))
-        return { palette.active_window_title(), palette.active_window_border1(), palette.active_window_border2() };
-    return { palette.inactive_window_title(), palette.inactive_window_border1(), palette.inactive_window_border2() };
+        return { palette.active_window_title(), palette.active_window_border1(), palette.active_window_border2(), palette.active_window_title_stripes(), palette.active_window_title_shadow() };
+    return { palette.inactive_window_title(), palette.inactive_window_border1(), palette.inactive_window_border2(), palette.inactive_window_title_stripes(), palette.inactive_window_title_shadow() };
 }
 
 void WindowFrame::paint_notification_frame(Gfx::Painter& painter)
@@ -192,7 +192,7 @@ void WindowFrame::paint_notification_frame(Gfx::Painter& painter)
     int stripe_bottom = m_window.height() - 3;
     if (stripe_top && stripe_bottom && stripe_top < stripe_bottom) {
         for (int i = 2; i <= palette.window_title_height() - 2; i += 2) {
-            painter.draw_line({ titlebar_rect.x() + i, stripe_top }, { titlebar_rect.x() + i, stripe_bottom }, palette.window_title_stripes());
+            painter.draw_line({ titlebar_rect.x() + i, stripe_top }, { titlebar_rect.x() + i, stripe_bottom }, palette.active_window_title_stripes());
         }
     }
 }
@@ -220,7 +220,7 @@ void WindowFrame::paint_normal_frame(Gfx::Painter& painter)
     auto titlebar_title_rect = titlebar_inner_rect;
     titlebar_title_rect.set_width(WindowManager::the().window_title_font().width(title_text));
 
-    auto [title_color, border_color, border_color2] = compute_frame_colors();
+    auto [title_color, border_color, border_color2, stripes_color, shadow_color] = compute_frame_colors();
 
     auto& wm = WindowManager::the();
     painter.draw_line(titlebar_rect.bottom_left().translated(0, 1), titlebar_rect.bottom_right().translated(0, 1), palette.button());
@@ -234,14 +234,14 @@ void WindowFrame::paint_normal_frame(Gfx::Painter& painter)
     int stripe_right = leftmost_button_rect.left() - 3;
     if (stripe_left && stripe_right && stripe_left < stripe_right) {
         for (int i = 2; i <= titlebar_inner_rect.height() - 2; i += 2) {
-            painter.draw_line({ stripe_left, titlebar_inner_rect.y() + i }, { stripe_right, titlebar_inner_rect.y() + i }, palette.window_title_stripes());
+            painter.draw_line({ stripe_left, titlebar_inner_rect.y() + i }, { stripe_right, titlebar_inner_rect.y() + i }, stripes_color);
         }
     }
 
     auto clipped_title_rect = titlebar_title_rect;
     clipped_title_rect.set_width(stripe_right - clipped_title_rect.x());
     if (!clipped_title_rect.is_empty()) {
-        painter.draw_text(clipped_title_rect.translated(1, 2), title_text, wm.window_title_font(), Gfx::TextAlignment::CenterLeft, palette.window_title_shadow(), Gfx::TextElision::Right);
+        painter.draw_text(clipped_title_rect.translated(1, 2), title_text, wm.window_title_font(), Gfx::TextAlignment::CenterLeft, shadow_color, Gfx::TextElision::Right);
         // FIXME: The translated(0, 1) wouldn't be necessary if we could center text based on its baseline.
         painter.draw_text(clipped_title_rect.translated(0, 1), title_text, wm.window_title_font(), Gfx::TextAlignment::CenterLeft, title_color, Gfx::TextElision::Right);
     }

+ 2 - 0
Services/WindowServer/WindowFrame.h

@@ -64,6 +64,8 @@ private:
         Color title_color;
         Color border_color;
         Color border_color2;
+        Color title_stripes_color;
+        Color title_shadow_color;
     };
 
     FrameColors compute_frame_colors() const;