From 5e823d3de0416461fe203143a1dbbb1530d351e8 Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Sat, 10 Jul 2021 12:00:32 +0200 Subject: [PATCH] Taskbar: Scale window icon bitmap if it's not 16x16 Fixes: #5806 --- Userland/Services/Taskbar/TaskbarWindow.cpp | 13 +++++++++++-- Userland/Services/Taskbar/TaskbarWindow.h | 1 + 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Userland/Services/Taskbar/TaskbarWindow.cpp b/Userland/Services/Taskbar/TaskbarWindow.cpp index 0d49e07eab..def76601bd 100644 --- a/Userland/Services/Taskbar/TaskbarWindow.cpp +++ b/Userland/Services/Taskbar/TaskbarWindow.cpp @@ -297,8 +297,17 @@ void TaskbarWindow::wm_event(GUI::WMEvent& event) case GUI::Event::WM_WindowIconBitmapChanged: { auto& changed_event = static_cast(event); if (auto* window = WindowList::the().window(identifier)) { - if (window->button()) - window->button()->set_icon(changed_event.bitmap()); + if (window->button()) { + auto icon = changed_event.bitmap(); + if (icon->height() != taskbar_icon_size() || icon->width() != taskbar_icon_size()) { + auto sw = taskbar_icon_size() / (float)icon->width(); + auto sh = taskbar_icon_size() / (float)icon->height(); + auto scaled_bitmap = icon->scaled(sw, sh); + window->button()->set_icon(move(scaled_bitmap)); + } else { + window->button()->set_icon(icon); + } + } } break; } diff --git a/Userland/Services/Taskbar/TaskbarWindow.h b/Userland/Services/Taskbar/TaskbarWindow.h index 1f35507048..a7d307bb19 100644 --- a/Userland/Services/Taskbar/TaskbarWindow.h +++ b/Userland/Services/Taskbar/TaskbarWindow.h @@ -18,6 +18,7 @@ public: virtual ~TaskbarWindow() override; static int taskbar_height() { return 27; } + static int taskbar_icon_size() { return 16; } private: explicit TaskbarWindow(NonnullRefPtr start_menu);