From 3720e6a3a3ec59fca0f8781139e5d329156f81e6 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Wed, 10 Jul 2019 10:15:07 +0200 Subject: [PATCH] Fixed redo_to() function and code cleaning from redundant options --- src/slic3r/GUI/GLCanvas3D.cpp | 66 +++++++++++++---------------------- src/slic3r/GUI/GLToolbar.cpp | 3 +- src/slic3r/GUI/GLToolbar.hpp | 16 --------- src/slic3r/GUI/Plater.cpp | 2 +- 4 files changed, 27 insertions(+), 60 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index d87b97f53..4fa5b8b27 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -3473,31 +3473,31 @@ static bool string_getter(const bool is_undo, int idx, const char** out_text) void GLCanvas3D::_render_undo_redo_stack(const bool is_undo, float pos_x) { - if (m_canvas != nullptr && m_toolbar.get_imgui_visible(is_undo)) - { - const wxString& stack_name = _(is_undo ? L("Undo") : L("Redo")); - ImGuiWrapper* imgui = wxGetApp().imgui(); + const wxString& stack_name = _(is_undo ? L("Undo") : L("Redo")); + ImGuiWrapper* imgui = wxGetApp().imgui(); - const float x = pos_x * (float)get_camera().get_zoom() + 0.5f * (float)get_canvas_size().get_width(); - imgui->set_next_window_pos(x, m_toolbar.get_height(), ImGuiCond_Always); + const float x = pos_x * (float)get_camera().get_zoom() + 0.5f * (float)get_canvas_size().get_width(); + imgui->set_next_window_pos(x, m_toolbar.get_height(), ImGuiCond_Always); - imgui->set_next_window_bg_alpha(0.5f); - imgui->begin(wxString::Format(_(L("%s Stack")), stack_name), - ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse); + imgui->set_next_window_bg_alpha(0.5f); + imgui->begin(wxString::Format(_(L("%s Stack")), stack_name), + ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse); - int hovered = m_toolbar.get_imgui_hovered_pos(); - int selected = -1; - const float em = static_cast(wxGetApp().em_unit()); + int hovered = m_toolbar.get_imgui_hovered_pos(); + int selected = -1; + const float em = static_cast(wxGetApp().em_unit()); - if (imgui->undo_redo_list(ImVec2(12 * em, 20 * em), is_undo, &string_getter, hovered, selected)) - m_toolbar.set_imgui_hovered_pos(hovered); - if (selected >= 0) - is_undo ? wxGetApp().plater()->undo_to(selected) : wxGetApp().plater()->redo_to(selected); + if (imgui->undo_redo_list(ImVec2(12 * em, 20 * em), is_undo, &string_getter, hovered, selected)) + m_toolbar.set_imgui_hovered_pos(hovered); + else + m_toolbar.set_imgui_hovered_pos(-1); - imgui->text(wxString::Format(_(L("%s %d Action")), stack_name, hovered + 1)); + if (selected >= 0) + is_undo ? wxGetApp().plater()->undo_to(selected) : wxGetApp().plater()->redo_to(selected); - imgui->end(); - } + imgui->text(wxString::Format(_(L("%s %d Action")), stack_name, hovered + 1)); + + imgui->end(); } bool GLCanvas3D::_init_toolbar() @@ -3685,19 +3685,10 @@ bool GLCanvas3D::_init_toolbar() #endif // ENABLE_SVG_ICONS item.tooltip = _utf8(L("Undo")) + " [" + GUI::shortkey_ctrl_prefix() + "Z]"; item.sprite_id = 11; - item.is_toggable = false; - item.action_callback = [this]() { - if (m_canvas != nullptr) { - wxPostEvent(m_canvas, SimpleEvent(EVT_GLCANVAS_UNDO)); - m_toolbar.activate_imgui(true); - } - }; + item.action_callback = [this]() { if (m_canvas != nullptr) m_toolbar.set_imgui_hovered_pos(-1); }; item.visibility_callback = []()->bool { return true; }; - item.enabled_state_callback = [this]()->bool { - if (!wxGetApp().plater()->can_undo()) { m_toolbar.hide_imgui(true); return false; } - return true; - }; - item.render_callback = [this](float pos_x, float, float, float) { _render_undo_redo_stack(true, pos_x); }; + item.enabled_state_callback = [this]()->bool { return wxGetApp().plater()->can_undo(); } ; + item.render_callback = [this](float pos_x, float, float, float) { if (m_canvas != nullptr) _render_undo_redo_stack(true, pos_x); }; if (!m_toolbar.add_item(item)) return false; @@ -3707,17 +3698,8 @@ bool GLCanvas3D::_init_toolbar() #endif // ENABLE_SVG_ICONS item.tooltip = _utf8(L("Redo")) + " [" + GUI::shortkey_ctrl_prefix() + "Y]"; item.sprite_id = 12; - item.action_callback = [this]() { - if (m_canvas != nullptr) { - wxPostEvent(m_canvas, SimpleEvent(EVT_GLCANVAS_REDO)); - m_toolbar.activate_imgui(false); - } - }; - item.enabled_state_callback = [this]()->bool { - if (!wxGetApp().plater()->can_redo()) { m_toolbar.hide_imgui(false); return false; } - return true; - }; - item.render_callback = [this](float pos_x, float, float, float) { _render_undo_redo_stack(false, pos_x); }; + item.enabled_state_callback = [this]()->bool { return wxGetApp().plater()->can_redo(); }; + item.render_callback = [this](float pos_x, float, float, float) { if (m_canvas != nullptr) _render_undo_redo_stack(false, pos_x); }; if (!m_toolbar.add_item(item)) return false; diff --git a/src/slic3r/GUI/GLToolbar.cpp b/src/slic3r/GUI/GLToolbar.cpp index f6140464b..e78605333 100644 --- a/src/slic3r/GUI/GLToolbar.cpp +++ b/src/slic3r/GUI/GLToolbar.cpp @@ -84,7 +84,8 @@ void GLToolbarItem::render(unsigned int tex_id, float left, float right, float b { GLTexture::render_sub_texture(tex_id, left, right, bottom, top, get_uvs(tex_width, tex_height, icon_size)); - m_data.render_callback(left, right, bottom, top); + if (is_pressed()) + m_data.render_callback(left, right, bottom, top); } GLTexture::Quad_UVs GLToolbarItem::get_uvs(unsigned int tex_width, unsigned int tex_height, unsigned int icon_size) const diff --git a/src/slic3r/GUI/GLToolbar.hpp b/src/slic3r/GUI/GLToolbar.hpp index e32e4a41e..78dd56081 100644 --- a/src/slic3r/GUI/GLToolbar.hpp +++ b/src/slic3r/GUI/GLToolbar.hpp @@ -252,10 +252,7 @@ private: MouseCapture m_mouse_capture; std::string m_tooltip; - bool m_undo_imgui_visible {false}; - bool m_redo_imgui_visible {false}; int m_imgui_hovered_pos { -1 }; - int m_imgui_selected_pos { -1 }; public: #if ENABLE_SVG_ICONS @@ -312,22 +309,9 @@ public: bool on_mouse(wxMouseEvent& evt, GLCanvas3D& parent); - // undo == true => "undo" imgui is activated - // undo == false => "redo" imgui is activated - bool get_imgui_visible(const bool undo) const { return undo ? m_undo_imgui_visible : m_redo_imgui_visible; } - void hide_imgui(const bool undo) { undo ? m_undo_imgui_visible = false : m_redo_imgui_visible = false; } - void activate_imgui(const bool undo) { - m_undo_imgui_visible = undo; - m_redo_imgui_visible = !undo; - m_imgui_hovered_pos = m_imgui_selected_pos = -1; - } - void set_imgui_hovered_pos(int pos = -1) { m_imgui_hovered_pos = pos; } int get_imgui_hovered_pos() const { return m_imgui_hovered_pos; } - void set_imgui_selected_pos(int pos = -1) { m_imgui_selected_pos = pos; } - int get_imgui_selected_pos() const { return m_imgui_selected_pos; } - private: void calc_layout() const; float get_width_horizontal() const; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index a450ac0e5..d8825ab3a 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -4150,7 +4150,7 @@ void Plater::redo_to(int selection) return; } - const int idx = selection + p->get_active_snapshot_index(); + const int idx = p->get_active_snapshot_index() + selection + 1; p->redo_to(p->undo_redo_stack.snapshots()[idx].timestamp); } bool Plater::undo_redo_string_getter(const bool is_undo, int idx, const char** out_text)