From 03754b5213b30ba4287db0263a7933e8ff65010e Mon Sep 17 00:00:00 2001 From: Ocraftyone Date: Wed, 8 Nov 2023 06:33:32 -0500 Subject: [PATCH] Get to a compilable state Everything seems to be working (including the plater). I am not seeing any graphical issues --- src/slic3r/GUI/DragCanvas.cpp | 4 +- src/slic3r/GUI/ExtraRenderers.cpp | 4 +- src/slic3r/GUI/Field.cpp | 4 +- src/slic3r/GUI/GUI_Factories.cpp | 25 ++--- src/slic3r/GUI/GUI_Factories.hpp | 4 +- src/slic3r/GUI/GUI_ObjectTable.cpp | 36 +++---- src/slic3r/GUI/GUI_ObjectTable.hpp | 18 ++-- src/slic3r/GUI/GUI_ObjectTableSettings.cpp | 4 +- src/slic3r/GUI/OG_CustomCtrl.cpp | 4 +- src/slic3r/GUI/ObjectDataViewModel.cpp | 106 ++++++++++----------- src/slic3r/GUI/ObjectDataViewModel.hpp | 42 ++++---- src/slic3r/GUI/Plater.cpp | 3 +- src/slic3r/GUI/PresetComboBoxes.cpp | 2 +- src/slic3r/GUI/PresetComboBoxes.hpp | 2 +- src/slic3r/GUI/Widgets/ComboBox.cpp | 12 +-- src/slic3r/GUI/Widgets/ComboBox.hpp | 8 +- src/slic3r/GUI/Widgets/DropDown.cpp | 12 +-- src/slic3r/GUI/Widgets/DropDown.hpp | 6 +- 18 files changed, 149 insertions(+), 147 deletions(-) diff --git a/src/slic3r/GUI/DragCanvas.cpp b/src/slic3r/GUI/DragCanvas.cpp index 38a827dca8..b64085d575 100644 --- a/src/slic3r/GUI/DragCanvas.cpp +++ b/src/slic3r/GUI/DragCanvas.cpp @@ -46,8 +46,8 @@ void DragCanvas::set_shape_list(const std::vector& colors, const st m_dragshape_list.clear(); for (int i = 0; i < order.size(); i++) { - wxBitmap* bmp = get_extruder_color_icon(colors[order[i] - 1], std::to_string(order[i]), SHAPE_SIZE, SHAPE_SIZE); - DragShape* shape = new DragShape(*bmp, order[i]); + wxBitmap bmp = get_extruder_color_icon(colors[order[i] - 1], std::to_string(order[i]), SHAPE_SIZE, SHAPE_SIZE)->GetBitmapFor(m_parent); //OcraftyoneTODO: quick and dirty conversion + DragShape* shape = new DragShape(bmp, order[i]); m_dragshape_list.push_back(shape); } diff --git a/src/slic3r/GUI/ExtraRenderers.cpp b/src/slic3r/GUI/ExtraRenderers.cpp index 4e3577b19e..d1952f0f3f 100644 --- a/src/slic3r/GUI/ExtraRenderers.cpp +++ b/src/slic3r/GUI/ExtraRenderers.cpp @@ -304,7 +304,7 @@ wxWindow* BitmapChoiceRenderer::CreateEditorCtrl(wxWindow* parent, wxRect labelR if (can_create_editor_ctrl && !can_create_editor_ctrl()) return nullptr; - std::vector icons = get_extruder_color_icons(); + std::vector icons = get_extruder_color_icons(); if (icons.empty()) return nullptr; @@ -320,7 +320,7 @@ wxWindow* BitmapChoiceRenderer::CreateEditorCtrl(wxWindow* parent, wxRect labelR c_editor->Append(_L("default"), *get_default_extruder_color_icon()); for (size_t i = 0; i < icons.size(); i++) - c_editor->Append(wxString::Format("%d", i+1), *icons[i]); + c_editor->Append(wxString::Format("%d", i+1), icons[i]->GetBitmapFor(parent)); //OcraftyoneTODO: quick n dirty conversion if (has_default_extruder && has_default_extruder()) c_editor->SetSelection(atoi(data.GetText().c_str())); diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index 091a60b45f..6aa029dde1 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -1119,7 +1119,7 @@ void Choice::BUILD() auto icon_name = "param_" + m_opt.enum_values[i]; if (boost::filesystem::exists(image_path / (icon_name + ".svg"))) { ScalableBitmap bm(temp, icon_name, 24); - temp->Append(_(el), bm.bmp()); + temp->Append(_(el), bm.get_bitmap()); } else { temp->Append(_(el)); } @@ -1520,7 +1520,7 @@ void Choice::msw_rescale() auto icon_name = "param_" + m_opt.enum_values[i]; if (boost::filesystem::exists(image_path / (icon_name + ".svg"))) { ScalableBitmap bm(window, icon_name, 24); - temp->SetItemBitmap(i, bm.bmp()); + temp->SetItemBitmap(i, bm.get_bitmap()); } ++i; } diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index f3a68b2608..899f3ddf83 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -261,14 +261,13 @@ std::map SettingsFactory::CATEGORY_ICON = // BBS: remove SLA categories }; -wxBitmap SettingsFactory::get_category_bitmap(const std::string& category_name, bool menu_bmp) +wxBitmapBundle* SettingsFactory::get_category_bitmap(const std::string& category_name) { if (CATEGORY_ICON.find(category_name) == CATEGORY_ICON.end()) - return wxNullBitmap; - return create_scaled_bitmap(CATEGORY_ICON.at(category_name)); + return get_bmp_bundle("empty"); + return get_bmp_bundle(CATEGORY_ICON.at(category_name)); } - //------------------------------------- // MenuFactory //------------------------------------- @@ -425,13 +424,14 @@ static void create_freq_settings_popupmenu(wxMenu* menu, const bool is_object_se } } -std::vector MenuFactory::get_volume_bitmaps() +std::vector MenuFactory::get_volume_bitmaps() { - std::vector volume_bmps; + std::vector volume_bmps; volume_bmps.reserve(ADD_VOLUME_MENU_ITEMS.size()); for (auto item : ADD_VOLUME_MENU_ITEMS){ if(!item.second.empty()){ - volume_bmps.push_back(create_scaled_bitmap(item.second)); + //volume_bmps.push_back(create_menu_bitmap(item.second)); + volume_bmps.push_back(get_bmp_bundle(item.second)); } } return volume_bmps; @@ -619,7 +619,7 @@ wxMenuItem* MenuFactory::append_menu_item_settings(wxMenu* menu_) // Add full settings list auto menu_item = new wxMenuItem(menu, wxID_ANY, menu_name); - menu_item->SetBitmap(create_scaled_bitmap("cog")); + menu_item->SetBitmap(*get_bmp_bundle("cog")); menu_item->SetSubMenu(create_settings_popupmenu(menu, is_object_settings, item)); return menu->Append(menu_item); @@ -760,7 +760,7 @@ void MenuFactory::append_menu_item_change_extruder(wxMenu* menu) if (sels.IsEmpty()) return; - std::vector icons = get_extruder_color_icons(true); + std::vector icons = get_extruder_color_icons(true); wxMenu* extruder_selection_menu = new wxMenu(); const wxString& name = sels.Count() == 1 ? names[0] : names[1]; @@ -781,7 +781,7 @@ void MenuFactory::append_menu_item_change_extruder(wxMenu* menu) if (icon_idx >= 0 && icon_idx < icons.size()) { append_menu_item( - extruder_selection_menu, wxID_ANY, item_name, "", [i](wxCommandEvent &) { obj_list()->set_extruder_for_selected_items(i); }, *icons[icon_idx], menu, + extruder_selection_menu, wxID_ANY, item_name, "", [i](wxCommandEvent &) { obj_list()->set_extruder_for_selected_items(i); }, icons[icon_idx], menu, [is_active_extruder]() { return !is_active_extruder; }, m_parent); } else { append_menu_item( @@ -1580,7 +1580,7 @@ void MenuFactory::append_menu_item_change_filament(wxMenu* menu) return; } - std::vector icons = get_extruder_color_icons(true); + std::vector icons = get_extruder_color_icons(true); if (icons.size() < filaments_cnt) { BOOST_LOG_TRIVIAL(warning) << boost::format("Warning: icons size %1%, filaments_cnt=%2%")%icons.size()%filaments_cnt; if (icons.size() <= 1) @@ -1620,8 +1620,9 @@ void MenuFactory::append_menu_item_change_filament(wxMenu* menu) const wxString& item_name = (i == 0 ? _L("Default") : wxString::Format(_L("Filament %d"), i)) + (is_active_extruder ? " (" + _L("current") + ")" : ""); + //OcraftyoneTODO: determine if nullptr in place of icon causes issues append_menu_item(extruder_selection_menu, wxID_ANY, item_name, "", - [i](wxCommandEvent&) { obj_list()->set_extruder_for_selected_items(i); }, i == 0 ? wxNullBitmap : *icons[i - 1], menu, + [i](wxCommandEvent&) { obj_list()->set_extruder_for_selected_items(i); }, i == 0 ? nullptr : icons[i - 1], menu, [is_active_extruder]() { return !is_active_extruder; }, m_parent); } menu->Append(wxID_ANY, name, extruder_selection_menu, _L("Change Filament")); diff --git a/src/slic3r/GUI/GUI_Factories.hpp b/src/slic3r/GUI/GUI_Factories.hpp index 92a816538f..ec76b9e4f1 100644 --- a/src/slic3r/GUI/GUI_Factories.hpp +++ b/src/slic3r/GUI/GUI_Factories.hpp @@ -36,7 +36,7 @@ struct SettingsFactory static std::map> OBJECT_CATEGORY_SETTINGS; static std::map> PART_CATEGORY_SETTINGS; - static wxBitmap get_category_bitmap(const std::string& category_name, bool menu_bmp = true); + static wxBitmapBundle* get_category_bitmap(const std::string& category_name); static Bundle get_bundle(const DynamicPrintConfig* config, bool is_object_settings, bool is_layer_settings = false); static std::vector get_options(bool is_part); //BBS: add api to get options for catogary @@ -48,7 +48,7 @@ class MenuFactory { public: static const std::vector> ADD_VOLUME_MENU_ITEMS; - static std::vector get_volume_bitmaps(); + static std::vector get_volume_bitmaps(); MenuFactory(); ~MenuFactory() = default; diff --git a/src/slic3r/GUI/GUI_ObjectTable.cpp b/src/slic3r/GUI/GUI_ObjectTable.cpp index 3f194ec4e6..7c82a13b5f 100644 --- a/src/slic3r/GUI/GUI_ObjectTable.cpp +++ b/src/slic3r/GUI/GUI_ObjectTable.cpp @@ -77,9 +77,9 @@ void GridCellIconRenderer::Draw(wxGrid& grid, table->m_icon_row_height = grid.GetRowSize(row); table->m_icon_col_width = grid.GetColSize(col); //} - wxBitmap& bitmap = table->get_undo_bitmap(); - int bitmap_width = bitmap.GetWidth(); - int bitmap_height = bitmap.GetHeight(); + wxBitmapBundle& bitmap = table->get_undo_bitmap(); + int bitmap_width = bitmap.GetBitmapFor(dc.GetWindow()).GetWidth(); + int bitmap_height = bitmap.GetBitmapFor(dc.GetWindow()).GetHeight(); int offset_x = (table->m_icon_col_width - bitmap_width)/2; int offset_y = (table->m_icon_row_height - bitmap_height)/2; @@ -91,7 +91,7 @@ void GridCellIconRenderer::Draw(wxGrid& grid, lock_pos.y += top; dc.DrawBitmap(bitmap, lock_pos); #else - dc.DrawBitmap(bitmap, wxPoint(rect.x + offset_x, rect.y + offset_y)); + dc.DrawBitmap(bitmap.GetBitmapFor(dc.GetWindow()), wxPoint(rect.x + offset_x, rect.y + offset_y));//OcraftyoneTODO: determine if this way of getting bitmap works well #endif //dc.SetPen(*wxGREEN_PEN); @@ -125,7 +125,7 @@ GridCellIconRenderer *GridCellIconRenderer::Clone() const GridCellFilamentsEditor::GridCellFilamentsEditor(const wxArrayString& choices, bool allowOthers, - std::vector* bitmaps) + std::vector* bitmaps) : wxGridCellChoiceEditor(choices, allowOthers), m_icons(bitmaps) { } @@ -133,7 +133,7 @@ GridCellFilamentsEditor::GridCellFilamentsEditor(const wxArrayString& choices, GridCellFilamentsEditor::GridCellFilamentsEditor(size_t count, const wxString choices[], bool allowOthers, - std::vector* bitmaps) + std::vector* bitmaps) : wxGridCellChoiceEditor(count, choices, allowOthers), m_icons(bitmaps) { } @@ -159,13 +159,13 @@ void GridCellFilamentsEditor::Create(wxWindow* parent, if ( !m_allowOthers ) style |= wxCB_READONLY; ::ComboBox *bitmap_combo = new ComboBox(parent, id, wxEmptyString, - wxDefaultPosition, wxSize(((*m_icons)[0])->GetWidth() + 10, -1), 0, nullptr, CB_NO_DROP_ICON | CB_NO_TEXT | wxCB_READONLY); + wxDefaultPosition, wxSize(((*m_icons)[0])->GetDefaultSize().GetWidth() + 10, -1), 0, nullptr, CB_NO_DROP_ICON | CB_NO_TEXT | wxCB_READONLY); //OcraftyoneTODO: is this a good way of getting the size? if (m_icons) { int array_count = m_choices.GetCount(); int icon_count = m_icons->size(); for (int i = 0; i < array_count; i++) { - wxBitmap* bitmap = (i < icon_count) ? (*m_icons)[i] : (*m_icons)[0]; + wxBitmapBundle* bitmap = (i < icon_count) ? (*m_icons)[i] : (*m_icons)[0]; bitmap_combo->Append(m_choices[i], *bitmap); } } @@ -335,9 +335,9 @@ void GridCellFilamentsRenderer::Draw(wxGrid &grid, wxGridCellAttr &attr, wxDC &d ObjectGridTable::ObjectGridRow *grid_row = table->get_grid_row(row - 1); ConfigOptionInt & cur_option = dynamic_cast((*grid_row)[(ObjectGridTable::GridColType) col]); - wxBitmap *bitmap = table->get_color_bitmap((cur_option.value >= 1) ? cur_option.value - 1 : cur_option.value); - int bitmap_width = bitmap->GetWidth(); - int bitmap_height = bitmap->GetHeight(); + wxBitmapBundle *bitmap = table->get_color_bitmap((cur_option.value >= 1) ? cur_option.value - 1 : cur_option.value); + int bitmap_width = bitmap->GetBitmapFor(dc.GetWindow()).GetWidth(); + int bitmap_height = bitmap->GetBitmapFor(dc.GetWindow()).GetHeight(); int offset_x = grid_cell_border_width; int offset_y = (rect.height > bitmap_height) ? (rect.height - bitmap_height) / 2 : grid_cell_border_height; @@ -345,7 +345,7 @@ void GridCellFilamentsRenderer::Draw(wxGrid &grid, wxGridCellAttr &attr, wxDC &d dc.SetBrush(wxBrush(attr.GetBackgroundColour())); dc.DrawRectangle(rect); if ( grid_row->model_volume_type != ModelVolumeType::NEGATIVE_VOLUME) { - dc.DrawBitmap(*bitmap, wxPoint(rect.x + offset_x, rect.y + offset_y)); + dc.DrawBitmap(bitmap->GetBitmapFor(dc.GetWindow()), wxPoint(rect.x + offset_x, rect.y + offset_y));//TODO: determine if this way of getting bitmap works well } text_rect.x += bitmap_width + grid_cell_border_width * 2; @@ -518,16 +518,16 @@ void GridCellComboBoxRenderer::Draw(wxGrid &grid, wxGridCellAttr &attr, wxDC &dc ObjectGridTable::ObjectGridRow *grid_row = table->get_grid_row(row - 1); ConfigOptionInt & cur_option = dynamic_cast((*grid_row)[(ObjectGridTable::GridColType) col]); - wxBitmap *bitmap = table->get_color_bitmap((cur_option.value >= 1) ? cur_option.value - 1 : cur_option.value); - int bitmap_width = bitmap->GetWidth(); - int bitmap_height = bitmap->GetHeight(); + wxBitmapBundle *bitmap = table->get_color_bitmap((cur_option.value >= 1) ? cur_option.value - 1 : cur_option.value); + int bitmap_width = bitmap->GetBitmapFor(dc.GetWindow()).GetWidth(); + int bitmap_height = bitmap->GetBitmapFor(dc.GetWindow()).GetHeight(); int offset_x = grid_cell_border_width; int offset_y = (rect.height > bitmap_height) ? (rect.height - bitmap_height) / 2 : grid_cell_border_height; dc.SetPen(*wxTRANSPARENT_PEN); dc.SetBrush(wxBrush(attr.GetBackgroundColour())); dc.DrawRectangle(rect); - dc.DrawBitmap(*bitmap, wxPoint(rect.x + offset_x, rect.y + offset_y)); + dc.DrawBitmap(bitmap->GetBitmapFor(dc.GetWindow()), wxPoint(rect.x + offset_x, rect.y + offset_y)); //TODO: determine if this way of getting bitmap works well text_rect.x += bitmap_width + grid_cell_border_width * 2; text_rect.width -= (bitmap_width + grid_cell_border_width * 2); } @@ -2641,12 +2641,12 @@ void ObjectGridTable::OnCellValueChanged(int row, int col) } } -wxBitmap& ObjectGridTable::get_undo_bitmap(bool selected) +wxBitmapBundle& ObjectGridTable::get_undo_bitmap(bool selected) { return m_panel->m_undo_bitmap; } -wxBitmap* ObjectGridTable::get_color_bitmap(int color_index) +wxBitmapBundle* ObjectGridTable::get_color_bitmap(int color_index) { if (color_index < m_panel->m_color_bitmaps.size()) return m_panel->m_color_bitmaps[color_index]; diff --git a/src/slic3r/GUI/GUI_ObjectTable.hpp b/src/slic3r/GUI/GUI_ObjectTable.hpp index a21436fe0e..6aca182533 100644 --- a/src/slic3r/GUI/GUI_ObjectTable.hpp +++ b/src/slic3r/GUI/GUI_ObjectTable.hpp @@ -82,10 +82,10 @@ public: GridCellFilamentsEditor(size_t count = 0, const wxString choices[] = NULL, bool allowOthers = false, - std::vector* bitmaps = NULL); + std::vector* bitmaps = NULL); GridCellFilamentsEditor(const wxArrayString& choices, bool allowOthers = false, - std::vector* bitmaps = NULL); + std::vector* bitmaps = NULL); virtual void Create(wxWindow* parent, wxWindowID id, @@ -105,7 +105,7 @@ protected: ::ComboBox *Combo() const { return (::ComboBox *)m_control; } void OnComboCloseUp(wxCommandEvent& evt); - std::vector* m_icons; + std::vector* m_icons; wxDECLARE_NO_COPY_CLASS(GridCellFilamentsEditor); private: @@ -498,8 +498,8 @@ public: void update_filament_to_config(ModelConfig* config, std::string& key, ConfigOption& new_value, ConfigOption& ori_value, bool is_object); void update_volume_values_from_object(int row, int col); void update_value_to_object(Model* model, ObjectGridRow* grid_row, int col); - wxBitmap& get_undo_bitmap(bool selected = false); - wxBitmap* get_color_bitmap(int color_index); + wxBitmapBundle& get_undo_bitmap(bool selected = false); + wxBitmapBundle* get_color_bitmap(int color_index); bool OnCellLeftClick(int row, int col, ConfigOptionType &type); void OnSelectCell(int row, int col); void OnRangeSelected(int row, int col, int row_count, int col_count); @@ -610,10 +610,10 @@ private: int init_filaments_and_colors(); wxFloatingPointValidator m_float_validator; - wxBitmap m_undo_bitmap; - std::vector m_color_bitmaps; - ScalableBitmap m_bmp_reset; - ScalableBitmap m_bmp_reset_disable; + wxBitmapBundle m_undo_bitmap; + std::vector m_color_bitmaps; + wxBitmapBundle m_bmp_reset; + wxBitmapBundle m_bmp_reset_disable; private: wxDECLARE_ABSTRACT_CLASS(ObjectGrid); wxDECLARE_EVENT_TABLE(); diff --git a/src/slic3r/GUI/GUI_ObjectTableSettings.cpp b/src/slic3r/GUI/GUI_ObjectTableSettings.cpp index 7468d9c1b4..b3508c5aaa 100644 --- a/src/slic3r/GUI/GUI_ObjectTableSettings.cpp +++ b/src/slic3r/GUI/GUI_ObjectTableSettings.cpp @@ -173,7 +173,7 @@ bool ObjectTableSettings::update_settings_list(bool is_object, bool is_multiple_ btn->SetBitmapFocus(m_bmp_reset_focus.bmp()); - btn->SetBitmapHover(m_bmp_reset_focus.bmp()); + btn->SetBitmapHover(m_bmp_reset_focus.get_bitmap()); #ifdef __WINDOWS__ btn->SetBitmapDisabled(m_bmp_reset_disable.bmp()); @@ -236,7 +236,7 @@ bool ObjectTableSettings::update_settings_list(bool is_object, bool is_multiple_ return; ctrl->SetBitmap_(m_bmp_reset); ctrl->SetBitmapFocus(m_bmp_reset_focus.bmp()); - ctrl->SetBitmapHover(m_bmp_reset_focus.bmp()); + ctrl->SetBitmapHover(m_bmp_reset_focus.get_bitmap()); #ifdef __WINDOWS__ ctrl->SetBitmapDisabled(m_bmp_reset_disable.bmp()); #endif diff --git a/src/slic3r/GUI/OG_CustomCtrl.cpp b/src/slic3r/GUI/OG_CustomCtrl.cpp index 2aef316b48..941a77d7e6 100644 --- a/src/slic3r/GUI/OG_CustomCtrl.cpp +++ b/src/slic3r/GUI/OG_CustomCtrl.cpp @@ -748,7 +748,7 @@ void OG_CustomCtrl::CtrlLine::render(wxDC& dc, wxCoord h_pos, wxCoord v_pos) if (field && field->undo_bitmap()) //if (field) // BBS: new layout - draw_act_bmps(dc, wxPoint(h_pos, v_pos), field->undo_to_sys_bitmap()->bmp(), field->undo_bitmap()->bmp(), field->blink()); + draw_act_bmps(dc, wxPoint(h_pos, v_pos), field->undo_to_sys_bitmap()->get_bitmap(), field->undo_bitmap()->get_bitmap(), field->blink()); //OcraftyoneTODO: conversion rather than rewrite return; } @@ -802,7 +802,7 @@ void OG_CustomCtrl::CtrlLine::render(wxDC& dc, wxCoord h_pos, wxCoord v_pos) auto draw_buttons = [&h_pos, &dc, &v_pos, this](Field* field, size_t bmp_rect_id = 0) { if (field && field->undo_to_sys_bitmap()) { - h_pos = draw_act_bmps(dc, wxPoint(h_pos, v_pos), field->undo_to_sys_bitmap()->bmp(), field->undo_bitmap()->bmp(), field->blink(), bmp_rect_id); + h_pos = draw_act_bmps(dc, wxPoint(h_pos, v_pos), field->undo_to_sys_bitmap()->get_bitmap(), field->undo_bitmap()->get_bitmap(), field->blink(), bmp_rect_id); //OcraftyoneTODO: conversion rather than rewrite } #ifndef DISABLE_BLINKING else if (field && !field->undo_to_sys_bitmap() && field->blink()) diff --git a/src/slic3r/GUI/ObjectDataViewModel.cpp b/src/slic3r/GUI/ObjectDataViewModel.cpp index 6352c9253a..13ff2bca69 100644 --- a/src/slic3r/GUI/ObjectDataViewModel.cpp +++ b/src/slic3r/GUI/ObjectDataViewModel.cpp @@ -72,7 +72,7 @@ const std::map INFO_ITEMS{ ObjectDataViewModelNode::ObjectDataViewModelNode(ObjectDataViewModelNode* parent, const wxString& sub_obj_name, Slic3r::ModelVolumeType type, - const wxBitmap& bmp, + const wxBitmapBundle& bmp, const wxString& extruder, const int idx/* = -1*/, const std::string& warning_icon_name /*= std::string*/) : @@ -122,7 +122,7 @@ ObjectDataViewModelNode::ObjectDataViewModelNode(ObjectDataViewModelNode* parent else if (type == itLayerRoot) { //BBS do not support layer range edit - m_bmp = create_scaled_bitmap(LayerRootIcon); // FIXME: pass window ptr + m_bmp = *get_bmp_bundle(LayerRootIcon); m_name = _(L("Layers")); } else if (type == itInfo) @@ -153,7 +153,7 @@ ObjectDataViewModelNode::ObjectDataViewModelNode(ObjectDataViewModelNode* parent } const std::string label_range = (boost::format(" %.2f-%.2f ") % layer_range.first % layer_range.second).str(); m_name = _(L("Range")) + label_range + "(" + _(L("mm")) + ")"; - m_bmp = create_scaled_bitmap(LayerIcon); // FIXME: pass window ptr + m_bmp = *get_bmp_bundle(LayerIcon); set_icons(); init_container(); @@ -192,7 +192,7 @@ void ObjectDataViewModelNode::set_printable_icon(PrintIndicator printable) { m_printable = printable; m_printable_icon = m_printable == piUndef ? m_empty_bmp : - create_scaled_bitmap(m_printable == piPrintable ? "check_on" : "check_off_focused"); + *get_bmp_bundle(m_printable == piPrintable ? "check_on" : "check_off_focused"); } void ObjectDataViewModelNode::set_action_icon(bool enable) @@ -202,7 +202,7 @@ void ObjectDataViewModelNode::set_action_icon(bool enable) m_action_icon_name = m_type & itPlate ? "dot" : m_type & itObject ? undo : m_type & (itVolume | itLayer) ? undo : /*m_type & itInstance*/ "set_separate_obj"; - m_action_icon = create_scaled_bitmap(m_action_icon_name); // FIXME: pass window ptr + m_action_icon = *get_bmp_bundle(m_action_icon_name); // FIXME: pass window ptr } // BBS @@ -210,27 +210,27 @@ void ObjectDataViewModelNode::set_color_icon(bool enable) { m_color_enable = enable; if ((m_type & itObject) && enable) - m_color_icon = create_scaled_bitmap("mmu_segmentation"); + m_color_icon = *get_bmp_bundle("mmu_segmentation"); else - m_color_icon = create_scaled_bitmap("dot"); + m_color_icon = *get_bmp_bundle("dot"); } void ObjectDataViewModelNode::set_support_icon(bool enable) { m_support_enable = enable; if ((m_type & itObject) && enable) - m_support_icon = create_scaled_bitmap("toolbar_support"); + m_support_icon = *get_bmp_bundle("toolbar_support"); else - m_support_icon = create_scaled_bitmap("dot"); + m_support_icon = *get_bmp_bundle("dot"); } void ObjectDataViewModelNode::set_sinking_icon(bool enable) { m_sink_enable = enable; if ((m_type & itObject) && enable) - m_sinking_icon = create_scaled_bitmap("objlist_sinking"); + m_sinking_icon = *get_bmp_bundle("objlist_sinking"); else - m_sinking_icon = create_scaled_bitmap("dot"); + m_sinking_icon = *get_bmp_bundle("dot"); } void ObjectDataViewModelNode::set_warning_icon(const std::string& warning_icon_name) @@ -245,14 +245,14 @@ void ObjectDataViewModelNode::update_settings_digest_bitmaps() m_bmp = m_empty_bmp; std::string scaled_bitmap_name = m_name.ToUTF8().data(); - scaled_bitmap_name += "-em" + std::to_string(wxGetApp().em_unit()) + (wxGetApp().dark_mode() ? "-dm" : ""); + scaled_bitmap_name += (wxGetApp().dark_mode() ? "-dm" : ""); - wxBitmap *bmp = m_bitmap_cache->find(scaled_bitmap_name); + wxBitmapBundle *bmp = m_bitmap_cache->find_bndl(scaled_bitmap_name); if (bmp == nullptr) { - std::vector bmps; + std::vector bmps; for (auto& category : m_opt_categories) - bmps.emplace_back(SettingsFactory::get_category_bitmap(category, false)); - bmp = m_bitmap_cache->insert(scaled_bitmap_name, bmps); + bmps.emplace_back(SettingsFactory::get_category_bitmap(category)); + bmp = m_bitmap_cache->insert_bndl(scaled_bitmap_name, bmps); } m_bmp = *bmp; @@ -279,10 +279,10 @@ bool ObjectDataViewModelNode::update_settings_digest(const std::vectorGetExtruder().IsEmpty()) @@ -2216,12 +2216,12 @@ void ObjectDataViewModel::SetSinkState(const bool painted, wxDataViewItem obj_it void ObjectDataViewModel::Rescale() { m_volume_bmps = MenuFactory::get_volume_bitmaps(); - m_warning_bmp = create_scaled_bitmap(WarningIcon); - m_warning_manifold_bmp = create_scaled_bitmap(WarningManifoldIcon); - m_lock_bmp = create_scaled_bitmap(LockIcon); + m_warning_bmp = *get_bmp_bundle(WarningIcon); + m_warning_manifold_bmp = *get_bmp_bundle(WarningManifoldIcon); + m_lock_bmp = *get_bmp_bundle(LockIcon); for (auto item : INFO_ITEMS) - m_info_bmps[item.first] = create_scaled_bitmap(item.second.bmp_name); + m_info_bmps[item.first] = get_bmp_bundle(item.second.bmp_name); wxDataViewItemArray all_items; GetAllChildren(wxDataViewItem(0), all_items); @@ -2243,13 +2243,13 @@ void ObjectDataViewModel::Rescale() node->m_bmp = GetVolumeIcon(node->m_volume_type, node->m_warning_icon_name); break; case itLayerRoot: - node->m_bmp = create_scaled_bitmap(LayerRootIcon); + node->m_bmp = *get_bmp_bundle(LayerRootIcon); break; case itLayer: - node->m_bmp = create_scaled_bitmap(LayerIcon); + node->m_bmp = *get_bmp_bundle(LayerIcon); break; case itInfo: - node->m_bmp = m_info_bmps.at(node->m_info_item_type); + node->m_bmp = *m_info_bmps.at(node->m_info_item_type); break; default: break; } @@ -2258,22 +2258,22 @@ void ObjectDataViewModel::Rescale() } } -wxBitmap ObjectDataViewModel::GetVolumeIcon(const Slic3r::ModelVolumeType vol_type, const std::string& warning_icon_name/* = std::string()*/) +wxBitmapBundle ObjectDataViewModel::GetVolumeIcon(const Slic3r::ModelVolumeType vol_type, const std::string& warning_icon_name/* = std::string()*/) { if (warning_icon_name.empty()) - return m_volume_bmps[static_cast(vol_type)]; + return *m_volume_bmps[static_cast(vol_type)]; std::string scaled_bitmap_name = warning_icon_name + std::to_string(static_cast(vol_type)); scaled_bitmap_name += "-em" + std::to_string(wxGetApp().em_unit()) + (wxGetApp().dark_mode() ? "-dm" : "-lm"); - wxBitmap *bmp = m_bitmap_cache->find(scaled_bitmap_name); + wxBitmapBundle *bmp = m_bitmap_cache->find_bndl(scaled_bitmap_name); if (bmp == nullptr) { - std::vector bmps; + std::vector bmps; - bmps.emplace_back(GetWarningBitmap(warning_icon_name)); + bmps.emplace_back(&GetWarningBitmap(warning_icon_name)); bmps.emplace_back(m_volume_bmps[static_cast(vol_type)]); - bmp = m_bitmap_cache->insert(scaled_bitmap_name, bmps); + bmp = m_bitmap_cache->insert_bndl(scaled_bitmap_name, bmps); } return *bmp; @@ -2308,7 +2308,7 @@ void ObjectDataViewModel::DeleteWarningIcon(const wxDataViewItem& item, const bo return; if (node->GetType() & itVolume) { - node->SetWarningBitmap(m_volume_bmps[static_cast(node->volume_type())], ""); + node->SetWarningBitmap(*m_volume_bmps[static_cast(node->volume_type())], ""); return; } diff --git a/src/slic3r/GUI/ObjectDataViewModel.hpp b/src/slic3r/GUI/ObjectDataViewModel.hpp index 9d0e32385c..bc322dd438 100644 --- a/src/slic3r/GUI/ObjectDataViewModel.hpp +++ b/src/slic3r/GUI/ObjectDataViewModel.hpp @@ -71,27 +71,27 @@ class ObjectDataViewModelNode { ObjectDataViewModelNode* m_parent; MyObjectTreeModelNodePtrArray m_children; - wxBitmap m_empty_bmp; + wxBitmapBundle m_empty_bmp; size_t m_volumes_cnt = 0; std::vector< std::string > m_opt_categories; t_layer_height_range m_layer_range = { 0.0f, 0.0f }; wxString m_name; - wxBitmap& m_bmp = m_empty_bmp; + wxBitmapBundle& m_bmp = m_empty_bmp; ItemType m_type; int m_idx = -1; int m_plate_idx = -1; bool m_container = false; // BBS wxString m_extruder = wxEmptyString; - wxBitmap m_extruder_bmp; - wxBitmap m_action_icon; + wxBitmapBundle m_extruder_bmp; + wxBitmapBundle m_action_icon; // BBS - wxBitmap m_support_icon; - wxBitmap m_color_icon; - wxBitmap m_sinking_icon; + wxBitmapBundle m_support_icon; + wxBitmapBundle m_color_icon; + wxBitmapBundle m_sinking_icon; PrintIndicator m_printable {piUndef}; - wxBitmap m_printable_icon; + wxBitmapBundle m_printable_icon; std::string m_warning_icon_name{ "" }; bool m_has_lock{false}; // for cut object icon @@ -127,7 +127,7 @@ public: ObjectDataViewModelNode(ObjectDataViewModelNode* parent, const wxString& sub_obj_name, Slic3r::ModelVolumeType type, - const wxBitmap& bmp, + const wxBitmapBundle& bmp, const wxString& extruder, const int idx = -1, const std::string& warning_icon_name = std::string()); @@ -223,11 +223,11 @@ public: void SetName(const wxString &); bool SetValue(const wxVariant &variant, unsigned int col); void SetVolumeType(ModelVolumeType type) { m_volume_type = type; } - void SetBitmap(const wxBitmap &icon) { m_bmp = icon; } + void SetBitmap(const wxBitmapBundle &icon) { m_bmp = icon; } void SetExtruder(const wxString &extruder) { m_extruder = extruder; } - void SetWarningBitmap(const wxBitmap& icon, const std::string& warning_icon_name) { m_bmp = icon; m_warning_icon_name = warning_icon_name; } + void SetWarningBitmap(const wxBitmapBundle& icon, const std::string& warning_icon_name) { m_bmp = icon; m_warning_icon_name = warning_icon_name; } void SetLock(bool has_lock) { m_has_lock = has_lock; } - const wxBitmap& GetBitmap() const { return m_bmp; } + const wxBitmapBundle& GetBitmap() const { return m_bmp; } const wxString& GetName() const { return m_name; } ItemType GetType() const { return m_type; } InfoItemType GetInfoItemType() const { return m_info_item_type; } @@ -319,12 +319,12 @@ class ObjectDataViewModel :public wxDataViewModel { std::vector m_plates; std::vector m_objects; - std::vector m_volume_bmps; - std::map m_info_bmps; - wxBitmap m_empty_bmp; - wxBitmap m_warning_bmp; - wxBitmap m_warning_manifold_bmp; - wxBitmap m_lock_bmp; + std::vector m_volume_bmps; + std::map m_info_bmps; + wxBitmapBundle m_empty_bmp; + wxBitmapBundle m_warning_bmp; + wxBitmapBundle m_warning_manifold_bmp; + wxBitmapBundle m_lock_bmp; ObjectDataViewModelNode* m_plate_outside; @@ -383,7 +383,7 @@ public: // helper method for wxLog wxString GetName(const wxDataViewItem &item) const; - wxBitmap& GetBitmap(const wxDataViewItem &item) const; + wxBitmapBundle& GetBitmap(const wxDataViewItem &item) const; wxString GetExtruder(const wxDataViewItem &item) const; int GetExtruderNumber(const wxDataViewItem &item) const; @@ -465,7 +465,7 @@ public: // Rescale bitmaps for existing Items void Rescale(); - wxBitmap GetVolumeIcon(const Slic3r::ModelVolumeType vol_type, + wxBitmapBundle GetVolumeIcon(const Slic3r::ModelVolumeType vol_type, const std::string& warning_icon_name = std::string()); void AddWarningIcon(const wxDataViewItem& item, const std::string& warning_name); void DeleteWarningIcon(const wxDataViewItem& item, const bool unmark_object = false); @@ -488,7 +488,7 @@ private: wxDataViewItem AddInstanceRoot(const wxDataViewItem& parent_item); void AddAllChildren(const wxDataViewItem& parent); - wxBitmap& GetWarningBitmap(const std::string& warning_icon_name); + wxBitmapBundle& GetWarningBitmap(const std::string& warning_icon_name); void ReparentObject(ObjectDataViewModelNode* plate, ObjectDataViewModelNode* object); wxDataViewItem AddOutsidePlate(bool refresh = true); diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 8bd8923d24..8fc9b445bb 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -478,7 +478,8 @@ static struct DynamicFilamentList : DynamicList std::string type; wxGetApp().preset_bundle->filaments.find_preset(presets[i])->get_filament_type(type); str << type; - items.push_back({str, icons[i]}); + wxBitmap bmp = icons[i]->GetBitmapFor(wxGetApp().mainframe); //OcraftyoneTODO: using conversion rather than changing type of items vector + items.push_back({str, &bmp}); } DynamicList::update(); } diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp index f00b5c4612..9d2ffecd56 100644 --- a/src/slic3r/GUI/PresetComboBoxes.cpp +++ b/src/slic3r/GUI/PresetComboBoxes.cpp @@ -397,7 +397,7 @@ void PresetComboBox::add_ams_filaments(std::string selected, bool alias_name) const_cast(*iter).is_visible = true; auto color = tray.opt_string("filament_colour", 0u); auto name = tray.opt_string("tray_name", 0u); - wxBitmap bmp(*get_extruder_color_icon(color, name, 24, 16)); + wxBitmap bmp(get_extruder_color_icon(color, name, 24, 16)->GetBitmapFor(m_parent)); //OcraftyoneTODO: conversion rather than updating correctly int item_id = Append(get_preset_name(*iter), bmp.ConvertToImage(), &m_first_ams_filament + entry.first); //validate_selection(id->value == selected); // can not select } diff --git a/src/slic3r/GUI/PresetComboBoxes.hpp b/src/slic3r/GUI/PresetComboBoxes.hpp index 4e13adc384..9e6be564f0 100644 --- a/src/slic3r/GUI/PresetComboBoxes.hpp +++ b/src/slic3r/GUI/PresetComboBoxes.hpp @@ -37,7 +37,7 @@ public: PresetComboBox(wxWindow* parent, Preset::Type preset_type, const wxSize& size = wxDefaultSize, PresetBundle* preset_bundle = nullptr); ~PresetComboBox(); - enum LabelItemType { + enum LabelItemType : size_t { LABEL_ITEM_PHYSICAL_PRINTER = 0xffffff01, LABEL_ITEM_DISABLED, LABEL_ITEM_MARKER, diff --git a/src/slic3r/GUI/Widgets/ComboBox.cpp b/src/slic3r/GUI/Widgets/ComboBox.cpp index 3eaac824ed..6521da93ea 100644 --- a/src/slic3r/GUI/Widgets/ComboBox.cpp +++ b/src/slic3r/GUI/Widgets/ComboBox.cpp @@ -85,7 +85,7 @@ void ComboBox::SetSelection(int n) drop.SetSelection(n); SetLabel(drop.GetValue()); if (drop.selection >= 0 && drop.iconSize.y > 0) - SetIcon(icons[drop.selection]); + SetIcon(icons[drop.selection].GetBitmapFor(m_parent));//OcraftyoneTODO: dirty conversion } void ComboBox::SelectAndNotify(int n) { SetSelection(n); @@ -108,7 +108,7 @@ void ComboBox::SetValue(const wxString &value) drop.SetValue(value); SetLabel(value); if (drop.selection >= 0 && drop.iconSize.y > 0) - SetIcon(icons[drop.selection]); + SetIcon(icons[drop.selection].GetBitmapFor(m_parent));//OcraftyoneTODO: dirty conversion } void ComboBox::SetLabel(const wxString &value) @@ -145,13 +145,13 @@ bool ComboBox::SetFont(wxFont const& font) return TextInput::SetFont(font); } -int ComboBox::Append(const wxString &item, const wxBitmap &bitmap) +int ComboBox::Append(const wxString &item, const wxBitmapBundle &bitmap) { return Append(item, bitmap, nullptr); } int ComboBox::Append(const wxString &item, - const wxBitmap &bitmap, + const wxBitmapBundle &bitmap, void * clientData) { texts.push_back(item); @@ -196,9 +196,9 @@ void ComboBox::SetString(unsigned int n, wxString const &value) if (n == drop.GetSelection()) SetLabel(value); } -wxBitmap ComboBox::GetItemBitmap(unsigned int n) { return icons[n]; } +wxBitmap ComboBox::GetItemBitmap(unsigned int n) { return icons[n].GetBitmapFor(m_parent); } -void ComboBox::SetItemBitmap(unsigned int n, wxBitmap const &bitmap) +void ComboBox::SetItemBitmap(unsigned int n, wxBitmapBundle const &bitmap) { if (n >= texts.size()) return; icons[n] = bitmap; diff --git a/src/slic3r/GUI/Widgets/ComboBox.hpp b/src/slic3r/GUI/Widgets/ComboBox.hpp index e79ca3ee54..b2aca74b08 100644 --- a/src/slic3r/GUI/Widgets/ComboBox.hpp +++ b/src/slic3r/GUI/Widgets/ComboBox.hpp @@ -10,7 +10,7 @@ class ComboBox : public wxWindowWithItems { std::vector texts; - std::vector icons; + std::vector icons; std::vector datas; std::vector types; @@ -33,9 +33,9 @@ public: virtual bool SetFont(wxFont const & font) override; public: - int Append(const wxString &item, const wxBitmap &bitmap = wxNullBitmap); + int Append(const wxString &item, const wxBitmapBundle &bitmap = wxNullBitmap); - int Append(const wxString &item, const wxBitmap &bitmap, void *clientData); + int Append(const wxString &item, const wxBitmapBundle &bitmap, void *clientData); unsigned int GetCount() const override; @@ -60,7 +60,7 @@ public: void SetString(unsigned int n, wxString const &value) override; wxBitmap GetItemBitmap(unsigned int n); - void SetItemBitmap(unsigned int n, wxBitmap const &bitmap); + void SetItemBitmap(unsigned int n, wxBitmapBundle const &bitmap); protected: virtual int DoInsertItems(const wxArrayStringsAdapter &items, diff --git a/src/slic3r/GUI/Widgets/DropDown.cpp b/src/slic3r/GUI/Widgets/DropDown.cpp index 3d34b2a5e8..837a6c79d6 100644 --- a/src/slic3r/GUI/Widgets/DropDown.cpp +++ b/src/slic3r/GUI/Widgets/DropDown.cpp @@ -29,7 +29,7 @@ END_EVENT_TABLE() */ DropDown::DropDown(std::vector &texts, - std::vector &icons) + std::vector &icons) : texts(texts) , icons(icons) , state_handler(this) @@ -44,7 +44,7 @@ DropDown::DropDown(std::vector &texts, DropDown::DropDown(wxWindow * parent, std::vector &texts, - std::vector &icons, + std::vector &icons, long style) : DropDown(texts, icons) { @@ -285,17 +285,17 @@ void DropDown::render(wxDC &dc) if (rcContent.y > size.y) break; wxPoint pt = rcContent.GetLeftTop(); auto & icon = icons[i]; - auto size2 = GetBmpSize(icon); + auto size2 = get_preferred_size(icon, m_parent); if (iconSize.x > 0) { if (icon.IsOk()) { pt.y += (rcContent.height - size2.y) / 2; - dc.DrawBitmap(icon, pt); + dc.DrawBitmap(icon.GetBitmapFor(m_parent), pt); } pt.x += iconSize.x + 5; pt.y = rcContent.y; } else if (icon.IsOk()) { pt.y += (rcContent.height - size2.y) / 2; - dc.DrawBitmap(icon, pt); + dc.DrawBitmap(icon.GetBitmapFor(m_parent), pt); pt.x += size2.x + 5; pt.y = rcContent.y; } @@ -325,7 +325,7 @@ void DropDown::messureSize() for (size_t i = 0; i < texts.size(); ++i) { wxSize size1 = text_off ? wxSize() : dc.GetMultiLineTextExtent(texts[i]); if (icons[i].IsOk()) { - wxSize size2 = GetBmpSize(icons[i]); + wxSize size2 = get_preferred_size(icons[i], m_parent); if (size2.x > iconSize.x) iconSize = size2; if (!align_icon) { size1.x += size2.x + (text_off ? 0 : 5); diff --git a/src/slic3r/GUI/Widgets/DropDown.hpp b/src/slic3r/GUI/Widgets/DropDown.hpp index e2a6cb4930..f3ecc7d2e5 100644 --- a/src/slic3r/GUI/Widgets/DropDown.hpp +++ b/src/slic3r/GUI/Widgets/DropDown.hpp @@ -15,7 +15,7 @@ wxDECLARE_EVENT(EVT_DISMISS, wxCommandEvent); class DropDown : public PopupWindow { std::vector & texts; - std::vector & icons; + std::vector & icons; bool need_sync = false; int selection = -1; int hover_item = -1; @@ -43,11 +43,11 @@ class DropDown : public PopupWindow public: DropDown(std::vector &texts, - std::vector &icons); + std::vector &icons); DropDown(wxWindow * parent, std::vector &texts, - std::vector &icons, + std::vector &icons, long style = 0); void Create(wxWindow * parent,