]> git.saurik.com Git - wxWidgets.git/commitdiff
applied copy constructor fix to assignment operator as well
authorGilles Depeyrot <gilles_depeyrot@mac.com>
Wed, 15 May 2002 06:22:01 +0000 (06:22 +0000)
committerGilles Depeyrot <gilles_depeyrot@mac.com>
Wed, 15 May 2002 06:22:01 +0000 (06:22 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15569 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/mac/region.h
src/mac/carbon/region.cpp
src/mac/region.cpp

index ee40f921f7e88d3f5c76ff5709bc50cf21f50334..d9fc31f073d89aca2c6e5631bd81afbb0e52bc96 100644 (file)
@@ -128,13 +128,13 @@ public:
     ~wxRegionIterator();
 
     wxRegionIterator& operator=(const wxRegionIterator& iterator);
-    
+
     void Reset() { m_current = 0; }
     void Reset(const wxRegion& region);
     
     operator bool () const { return m_current < m_numRects; }
     bool HaveRects() const { return m_current < m_numRects; }
-    
+
     wxRegionIterator& operator++();
     wxRegionIterator operator++(int);
     
@@ -146,6 +146,8 @@ public:
     long GetHeight() const { return GetH(); }
     wxRect GetRect() const { return wxRect(GetX(), GetY(), GetWidth(), GetHeight()); }
 private:
+    void SetRects(long numRects, wxRect *rects);
+
     long     m_current;
     long     m_numRects;
     wxRegion m_region;
index c8ffc4632bbc1f82d4e4ec8e9c1a8f8345932aa3..b4dddad04ba564c336cecea6ac8b0784fab9f62d 100644 (file)
@@ -302,33 +302,47 @@ wxRegionIterator::wxRegionIterator()
 
 wxRegionIterator::~wxRegionIterator()
 {
-    if (m_rects)
+    if (m_rects) {
         delete[] m_rects;
+        m_rects = NULL;
+    }
 }
 
 wxRegionIterator::wxRegionIterator(const wxRegionIterator& iterator)
     : wxObject()
     , m_current(iterator.m_current)
-    , m_numRects(iterator.m_numRects)
+    , m_numRects(0)
     , m_rects(NULL)
 {
-    int i;
-    if (iterator.m_rects)
-    {
-        m_rects = new wxRect[iterator.m_numRects];
-        for (i = 0; i < iterator.m_numRects; i++)
-            m_rects[i] = iterator.m_rects[i];
-    }
+    SetRects(iterator.m_numRects, iterator.m_rects);
 }
 
 wxRegionIterator& wxRegionIterator::operator=(const wxRegionIterator& iterator)
 {
     m_current  = iterator.m_current;
-    m_numRects = iterator.m_numRects;
-    m_rects    = iterator.m_rects;
+    SetRects(iterator.m_numRects, iterator.m_rects);
     return *this;
 }
 
+/*!
+ * Set iterator rects for region
+ */
+void wxRegionIterator::SetRects(long numRects, wxRect *rects)
+{
+    if (m_rects) {
+        delete[] m_rects;
+        m_rects = NULL;
+    }
+    if (rects)
+    {
+        int i;
+        m_rects = new wxRect[numRects];
+        for (i = 0; i < numRects; i++)
+            m_rects[i] = rects[i];
+    }
+    m_numRects = numRects;
+}
+
 /*!
  * Initialize iterator for region
  */
@@ -344,22 +358,22 @@ wxRegionIterator::wxRegionIterator(const wxRegion& region)
  */
 void wxRegionIterator::Reset(const wxRegion& region)
 {
-       m_current = 0;
-       m_region = region;
+    m_current = 0;
+    m_region = region;
 
-    if (m_rects)
+    if (m_rects) {
         delete[] m_rects;
+        m_rects = NULL;
+    }
 
-    m_rects = NULL;
-
-       if (m_region.Empty())
-               m_numRects = 0;
-       else
+    if (m_region.Empty())
+        m_numRects = 0;
+    else
     {
        // we cannot dissolve it into rects on mac
         m_rects = new wxRect[1];
-               Rect rect ;
-               GetRegionBounds( OTHER_M_REGION( region ) , &rect ) ;
+        Rect rect ;
+        GetRegionBounds( OTHER_M_REGION( region ) , &rect ) ;
         m_rects[0].x = rect.left;
         m_rects[0].y = rect.top;
         m_rects[0].width = rect.right - rect.left;
index c8ffc4632bbc1f82d4e4ec8e9c1a8f8345932aa3..b4dddad04ba564c336cecea6ac8b0784fab9f62d 100644 (file)
@@ -302,33 +302,47 @@ wxRegionIterator::wxRegionIterator()
 
 wxRegionIterator::~wxRegionIterator()
 {
-    if (m_rects)
+    if (m_rects) {
         delete[] m_rects;
+        m_rects = NULL;
+    }
 }
 
 wxRegionIterator::wxRegionIterator(const wxRegionIterator& iterator)
     : wxObject()
     , m_current(iterator.m_current)
-    , m_numRects(iterator.m_numRects)
+    , m_numRects(0)
     , m_rects(NULL)
 {
-    int i;
-    if (iterator.m_rects)
-    {
-        m_rects = new wxRect[iterator.m_numRects];
-        for (i = 0; i < iterator.m_numRects; i++)
-            m_rects[i] = iterator.m_rects[i];
-    }
+    SetRects(iterator.m_numRects, iterator.m_rects);
 }
 
 wxRegionIterator& wxRegionIterator::operator=(const wxRegionIterator& iterator)
 {
     m_current  = iterator.m_current;
-    m_numRects = iterator.m_numRects;
-    m_rects    = iterator.m_rects;
+    SetRects(iterator.m_numRects, iterator.m_rects);
     return *this;
 }
 
+/*!
+ * Set iterator rects for region
+ */
+void wxRegionIterator::SetRects(long numRects, wxRect *rects)
+{
+    if (m_rects) {
+        delete[] m_rects;
+        m_rects = NULL;
+    }
+    if (rects)
+    {
+        int i;
+        m_rects = new wxRect[numRects];
+        for (i = 0; i < numRects; i++)
+            m_rects[i] = rects[i];
+    }
+    m_numRects = numRects;
+}
+
 /*!
  * Initialize iterator for region
  */
@@ -344,22 +358,22 @@ wxRegionIterator::wxRegionIterator(const wxRegion& region)
  */
 void wxRegionIterator::Reset(const wxRegion& region)
 {
-       m_current = 0;
-       m_region = region;
+    m_current = 0;
+    m_region = region;
 
-    if (m_rects)
+    if (m_rects) {
         delete[] m_rects;
+        m_rects = NULL;
+    }
 
-    m_rects = NULL;
-
-       if (m_region.Empty())
-               m_numRects = 0;
-       else
+    if (m_region.Empty())
+        m_numRects = 0;
+    else
     {
        // we cannot dissolve it into rects on mac
         m_rects = new wxRect[1];
-               Rect rect ;
-               GetRegionBounds( OTHER_M_REGION( region ) , &rect ) ;
+        Rect rect ;
+        GetRegionBounds( OTHER_M_REGION( region ) , &rect ) ;
         m_rects[0].x = rect.left;
         m_rects[0].y = rect.top;
         m_rects[0].width = rect.right - rect.left;