diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp index c1265887d..4d555f6ab 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp @@ -250,7 +250,7 @@ void GLGizmoMmuSegmentation::render_triangles(const Selection &selection) const bool GLGizmoMmuSegmentation::on_number_key_down(int number) { int extruder_idx = number - 1; - if (extruder_idx < m_extruders_colors.size()) + if (extruder_idx < m_extruders_colors.size() && extruder_idx >= 0) m_selected_extruder_idx = extruder_idx; return true; @@ -523,7 +523,7 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott color_button_high = ImGui::GetCursorPos().y - color_button - 2.0; if (color_picked) { m_selected_extruder_idx = extruder_idx; } - if (extruder_idx < 9 && ImGui::IsItemHovered()) m_imgui->tooltip(_L("Shortcut Key ") + std::to_string(extruder_idx + 1), max_tooltip_width); + if (extruder_idx < 16 && ImGui::IsItemHovered()) m_imgui->tooltip(_L("Shortcut Key ") + std::to_string(extruder_idx + 1), max_tooltip_width); // draw filament id float gray = 0.299 * extruder_color[0] + 0.587 * extruder_color[1] + 0.114 * extruder_color[2]; diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp index 9c4e59293..693434002 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp @@ -50,6 +50,7 @@ GLGizmosManager::GLGizmosManager(GLCanvas3D& parent) //BBS: GUI refactor: add object manipulation in gizmo , m_object_manipulation(parent) { + m_timer_set_color.Bind(wxEVT_TIMER, &GLGizmosManager::on_set_color_timer, this); } std::vector GLGizmosManager::get_selectable_idxs() const @@ -1250,8 +1251,18 @@ bool GLGizmosManager::on_key(wxKeyEvent& evt) else if (m_current == MmuSegmentation) { GLGizmoMmuSegmentation* mmu_seg = dynamic_cast(get_current()); if (mmu_seg != nullptr) { - if (keyCode > '0' && keyCode <= '9') { - processed = mmu_seg->on_number_key_down(keyCode - '0'); + if (keyCode >= '0' && keyCode <= '9') { + if (keyCode == '1' && !m_timer_set_color.IsRunning()) { + m_timer_set_color.StartOnce(500); + processed = true; + } + else if (keyCode < '7' && m_timer_set_color.IsRunning()) { + processed = mmu_seg->on_number_key_down(keyCode - '0'+10); + m_timer_set_color.Stop(); + } + else { + processed = mmu_seg->on_number_key_down(keyCode - '0'); + } } else if (keyCode == 'F' || keyCode == 'T' || keyCode == 'S' || keyCode == 'C' || keyCode == 'H' || keyCode == 'G') { processed = mmu_seg->on_key_down_select_tool_type(keyCode); @@ -1290,6 +1301,15 @@ bool GLGizmosManager::on_key(wxKeyEvent& evt) return processed; } +void GLGizmosManager::on_set_color_timer(wxTimerEvent& evt) +{ + if (m_current == MmuSegmentation) { + GLGizmoMmuSegmentation* mmu_seg = dynamic_cast(get_current()); + mmu_seg->on_number_key_down(1); + m_parent.set_as_dirty(); + } +} + void GLGizmosManager::update_after_undo_redo(const UndoRedo::Snapshot& snapshot) { update_data(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp index 61f57142a..1ca807c6f 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp @@ -143,6 +143,10 @@ private: bool m_serializing; std::unique_ptr m_common_gizmos_data; + //When there are more than 9 colors, shortcut key coloring + wxTimer m_timer_set_color; + void on_set_color_timer(wxTimerEvent& evt); + // key MENU_ICON_NAME, value = ImtextureID std::map icon_list;