X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c41c20a566cb7558661a68c0ed6712a84982093f..bc88602a653c5ac9c7a3307d6f52a7ae0e572b41:/src/mgl/region.cpp?ds=sidebyside diff --git a/src/mgl/region.cpp b/src/mgl/region.cpp index 3ec5b7d751..94a66c8eee 100644 --- a/src/mgl/region.cpp +++ b/src/mgl/region.cpp @@ -1,16 +1,12 @@ ///////////////////////////////////////////////////////////////////////////// // Name: region.cpp -// Purpose: Region handling for wxWindows/MGL +// Purpose: Region handling for wxWidgets/MGL // Author: Vaclav Slavik // RCS-ID: $Id$ // Copyright: (c) 2001-2002 SciTech Software, Inc. (www.scitechsoft.com) // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "region.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -21,6 +17,7 @@ #include "wx/region.h" #include "wx/gdicmn.h" #include "wx/thread.h" +#include "wx/module.h" #include @@ -290,6 +287,27 @@ wxRegionContain wxRegion::Contains(const wxRect& rect) const // wxRegionIterator // /////////////////////////////////////////////////////////////////////////////// +#if wxUSE_THREADS +static wxMutex *gs_mutexIterator; + +class wxMglRegionModule : public wxModule +{ +public: + virtual bool OnInit() + { + gs_mutexIterator = new wxMutex(); + return TRUE; + } + virtual void OnExit() + { + wxDELETE(gs_mutexIterator); + } + + DECLARE_DYNAMIC_CLASS(wxMglRegionModule) +}; +IMPLEMENT_DYNAMIC_CLASS(wxMglRegionModule, wxModule) +#endif + /* * Initialize empty iterator */ @@ -331,10 +349,11 @@ void wxRegionIterator::Reset(const wxRegion& region) if (!region.Empty()) { - wxMutexGuiEnter(); +#if wxUSE_THREADS + wxMutexLocker(*gs_mutexIterator); +#endif gs_rectList = &m_rects; M_REGION_OF(region).traverse(wxMGL_region_callback); - wxMutexGuiLeave(); m_currentNode = m_rects.GetFirst(); } }