mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-25 01:31:14 -06:00 
			
		
		
		
	Fixed unintended space after ImGui::SliderFloat in the hollow and sla supports gizmos.
This commit is contained in:
		
							parent
							
								
									aa47729c47
								
							
						
					
					
						commit
						5a1809579e
					
				
					 4 changed files with 51 additions and 30 deletions
				
			
		|  | @ -508,20 +508,23 @@ RENDER_AGAIN: | ||||||
|     m_imgui->begin(get_name(), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse); |     m_imgui->begin(get_name(), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse); | ||||||
| 
 | 
 | ||||||
|     // First calculate width of all the texts that are could possibly be shown. We will decide set the dialog width based on that:
 |     // First calculate width of all the texts that are could possibly be shown. We will decide set the dialog width based on that:
 | ||||||
|  |     const float clipping_slider_left = std::max(m_imgui->calc_text_size(m_desc.at("clipping_of_view")).x, | ||||||
|  |                                                 m_imgui->calc_text_size(m_desc.at("reset_direction")).x) + m_imgui->scaled(0.5f); | ||||||
|  | 
 | ||||||
|     const float settings_sliders_left = |     const float settings_sliders_left = | ||||||
|       std::max({m_imgui->calc_text_size(m_desc.at("offset")).x, |         std::max(std::max({m_imgui->calc_text_size(m_desc.at("offset")).x, | ||||||
|                            m_imgui->calc_text_size(m_desc.at("quality")).x, |                            m_imgui->calc_text_size(m_desc.at("quality")).x, | ||||||
|                            m_imgui->calc_text_size(m_desc.at("closing_distance")).x, |                            m_imgui->calc_text_size(m_desc.at("closing_distance")).x, | ||||||
|                            m_imgui->calc_text_size(m_desc.at("hole_diameter")).x, |                            m_imgui->calc_text_size(m_desc.at("hole_diameter")).x, | ||||||
|                m_imgui->calc_text_size(m_desc.at("hole_depth")).x}) |                            m_imgui->calc_text_size(m_desc.at("hole_depth")).x}) + m_imgui->scaled(0.5f), clipping_slider_left); | ||||||
|            + m_imgui->scaled(1.f); |  | ||||||
| 
 | 
 | ||||||
|     const float clipping_slider_left = std::max(m_imgui->calc_text_size(m_desc.at("clipping_of_view")).x, m_imgui->calc_text_size(m_desc.at("reset_direction")).x) + m_imgui->scaled(1.5f); |  | ||||||
|     const float diameter_slider_left = settings_sliders_left; //m_imgui->calc_text_size(m_desc.at("hole_diameter")).x + m_imgui->scaled(1.f);
 |     const float diameter_slider_left = settings_sliders_left; //m_imgui->calc_text_size(m_desc.at("hole_diameter")).x + m_imgui->scaled(1.f);
 | ||||||
|     const float minimal_slider_width = m_imgui->scaled(4.f); |     const float minimal_slider_width = m_imgui->scaled(4.f); | ||||||
| 
 | 
 | ||||||
|  |     const float button_preview_width = m_imgui->calc_button_size(m_desc.at("preview")).x; | ||||||
|  | 
 | ||||||
|     float window_width = minimal_slider_width + std::max({settings_sliders_left, clipping_slider_left, diameter_slider_left}); |     float window_width = minimal_slider_width + std::max({settings_sliders_left, clipping_slider_left, diameter_slider_left}); | ||||||
|     window_width = std::max(window_width, m_imgui->calc_text_size(m_desc.at("preview")).x); |     window_width = std::max(window_width, button_preview_width); | ||||||
| 
 | 
 | ||||||
|     if (m_imgui->button(m_desc["preview"])) |     if (m_imgui->button(m_desc["preview"])) | ||||||
|         hollow_mesh(); |         hollow_mesh(); | ||||||
|  | @ -544,9 +547,9 @@ RENDER_AGAIN: | ||||||
|     float max_tooltip_width = ImGui::GetFontSize() * 20.0f; |     float max_tooltip_width = ImGui::GetFontSize() * 20.0f; | ||||||
|     ImGui::AlignTextToFramePadding(); |     ImGui::AlignTextToFramePadding(); | ||||||
|     m_imgui->text(m_desc.at("offset")); |     m_imgui->text(m_desc.at("offset")); | ||||||
|     ImGui::SameLine(settings_sliders_left); |     ImGui::SameLine(settings_sliders_left, m_imgui->get_item_spacing().x); | ||||||
|     ImGui::PushItemWidth(window_width - settings_sliders_left); |     ImGui::PushItemWidth(window_width - settings_sliders_left); | ||||||
|     m_imgui->slider_float("   ", &offset, offset_min, offset_max, "%.1f mm"); |     m_imgui->slider_float("##offset", &offset, offset_min, offset_max, "%.1f mm"); | ||||||
|     if (ImGui::IsItemHovered()) |     if (ImGui::IsItemHovered()) | ||||||
|         m_imgui->tooltip((_utf8(opts[0].second->tooltip)).c_str(), max_tooltip_width); |         m_imgui->tooltip((_utf8(opts[0].second->tooltip)).c_str(), max_tooltip_width); | ||||||
| 
 | 
 | ||||||
|  | @ -557,8 +560,8 @@ RENDER_AGAIN: | ||||||
|     if (current_mode >= quality_mode) { |     if (current_mode >= quality_mode) { | ||||||
|         ImGui::AlignTextToFramePadding(); |         ImGui::AlignTextToFramePadding(); | ||||||
|         m_imgui->text(m_desc.at("quality")); |         m_imgui->text(m_desc.at("quality")); | ||||||
|         ImGui::SameLine(settings_sliders_left); |         ImGui::SameLine(settings_sliders_left, m_imgui->get_item_spacing().x); | ||||||
|         m_imgui->slider_float("    ", &quality, quality_min, quality_max, "%.1f"); |         m_imgui->slider_float("##quality", &quality, quality_min, quality_max, "%.1f"); | ||||||
|         if (ImGui::IsItemHovered()) |         if (ImGui::IsItemHovered()) | ||||||
|             m_imgui->tooltip((_utf8(opts[1].second->tooltip)).c_str(), max_tooltip_width); |             m_imgui->tooltip((_utf8(opts[1].second->tooltip)).c_str(), max_tooltip_width); | ||||||
| 
 | 
 | ||||||
|  | @ -570,8 +573,8 @@ RENDER_AGAIN: | ||||||
|     if (current_mode >= closing_d_mode) { |     if (current_mode >= closing_d_mode) { | ||||||
|         ImGui::AlignTextToFramePadding(); |         ImGui::AlignTextToFramePadding(); | ||||||
|         m_imgui->text(m_desc.at("closing_distance")); |         m_imgui->text(m_desc.at("closing_distance")); | ||||||
|         ImGui::SameLine(settings_sliders_left); |         ImGui::SameLine(settings_sliders_left, m_imgui->get_item_spacing().x); | ||||||
|         m_imgui->slider_float("      ", &closing_d, closing_d_min, closing_d_max, "%.1f mm"); |         m_imgui->slider_float("##closing_distance", &closing_d, closing_d_min, closing_d_max, "%.1f mm"); | ||||||
|         if (ImGui::IsItemHovered()) |         if (ImGui::IsItemHovered()) | ||||||
|             m_imgui->tooltip((_utf8(opts[2].second->tooltip)).c_str(), max_tooltip_width); |             m_imgui->tooltip((_utf8(opts[2].second->tooltip)).c_str(), max_tooltip_width); | ||||||
| 
 | 
 | ||||||
|  | @ -614,11 +617,11 @@ RENDER_AGAIN: | ||||||
|         m_new_hole_radius = diameter_upper_cap / 2.f; |         m_new_hole_radius = diameter_upper_cap / 2.f; | ||||||
|     ImGui::AlignTextToFramePadding(); |     ImGui::AlignTextToFramePadding(); | ||||||
|     m_imgui->text(m_desc.at("hole_diameter")); |     m_imgui->text(m_desc.at("hole_diameter")); | ||||||
|     ImGui::SameLine(diameter_slider_left); |     ImGui::SameLine(diameter_slider_left, m_imgui->get_item_spacing().x); | ||||||
|     ImGui::PushItemWidth(window_width - diameter_slider_left); |     ImGui::PushItemWidth(window_width - diameter_slider_left); | ||||||
| 
 | 
 | ||||||
|     float diam = 2.f * m_new_hole_radius; |     float diam = 2.f * m_new_hole_radius; | ||||||
|     m_imgui->slider_float("", &diam, 1.f, 15.f, "%.1f mm", 1.f, false); |     m_imgui->slider_float("##hole_diameter", &diam, 1.f, 15.f, "%.1f mm", 1.f, false); | ||||||
|     // Let's clamp the value (which could have been entered by keyboard) to a larger range
 |     // Let's clamp the value (which could have been entered by keyboard) to a larger range
 | ||||||
|     // than the slider. This allows entering off-scale values and still protects against
 |     // than the slider. This allows entering off-scale values and still protects against
 | ||||||
|     //complete non-sense.
 |     //complete non-sense.
 | ||||||
|  | @ -630,8 +633,8 @@ RENDER_AGAIN: | ||||||
| 
 | 
 | ||||||
|     ImGui::AlignTextToFramePadding(); |     ImGui::AlignTextToFramePadding(); | ||||||
|     m_imgui->text(m_desc["hole_depth"]); |     m_imgui->text(m_desc["hole_depth"]); | ||||||
|     ImGui::SameLine(diameter_slider_left); |     ImGui::SameLine(diameter_slider_left, m_imgui->get_item_spacing().x); | ||||||
|     m_imgui->slider_float("  ", &m_new_hole_height, 0.f, 10.f, "%.1f mm", 1.f, false); |     m_imgui->slider_float("##hole_depth", &m_new_hole_height, 0.f, 10.f, "%.1f mm", 1.f, false); | ||||||
|     // Same as above:
 |     // Same as above:
 | ||||||
|     m_new_hole_height = std::clamp(m_new_hole_height, 0.f, 100.f); |     m_new_hole_height = std::clamp(m_new_hole_height, 0.f, 100.f); | ||||||
| 
 | 
 | ||||||
|  | @ -697,10 +700,10 @@ RENDER_AGAIN: | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     ImGui::SameLine(clipping_slider_left); |     ImGui::SameLine(settings_sliders_left, m_imgui->get_item_spacing().x); | ||||||
|     ImGui::PushItemWidth(window_width - clipping_slider_left); |     ImGui::PushItemWidth(window_width - settings_sliders_left); | ||||||
|     float clp_dist = m_c->object_clipper()->get_position(); |     float clp_dist = m_c->object_clipper()->get_position(); | ||||||
|     if (m_imgui->slider_float("     ", &clp_dist, 0.f, 1.f, "%.2f")) |     if (m_imgui->slider_float("##clp_dist", &clp_dist, 0.f, 1.f, "%.2f")) | ||||||
|         m_c->object_clipper()->set_position(clp_dist, true); |         m_c->object_clipper()->set_position(clp_dist, true); | ||||||
| 
 | 
 | ||||||
|     // make sure supports are shown/hidden as appropriate
 |     // make sure supports are shown/hidden as appropriate
 | ||||||
|  |  | ||||||
|  | @ -673,7 +673,7 @@ RENDER_AGAIN: | ||||||
|         //  - keep updating the head radius during sliding so it is continuosly refreshed in 3D scene
 |         //  - keep updating the head radius during sliding so it is continuosly refreshed in 3D scene
 | ||||||
|         //  - take correct undo/redo snapshot after the user is done with moving the slider
 |         //  - take correct undo/redo snapshot after the user is done with moving the slider
 | ||||||
|         float initial_value = m_new_point_head_diameter; |         float initial_value = m_new_point_head_diameter; | ||||||
|         m_imgui->slider_float("", &m_new_point_head_diameter, 0.1f, diameter_upper_cap, "%.1f"); |         m_imgui->slider_float("##head_diameter", &m_new_point_head_diameter, 0.1f, diameter_upper_cap, "%.1f"); | ||||||
|         if (ImGui::IsItemClicked()) { |         if (ImGui::IsItemClicked()) { | ||||||
|             if (m_old_point_head_diameter == 0.f) |             if (m_old_point_head_diameter == 0.f) | ||||||
|                 m_old_point_head_diameter = initial_value; |                 m_old_point_head_diameter = initial_value; | ||||||
|  | @ -733,7 +733,7 @@ RENDER_AGAIN: | ||||||
|         float density = static_cast<const ConfigOptionInt*>(opts[0])->value; |         float density = static_cast<const ConfigOptionInt*>(opts[0])->value; | ||||||
|         float minimal_point_distance = static_cast<const ConfigOptionFloat*>(opts[1])->value; |         float minimal_point_distance = static_cast<const ConfigOptionFloat*>(opts[1])->value; | ||||||
| 
 | 
 | ||||||
|         m_imgui->slider_float("", &minimal_point_distance, 0.f, 20.f, "%.f mm"); |         m_imgui->slider_float("##minimal_point_distance", &minimal_point_distance, 0.f, 20.f, "%.f mm"); | ||||||
|         bool slider_clicked = ImGui::IsItemClicked(); // someone clicked the slider
 |         bool slider_clicked = ImGui::IsItemClicked(); // someone clicked the slider
 | ||||||
|         bool slider_edited = ImGui::IsItemEdited(); // someone is dragging the slider
 |         bool slider_edited = ImGui::IsItemEdited(); // someone is dragging the slider
 | ||||||
|         bool slider_released = ImGui::IsItemDeactivatedAfterEdit(); // someone has just released the slider
 |         bool slider_released = ImGui::IsItemDeactivatedAfterEdit(); // someone has just released the slider
 | ||||||
|  | @ -742,7 +742,7 @@ RENDER_AGAIN: | ||||||
|         m_imgui->text(m_desc.at("points_density")); |         m_imgui->text(m_desc.at("points_density")); | ||||||
|         ImGui::SameLine(settings_sliders_left); |         ImGui::SameLine(settings_sliders_left); | ||||||
| 
 | 
 | ||||||
|         m_imgui->slider_float(" ", &density, 0.f, 200.f, "%.f %%"); |         m_imgui->slider_float("##points_density", &density, 0.f, 200.f, "%.f %%"); | ||||||
|         slider_clicked |= ImGui::IsItemClicked(); |         slider_clicked |= ImGui::IsItemClicked(); | ||||||
|         slider_edited |= ImGui::IsItemEdited(); |         slider_edited |= ImGui::IsItemEdited(); | ||||||
|         slider_released |= ImGui::IsItemDeactivatedAfterEdit(); |         slider_released |= ImGui::IsItemDeactivatedAfterEdit(); | ||||||
|  | @ -802,7 +802,7 @@ RENDER_AGAIN: | ||||||
|     ImGui::SameLine(clipping_slider_left); |     ImGui::SameLine(clipping_slider_left); | ||||||
|     ImGui::PushItemWidth(window_width - clipping_slider_left); |     ImGui::PushItemWidth(window_width - clipping_slider_left); | ||||||
|     float clp_dist = m_c->object_clipper()->get_position(); |     float clp_dist = m_c->object_clipper()->get_position(); | ||||||
|     if (m_imgui->slider_float("  ", &clp_dist, 0.f, 1.f, "%.2f")) |     if (m_imgui->slider_float("##clp_dist", &clp_dist, 0.f, 1.f, "%.2f")) | ||||||
|         m_c->object_clipper()->set_position(clp_dist, true); |         m_c->object_clipper()->set_position(clp_dist, true); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -280,7 +280,7 @@ void ImGuiWrapper::render() | ||||||
|     m_new_frame_open = false; |     m_new_frame_open = false; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ImVec2 ImGuiWrapper::calc_text_size(const wxString &text, float wrap_width) | ImVec2 ImGuiWrapper::calc_text_size(const wxString &text, float wrap_width) const | ||||||
| { | { | ||||||
|     auto text_utf8 = into_u8(text); |     auto text_utf8 = into_u8(text); | ||||||
|     ImVec2 size = ImGui::CalcTextSize(text_utf8.c_str(), NULL, false, wrap_width); |     ImVec2 size = ImGui::CalcTextSize(text_utf8.c_str(), NULL, false, wrap_width); | ||||||
|  | @ -293,6 +293,22 @@ ImVec2 ImGuiWrapper::calc_text_size(const wxString &text, float wrap_width) | ||||||
|     return size; |     return size; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | ImVec2 ImGuiWrapper::calc_button_size(const wxString &text, const ImVec2 &button_size) const | ||||||
|  | { | ||||||
|  |     const ImVec2        text_size = this->calc_text_size(text); | ||||||
|  |     const ImGuiContext &g         = *GImGui; | ||||||
|  |     const ImGuiStyle   &style     = g.Style; | ||||||
|  | 
 | ||||||
|  |     return ImGui::CalcItemSize(button_size, text_size.x + style.FramePadding.x * 2.0f, text_size.y + style.FramePadding.y * 2.0f); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ImVec2 ImGuiWrapper::get_item_spacing() const | ||||||
|  | { | ||||||
|  |     const ImGuiContext &g     = *GImGui; | ||||||
|  |     const ImGuiStyle   &style = g.Style; | ||||||
|  |     return g.Style.ItemSpacing; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| float ImGuiWrapper::get_slider_float_height() const | float ImGuiWrapper::get_slider_float_height() const | ||||||
| { | { | ||||||
|     const ImGuiContext& g = *GImGui; |     const ImGuiContext& g = *GImGui; | ||||||
|  |  | ||||||
|  | @ -53,8 +53,10 @@ public: | ||||||
| 
 | 
 | ||||||
|     float scaled(float x) const { return x * m_font_size; } |     float scaled(float x) const { return x * m_font_size; } | ||||||
|     ImVec2 scaled(float x, float y) const { return ImVec2(x * m_font_size, y * m_font_size); } |     ImVec2 scaled(float x, float y) const { return ImVec2(x * m_font_size, y * m_font_size); } | ||||||
|     ImVec2 calc_text_size(const wxString &text, float wrap_width = -1.0f); |     ImVec2 calc_text_size(const wxString &text, float wrap_width = -1.0f) const; | ||||||
|  |     ImVec2 calc_button_size(const wxString &text, const ImVec2 &button_size = ImVec2(0, 0)) const; | ||||||
| 
 | 
 | ||||||
|  |     ImVec2 get_item_spacing() const; | ||||||
|     float  get_slider_float_height() const; |     float  get_slider_float_height() const; | ||||||
| 
 | 
 | ||||||
|     void set_next_window_pos(float x, float y, int flag, float pivot_x = 0.0f, float pivot_y = 0.0f); |     void set_next_window_pos(float x, float y, int flag, float pivot_x = 0.0f, float pivot_y = 0.0f); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Lukáš Hejl
						Lukáš Hejl