diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp index b7278b60a..76f6edc03 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp @@ -220,7 +220,8 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l init_print_instance(); if (! m_c->selection_info()->model_object()) return; - + m_imgui_start_pos[0] = x; + m_imgui_start_pos[1] = y; // BBS wchar_t old_tool = m_current_tool; @@ -494,7 +495,8 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l m_parent.set_as_dirty(); } ImGui::PopStyleVar(2); - + m_imgui_end_pos[0] = m_imgui_start_pos[0] + ImGui::GetWindowWidth(); + m_imgui_end_pos[1] = m_imgui_start_pos[1] + ImGui::GetWindowHeight(); GizmoImguiEnd(); // BBS diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp index 8a1ab7f07..8c9d16643 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp @@ -392,7 +392,8 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott const float approx_height = m_imgui->scaled(22.0f); y = std::min(y, bottom_limit - approx_height); GizmoImguiSetNextWIndowPos(x, y, ImGuiCond_Always); - + m_imgui_start_pos[0] = x; + m_imgui_start_pos[1] = y; wchar_t old_tool = m_current_tool; // BBS @@ -835,6 +836,8 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott m_parent.set_as_dirty(); } ImGui::PopStyleVar(2); + m_imgui_end_pos[0] = m_imgui_start_pos[0] + ImGui::GetWindowWidth(); + m_imgui_end_pos[1] = m_imgui_start_pos[1] + ImGui::GetWindowHeight(); GizmoImguiEnd(); // BBS diff --git a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp index ed490d0d1..d7c64f21e 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp @@ -156,6 +156,10 @@ void GLGizmoPainterBase::render_cursor() const else { m_rr.mouse_position = m_parent.get_local_mouse_position(); } + if (is_mouse_hit_in_imgui()) { + m_rr.mesh_id = -1; + return; + } if (m_rr.mesh_id == -1) { m_is_cursor_in_imgui = false; m_x_for_height_input = -1; @@ -689,6 +693,10 @@ std::vector GLGizmoPainterBase::get_pr bool GLGizmoPainterBase::gizmo_event(SLAGizmoEventType action, const Vec2d& mouse_position, bool shift_down, bool alt_down, bool control_down) { Vec2d _mouse_position = mouse_position; + if (is_mouse_hit_in_imgui()) { + m_rr.mesh_id = -1; + return false; + } if (action == SLAGizmoEventType::MouseWheelUp || action == SLAGizmoEventType::MouseWheelDown) { if (control_down) { @@ -1098,6 +1106,14 @@ CommonGizmosDataID GLGizmoPainterBase::on_get_requirements() const | int(CommonGizmosDataID::ObjectClipper)); } +bool GLGizmoPainterBase::is_mouse_hit_in_imgui() const +{ + if (m_rr.mouse_position[0] >= m_imgui_start_pos[0] && m_rr.mouse_position[1] >= m_imgui_start_pos[1]&& + m_rr.mouse_position[0] <= m_imgui_end_pos[0] && m_rr.mouse_position[1] <= m_imgui_end_pos[1]) { + return true; + } + return false; +} void GLGizmoPainterBase::on_set_state() { diff --git a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp index e0f3df550..216219ca7 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp @@ -403,8 +403,10 @@ protected: bool wants_enter_leave_snapshots() const override { return true; } virtual wxString handle_snapshot_action_name(bool shift_down, Button button_down) const = 0; - + bool is_mouse_hit_in_imgui()const; friend class ::Slic3r::GUI::GLGizmoMmuSegmentation; + mutable Vec2i m_imgui_start_pos{0, 0}; + mutable Vec2i m_imgui_end_pos{0, 0}; }; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp index 0c6841f8b..ed259c1c5 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp @@ -187,7 +187,8 @@ void GLGizmoSeam::on_render_input_window(float x, float y, float bottom_limit) { if (! m_c->selection_info()->model_object()) return; - + m_imgui_start_pos[0] = x; + m_imgui_start_pos[1] = y; const float approx_height = m_imgui->scaled(12.5f); y = std::min(y, bottom_limit - approx_height); //BBS: GUI refactor: move gizmo to the right @@ -370,6 +371,8 @@ void GLGizmoSeam::on_render_input_window(float x, float y, float bottom_limit) m_parent.set_as_dirty(); } ImGui::PopStyleVar(2); + m_imgui_end_pos[0] = m_imgui_start_pos[0] + ImGui::GetWindowWidth(); + m_imgui_end_pos[1] = m_imgui_start_pos[1] + ImGui::GetWindowHeight(); GizmoImguiEnd(); //BBS