mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-12 03:27:55 +00:00
Fix ImGui crash
This commit is contained in:
@@ -3083,7 +3083,7 @@ bool NotificationManager::push_notification_data(std::unique_ptr<NotificationMan
|
|||||||
}
|
}
|
||||||
bool retval = false;
|
bool retval = false;
|
||||||
if (this->activate_existing(notification.get())) {
|
if (this->activate_existing(notification.get())) {
|
||||||
if (m_initialized) { // ignore update action - it cant be initialized if canvas and imgui context is not ready
|
if (m_initialized && m_imgui_ready) {
|
||||||
if (notification->get_type() == NotificationType::SlicingWarning) {
|
if (notification->get_type() == NotificationType::SlicingWarning) {
|
||||||
m_pop_notifications.back()->append(notification->get_data().ori_text);
|
m_pop_notifications.back()->append(notification->get_data().ori_text);
|
||||||
} else {
|
} else {
|
||||||
@@ -3129,6 +3129,10 @@ void NotificationManager::stop_delayed_notifications_of_type(const NotificationT
|
|||||||
|
|
||||||
void NotificationManager::render_notifications(GLCanvas3D &canvas, float overlay_width, float bottom_margin, float right_margin)
|
void NotificationManager::render_notifications(GLCanvas3D &canvas, float overlay_width, float bottom_margin, float right_margin)
|
||||||
{
|
{
|
||||||
|
// Notifications render inside an ImGui frame, so the font atlas is built from this point on
|
||||||
|
// and pushed notifications may safely measure their text.
|
||||||
|
m_imgui_ready = true;
|
||||||
|
|
||||||
sort_notifications();
|
sort_notifications();
|
||||||
|
|
||||||
float bottom_up_last_y = bottom_margin; // ORCA dont scale margins
|
float bottom_up_last_y = bottom_margin; // ORCA dont scale margins
|
||||||
|
|||||||
@@ -1054,6 +1054,11 @@ private:
|
|||||||
bool m_is_dark = false;
|
bool m_is_dark = false;
|
||||||
// set by init(), until false notifications are only added not updated and frame is not requested after push
|
// set by init(), until false notifications are only added not updated and frame is not requested after push
|
||||||
bool m_initialized{ false };
|
bool m_initialized{ false };
|
||||||
|
// set by render_notifications() on the first rendered frame. m_initialized only proves the
|
||||||
|
// manager exists, not that the ImGui context can measure text: the font atlas is built lazily
|
||||||
|
// in ImGuiWrapper::new_frame() on the first GL render, so updating a notification before that
|
||||||
|
// (PopNotification::init -> count_spaces -> ImGui::CalcTextSize) dereferences a null font.
|
||||||
|
bool m_imgui_ready{ false };
|
||||||
// Target for wxWidgets events sent by clicking on the hyperlink available at some notifications.
|
// Target for wxWidgets events sent by clicking on the hyperlink available at some notifications.
|
||||||
wxEvtHandler* m_evt_handler;
|
wxEvtHandler* m_evt_handler;
|
||||||
// Cache of IDs to identify and reuse ImGUI windows.
|
// Cache of IDs to identify and reuse ImGUI windows.
|
||||||
|
|||||||
Reference in New Issue
Block a user