diff --git a/resources/images/im_all_plates_failed.svg b/resources/images/im_all_plates_failed.svg
new file mode 100644
index 0000000000..8e309718ea
--- /dev/null
+++ b/resources/images/im_all_plates_failed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources/images/im_all_plates_failed_dark.svg b/resources/images/im_all_plates_failed_dark.svg
new file mode 100644
index 0000000000..a4b89edd4d
--- /dev/null
+++ b/resources/images/im_all_plates_failed_dark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources/images/im_all_plates_idle.svg b/resources/images/im_all_plates_idle.svg
new file mode 100644
index 0000000000..92719b0c0a
--- /dev/null
+++ b/resources/images/im_all_plates_idle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources/images/im_all_plates_idle_dark.svg b/resources/images/im_all_plates_idle_dark.svg
new file mode 100644
index 0000000000..e153c7daeb
--- /dev/null
+++ b/resources/images/im_all_plates_idle_dark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources/images/im_all_plates_slicing.svg b/resources/images/im_all_plates_slicing.svg
new file mode 100644
index 0000000000..7836f33827
--- /dev/null
+++ b/resources/images/im_all_plates_slicing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources/images/im_all_plates_slicing_dark.svg b/resources/images/im_all_plates_slicing_dark.svg
new file mode 100644
index 0000000000..1c60259a46
--- /dev/null
+++ b/resources/images/im_all_plates_slicing_dark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources/images/im_all_plates_stats.svg b/resources/images/im_all_plates_stats.svg
index 711b59ee02..eba03a0741 100644
--- a/resources/images/im_all_plates_stats.svg
+++ b/resources/images/im_all_plates_stats.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/resources/images/im_all_plates_stats_dark.svg b/resources/images/im_all_plates_stats_dark.svg
new file mode 100644
index 0000000000..814856a30e
--- /dev/null
+++ b/resources/images/im_all_plates_stats_dark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources/images/im_all_plates_stats_transparent.svg b/resources/images/im_all_plates_stats_transparent.svg
deleted file mode 100644
index 8254696754..0000000000
--- a/resources/images/im_all_plates_stats_transparent.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/imgui/imgui_widgets.cpp b/src/imgui/imgui_widgets.cpp
index 79d0638c1c..819a76cdc8 100644
--- a/src/imgui/imgui_widgets.cpp
+++ b/src/imgui/imgui_widgets.cpp
@@ -1160,7 +1160,7 @@ bool ImGui::ImageButtonEx2(ImGuiID id, ImTextureID texture_id, const ImVec2& siz
const float border_size = g.Style.FrameBorderSize;
if (border_size > 0.0f)
{
- window->DrawList->AddRect(bb.Min + ImVec2(1, 1), bb.Max + ImVec2(1, 1), col, g.Style.FrameRounding, 0, border_size);
+ //window->DrawList->AddRect(bb.Min + ImVec2(1, 1), bb.Max + ImVec2(1, 1), col, g.Style.FrameRounding, 0, border_size); // ORCA adds a secondary border without reason that causes wrong framesize
window->DrawList->AddRect(bb.Min, bb.Max, col, g.Style.FrameRounding, 0, border_size);
}
diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index 616784277c..f1de31c26d 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -1267,6 +1267,8 @@ void GLCanvas3D::on_change_color_mode(bool is_dark, bool reinit) {
m_moves_slider->on_change_color_mode(is_dark);
// Partplate
wxGetApp().plater()->get_partplate_list().on_change_color_mode(is_dark);
+ // Plates toolbar - Reload All Stats button images
+ _init_select_plate_toolbar();
// Toolbar
if (m_canvas_type == CanvasView3D) {
@@ -6542,8 +6544,12 @@ bool GLCanvas3D::_init_select_plate_toolbar()
{
std::string path = resources_dir() + "/images/";
IMToolbarItem* item = new IMToolbarItem();
- bool result = item->image_texture.load_from_svg_file(path + "im_all_plates_stats.svg", false, false, false, 128);
- result = result && item->image_texture_transparent.load_from_svg_file(path + "im_all_plates_stats_transparent.svg", false, false, false, 128);
+ // ORCA add dark mode support and load images with 2x resolution to prevent blurry image on hi-dpi screens
+ std::string ext = m_is_dark ? "_dark.svg" : ".svg";
+ bool result = item->image_stats.load_from_svg_file( path + "im_all_plates_stats" + ext, false, false, false, 200);
+ result = result && item->image_idle.load_from_svg_file( path + "im_all_plates_idle" + ext, false, false, false, 200);
+ result = result && item->image_slicing.load_from_svg_file( path + "im_all_plates_slicing" + ext, false, false, false, 200);
+ result = result && item->image_failed.load_from_svg_file( path + "im_all_plates_failed" + ext, false, false, false, 200);
m_sel_plate_toolbar.m_all_plates_stats_item = item;
return result;
@@ -7827,6 +7833,8 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar()
IMToolbarItem* all_plates_stats_item = m_sel_plate_toolbar.m_all_plates_stats_item;
PartPlateList& plate_list = wxGetApp().plater()->get_partplate_list();
+ size_t sliced_plates_cnt = 0; // ORCA make it accesable for other conditions
+
for (int i = 0; i < plate_list.get_plate_count(); i++) {
if (i < m_sel_plate_toolbar.m_items.size()) {
if (i == plate_list.get_curr_plate_index() && !all_plates_stats_item->selected)
@@ -7857,7 +7865,6 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar()
if (m_sel_plate_toolbar.show_stats_item) {
all_plates_stats_item->percent = 0.0f;
- size_t sliced_plates_cnt = 0;
for (auto plate : plate_list.get_nonempty_plate_list()) {
if (plate->is_slice_result_valid() && plate->is_slice_result_ready_for_print())
sliced_plates_cnt++;
@@ -7901,7 +7908,7 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar()
#if ENABLE_RETINA_GL
float f_scale = m_retina_helper->get_scale_factor();
#else
- float f_scale = 1.0;
+ float f_scale = wxGetApp().em_unit() / 10; // ORCA add scaling support
#endif
Size cnv_size = get_canvas_size();
auto canvas_w = float(cnv_size.get_width());
@@ -7930,17 +7937,22 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar()
window_height_max -= (128 * sc + 5);
}
+ // ORCA simplify and correct window size and margin calculations and get values from style
ImGuiWrapper& imgui = *wxGetApp().imgui();
- int item_count = m_sel_plate_toolbar.m_items.size() + (m_sel_plate_toolbar.show_stats_item ? 1 : 0);
- bool show_scroll = item_count * (button_height + frame_padding * 2.0f + button_margin) - button_margin + 22.0f * f_scale > window_height_max ? true: false;
- show_scroll = m_sel_plate_toolbar.is_display_scrollbar && show_scroll;
- float window_height = std::min(item_count * (button_height + (frame_padding + margin_size) * 2.0f + button_margin) - button_margin + 28.0f * f_scale, window_height_max);
- float window_width = m_sel_plate_toolbar.icon_width + margin_size * 2 + (show_scroll ? 28.0f * f_scale : 20.0f * f_scale);
+ int item_count = m_sel_plate_toolbar.m_items.size() + (m_sel_plate_toolbar.show_stats_item ? 1 : 0);
+ float window_height_calc = (item_count * (button_height + (margin_size + button_margin) * 2.0f) + (item_count - 1) * ImGui::GetStyle().ItemSpacing.y + ImGui::GetStyle().WindowPadding.y * 2.0f);
+ bool show_scroll = m_sel_plate_toolbar.is_display_scrollbar && (window_height_calc > window_height_max);
+ float scrollbar_size = 10.0f * f_scale ;
+ float window_height = std::min(window_height_calc, window_height_max);
+ float window_width = button_width + (margin_size + button_margin + ImGui::GetStyle().WindowPadding.x) * 2 + (show_scroll ? scrollbar_size : 0);
- ImVec4 window_bg = ImVec4(0.82f, 0.82f, 0.82f, 0.5f);
+ ImVec4 window_bg = m_is_dark ? ImVec4(.13f, .13f, .15f, .5f) : ImVec4(1.f, 1.f, 1.f, .7f);
ImVec4 button_active = ImGuiWrapper::COL_ORCA; // ORCA: Use orca color for selected sliced plate border
- ImVec4 button_hover = ImVec4(0.67f, 0.67f, 0.67, 1.0f);
- ImVec4 scroll_col = ImVec4(0.77f, 0.77f, 0.77f, 1.0f);
+ ImVec4 button_hover = ImVec4(0.67f, 0.67f, 0.67, m_is_dark ? .6f : 1.0f);
+ ImVec4 scroll_col = ImVec4(0.77f, 0.77f, 0.77f, m_is_dark ? .6f : 1.0f);
+ ImU32 plate_bg = m_is_dark ? IM_COL32(255, 255, 255, 10) : IM_COL32(0, 0, 0, 10);
+ ImU32 plate_dim = m_is_dark ? IM_COL32(30, 30, 30, 100) : IM_COL32(0, 0, 0, 50);
+ float button_radius = 1.0f * f_scale;
//ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.f, 0.f, 0.f, 1.0f));
//use white text as the background switch to black
ImGui::PushStyleColor(ImGuiCol_Text, m_is_dark ? ImVec4(.9f, .9f, .9f, 1) : ImVec4(.3f, .3f, .3f, 1)); // ORCA Plate number text > Add support for dark mode
@@ -7952,12 +7964,12 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar()
ImGui::PushStyleColor(ImGuiCol_ButtonActive, button_active);
ImGui::PushStyleColor(ImGuiCol_ButtonHovered, button_hover);
- ImGui::PushStyleVar(ImGuiStyleVar_ScrollbarSize, 10.0f);
+ ImGui::PushStyleVar(ImGuiStyleVar_ScrollbarSize, scrollbar_size);
ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);
- ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 4.0f);
- ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 3.0f);
+ ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, show_scroll ? (4.0f * f_scale) : (button_radius + margin_size + frame_padding + ImGui::GetStyle().WindowPadding.x));
+ ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, button_radius + margin_size);
- imgui.set_next_window_pos(canvas_w * 0, canvas_h * 0 + y_offset, ImGuiCond_Always, 0, 0);
+ imgui.set_next_window_pos(canvas_w * 0 + 5.0f * f_scale, canvas_h * 0 + y_offset, ImGuiCond_Always, 0, 0); // ORCA Add slight gap on left edge so toolbar looks like floating and it creates separation with sidebar
imgui.set_next_window_size(window_width, window_height, ImGuiCond_Always);
if (show_scroll)
@@ -7966,7 +7978,7 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar()
imgui.begin(_L("Select Plate"), ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse);
ImGui::SetWindowFontScale(1.2f);
- ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f * f_scale);
+ ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 2.0f * f_scale);
ImVec2 size = ImVec2(button_width, button_height); // Size of the image we want to make visible
ImVec4 bg_col = ImVec4(128.0f, 128.0f, 128.0f, 0.0f);
@@ -7995,17 +8007,14 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar()
}
}
- ImVec4 text_clr;
+ ImVec4 text_clr = m_is_dark ? ImVec4(.9f, .9f, .9f, 1) : ImVec4(.3f, .3f, .3f, 1);;
ImTextureID btn_texture_id;
- if (all_plates_stats_item->slice_state == IMToolbarItem::SliceState::UNSLICED || all_plates_stats_item->slice_state == IMToolbarItem::SliceState::SLICING || all_plates_stats_item->slice_state == IMToolbarItem::SliceState::SLICE_FAILED)
- {
- text_clr = ImVec4(0.0f, 150.f / 255.0f, 136.0f / 255, 0.2f); // ORCA: All plates slicing NOT complete - Text color
- btn_texture_id = (ImTextureID)(intptr_t)(all_plates_stats_item->image_texture_transparent.get_id());
- }
- else
- {
- text_clr = ImGuiWrapper::COL_ORCA; // ORCA: All plates slicing complete - Text color
- btn_texture_id = (ImTextureID)(intptr_t)(all_plates_stats_item->image_texture.get_id());
+ if (all_plates_stats_item->slice_state == IMToolbarItem::SliceState::UNSLICED || all_plates_stats_item->slice_state == IMToolbarItem::SliceState::SLICING){
+ btn_texture_id = (ImTextureID)(intptr_t)(m_process->running() ? all_plates_stats_item->image_slicing.get_id() : all_plates_stats_item->image_idle.get_id());
+ } else if (all_plates_stats_item->slice_state == IMToolbarItem::SliceState::SLICE_FAILED) {
+ btn_texture_id = (ImTextureID)(intptr_t)(all_plates_stats_item->image_failed.get_id());
+ } else {
+ btn_texture_id = (ImTextureID)(intptr_t)(all_plates_stats_item->image_stats.get_id());
}
if (ImGui::ImageButton2(btn_texture_id, size, {0,0}, {1,1}, frame_padding, bg_col, tint_col, margin)) {
@@ -8025,39 +8034,55 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar()
ImGui::PopStyleColor(3);
ImVec2 start_pos = ImVec2(button_start_pos.x + frame_padding + margin.x, button_start_pos.y + frame_padding + margin.y);
- if (all_plates_stats_item->slice_state == IMToolbarItem::SliceState::UNSLICED) {
- ImVec2 size = ImVec2(button_width, button_height);
- ImVec2 end_pos = ImVec2(start_pos.x + size.x, start_pos.y + size.y);
- ImGui::GetWindowDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(0, 0, 0, 80));
- }
- else if (all_plates_stats_item->slice_state == IMToolbarItem::SliceState::SLICING) {
- ImVec2 size = ImVec2(button_width, button_height * all_plates_stats_item->percent / 100.0f);
- ImVec2 rect_start_pos = ImVec2(start_pos.x, start_pos.y + size.y);
- ImVec2 rect_end_pos = ImVec2(start_pos.x + button_width, start_pos.y + button_height);
- ImGui::GetWindowDrawList()->AddRectFilled(start_pos, rect_end_pos, IM_COL32(0, 0, 0, 10));
- ImGui::GetWindowDrawList()->AddRectFilled(rect_start_pos, rect_end_pos, IM_COL32(0, 0, 0, 80));
+
+ // ORCA add more useful information about slicing process and use progress bar on stats button
+ std::string text_top;
+ std::string text_bottom;
+ ImVec2 bar_size = ImVec2(size.x - margin.x * 2, 5.0f * f_scale);
+ ImVec2 bar_bg_bgn = start_pos + ImVec2(margin.x, size.y - bar_size.y - margin.y);
+ ImVec2 bar_bg_end = bar_bg_bgn + bar_size;
+ int total_plates_cnt = plate_list.get_nonempty_plate_list().size();
+ ImGui::GetWindowDrawList()->AddRectFilled(start_pos, start_pos + size, plate_bg, button_radius); // Button background
+
+ if (all_plates_stats_item->slice_state == IMToolbarItem::SliceState::UNSLICED || all_plates_stats_item->slice_state == IMToolbarItem::SliceState::SLICING) {
+ float bar_current_perc_pos = 0;
+ float bar_total_perc_pos = all_plates_stats_item->percent * (bar_size.x / 100.0f);
+ int current_slicing_plate = 0;
+ if (m_process->running()) {
+ for (int i = 0; i < total_plates_cnt; i++) {
+ if (m_sel_plate_toolbar.m_items[i]->slice_state == IMToolbarItem::SliceState::SLICING) {
+ current_slicing_plate = i;
+ bar_current_perc_pos = m_sel_plate_toolbar.m_items[i]->percent * (bar_size.x / total_plates_cnt / 100.0f);
+ }
+ }
+ text_top = _u8L("Slicing") + ": " + std::to_string(current_slicing_plate + 1);
+ } else {
+ text_top = _u8L("Slice all");
+ }
+ text_bottom = std::to_string(sliced_plates_cnt) + " / " + std::to_string(total_plates_cnt);
+ ImVec2 bar_fg_end = ImVec2(bar_bg_bgn.x + bar_total_perc_pos + bar_current_perc_pos, bar_bg_end.y);
+ ImGui::GetWindowDrawList()->AddRectFilled(bar_bg_bgn, bar_bg_end, IM_COL32(128, 128, 128, 255), bar_size.y); // BAR BACKGROUND
+ ImGui::GetWindowDrawList()->AddRectFilled(bar_bg_bgn, bar_fg_end, IM_COL32(0, 150, 136, 255), bar_size.y); // BAR PROGRESS
}
else if (all_plates_stats_item->slice_state == IMToolbarItem::SliceState::SLICE_FAILED) {
- ImVec2 size = ImVec2(button_width, button_height);
- ImVec2 end_pos = ImVec2(start_pos.x + size.x, start_pos.y + size.y);
- ImGui::GetWindowDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(40, 1, 1, 64));
- ImGui::GetWindowDrawList()->AddRect(start_pos, end_pos, IM_COL32(208, 27, 27, 255), 0.0f, 0, 1.0f);
+ text_top = _u8L("Failed");
+ text_bottom = std::to_string(sliced_plates_cnt) + " / " + std::to_string(total_plates_cnt);
+ ImGui::GetWindowDrawList()->AddRectFilled(bar_bg_bgn, bar_bg_end, IM_COL32(225, 74, 74, 255), bar_size.y);
}
else if (all_plates_stats_item->slice_state == IMToolbarItem::SliceState::SLICED) {
- ImVec2 size = ImVec2(button_width, button_height);
- ImVec2 end_pos = ImVec2(start_pos.x + size.x, start_pos.y + size.y);
- ImGui::GetWindowDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(0, 0, 0, 10));
+ text_top = _u8L("All Plates");
+ text_bottom = _u8L("Stats");
}
// draw text
- GImGui->FontSize = 15.0f;
+ GImGui->FontSize = 15.0f * f_scale;
ImGui::PushStyleColor(ImGuiCol_Text, text_clr);
- ImVec2 text_size = ImGui::CalcTextSize(("All Plates"));
+ ImVec2 text_size = ImGui::CalcTextSize(text_top.c_str());
ImVec2 text_start_pos = ImVec2(start_pos.x + (button_width - text_size.x) / 2, start_pos.y + 3.0f * button_height / 5.0f);
- ImGui::RenderText(text_start_pos, ("All Plates"));
- text_size = ImGui::CalcTextSize(("Stats"));
+ ImGui::RenderText(text_start_pos, text_top.c_str());
+ text_size = ImGui::CalcTextSize(text_bottom.c_str());
text_start_pos = ImVec2(start_pos.x + (button_width - text_size.x) / 2, text_start_pos.y + ImGui::GetTextLineHeight());
- ImGui::RenderText(text_start_pos, ("Stats"));
+ ImGui::RenderText(text_start_pos, text_bottom.c_str());
ImGui::PopStyleColor();
ImGui::SetWindowFontScale(1.2f);
}
@@ -8116,27 +8141,34 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar()
if (item->slice_state == IMToolbarItem::SliceState::UNSLICED) {
ImVec2 size = ImVec2(button_width, button_height);
ImVec2 end_pos = ImVec2(start_pos.x + size.x, start_pos.y + size.y);
- ImGui::GetWindowDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(0, 0, 0, 80));
+ ImGui::GetWindowDrawList()->AddRectFilled(start_pos, end_pos, plate_dim, button_radius);
} else if (item->slice_state == IMToolbarItem::SliceState::SLICING) {
ImVec2 size = ImVec2(button_width, button_height * item->percent / 100.0f);
ImVec2 rect_start_pos = ImVec2(start_pos.x, start_pos.y + size.y);
ImVec2 rect_end_pos = ImVec2(start_pos.x + button_width, start_pos.y + button_height);
- ImGui::GetWindowDrawList()->AddRectFilled(start_pos, rect_end_pos, IM_COL32(0, 0, 0, 10));
- ImGui::GetWindowDrawList()->AddRectFilled(rect_start_pos, rect_end_pos, IM_COL32(0, 0, 0, 80));
+ ImGui::GetWindowDrawList()->AddRectFilled(start_pos, rect_end_pos, plate_bg, button_radius);
+ ImGui::GetWindowDrawList()->AddRectFilled(rect_start_pos, rect_end_pos, plate_dim, button_radius);
} else if (item->slice_state == IMToolbarItem::SliceState::SLICE_FAILED) {
- ImVec2 size = ImVec2(button_width, button_height);
- ImVec2 end_pos = ImVec2(start_pos.x + size.x, start_pos.y + size.y);
- ImGui::GetWindowDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(40, 1, 1, 64));
- ImGui::GetWindowDrawList()->AddRect(start_pos, end_pos, IM_COL32(208, 27, 27, 255), 0.0f, 0, 1.0f);
+ // Draw exclamation mark that matches with icon
+ ImVec2 end_pos = ImVec2(start_pos.x + button_width, start_pos.y + button_height);
+ ImVec2 center = ImVec2(start_pos.x + button_width/2, start_pos.y + button_height/2);
+ auto draw_list =ImGui::GetWindowDrawList();
+ auto clr = m_is_dark ? IM_COL32(60, 44, 48, 255) : IM_COL32(202, 186, 186, 255);
+ draw_list->AddRectFilled(start_pos, end_pos, IM_COL32(64, 1, 1, 64), button_radius);
+ draw_list->AddCircleFilled(center, 14.f * f_scale,IM_COL32(225, 74, 74, 255));
+ draw_list->AddRectFilled(center - ImVec2(2.f, 10.f) * f_scale, center + ImVec2(2.f, 4.f) * f_scale, clr, 2.f * f_scale);
+ draw_list->AddCircleFilled(center + ImVec2(0, 8.f * f_scale),2.f * f_scale, clr);
} else if (item->slice_state == IMToolbarItem::SliceState::SLICED) {
ImVec2 size = ImVec2(button_width, button_height);
ImVec2 end_pos = ImVec2(start_pos.x + size.x, start_pos.y + size.y);
- ImGui::GetWindowDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(0, 0, 0, 10));
+ ImGui::GetWindowDrawList()->AddRectFilled(start_pos, end_pos, plate_bg, button_radius);
}
// draw text
- ImVec2 text_start_pos = ImVec2(start_pos.x + 4.0f, start_pos.y + 2.0f); // ORCA move close to corner to prevent overlapping with preview
+ GImGui->FontSize = 18.0f * f_scale; // ORCA fix font scaling
+ ImVec2 text_start_pos = ImVec2(start_pos.x + 4.0f * f_scale, start_pos.y + 2.0f * f_scale); // ORCA move close to corner to prevent overlapping with preview
ImGui::RenderText(text_start_pos, std::to_string(i + 1).c_str());
+ ImGui::SetWindowFontScale(1.2f); // ORCA fix font scaling
ImGui::PopID();
}
diff --git a/src/slic3r/GUI/IMToolbar.hpp b/src/slic3r/GUI/IMToolbar.hpp
index add067d83a..24152f20ee 100644
--- a/src/slic3r/GUI/IMToolbar.hpp
+++ b/src/slic3r/GUI/IMToolbar.hpp
@@ -27,8 +27,10 @@ public:
bool selected{ false };
float percent;
- GLTexture image_texture;
- GLTexture image_texture_transparent;
+ GLTexture image_stats;
+ GLTexture image_slicing;
+ GLTexture image_idle;
+ GLTexture image_failed;
SliceState slice_state;
ImTextureID texture_id { 0 };
diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp
index 96991c0581..77302e25dc 100644
--- a/src/slic3r/GUI/PartPlate.cpp
+++ b/src/slic3r/GUI/PartPlate.cpp
@@ -3876,7 +3876,8 @@ std::vector PartPlateList::get_nonempty_plate_list()
{
std::vector nonempty_plate_list;
for (auto plate : m_plate_list){
- if (plate->get_extruders().size() != 0) {
+ //if (plate->get_extruders().size() != 0) {
+ if (!plate->empty()) { // ORCA counts failed slices as non empty because they have model and should be calculated on total count
nonempty_plate_list.push_back(plate);
}
}