diff --git a/Libraries/LibGfx/ClassicWindowTheme.cpp b/Libraries/LibGfx/ClassicWindowTheme.cpp index 83c6a70951..39d6a16622 100644 --- a/Libraries/LibGfx/ClassicWindowTheme.cpp +++ b/Libraries/LibGfx/ClassicWindowTheme.cpp @@ -147,7 +147,30 @@ void ClassicWindowTheme::paint_notification_frame(Painter& painter, const IntRec painter.draw_line({ titlebar_rect.x() + i, stripe_top }, { titlebar_rect.x() + i, stripe_bottom }, palette.active_window_title_stripes()); } } +} +IntRect ClassicWindowTheme::frame_rect_for_window(WindowType window_type, const IntRect& window_rect, const Gfx::Palette& palette) const +{ + auto window_titlebar_height = palette.window_title_height(); + + switch (window_type) { + case WindowType::Normal: + return { + window_rect.x() - 4, + window_rect.y() - window_titlebar_height - 6, + window_rect.width() + 8, + window_rect.height() + 10 + window_titlebar_height + }; + case WindowType::Notification: + return { + window_rect.x() - 3, + window_rect.y() - 3, + window_rect.width() + 6 + window_titlebar_height, + window_rect.height() + 6 + }; + default: + return window_rect; + } } } diff --git a/Libraries/LibGfx/ClassicWindowTheme.h b/Libraries/LibGfx/ClassicWindowTheme.h index c561d42901..fd36688aab 100644 --- a/Libraries/LibGfx/ClassicWindowTheme.h +++ b/Libraries/LibGfx/ClassicWindowTheme.h @@ -43,6 +43,8 @@ public: virtual IntRect title_bar_icon_rect(WindowType, const IntRect& window_rect, const Palette&) const override; virtual IntRect title_bar_text_rect(WindowType, const IntRect& window_rect, const Palette&) const override; + virtual IntRect frame_rect_for_window(WindowType, const IntRect& window_rect, const Palette&) const override; + private: struct FrameColors { Color title_color; diff --git a/Libraries/LibGfx/WindowTheme.h b/Libraries/LibGfx/WindowTheme.h index 40aff8cea5..a04a4e37ed 100644 --- a/Libraries/LibGfx/WindowTheme.h +++ b/Libraries/LibGfx/WindowTheme.h @@ -36,6 +36,7 @@ public: enum class WindowType { Normal, Notification, + Other, }; enum class WindowState { @@ -56,6 +57,8 @@ public: virtual IntRect title_bar_icon_rect(WindowType, const IntRect& window_rect, const Palette&) const = 0; virtual IntRect title_bar_text_rect(WindowType, const IntRect& window_rect, const Palette&) const = 0; + virtual IntRect frame_rect_for_window(WindowType, const IntRect& window_rect, const Palette&) const = 0; + protected: WindowTheme() { } }; diff --git a/Services/WindowServer/WindowFrame.cpp b/Services/WindowServer/WindowFrame.cpp index 2715d3dec0..de12564f93 100644 --- a/Services/WindowServer/WindowFrame.cpp +++ b/Services/WindowServer/WindowFrame.cpp @@ -39,6 +39,18 @@ namespace WindowServer { +static Gfx::WindowTheme::WindowType to_theme_window_type(WindowType type) +{ + switch (type) { + case WindowType::Normal: + return Gfx::WindowTheme::WindowType::Normal; + case WindowType::Notification: + return Gfx::WindowTheme::WindowType::Notification; + default: + return Gfx::WindowTheme::WindowType::Other; + } +} + static Gfx::Bitmap* s_minimize_icon; static Gfx::Bitmap* s_maximize_icon; static Gfx::Bitmap* s_restore_icon; @@ -207,28 +219,7 @@ static Gfx::IntRect frame_rect_for_window(Window& window, const Gfx::IntRect& re { if (window.is_frameless()) return rect; - - auto type = window.type(); - auto window_titlebar_height = WindowManager::the().palette().window_title_height(); - - switch (type) { - case WindowType::Normal: - return { - rect.x() - 4, - rect.y() - window_titlebar_height - 6, - rect.width() + 8, - rect.height() + 10 + window_titlebar_height - }; - case WindowType::Notification: - return { - rect.x() - 3, - rect.y() - 3, - rect.width() + 6 + window_titlebar_height, - rect.height() + 6 - }; - default: - return rect; - } + return Gfx::WindowTheme::current().frame_rect_for_window(to_theme_window_type(window.type()), rect, WindowManager::the().palette()); } static Gfx::IntRect frame_rect_for_window(Window& window)