X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7bdc18790e34d17edfc02f3e25edcb3425b38a8a..1c405bb51093fc7812fb66e7d47faac5707e02b5:/src/mgl/dcclient.cpp diff --git a/src/mgl/dcclient.cpp b/src/mgl/dcclient.cpp index 8edae04c3b..54ade252ff 100644 --- a/src/mgl/dcclient.cpp +++ b/src/mgl/dcclient.cpp @@ -35,12 +35,20 @@ wxWindowDC::wxWindowDC(wxWindow *win) : m_wnd(win) if ( dc ) { m_inPaintHandler = TRUE; + + m_globalClippingRegion = win->GetUpdateRegion(); SetMGLDC(dc, FALSE); } else { m_inPaintHandler = FALSE; - SetMGLDC(new MGLDevCtx(MGL_wmBeginPaint(m_wnd->GetHandle())), TRUE); + + dc = new MGLDevCtx(MGL_wmBeginPaint(win->GetHandle())); + + MGLRegion clip; + dc->getClipRegion(clip); + m_globalClippingRegion = wxRegion(clip); + SetMGLDC(dc, TRUE); // TRUE means that dtor will delete MGLDevCtx object // but it won't destroy MGLDC returned by MGL_wmBeginPaint because // ~MGLDevCtx() doesn't call destroy() @@ -49,14 +57,7 @@ wxWindowDC::wxWindowDC(wxWindow *win) : m_wnd(win) wxWindowDC::~wxWindowDC() { - if ( m_inPaintHandler ) - { - // This is neccessary so that subsequently created wxPaintDCs won't get - // confused about clipping. Another reason is that the same MGL dc is reused - // for wxEraseEvent, wxNcPaintEvent and wxPaintEvent - DestroyClippingRegion(); - } - else + if ( !m_inPaintHandler ) { GetMGLDC()->setDC(NULL); MGL_wmEndPaint(m_wnd->GetHandle()); @@ -66,6 +67,6 @@ wxWindowDC::~wxWindowDC() wxClientDC::wxClientDC(wxWindow *win) : wxWindowDC(win) { wxRect r = m_wnd->GetClientRect(); - SetClippingRegion(r); + m_globalClippingRegion.Intersect(r); SetDeviceOrigin(r.x, r.y); }