From: Vadim Zeitlin Date: Sat, 24 Nov 2012 00:33:44 +0000 (+0000) Subject: Use wxBufferedPaintDC for wxStyledTextCtrl drawing in wxGTK. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/431aea0327720fc44a3ea81b97eda10a5736ae54?ds=inline Use wxBufferedPaintDC for wxStyledTextCtrl drawing in wxGTK. GTK+ doesn't seem to use double buffering for Scintilla window for some reason, resulting in bad flicker when it's updated, e.g. when the user types into it. Force the use of double buffering at wxWidgets level by using wxBufferedPaintDC for painting it. This may be inefficient if GTK+ does double buffer it in some cases but at least it gets rid of the flicker. Closes #12704, #14828. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73001 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/stc/stc.cpp b/src/stc/stc.cpp index 1fa360de2d..f1cfe240df 100644 --- a/src/stc/stc.cpp +++ b/src/stc/stc.cpp @@ -53,6 +53,10 @@ #include "wx/ffile.h" #endif +#ifdef __WXGTK__ + #include "wx/dcbuffer.h" +#endif + #include "ScintillaWX.h" //---------------------------------------------------------------------- @@ -4612,7 +4616,11 @@ void wxStyledTextCtrl::AppendTextRaw(const char* text, int length) // Event handlers void wxStyledTextCtrl::OnPaint(wxPaintEvent& WXUNUSED(evt)) { +#ifdef __WXGTK__ + wxBufferedPaintDC dc(this); +#else wxPaintDC dc(this); +#endif m_swx->DoPaint(&dc, GetUpdateRegion().GetBox()); } diff --git a/src/stc/stc.cpp.in b/src/stc/stc.cpp.in index d63a1f9fc4..eec517db9f 100644 --- a/src/stc/stc.cpp.in +++ b/src/stc/stc.cpp.in @@ -53,6 +53,10 @@ #include "wx/ffile.h" #endif +#ifdef __WXGTK__ + #include "wx/dcbuffer.h" +#endif + #include "ScintillaWX.h" //---------------------------------------------------------------------- @@ -750,7 +754,11 @@ void wxStyledTextCtrl::AppendTextRaw(const char* text, int length) // Event handlers void wxStyledTextCtrl::OnPaint(wxPaintEvent& WXUNUSED(evt)) { +#ifdef __WXGTK__ + wxBufferedPaintDC dc(this); +#else wxPaintDC dc(this); +#endif m_swx->DoPaint(&dc, GetUpdateRegion().GetBox()); }