mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-08 23:46:24 -06:00
ENH:Optimized Gizmo toolbar layout
Change-Id: I9e323c310abd2afcf0f9586ba261f714dd718f38
This commit is contained in:
parent
5bea8a76fc
commit
dbe354995e
7 changed files with 132 additions and 108 deletions
|
@ -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();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue