diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 83b907f01..e2aa6fb7b 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -4427,12 +4427,11 @@ bool GLCanvas3D::_init_main_toolbar() arrow_data.top = 0; arrow_data.right = 0; arrow_data.bottom = 0; - if (!m_main_toolbar.init_arrow(arrow_data)) { BOOST_LOG_TRIVIAL(error) << "Main toolbar failed to load arrow texture."; } - + // m_gizmos is created at constructor, thus we can init arrow here. if (!m_gizmos.init_arrow(arrow_data)) { BOOST_LOG_TRIVIAL(error) << "Gizmos manager failed to load arrow texture."; @@ -4643,6 +4642,18 @@ bool GLCanvas3D::_init_undoredo_toolbar() return true; } + // init arrow + BackgroundTexture::Metadata arrow_data; + arrow_data.filename = "toolbar_arrow.svg"; + arrow_data.left = 0; + arrow_data.top = 0; + arrow_data.right = 0; + arrow_data.bottom = 0; + if (!m_undoredo_toolbar.init_arrow(arrow_data)) + { + BOOST_LOG_TRIVIAL(error) << "Undo/Redo toolbar failed to load arrow texture."; + } + // m_undoredo_toolbar.set_layout_type(GLToolbar::Layout::Vertical); m_undoredo_toolbar.set_layout_type(GLToolbar::Layout::Horizontal); m_undoredo_toolbar.set_horizontal_orientation(GLToolbar::Layout::HO_Left); @@ -5376,6 +5387,10 @@ void GLCanvas3D::_render_undoredo_toolbar() m_undoredo_toolbar.set_position(top, left); m_undoredo_toolbar.render(*this); + if (m_toolbar_highlighter.m_render_arrow) + { + m_undoredo_toolbar.render_arrow(*this, m_toolbar_highlighter.m_toolbar_item); + } } void GLCanvas3D::_render_collapse_toolbar() const diff --git a/src/slic3r/GUI/GLToolbar.cpp b/src/slic3r/GUI/GLToolbar.cpp index cea68eaaa..86827442d 100644 --- a/src/slic3r/GUI/GLToolbar.cpp +++ b/src/slic3r/GUI/GLToolbar.cpp @@ -1143,6 +1143,10 @@ void GLToolbar::render_background(float left, float top, float right, float bott void GLToolbar::render_arrow(const GLCanvas3D& parent, GLToolbarItem* highlighted_item) { + // arrow texture not initialized + if (m_arrow_texture.texture.get_id() == 0) + return; + float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); float factor = inv_zoom * m_layout.scale; @@ -1157,6 +1161,7 @@ void GLToolbar::render_arrow(const GLCanvas3D& parent, GLToolbarItem* highlighte float left = m_layout.left; float top = m_layout.top - icon_stride; + bool found = false; for (const GLToolbarItem* item : m_items) { if (!item->is_visible()) continue; @@ -1164,11 +1169,15 @@ void GLToolbar::render_arrow(const GLCanvas3D& parent, GLToolbarItem* highlighte if (item->is_separator()) left += separator_stride; else { - if (item->get_name() == highlighted_item->get_name()) + if (item->get_name() == highlighted_item->get_name()) { + found = true; break; + } left += icon_stride; } } + if (!found) + return; left += border; top -= separator_stride;