X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7bdc18790e34d17edfc02f3e25edcb3425b38a8a..74a3342702bf3a76a845f65f4510fd8612d3d802:/src/mgl/dcclient.cpp diff --git a/src/mgl/dcclient.cpp b/src/mgl/dcclient.cpp index 8edae04c3b..9e3d14aa82 100644 --- a/src/mgl/dcclient.cpp +++ b/src/mgl/dcclient.cpp @@ -1,16 +1,12 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: dcclient.cpp +// Name: src/mgl/dcclient.cpp // Purpose: // Author: Vaclav Slavik // RCS-ID: $Id$ -// Copyright: (c) 2001 SciTech Software, Inc. (www.scitechsoft.com) +// Copyright: (c) 2001-2002 SciTech Software, Inc. (www.scitechsoft.com) // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "dcclient.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -18,8 +14,9 @@ #pragma hdrstop #endif +#include "wx/dcclient.h" + #ifndef WX_PRECOMP - #include "wx/dcclient.h" #include "wx/window.h" #endif @@ -32,15 +29,24 @@ IMPLEMENT_DYNAMIC_CLASS(wxPaintDC, wxClientDC) wxWindowDC::wxWindowDC(wxWindow *win) : m_wnd(win) { MGLDevCtx *dc = win->GetPaintMGLDC(); + 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 +55,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 +65,7 @@ wxWindowDC::~wxWindowDC() wxClientDC::wxClientDC(wxWindow *win) : wxWindowDC(win) { wxRect r = m_wnd->GetClientRect(); - SetClippingRegion(r); + m_globalClippingRegion.Intersect(r); + SetClippingRegion(m_globalClippingRegion); SetDeviceOrigin(r.x, r.y); }