From 32ed0647978b95a8837661bbbbe809b92f3d07ac Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Fri, 29 Mar 2019 13:38:33 +0100 Subject: [PATCH 1/2] SLA gizmo fix: occasional crashes after deleting objects --- src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp index df7004b3f..d83ef9ed8 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp @@ -44,8 +44,11 @@ bool GLGizmoSlaSupports::on_init() void GLGizmoSlaSupports::set_sla_support_data(ModelObject* model_object, const Selection& selection) { - if (selection.is_empty()) + if (selection.is_empty()) { + m_model_object = nullptr; + m_old_model_object = nullptr; return; + } m_old_model_object = m_model_object; m_model_object = model_object; From 3cfb234e865c2f2eb67717691519a582d86b298c Mon Sep 17 00:00:00 2001 From: Vojtech Kral Date: Fri, 29 Mar 2019 14:57:53 +0100 Subject: [PATCH 2/2] imgui: Get font size from wxWidgets, fix #2043 --- src/slic3r/GUI/GUI_App.cpp | 11 ++++++----- src/slic3r/GUI/ImGuiWrapper.cpp | 33 ++++++++++++++------------------- src/slic3r/GUI/ImGuiWrapper.hpp | 6 +++--- 3 files changed, 23 insertions(+), 27 deletions(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index bdfd2fc26..fdb8968d3 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -81,7 +81,7 @@ IMPLEMENT_APP(GUI_App) GUI_App::GUI_App() : wxApp() , m_em_unit(10) - , m_imgui(new ImGuiWrapper()) + , m_imgui(nullptr) {} bool GUI_App::OnInit() @@ -90,7 +90,6 @@ bool GUI_App::OnInit() const wxString resources_dir = from_u8(Slic3r::resources_dir()); wxCHECK_MSG(wxDirExists(resources_dir), false, wxString::Format("Resources path does not exist or is not a directory: %s", resources_dir)); - wxCHECK_MSG(m_imgui->init(), false, "Failed to initialize ImGui"); SetAppName("Slic3rPE-beta"); SetAppDisplayName("Slic3r Prusa Edition"); @@ -136,6 +135,11 @@ bool GUI_App::OnInit() app_config->save(); }); + // initialize label colors and fonts + init_label_colours(); + init_fonts(); + m_imgui.reset(new ImGuiWrapper(m_normal_font.GetPixelSize().y)); + load_language(); // Suppress the '- default -' presets. @@ -148,9 +152,6 @@ bool GUI_App::OnInit() // Let the libslic3r know the callback, which will translate messages on demand. Slic3r::I18N::set_translate_callback(libslic3r_translate_callback); - // initialize label colors and fonts - init_label_colours(); - init_fonts(); // application frame if (wxImage::FindHandler(wxBITMAP_TYPE_PNG) == nullptr) diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index 0932c8ce9..f626fa7f5 100644 --- a/src/slic3r/GUI/ImGuiWrapper.cpp +++ b/src/slic3r/GUI/ImGuiWrapper.cpp @@ -25,14 +25,22 @@ namespace Slic3r { namespace GUI { -ImGuiWrapper::ImGuiWrapper() +ImGuiWrapper::ImGuiWrapper(float font_size) : m_glyph_ranges(nullptr) + , m_font_size(font_size) , m_font_texture(0) , m_style_scaling(1.0) , m_mouse_buttons(0) , m_disabled(false) , m_new_frame_open(false) { + ImGui::CreateContext(); + + init_default_font(); + init_input(); + init_style(); + + ImGui::GetIO().IniFilename = nullptr; } ImGuiWrapper::~ImGuiWrapper() @@ -41,19 +49,6 @@ ImGuiWrapper::~ImGuiWrapper() ImGui::DestroyContext(); } -bool ImGuiWrapper::init() -{ - ImGui::CreateContext(); - - init_default_font(m_style_scaling); - init_input(); - init_style(); - - ImGui::GetIO().IniFilename = nullptr; - - return true; -} - void ImGuiWrapper::set_language(const std::string &language) { if (m_new_frame_open) { @@ -87,7 +82,7 @@ void ImGuiWrapper::set_language(const std::string &language) if (ranges != m_glyph_ranges) { m_glyph_ranges = ranges; - init_default_font(m_style_scaling); + init_default_font(); } } @@ -102,8 +97,8 @@ 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); - init_default_font(scaling); m_style_scaling = scaling; + init_default_font(); } } @@ -328,15 +323,15 @@ bool ImGuiWrapper::want_any_input() const return io.WantCaptureMouse || io.WantCaptureKeyboard || io.WantTextInput; } -void ImGuiWrapper::init_default_font(float scaling) +void ImGuiWrapper::init_default_font() { - static const float font_size = 18.0f; + const float font_size = m_font_size * m_style_scaling; destroy_fonts_texture(); ImGuiIO& io = ImGui::GetIO(); io.Fonts->Clear(); - ImFont* font = io.Fonts->AddFontFromFileTTF((Slic3r::resources_dir() + "/fonts/NotoSans-Regular.ttf").c_str(), font_size * scaling, nullptr, m_glyph_ranges); + ImFont* font = io.Fonts->AddFontFromFileTTF((Slic3r::resources_dir() + "/fonts/NotoSans-Regular.ttf").c_str(), font_size, nullptr, m_glyph_ranges); if (font == nullptr) { font = io.Fonts->AddFontDefault(); if (font == nullptr) { diff --git a/src/slic3r/GUI/ImGuiWrapper.hpp b/src/slic3r/GUI/ImGuiWrapper.hpp index 35d0b5636..7e022532a 100644 --- a/src/slic3r/GUI/ImGuiWrapper.hpp +++ b/src/slic3r/GUI/ImGuiWrapper.hpp @@ -22,6 +22,7 @@ class ImGuiWrapper FontsMap m_fonts; const ImWchar *m_glyph_ranges; + float m_font_size; unsigned m_font_texture; float m_style_scaling; unsigned m_mouse_buttons; @@ -30,10 +31,9 @@ class ImGuiWrapper std::string m_clipboard_text; public: - ImGuiWrapper(); + ImGuiWrapper(float font_size); ~ImGuiWrapper(); - bool init(); void read_glsl_version(); void set_language(const std::string &language); @@ -73,7 +73,7 @@ public: bool want_any_input() const; private: - void init_default_font(float scaling); + void init_default_font(); void create_device_objects(); void create_fonts_texture(); void init_input();