From a8d0508cf299a58b2a659d6017b049db121de8ba Mon Sep 17 00:00:00 2001 From: Rafael Kitover Date: Mon, 2 Jul 2018 18:32:18 -0700 Subject: [PATCH] use GetWindow()->Refresh() in Wayland only Some people are reporting stuttering, and @retro-wertz tested both DrawArea() and Refresh() on wxgtk3 under xorg and found that the Refresh() method produces more stuttering. Change the compile check for wxgtk2 to a runtime check for wayland, and use Refresh() under Wayland only. --- src/wx/panel.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/wx/panel.cpp b/src/wx/panel.cpp index e4b86301..faaf6e4d 100644 --- a/src/wx/panel.cpp +++ b/src/wx/panel.cpp @@ -1817,19 +1817,16 @@ void DrawingPanelBase::DrawArea(uint8_t** data) } // next, draw the frame (queue a PaintEv) Refresh must be used under - // Wayland or nothing is drawn, however it causes high CPU usage with GTK2, - // so use the old method in that case -#if !defined(__WXGTK__) || defined(__WXGTK3__) - GetWindow()->Refresh(); -#else - { + // Wayland or nothing is drawn. + if (wxGetApp().UsingWayland()) + GetWindow()->Refresh(); + else { DrawingPanelBase* panel = wxGetApp().frame->GetPanel()->panel; if (panel) { wxClientDC dc(panel->GetWindow()); panel->DrawArea(dc); } } -#endif // finally, draw on-screen text using wx method, if possible // this method flickers too much right now