From 431aea0327720fc44a3ea81b97eda10a5736ae54 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 24 Nov 2012 00:33:44 +0000 Subject: [PATCH] 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 --- src/stc/stc.cpp | 8 ++++++++ src/stc/stc.cpp.in | 8 ++++++++ 2 files changed, 16 insertions(+) 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()); } -- 2.45.2