From 616082ae12fcdf577aeca0140c5f622822231e42 Mon Sep 17 00:00:00 2001 From: "zhou.xu" Date: Wed, 12 Mar 2025 12:10:38 +0800 Subject: [PATCH] FIX:fix three icons in dark mode not switching jira: none Change-Id: I0b49e3dc2e4d9ae7f53e45e456de830736f0acc8 (cherry picked from commit 38abdcdcdc1e49455e131b20cc29af888d56531c) --- src/slic3r/GUI/GUI_ObjectList.cpp | 11 ++++++++++- src/slic3r/GUI/GUI_ObjectList.hpp | 2 +- src/slic3r/GUI/ObjectDataViewModel.cpp | 24 ++++++++++++------------ src/slic3r/GUI/ObjectDataViewModel.hpp | 12 ++++++------ src/slic3r/GUI/Plater.cpp | 9 +++++++++ src/slic3r/GUI/Plater.hpp | 1 + 6 files changed, 39 insertions(+), 20 deletions(-) diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index e10ad1adf4..2613d32363 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -3678,7 +3678,7 @@ void ObjectList::update_variable_layer_obj_num(ObjectDataViewModelNode* obj_node } } -void ObjectList::update_info_items(size_t obj_idx, wxDataViewItemArray* selections/* = nullptr*/, bool added_object/* = false*/) +void ObjectList::update_info_items(size_t obj_idx, wxDataViewItemArray *selections /* = nullptr*/, bool added_object /* = false*/, bool color_mode_changed /* = false*/) { // BBS if (obj_idx >= m_objects->size()) @@ -3736,6 +3736,9 @@ void ObjectList::update_info_items(size_t obj_idx, wxDataViewItemArray* selectio else if (!shows && should_show) { m_objects_model->SetSupportPaintState(true, item_obj); } + if (color_mode_changed && shows) { + m_objects_model->SetSupportPaintState(true, item_obj,true); + } } { @@ -3751,6 +3754,9 @@ void ObjectList::update_info_items(size_t obj_idx, wxDataViewItemArray* selectio else if (!shows && should_show) { m_objects_model->SetColorPaintState(true, item_obj); } + if (color_mode_changed && shows) { + m_objects_model->SetColorPaintState(true, item_obj, true); + } } { @@ -3763,6 +3769,9 @@ void ObjectList::update_info_items(size_t obj_idx, wxDataViewItemArray* selectio else if (!shows && should_show) { m_objects_model->SetSinkState(true, item_obj); } + if (color_mode_changed && shows) { + m_objects_model->SetSinkState(true, item_obj, true); + } } { diff --git a/src/slic3r/GUI/GUI_ObjectList.hpp b/src/slic3r/GUI/GUI_ObjectList.hpp index 4f1a52e299..fb217f2f36 100644 --- a/src/slic3r/GUI/GUI_ObjectList.hpp +++ b/src/slic3r/GUI/GUI_ObjectList.hpp @@ -419,7 +419,7 @@ public: void update_and_show_object_settings_item(); void update_settings_item_and_selection(wxDataViewItem item, wxDataViewItemArray& selections); void update_object_list_by_printer_technology(); - void update_info_items(size_t obj_idx, wxDataViewItemArray* selections = nullptr, bool added_object = false); + void update_info_items(size_t obj_idx, wxDataViewItemArray *selections = nullptr, bool added_object = false, bool color_mode_changed = false); void update_variable_layer_obj_num(ObjectDataViewModelNode* obj_node, size_t layer_data_count); void instances_to_separated_object(const int obj_idx, const std::set& inst_idx); diff --git a/src/slic3r/GUI/ObjectDataViewModel.cpp b/src/slic3r/GUI/ObjectDataViewModel.cpp index a1d07c2ca3..fc777a36d8 100644 --- a/src/slic3r/GUI/ObjectDataViewModel.cpp +++ b/src/slic3r/GUI/ObjectDataViewModel.cpp @@ -229,9 +229,9 @@ void ObjectDataViewModelNode::set_action_icon(bool enable) } // BBS -void ObjectDataViewModelNode::set_color_icon(bool enable) +void ObjectDataViewModelNode::set_color_icon(bool enable, bool force) { - if (m_color_enable == enable) + if (!force && m_color_enable == enable) return; m_color_enable = enable; if ((m_type & itObject) && enable) @@ -240,9 +240,9 @@ void ObjectDataViewModelNode::set_color_icon(bool enable) m_color_icon = create_scaled_bitmap("dot"); } -void ObjectDataViewModelNode::set_support_icon(bool enable) +void ObjectDataViewModelNode::set_support_icon(bool enable, bool force) { - if (m_support_enable == enable) + if (!force && m_support_enable == enable) return; m_support_enable = enable; if ((m_type & itObject) && enable) @@ -251,9 +251,9 @@ void ObjectDataViewModelNode::set_support_icon(bool enable) m_support_icon = create_scaled_bitmap("dot"); } -void ObjectDataViewModelNode::set_sinking_icon(bool enable) +void ObjectDataViewModelNode::set_sinking_icon(bool enable, bool force) { - if (m_sink_enable == enable) + if (!force && m_sink_enable == enable) return; m_sink_enable = enable; if ((m_type & itObject) && enable) @@ -2340,32 +2340,32 @@ bool ObjectDataViewModel::IsSinked(wxDataViewItem &item) const return node->m_sink_enable; } -void ObjectDataViewModel::SetColorPaintState(const bool painted, wxDataViewItem obj_item) +void ObjectDataViewModel::SetColorPaintState(const bool painted, wxDataViewItem obj_item, bool force) { ObjectDataViewModelNode* node = static_cast(obj_item.GetID()); if (!node) return; - node->set_color_icon(painted); + node->set_color_icon(painted, force); ItemChanged(obj_item); } -void ObjectDataViewModel::SetSupportPaintState(const bool painted, wxDataViewItem obj_item) +void ObjectDataViewModel::SetSupportPaintState(const bool painted, wxDataViewItem obj_item, bool force) { ObjectDataViewModelNode* node = static_cast(obj_item.GetID()); if (!node) return; - node->set_support_icon(painted); + node->set_support_icon(painted, force); ItemChanged(obj_item); } -void ObjectDataViewModel::SetSinkState(const bool painted, wxDataViewItem obj_item) +void ObjectDataViewModel::SetSinkState(const bool painted, wxDataViewItem obj_item, bool force) { ObjectDataViewModelNode *node = static_cast(obj_item.GetID()); if (!node) return; - node->set_sinking_icon(painted); + node->set_sinking_icon(painted, force); ItemChanged(obj_item); } diff --git a/src/slic3r/GUI/ObjectDataViewModel.hpp b/src/slic3r/GUI/ObjectDataViewModel.hpp index 1477a4df6e..a980e204ad 100644 --- a/src/slic3r/GUI/ObjectDataViewModel.hpp +++ b/src/slic3r/GUI/ObjectDataViewModel.hpp @@ -299,9 +299,9 @@ public: void set_variable_height_icon(VaryHeightIndicator vari_height); void set_action_icon(bool enable); // BBS - void set_color_icon(bool enable); - void set_support_icon(bool enable); - void set_sinking_icon(bool enable); + void set_color_icon(bool enable, bool force = false); + void set_support_icon(bool enable,bool force = false); + void set_sinking_icon(bool enable, bool force = false); // Set warning icon for node void set_warning_icon(const std::string& warning_icon); @@ -508,9 +508,9 @@ public: bool IsColorPainted(wxDataViewItem& item) const; bool IsSupportPainted(wxDataViewItem &item) const; bool IsSinked(wxDataViewItem &item) const; - void SetColorPaintState(const bool painted, wxDataViewItem obj_item); - void SetSupportPaintState(const bool painted, wxDataViewItem obj_item); - void SetSinkState(const bool painted, wxDataViewItem obj_item); + void SetColorPaintState(const bool painted, wxDataViewItem obj_item,bool force = false); + void SetSupportPaintState(const bool painted, wxDataViewItem obj_item,bool force = false); + void SetSinkState(const bool painted, wxDataViewItem obj_item,bool force = false); void SetAssociatedControl(wxDataViewCtrl* ctrl) { m_ctrl = ctrl; } // Rescale bitmaps for existing Items diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 0e00692623..898ca49ef4 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -1912,6 +1912,14 @@ Sidebar::Sidebar(Plater *parent) Sidebar::~Sidebar() {} +void Sidebar::on_change_color_mode(bool is_dark) { + const ModelObjectPtrs &mos = wxGetApp().model().objects; + for (int i = 0; i < mos.size(); i++) { + wxGetApp().obj_list()->update_info_items(i,nullptr,false,true); + } + +} + void Sidebar::create_printer_preset() { CreatePrinterPresetDialog dlg(wxGetApp().mainframe); @@ -8999,6 +9007,7 @@ void Plater::priv::on_apple_change_color_mode(wxSysColourChangedEvent& evt) { void Plater::priv::on_change_color_mode(SimpleEvent& evt) { m_is_dark = wxGetApp().app_config->get("dark_color_mode") == "1"; + sidebar->on_change_color_mode(m_is_dark); view3D->get_canvas3d()->on_change_color_mode(m_is_dark); preview->get_canvas3d()->on_change_color_mode(m_is_dark); assemble_view->get_canvas3d()->on_change_color_mode(m_is_dark); diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 5b4ff783a6..f0af6e9e04 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -152,6 +152,7 @@ public: Sidebar &operator=(const Sidebar &) = delete; ~Sidebar(); + void on_change_color_mode(bool is_dark); void create_printer_preset(); void init_filament_combo(PlaterPresetComboBox **combo, const int filament_idx); void remove_unused_filament_combos(const size_t current_extruder_count);