diff --git a/src/slic3r/GUI/ExtruderSequenceDialog.cpp b/src/slic3r/GUI/ExtruderSequenceDialog.cpp index 408826957..ef60a041b 100644 --- a/src/slic3r/GUI/ExtruderSequenceDialog.cpp +++ b/src/slic3r/GUI/ExtruderSequenceDialog.cpp @@ -130,7 +130,7 @@ void ExtruderSequenceDialog::apply_extruder_sequence() for (size_t extruder=0; extruder < m_sequence.extruders.size(); ++extruder) { wxBitmapComboBox* extruder_selector = nullptr; - apply_extruder_selector(&extruder_selector, this); + apply_extruder_selector(&extruder_selector, this, "", wxDefaultPosition, wxSize(12*wxGetApp().em_unit(), -1)); extruder_selector->SetSelection(m_sequence.extruders[extruder]); extruder_selector->Bind(wxEVT_COMBOBOX, [this, extruder_selector, extruder](wxCommandEvent& evt) diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index 18ddb65ba..d4397c449 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -533,6 +533,9 @@ void Preview::on_choice_view_type(wxCommandEvent& evt) if ((0 <= selection) && (selection < (int)GCodePreviewData::Extrusion::Num_View_Types)) m_gcode_preview_data->extrusion.view_type = (GCodePreviewData::Extrusion::EViewType)selection; + if (m_gcode_preview_data->extrusion.view_type != GCodePreviewData::Extrusion::ColorPrint) + m_extruder_selector->SetSelection(0); + reload_print(); } @@ -605,7 +608,7 @@ void Preview::update_view_type(bool slice_completed) void Preview::update_extruder_selector() { - apply_extruder_selector(&m_extruder_selector, this, L("Whole print")); + apply_extruder_selector(&m_extruder_selector, this, L("Whole print"), wxDefaultPosition, wxDefaultSize, true); } void Preview::create_double_slider() diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 1cbbfda5a..5b1fdc91c 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -4868,6 +4868,7 @@ void Plater::on_config_change(const DynamicPrintConfig &config) filament_colors.push_back(filaments.find_preset(filament_preset, true)->config.opt_string("filament_colour", (unsigned)0)); p->config->option(opt_key)->values = filament_colors; + p->preview->update_extruder_selector(); p->sidebar->obj_list()->update_extruder_colors(); continue; } @@ -4894,6 +4895,7 @@ void Plater::on_config_change(const DynamicPrintConfig &config) else if(opt_key == "extruder_colour") { update_scheduled = true; p->preview->set_number_extruders(p->config->option(opt_key)->values.size()); + p->preview->update_extruder_selector(); p->sidebar->obj_list()->update_extruder_colors(); } else if(opt_key == "max_print_height") { update_scheduled = true; @@ -4945,6 +4947,7 @@ void Plater::force_filament_colors_update() if (update_scheduled) { update(); + p->preview->update_extruder_selector(); p->sidebar->obj_list()->update_extruder_colors(); } diff --git a/src/slic3r/GUI/wxExtensions.cpp b/src/slic3r/GUI/wxExtensions.cpp index 4528a14cc..10aecb5c5 100644 --- a/src/slic3r/GUI/wxExtensions.cpp +++ b/src/slic3r/GUI/wxExtensions.cpp @@ -450,7 +450,7 @@ wxBitmap create_scaled_bitmap(wxWindow *win, const std::string& bmp_name_in, Slic3r::GUI::BitmapCache* m_bitmap_cache = nullptr; -std::vector get_extruder_color_icons() +std::vector get_extruder_color_icons(bool thin_icon/* = false*/) { // Create the bitmap with color bars. std::vector bmps; @@ -466,16 +466,18 @@ std::vector get_extruder_color_icons() * and scale them in respect to em_unit value */ const double em = Slic3r::GUI::wxGetApp().em_unit(); - const int icon_width = lround(3.2 * em); + const int icon_width = lround((thin_icon ? 1 : 3.2) * em); const int icon_height = lround(1.6 * em); for (const std::string& color : colors) { - wxBitmap* bitmap = m_bitmap_cache->find(color); + std::string bitmap_key = color + "-h" + std::to_string(icon_height) + "-w" + std::to_string(icon_width); + + wxBitmap* bitmap = m_bitmap_cache->find(bitmap_key); if (bitmap == nullptr) { // Paint the color icon. Slic3r::PresetBundle::parse_color(color, rgb); - bitmap = m_bitmap_cache->insert(color, m_bitmap_cache->mksolid(icon_width, icon_height, rgb)); + bitmap = m_bitmap_cache->insert(bitmap_key, m_bitmap_cache->mksolid(icon_width, icon_height, rgb)); } bmps.emplace_back(bitmap); } @@ -484,10 +486,10 @@ std::vector get_extruder_color_icons() } -static wxBitmap get_extruder_color_icon(size_t extruder_idx) +static wxBitmap get_extruder_color_icon(size_t extruder_idx, bool thin_icon = false) { // Create the bitmap with color bars. - std::vector bmps = get_extruder_color_icons(); + std::vector bmps = get_extruder_color_icons(thin_icon); if (bmps.empty()) return wxNullBitmap; @@ -498,9 +500,10 @@ void apply_extruder_selector(wxBitmapComboBox** ctrl, wxWindow* parent, const std::string& first_item/* = ""*/, wxPoint pos/* = wxDefaultPosition*/, - wxSize size/* = wxDefaultSize*/) + wxSize size/* = wxDefaultSize*/, + bool use_thin_icon/* = false*/) { - std::vector icons = get_extruder_color_icons(); + std::vector icons = get_extruder_color_icons(use_thin_icon); if (icons.empty()) return; @@ -516,6 +519,7 @@ void apply_extruder_selector(wxBitmapComboBox** ctrl, } int i = 0; + wxString str = _(L("Extruder")); for (wxBitmap* bmp : icons) { if (i == 0) { if (!first_item.empty()) @@ -523,7 +527,7 @@ void apply_extruder_selector(wxBitmapComboBox** ctrl, ++i; } - (*ctrl)->Append(wxString::Format("%d", i), *bmp); + (*ctrl)->Append(wxString::Format("%s %d", str, i), *bmp); ++i; } (*ctrl)->SetSelection(0); diff --git a/src/slic3r/GUI/wxExtensions.hpp b/src/slic3r/GUI/wxExtensions.hpp index ce5e58a6a..0fedaee09 100644 --- a/src/slic3r/GUI/wxExtensions.hpp +++ b/src/slic3r/GUI/wxExtensions.hpp @@ -58,12 +58,13 @@ int em_unit(wxWindow* win); wxBitmap create_scaled_bitmap(wxWindow *win, const std::string& bmp_name, const int px_cnt = 16, const bool is_horizontal = false, const bool grayscale = false); -std::vector get_extruder_color_icons(); +std::vector get_extruder_color_icons(bool thin_icon = false); void apply_extruder_selector(wxBitmapComboBox** ctrl, wxWindow* parent, const std::string& first_item = "", wxPoint pos = wxDefaultPosition, - wxSize size = wxDefaultSize); + wxSize size = wxDefaultSize, + bool use_thin_icon = false); class wxCheckListBoxComboPopup : public wxCheckListBox, public wxComboPopup { @@ -964,13 +965,13 @@ private: TICK_CODE operator=(const TICK_CODE& other) const { TICK_CODE ret_val(other.tick, other.gcode, other.extruder); return ret_val; - } + }/* TICK_CODE& operator=(const TICK_CODE& other) { this->tick = other.tick; this->gcode = other.gcode; this->extruder = other.extruder; return *this; - } + }*/ int tick; std::string gcode;