diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 31c3717ff..e6365e32a 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -4405,12 +4405,12 @@ void GLCanvas3D::_resize(unsigned int w, unsigned int h) auto *imgui = wxGetApp().imgui(); imgui->set_display_size((float)w, (float)h); - imgui->set_font_size(m_canvas->GetFont().GetPixelSize().y); #if ENABLE_RETINA_GL - imgui->set_style_scaling(m_retina_helper->get_scale_factor()); + const float scaling = m_retina_helper->get_scale_factor(); #else - imgui->set_style_scaling(m_canvas->GetContentScaleFactor()); + const float scaling = m_canvas->GetContentScaleFactor(); #endif + imgui->set_scaling(m_canvas->GetFont().GetPixelSize().y, scaling); // ensures that this canvas is current _set_current(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp b/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp index 566090504..02d663e93 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp @@ -185,7 +185,10 @@ void GLGizmoCut::on_render_for_picking(const Selection& selection) const void GLGizmoCut::on_render_input_window(float x, float y, float bottom_limit, const Selection& selection) { + const float approx_height = m_imgui->scaled(11.0f); + y = std::min(y, bottom_limit - approx_height); m_imgui->set_next_window_pos(x, y, ImGuiCond_Always); + m_imgui->set_next_window_bg_alpha(0.5f); m_imgui->begin(_(L("Cut")), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse); diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index 001e0b33f..b008c17a7 100644 --- a/src/slic3r/GUI/ImGuiWrapper.cpp +++ b/src/slic3r/GUI/ImGuiWrapper.cpp @@ -92,21 +92,18 @@ void ImGuiWrapper::set_display_size(float w, float h) io.DisplayFramebufferScale = ImVec2(1.0f, 1.0f); } -void ImGuiWrapper::set_font_size(float font_size) +void ImGuiWrapper::set_scaling(float font_size, float scaling) { - if (m_font_size != font_size) { - m_font_size = font_size; - destroy_font(); + if (m_font_size == font_size && m_style_scaling == scaling) { + return; } -} -void ImGuiWrapper::set_style_scaling(float scaling) -{ - if (!std::isnan(scaling) && !std::isinf(scaling) && scaling != m_style_scaling) { - ImGui::GetStyle().ScaleAllSizes(scaling / m_style_scaling); - m_style_scaling = scaling; - destroy_font(); - } + m_font_size = font_size; + + ImGui::GetStyle().ScaleAllSizes(scaling / m_style_scaling); + m_style_scaling = scaling; + + destroy_font(); } bool ImGuiWrapper::update_mouse_data(wxMouseEvent& evt) @@ -163,8 +160,6 @@ bool ImGuiWrapper::update_key_data(wxKeyEvent &evt) void ImGuiWrapper::new_frame() { - printf("ImGuiWrapper: new_frame()\n"); - if (m_new_frame_open) { return; } @@ -184,6 +179,12 @@ void ImGuiWrapper::render() m_new_frame_open = false; } +ImVec2 ImGuiWrapper::calc_text_size(const wxString &text) +{ + auto text_utf8 = into_u8(text); + return ImGui::CalcTextSize(text_utf8.c_str()); +} + void ImGuiWrapper::set_next_window_pos(float x, float y, int flag) { ImGui::SetNextWindowPos(ImVec2(x, y), (ImGuiCond)flag); @@ -293,12 +294,6 @@ bool ImGuiWrapper::combo(const wxString& label, const std::vector& return res; } -ImVec2 ImGuiWrapper::calc_text_size(const wxString &text) -{ - auto text_utf8 = into_u8(text); - return ImGui::CalcTextSize(text_utf8.c_str()); -} - void ImGuiWrapper::disabled_begin(bool disabled) { wxCHECK_RET(!m_disabled, "ImGUI: Unbalanced disabled_begin() call"); @@ -342,8 +337,6 @@ bool ImGuiWrapper::want_any_input() const void ImGuiWrapper::init_font() { - printf("ImGuiWrapper: init_font()\n"); - const float font_size = m_font_size * m_style_scaling; destroy_font(); diff --git a/src/slic3r/GUI/ImGuiWrapper.hpp b/src/slic3r/GUI/ImGuiWrapper.hpp index 476379da2..84a60e3d1 100644 --- a/src/slic3r/GUI/ImGuiWrapper.hpp +++ b/src/slic3r/GUI/ImGuiWrapper.hpp @@ -35,8 +35,7 @@ public: void set_language(const std::string &language); void set_display_size(float w, float h); - void set_font_size(float font_size); - void set_style_scaling(float scaling); + void set_scaling(float font_size, float scaling); bool update_mouse_data(wxMouseEvent &evt); bool update_key_data(wxKeyEvent &evt); @@ -47,7 +46,8 @@ public: void render(); float scaled(float x) const { return x * m_font_size * m_style_scaling; } - ImVec2 scaled_vec(float x, float y) const { return ImVec2(x * m_font_size * m_style_scaling, y * m_font_size * m_style_scaling); } + ImVec2 scaled(float x, float y) const { return ImVec2(x * m_font_size * m_style_scaling, y * m_font_size * m_style_scaling); } + ImVec2 calc_text_size(const wxString &text); void set_next_window_pos(float x, float y, int flag); void set_next_window_bg_alpha(float alpha); @@ -66,8 +66,6 @@ public: void text(const wxString &label); bool combo(const wxString& label, const std::vector& options, int& selection); // Use -1 to not mark any option as selected - ImVec2 calc_text_size(const wxString &text); - void disabled_begin(bool disabled); void disabled_end();