diff --git a/src/slic3r/GUI/DoubleSliderForLayers.cpp b/src/slic3r/GUI/DoubleSliderForLayers.cpp index d9c3bde007..e4dc8b866a 100644 --- a/src/slic3r/GUI/DoubleSliderForLayers.cpp +++ b/src/slic3r/GUI/DoubleSliderForLayers.cpp @@ -647,6 +647,10 @@ void DSForLayers::Render(const int canvas_width, const int canvas_height, float // discard all getters dialogs m_show_get_jump_value = false; } + else if (m_ctrl.IsLClickOnThumb() && can_edit() && + !m_ticks.has_tick(m_ctrl.GetActivePos())) { + add_code_as_tick(ColorChange); + } // draw action buttons diff --git a/src/slic3r/GUI/ImGuiDoubleSlider.cpp b/src/slic3r/GUI/ImGuiDoubleSlider.cpp index cae765852f..172d3616e1 100644 --- a/src/slic3r/GUI/ImGuiDoubleSlider.cpp +++ b/src/slic3r/GUI/ImGuiDoubleSlider.cpp @@ -257,6 +257,16 @@ ImRect ImGuiControl::GetActiveThumbRect() const return m_selection == ssLower ? m_regions.lower_thumb : m_regions.higher_thumb; } +bool ImGuiControl::IsLClickOnThumb() +{ + if (m_lclick_on_selected_thumb) { + // discard left mouse click at list its value is checked to avoud reuse it on next frame + m_lclick_on_selected_thumb = false; + return true; + } + return false; +} + void ImGuiControl::draw_scroll_line(const ImRect& scroll_line, const ImRect& slideable_region) { if (m_cb_draw_scroll_line) @@ -515,6 +525,17 @@ bool ImGuiControl::draw_slider( int* higher_pos, int* lower_pos, context.IO.MouseClicked[0]) m_rclick_on_selected_thumb = false; + // detect left click on selected thumb + if (ImGui::ItemHoverable(active_thumb, id) && !pos_changed) { + ImVec2 active_thumb_center = active_thumb.GetCenter(); + if (context.IO.MouseClicked[0]) + m_active_thumb_center_on_lcklick = active_thumb_center; + if (context.IO.MouseReleased[0] && + (m_active_thumb_center_on_lcklick.y == active_thumb_center.y) && + (m_active_thumb_center_on_lcklick.x == active_thumb_center.x) ) + m_lclick_on_selected_thumb = true; + } + // render slider ImVec2 higher_thumb_center = m_regions.higher_thumb.GetCenter(); diff --git a/src/slic3r/GUI/ImGuiDoubleSlider.hpp b/src/slic3r/GUI/ImGuiDoubleSlider.hpp index 8530f08188..058dbc9c80 100644 --- a/src/slic3r/GUI/ImGuiDoubleSlider.hpp +++ b/src/slic3r/GUI/ImGuiDoubleSlider.hpp @@ -84,6 +84,7 @@ public: ImRect GetActiveThumbRect() const; bool IsRClickOnThumb() const { return m_rclick_on_selected_thumb; } + bool IsLClickOnThumb(); bool is_horizontal() const { return !(m_flags & ImGuiSliderFlags_Vertical); } bool render(); @@ -138,6 +139,8 @@ private: int m_mouse_pos; bool m_rclick_on_selected_thumb{ false }; + bool m_lclick_on_selected_thumb{ false }; + ImVec2 m_active_thumb_center_on_lcklick; bool m_draw_lower_thumb{ true }; bool m_combine_thumbs { false }; diff --git a/src/slic3r/GUI/TickCodesManager.hpp b/src/slic3r/GUI/TickCodesManager.hpp index d36dae989a..5c055472b7 100644 --- a/src/slic3r/GUI/TickCodesManager.hpp +++ b/src/slic3r/GUI/TickCodesManager.hpp @@ -113,7 +113,6 @@ class TickCodeManager ExtrudersSequence m_extruders_sequence; bool has_tick_with_code(Type type); - bool has_tick(int tick); std::string get_color_for_tick(TickCode tick, Type type, const int extruder); @@ -149,6 +148,7 @@ public: void set_ticks(const Info& custom_gcode_per_print_z); + bool has_tick(int tick); bool add_tick(const int tick, Type type, int extruder, double print_z); bool edit_tick(std::set::iterator it, double print_z); void switch_code(Type type_from, Type type_to);