X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c41c20a566cb7558661a68c0ed6712a84982093f..a74ed7047fcc734117390bcad7a58a064a4ea616:/src/mgl/region.cpp?ds=sidebyside diff --git a/src/mgl/region.cpp b/src/mgl/region.cpp index 3ec5b7d751..ad94b81123 100644 --- a/src/mgl/region.cpp +++ b/src/mgl/region.cpp @@ -1,13 +1,13 @@ ///////////////////////////////////////////////////////////////////////////// // 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__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "region.h" #endif @@ -21,6 +21,7 @@ #include "wx/region.h" #include "wx/gdicmn.h" #include "wx/thread.h" +#include "wx/module.h" #include @@ -290,6 +291,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 +353,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(); } }