diff --git a/src/base_grid.cpp b/src/base_grid.cpp index 89ddb004a..a36902ffa 100644 --- a/src/base_grid.cpp +++ b/src/base_grid.cpp @@ -59,6 +59,39 @@ #include #include +namespace { +#ifdef __WXMSW__ +class PaintDC : public wxBufferedDC { + wxPaintDC dc; + +public: + PaintDC(wxWindow *window) : dc(window) { + dc.SetLayoutDirection(wxLayout_LeftToRight); + Init(&dc, window->GetClientSize(), 0); + if (window->GetLayoutDirection() == wxLayout_RightToLeft) { + SetLayoutDirection(wxLayout_RightToLeft); + SetLogicalOrigin(GetSize().GetWidth(), 0); + } + } + + ~PaintDC() { + SetLayoutDirection(wxLayout_LeftToRight); + SetLogicalOrigin(0, 0); + UnMask(); + } + + void Clear() { + auto origin = GetLogicalOrigin(); + SetLogicalOrigin(0, 0); + wxBufferedDC::Clear(); + SetLogicalOrigin(origin.x, origin.y); + } +}; +#else +typedef wxAutoBufferedPaintDC PaintDC; +#endif +} + enum { GRID_SCROLLBAR = 1730, MENU_SHOW_COL = 1250 // Needs 15 IDs after this @@ -279,7 +312,7 @@ void BaseGrid::OnPaint(wxPaintEvent &) { GetClientSize(&w,&h); w -= scrollBar->GetSize().GetWidth(); - wxAutoBufferedPaintDC dc(this); + PaintDC dc(this); dc.SetFont(font); dc.SetBackground(row_colors.Default);