From fa61ea4e9e9d270dc9e49bdb7bd1e0ad1748b741 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Thu, 23 May 2024 11:15:45 +0200 Subject: [PATCH] TopBarMenus: Added sys_color_changed() to correct process a changing of the application color mode SPE-2320 --- resources/icons/user.svg | 2 +- src/slic3r/GUI/GUI_Factories.cpp | 16 ++++++++++------ src/slic3r/GUI/GUI_Factories.hpp | 1 + src/slic3r/GUI/TopBar.cpp | 6 ++++++ src/slic3r/GUI/TopBarMenus.cpp | 13 +++++++++++-- src/slic3r/GUI/TopBarMenus.hpp | 1 + src/slic3r/GUI/wxExtensions.cpp | 10 ++++++++++ src/slic3r/GUI/wxExtensions.hpp | 2 ++ 8 files changed, 42 insertions(+), 9 deletions(-) diff --git a/resources/icons/user.svg b/resources/icons/user.svg index b750021fc4..4b64970541 100644 --- a/resources/icons/user.svg +++ b/resources/icons/user.svg @@ -6,7 +6,7 @@ xmlns:xlink="http://www.w3.org/1999/xlink" width="600" height="600" - stroke="grey" + stroke="#808080" stroke-width="30" fill="none"> diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index acdd55acfe..34cfead654 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -1478,14 +1478,18 @@ static void update_menu_item_def_colors(T* item) void MenuFactory::sys_color_changed() { - for (MenuWithSeparators* menu : { &m_object_menu, &m_sla_object_menu, &m_part_menu, &m_default_menu }) { - sys_color_changed_menu(dynamic_cast(menu));// msw_rescale_menu updates just icons, so use it + for (MenuWithSeparators* menu : { &m_object_menu, &m_sla_object_menu, &m_part_menu, &m_default_menu }) + sys_color_changed(dynamic_cast(menu)); +} + +void MenuFactory::sys_color_changed(wxMenu* menu) +{ + sys_color_changed_menu(menu);// msw_rescale_menu updates just icons, so use it #ifdef _WIN32 - // but under MSW we have to update item's bachground color - for (wxMenuItem* item : menu->GetMenuItems()) - update_menu_item_def_colors(item); + // but under MSW we have to update item's bachground color + for (wxMenuItem* item : menu->GetMenuItems()) + update_menu_item_def_colors(item); #endif - } } void MenuFactory::sys_color_changed(wxMenuBar* menubar) diff --git a/src/slic3r/GUI/GUI_Factories.hpp b/src/slic3r/GUI/GUI_Factories.hpp index 86dfcb4628..dffcb202f2 100644 --- a/src/slic3r/GUI/GUI_Factories.hpp +++ b/src/slic3r/GUI/GUI_Factories.hpp @@ -77,6 +77,7 @@ public: void update_default_menu(); void sys_color_changed(); + static void sys_color_changed(wxMenu* menu); static void sys_color_changed(wxMenuBar* menu_bar); wxMenu* default_menu(); diff --git a/src/slic3r/GUI/TopBar.cpp b/src/slic3r/GUI/TopBar.cpp index c6eda864f2..32766cb5fc 100644 --- a/src/slic3r/GUI/TopBar.cpp +++ b/src/slic3r/GUI/TopBar.cpp @@ -548,6 +548,10 @@ void TopBarItemsCtrl::Rescale() void TopBarItemsCtrl::OnColorsChanged() { wxGetApp().UpdateDarkUI(this); + + if (m_menus) + m_menus->sys_color_changed(); + if (m_menu_btn) m_menu_btn->sys_color_changed(); if (m_settings_btn) @@ -555,6 +559,8 @@ void TopBarItemsCtrl::OnColorsChanged() m_workspace_btn->sys_color_changed(); m_account_btn->sys_color_changed(); + UpdateAccountButton(true); + m_search->SysColorsChanged(); UpdateSelection(); diff --git a/src/slic3r/GUI/TopBarMenus.cpp b/src/slic3r/GUI/TopBarMenus.cpp index b3c28309cb..41d456eae3 100644 --- a/src/slic3r/GUI/TopBarMenus.cpp +++ b/src/slic3r/GUI/TopBarMenus.cpp @@ -1,6 +1,8 @@ #include "TopBarMenus.hpp" #include "TopBar.hpp" +#include "GUI_Factories.hpp" + #include "GUI_App.hpp" #include "Plater.hpp" #include "UserAccount.hpp" @@ -34,6 +36,13 @@ wxString TopBarMenus::get_workspace_name(const int mode) mode == Slic3r::ConfigOptionMode::comAdvanced ? _L("Normal mode") : _L("Expert mode"); } +void TopBarMenus::sys_color_changed() +{ + MenuFactory::sys_color_changed(&main); + MenuFactory::sys_color_changed(&workspaces); + MenuFactory::sys_color_changed(&account); +} + void TopBarMenus::ApplyWorkspacesMenu() { wxMenuItemList& items = workspaces.GetMenuItems(); @@ -70,7 +79,7 @@ void TopBarMenus::CreateAccountMenu() user_account->do_logout(); else user_account->do_login(); - }, get_bmp_bundle("login", 16)); + }, "login"); } void TopBarMenus::UpdateAccountMenu(Slic3r::GUI::UserAccount* user_account) @@ -78,7 +87,7 @@ void TopBarMenus::UpdateAccountMenu(Slic3r::GUI::UserAccount* user_account) bool is_logged = user_account && user_account->is_logged(); if (m_login_item) { m_login_item->SetItemLabel(is_logged ? _L("Prusa Account Log out") : _L("Prusa Account Log in")); - m_login_item->SetBitmap(is_logged ? *get_bmp_bundle("logout", 16) : *get_bmp_bundle("login", 16)); + set_menu_item_bitmap(m_login_item, is_logged ? "logout" : "login"); } } diff --git a/src/slic3r/GUI/TopBarMenus.hpp b/src/slic3r/GUI/TopBarMenus.hpp index a86f09a051..6d0b8e0052 100644 --- a/src/slic3r/GUI/TopBarMenus.hpp +++ b/src/slic3r/GUI/TopBarMenus.hpp @@ -41,6 +41,7 @@ public: wxString get_workspace_name(const /*ConfigOptionMode*/int mode); void set_cb_on_user_item (std::function cb) { m_cb_on_user_item = cb; } + void sys_color_changed(); }; diff --git a/src/slic3r/GUI/wxExtensions.cpp b/src/slic3r/GUI/wxExtensions.cpp index c8e6784c4a..4ecf3d93cf 100644 --- a/src/slic3r/GUI/wxExtensions.cpp +++ b/src/slic3r/GUI/wxExtensions.cpp @@ -215,6 +215,16 @@ wxMenuItem* append_menu_check_item(wxMenu* menu, int id, const wxString& string, return item; } +void set_menu_item_bitmap(wxMenuItem* item, const std::string& icon_name) +{ + item->SetBitmap(*get_bmp_bundle(icon_name)); +#ifndef __linux__ + const auto it = msw_menuitem_bitmaps.find(item->GetId()); + if (it != msw_menuitem_bitmaps.end() && it->second != icon_name) + it->second = icon_name; +#endif // !__linux__ +} + /* Function for rescale of buttons in Dialog under MSW if dpi is changed. * btn_ids - vector of buttons identifiers */ diff --git a/src/slic3r/GUI/wxExtensions.hpp b/src/slic3r/GUI/wxExtensions.hpp index d64e7abdf1..fc96f48cbd 100644 --- a/src/slic3r/GUI/wxExtensions.hpp +++ b/src/slic3r/GUI/wxExtensions.hpp @@ -53,6 +53,8 @@ wxMenuItem* append_menu_check_item(wxMenu* menu, int id, const wxString& string, void enable_menu_item(wxUpdateUIEvent& evt, std::function const cb_condition, wxMenuItem* item, wxWindow* win); +void set_menu_item_bitmap(wxMenuItem* item, const std::string& icon_name); + class wxDialog; void msw_buttons_rescale(wxDialog* dlg, const int em_unit, const std::vector& btn_ids, double height_koef = 1.);