diff --git a/sandboxes/opencsg/main.cpp b/sandboxes/opencsg/main.cpp index c82ff2f48..c1bda6b39 100644 --- a/sandboxes/opencsg/main.cpp +++ b/sandboxes/opencsg/main.cpp @@ -109,6 +109,13 @@ public: m_display->set_screen_size(ClientSize.x, ClientSize.y); m_display->repaint(); }); + + Bind(wxEVT_SIZE, [this](wxSizeEvent &) { + const wxSize ClientSize = GetClientSize(); + + m_display->set_screen_size(ClientSize.x, ClientSize.y); + m_display->repaint(); + }); } shptr get_display() const { return m_display; } @@ -200,7 +207,7 @@ public: case MV: MouseInput::move_to(evt.a, evt.b); break; } - wxYield(); + wxTheApp->Yield(); if (!m_playing) break; } @@ -299,9 +306,9 @@ public: std::string model_name; std::getline(stream, model_name); load_model(model_name); - while (!m_ui_job->is_finalized()) { - wxYield(); - } + + while (!m_ui_job->is_finalized()) + wxTheApp->Yield();; int w, h; stream >> w >> h; @@ -336,6 +343,7 @@ inline long get_idx(const wxString &a, const std::vector &v) class App : public wxApp { MyFrame *m_frame = nullptr; + wxString m_fname; public: bool OnInit() override { @@ -350,23 +358,23 @@ public: parser.Parse(); - wxString fname; - bool is_play = parser.Found("play", &fname); + bool is_play = parser.Found("play", &m_fname); m_frame = new MyFrame("PrusaSlicer OpenCSG Demo", wxDefaultPosition, wxSize(1024, 768), parser); if (is_play) { + Bind(wxEVT_IDLE, &App::Play, this); m_frame->Show( true ); - m_frame->play_back_mouse(fname.ToStdString()); - - std::cout << m_frame->get_fps_average() << std::endl; - - m_frame->Destroy(); - } else m_frame->Show( true ); return true; } + + void Play(wxIdleEvent &) { + Unbind(wxEVT_IDLE, &App::Play, this); + m_frame->play_back_mouse(m_fname.ToStdString()); + m_frame->Destroy(); + } }; wxIMPLEMENT_APP(App); @@ -438,7 +446,8 @@ void MyFrame::set_renderer_algorithm(const wxString &alg) canvas()->set_display(m_ocsgdisplay); } - if (cam) m_canvas->get_display()->set_camera(cam); + if (cam) + m_canvas->get_display()->set_camera(cam); m_ctl->remove_displays(); m_ctl->add_display(m_canvas->get_display()); @@ -461,9 +470,7 @@ void MyFrame::activate_canvas_display() // Do the repaint continuously m_canvas->Bind(wxEVT_IDLE, [this](wxIdleEvent &evt) { - if (IsShown() && m_canvas->IsShown()) - m_canvas->get_display()->repaint(); - + m_canvas->get_display()->repaint(); evt.RequestMore(); });