diff --git a/resources/images/seperator.svg b/resources/images/seperator.svg index d8313899c7..c053a0aa4a 100644 --- a/resources/images/seperator.svg +++ b/resources/images/seperator.svg @@ -1,69 +1,3 @@ - - - - - - - - - - - - - + + diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index fbbaccb051..e9a54f7da7 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -595,6 +595,7 @@ GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas, Bed3D &bed) #endif , m_in_render(false) , m_main_toolbar(GLToolbar::Normal, "Main") + , m_separator_toolbar(GLToolbar::Normal, "Separator") , m_assemble_view_toolbar(GLToolbar::Normal, "Assembly_View") , m_return_toolbar() , m_canvas_type(ECanvasType::CanvasView3D) @@ -1021,6 +1022,11 @@ void GLCanvas3D::enable_return_toolbar(bool enable) m_return_toolbar.set_enabled(enable); } +void GLCanvas3D::enable_separator_toolbar(bool enable) +{ + m_separator_toolbar.set_enabled(enable); +} + void GLCanvas3D::enable_dynamic_background(bool enable) { m_dynamic_background_enabled = enable; @@ -4989,6 +4995,9 @@ bool GLCanvas3D::_init_toolbars() if (!_init_return_toolbar()) return false; + if (!_init_separator_toolbar()) + return false; + #if 0 if (!_init_view_toolbar()) return false; @@ -5129,16 +5138,6 @@ bool GLCanvas3D::_init_main_toolbar() if (!m_main_toolbar.add_item(item)) return false; - GLToolbarItem::Data sperate_item; - sperate_item.name = "seperatetag"; - sperate_item.icon_filename = "seperator.svg"; - sperate_item.sprite_id = ++item.sprite_id; - sperate_item.left.action_callback = [this]() { }; - sperate_item.visibility_callback = []()->bool { return true; }; - sperate_item.enabling_callback = []()->bool { return false; }; - if (!m_main_toolbar.add_item(sperate_item)) - return false; - return true; } @@ -5202,16 +5201,6 @@ bool GLCanvas3D::_init_assemble_view_toolbar() m_assemble_view_toolbar.set_separator_size(10); m_assemble_view_toolbar.set_gap_size(4); - GLToolbarItem::Data sperate_item; - sperate_item.name = "start_seperator"; - sperate_item.icon_filename = "seperator.svg"; - sperate_item.sprite_id = 0; - sperate_item.left.action_callback = [this]() {}; - sperate_item.visibility_callback = []()->bool { return true; }; - sperate_item.enabling_callback = []()->bool { return false; }; - if (!m_assemble_view_toolbar.add_item(sperate_item)) - return false; - GLToolbarItem::Data item; item.name = "assembly_view"; item.icon_filename = "toolbar_assemble.svg"; @@ -5240,6 +5229,45 @@ bool GLCanvas3D::_init_return_toolbar() return m_return_toolbar.init(); } +bool GLCanvas3D::_init_separator_toolbar() +{ + if (!m_separator_toolbar.is_enabled()) + return true; + + + BackgroundTexture::Metadata background_data; + background_data.filename = "toolbar_background.png"; + background_data.left = 0; + background_data.top = 0; + background_data.right = 0; + background_data.bottom = 0; + + if (!m_separator_toolbar.init(background_data)) + { + // unable to init the toolbar texture, disable it + m_separator_toolbar.set_enabled(false); + return true; + } + + m_separator_toolbar.set_layout_type(GLToolbar::Layout::Horizontal); + //BBS: assemble toolbar is at the top and right, we don't need the rounded-corner effect at the left side and the top side + m_separator_toolbar.set_horizontal_orientation(GLToolbar::Layout::HO_Left); + m_separator_toolbar.set_vertical_orientation(GLToolbar::Layout::VO_Top); + m_separator_toolbar.set_border(5.0f); + + GLToolbarItem::Data sperate_item; + sperate_item.name = "start_seperator"; + sperate_item.icon_filename = "seperator.svg"; + sperate_item.sprite_id = 0; + sperate_item.left.action_callback = [this]() {}; + sperate_item.visibility_callback = []()->bool { return true; }; + sperate_item.enabling_callback = []()->bool { return false; }; + if (!m_separator_toolbar.add_item(sperate_item)) + return false; + + return true; +} + // BBS #if 0 @@ -5839,6 +5867,7 @@ void GLCanvas3D::_check_and_update_toolbar_icon_scale() //BBS: GUI refactor: GLToolbar m_main_toolbar.set_scale(sc); m_assemble_view_toolbar.set_scale(sc); + m_separator_toolbar.set_scale(sc); collapse_toolbar.set_scale(sc); size *= m_retina_helper->get_scale_factor(); @@ -5848,15 +5877,16 @@ void GLCanvas3D::_check_and_update_toolbar_icon_scale() //BBS: GUI refactor: GLToolbar m_main_toolbar.set_icons_size(GLGizmosManager::Default_Icons_Size * scale); m_assemble_view_toolbar.set_icons_size(size); + m_separator_toolbar.set_icons_size(size); collapse_toolbar.set_icons_size(size); #endif // ENABLE_RETINA_GL //BBS: GUI refactor: GLToolbar #if BBS_TOOLBAR_ON_TOP - float collapse_toolbar_width = collapse_toolbar.is_enabled() ? collapse_toolbar.get_width() : 0.0f; + float collapse_toolbar_width = collapse_toolbar.is_enabled() ? collapse_toolbar.get_width() : GLToolbar::Default_Icons_Size; - float top_tb_width = m_main_toolbar.get_width() + m_gizmos.get_scaled_total_width() + m_assemble_view_toolbar.get_width() + collapse_toolbar_width; - int items_cnt = m_main_toolbar.get_visible_items_cnt() + m_gizmos.get_selectable_icons_cnt() + m_assemble_view_toolbar.get_visible_items_cnt() + collapse_toolbar.get_visible_items_cnt(); + float top_tb_width = m_main_toolbar.get_width() + m_gizmos.get_scaled_total_width() + m_assemble_view_toolbar.get_width() + m_separator_toolbar.get_width() + collapse_toolbar_width; + int items_cnt = m_main_toolbar.get_visible_items_cnt() + m_gizmos.get_selectable_icons_cnt() + m_assemble_view_toolbar.get_visible_items_cnt() + m_separator_toolbar.get_visible_items_cnt() + collapse_toolbar.get_visible_items_cnt(); float noitems_width = top_tb_width - size * items_cnt; // width of separators and borders in top toolbars // calculate scale needed for items in all top toolbars @@ -5912,6 +5942,7 @@ void GLCanvas3D::_render_overlays() //BBS: GUI refactor: GLToolbar m_main_toolbar.set_scale(scale); m_assemble_view_toolbar.set_scale(scale); + m_separator_toolbar.set_scale(scale); wxGetApp().plater()->get_collapse_toolbar().set_scale(scale); m_gizmos.set_overlay_scale(scale); #else @@ -5924,10 +5955,13 @@ void GLCanvas3D::_render_overlays() //BBS: GUI refactor: GLToolbar m_main_toolbar.set_icons_size(gizmo_size); m_assemble_view_toolbar.set_icons_size(gizmo_size); + m_separator_toolbar.set_icons_size(gizmo_size); wxGetApp().plater()->get_collapse_toolbar().set_icons_size(size); m_gizmos.set_overlay_icon_size(gizmo_size); #endif // ENABLE_RETINA_GL + _render_separator_toolbar_right(); + _render_separator_toolbar_left(); _render_main_toolbar(); //BBS: GUI refactor: GLToolbar _render_imgui_select_plate_toolbar(); @@ -6130,8 +6164,9 @@ void GLCanvas3D::_render_main_toolbar() float collapse_toolbar_width = collapse_toolbar.is_enabled() ? collapse_toolbar.get_width() : 0.0f; float gizmo_width = m_gizmos.get_scaled_total_width(); float assemble_width = m_assemble_view_toolbar.get_width(); + float separator_width = m_separator_toolbar.get_width(); float top = 0.5f * (float)cnv_size.get_height() * inv_zoom; - float left = std::max(-0.5f * cnv_size.get_width(), -0.5f * (m_main_toolbar.get_width() + gizmo_width + assemble_width - collapse_toolbar_width)) * inv_zoom; + float left = std::max(-0.5f * cnv_size.get_width(), -0.5f * (m_main_toolbar.get_width() + separator_width + gizmo_width + assemble_width - collapse_toolbar_width)) * inv_zoom; #else float gizmo_height = m_gizmos.get_scaled_total_height(); float space_height = GLGizmosManager::Default_Icons_Size * wxGetApp().toolbar_icon_scale(); @@ -6322,8 +6357,9 @@ void GLCanvas3D::_render_assemble_view_toolbar() const float collapse_toolbar_width = collapse_toolbar.is_enabled() ? collapse_toolbar.get_width() : 0.0f; float gizmo_width = m_gizmos.get_scaled_total_width(); float assemble_width = m_assemble_view_toolbar.get_width(); + float separator_width = m_separator_toolbar.get_width(); float top = 0.5f * (float)cnv_size.get_height() * inv_zoom; - float main_toolbar_left = std::max(-0.5f * cnv_size.get_width(), -0.5f * (m_main_toolbar.get_width() + gizmo_width + assemble_width - collapse_toolbar_width)) * inv_zoom; + float main_toolbar_left = std::max(-0.5f * cnv_size.get_width(), -0.5f * (m_main_toolbar.get_width() + gizmo_width + assemble_width - separator_width - collapse_toolbar_width)) * inv_zoom; float left = main_toolbar_left + (m_main_toolbar.get_width() + gizmo_width) * inv_zoom; //float left = 0.5f * (m_main_toolbar.get_width() + gizmo_width - m_assemble_view_toolbar.get_width() + collapse_toolbar_width) * inv_zoom; #else @@ -6392,6 +6428,48 @@ void GLCanvas3D::_render_return_toolbar() const imgui.end(); } +void GLCanvas3D::_render_separator_toolbar_right() const +{ + if (!m_separator_toolbar.is_enabled()) + return; + + Size cnv_size = get_canvas_size(); + float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); + + GLToolbar& collapse_toolbar = wxGetApp().plater()->get_collapse_toolbar(); + float collapse_toolbar_width = collapse_toolbar.is_enabled() ? collapse_toolbar.get_width() : 0.0f; + float gizmo_width = m_gizmos.get_scaled_total_width(); + float assemble_width = m_assemble_view_toolbar.get_width(); + float separator_width = m_separator_toolbar.get_width(); + float top = 0.5f * (float)cnv_size.get_height() * inv_zoom; + float main_toolbar_left = std::max(-0.5f * cnv_size.get_width(), -0.5f * (m_main_toolbar.get_width() + gizmo_width + assemble_width - collapse_toolbar_width)) * inv_zoom; + float left = main_toolbar_left + (m_main_toolbar.get_width() + gizmo_width) * inv_zoom; + + m_separator_toolbar.set_position(top, left); + m_separator_toolbar.render(*this,GLToolbarItem::SeparatorLine); +} + +void GLCanvas3D::_render_separator_toolbar_left() const +{ + if (!m_separator_toolbar.is_enabled()) + return; + + Size cnv_size = get_canvas_size(); + float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); + + GLToolbar& collapse_toolbar = wxGetApp().plater()->get_collapse_toolbar(); + float collapse_toolbar_width = collapse_toolbar.is_enabled() ? collapse_toolbar.get_width() : 0.0f; + float gizmo_width = m_gizmos.get_scaled_total_width(); + float assemble_width = m_assemble_view_toolbar.get_width(); + float separator_width = m_separator_toolbar.get_width(); + float top = 0.5f * (float)cnv_size.get_height() * inv_zoom; + float main_toolbar_left = std::max(-0.5f * cnv_size.get_width(), -0.5f * (m_main_toolbar.get_width() + gizmo_width + assemble_width + separator_width - collapse_toolbar_width)) * inv_zoom; + float left = main_toolbar_left + (m_main_toolbar.get_width()) * inv_zoom; + + m_separator_toolbar.set_position(top, left); + m_separator_toolbar.render(*this,GLToolbarItem::SeparatorLine); +} + void GLCanvas3D::_render_collapse_toolbar() const { GLToolbar& collapse_toolbar = wxGetApp().plater()->get_collapse_toolbar(); diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index 2d26513d63..a09f4333b6 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -399,6 +399,7 @@ private: GLGizmosManager m_gizmos; //BBS: GUI refactor: GLToolbar mutable GLToolbar m_main_toolbar; + mutable GLToolbar m_separator_toolbar; mutable IMToolbar m_sel_plate_toolbar; mutable GLToolbar m_assemble_view_toolbar; mutable IMReturnToolbar m_return_toolbar; @@ -667,6 +668,7 @@ public: void enable_select_plate_toolbar(bool enable); void enable_assemble_view_toolbar(bool enable); void enable_return_toolbar(bool enable); + void enable_separator_toolbar(bool enable); void enable_dynamic_background(bool enable); void enable_labels(bool enable) { m_labels.enable(enable); } void enable_slope(bool enable) { m_slope.enable(enable); } @@ -686,6 +688,8 @@ public: float get_main_toolbar_width() { return m_main_toolbar.get_width();} float get_assemble_view_toolbar_width() { return m_assemble_view_toolbar.get_width(); } float get_assemble_view_toolbar_height() { return m_assemble_view_toolbar.get_height(); } + float get_separator_toolbar_width() { return m_separator_toolbar.get_width(); } + float get_separator_toolbar_height() { return m_separator_toolbar.get_height(); } float get_collapse_toolbar_width(); float get_collapse_toolbar_height(); @@ -923,6 +927,7 @@ private: bool _update_imgui_select_plate_toolbar(); bool _init_assemble_view_toolbar(); bool _init_return_toolbar(); + bool _init_separator_toolbar(); // BBS //bool _init_view_toolbar(); bool _init_collapse_toolbar(); @@ -967,6 +972,8 @@ private: void _render_imgui_select_plate_toolbar() const; void _render_assemble_view_toolbar() const; void _render_return_toolbar() const; + void _render_separator_toolbar_right() const; + void _render_separator_toolbar_left() const; void _render_collapse_toolbar() const; // BBS //void _render_view_toolbar() const; diff --git a/src/slic3r/GUI/GLToolbar.cpp b/src/slic3r/GUI/GLToolbar.cpp index 25d82b2625..0edf217efc 100644 --- a/src/slic3r/GUI/GLToolbar.cpp +++ b/src/slic3r/GUI/GLToolbar.cpp @@ -537,7 +537,7 @@ bool GLToolbar::update_items_state() return ret; } -void GLToolbar::render(const GLCanvas3D& parent) +void GLToolbar::render(const GLCanvas3D& parent,GLToolbarItem::EType type) { if (!m_enabled || m_items.empty()) return; @@ -548,7 +548,7 @@ void GLToolbar::render(const GLCanvas3D& parent) switch (m_layout.type) { default: - case Layout::Horizontal: { render_horizontal(parent); break; } + case Layout::Horizontal: { render_horizontal(parent,type); break; } case Layout::Vertical: { render_vertical(parent); break; } } } @@ -1385,7 +1385,7 @@ void GLToolbar::render_arrow(const GLCanvas3D& parent, GLToolbarItem* highlighte } } -void GLToolbar::render_horizontal(const GLCanvas3D& parent) +void GLToolbar::render_horizontal(const GLCanvas3D& parent,GLToolbarItem::EType type) { float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); float factor = inv_zoom * m_layout.scale; @@ -1403,6 +1403,8 @@ void GLToolbar::render_horizontal(const GLCanvas3D& parent) float left = m_layout.left; float top = m_layout.top; float right = left + scaled_width; + if (type == GLToolbarItem::SeparatorLine) + right = left + scaled_width * 0.5; float bottom = top - scaled_height; render_background(left, top, right, bottom, scaled_border); diff --git a/src/slic3r/GUI/GLToolbar.hpp b/src/slic3r/GUI/GLToolbar.hpp index c1b47b0fb0..af95aa2d0a 100644 --- a/src/slic3r/GUI/GLToolbar.hpp +++ b/src/slic3r/GUI/GLToolbar.hpp @@ -67,6 +67,7 @@ public: //BBS: GUI refactor: GLToolbar ActionWithText, ActionWithTextImage, + SeparatorLine, Num_Types }; @@ -399,7 +400,7 @@ public: // returns true if any item changed its state bool update_items_state(); - void render(const GLCanvas3D& parent); + void render(const GLCanvas3D& parent,GLToolbarItem::EType type = GLToolbarItem::Action); void render_arrow(const GLCanvas3D& parent, GLToolbarItem* highlighted_item); bool on_mouse(wxMouseEvent& evt, GLCanvas3D& parent); @@ -428,7 +429,7 @@ private: int contains_mouse_vertical(const Vec2d& mouse_pos, const GLCanvas3D& parent) const; void render_background(float left, float top, float right, float bottom, float border) const; - void render_horizontal(const GLCanvas3D& parent); + void render_horizontal(const GLCanvas3D& parent,GLToolbarItem::EType type); void render_vertical(const GLCanvas3D& parent); bool generate_icons_texture(); diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 194b3ae44d..041ce1fba2 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -2534,21 +2534,21 @@ float GUI_App::toolbar_icon_scale(const bool is_limited/* = false*/) const const float icon_sc = m_em_unit * 0.1f; #endif // __APPLE__ - return icon_sc; + //return icon_sc; - //const std::string& auto_val = app_config->get("toolkit_size"); + const std::string& auto_val = app_config->get("toolkit_size"); - //if (auto_val.empty()) - // return icon_sc; + if (auto_val.empty()) + return icon_sc; - //int int_val = 100; - //// correct value in respect to toolkit_size - //int_val = std::min(atoi(auto_val.c_str()), int_val); + int int_val = 100; + // correct value in respect to toolkit_size + int_val = std::min(atoi(auto_val.c_str()), int_val); - //if (is_limited && int_val < 50) - // int_val = 50; + if (is_limited && int_val < 50) + int_val = 50; - //return 0.01f * int_val * icon_sc; + return 0.01f * int_val * icon_sc; } void GUI_App::set_auto_toolbar_icon_scale(float scale) const diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index d9db9e0f31..e42bc599df 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -78,6 +78,7 @@ bool View3D::init(wxWindow* parent, Bed3D& bed, Model* model, DynamicPrintConfig //BBS: GUI refactor: GLToolbar m_canvas->enable_select_plate_toolbar(false); m_canvas->enable_assemble_view_toolbar(true); + m_canvas->enable_separator_toolbar(true); m_canvas->enable_labels(true); m_canvas->enable_slope(true); @@ -763,6 +764,7 @@ bool AssembleView::init(wxWindow* parent, Bed3D& bed, Model* model, DynamicPrint //BBS: GUI refactor: GLToolbar m_canvas->enable_assemble_view_toolbar(false); m_canvas->enable_return_toolbar(true); + m_canvas->enable_separator_toolbar(false); // BBS: set volume_selection_mode to Volume m_canvas->get_selection().set_volume_selection_mode(Selection::Volume);