]> git.saurik.com Git - wxWidgets.git/commitdiff
Add static_data flag to SetData and SetAlpha so Python buffer objects
authorRobin Dunn <robin@alldunn.com>
Sat, 2 Apr 2005 02:04:52 +0000 (02:04 +0000)
committerRobin Dunn <robin@alldunn.com>
Sat, 2 Apr 2005 02:04:52 +0000 (02:04 +0000)
can be used in wxPython without double free()'s.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@33250 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/image.h
src/common/image.cpp

index 665d89534e0bafb55628c54885eebdb100e797cf..a07b2d47d43a03c712db535ede6a75ec36eac88a 100644 (file)
@@ -282,12 +282,12 @@ public:
     // these functions provide fastest access to wxImage data but should be
     // used carefully as no checks are done
     unsigned char *GetData() const;
-    void SetData( unsigned char *data );
-    void SetData( unsigned char *data, int new_width, int new_height );
+    void SetData( unsigned char *data, bool static_data=false );
+    void SetData( unsigned char *data, int new_width, int new_height, bool static_data=false );
 
     unsigned char *GetAlpha() const;    // may return NULL!
     bool HasAlpha() const { return GetAlpha() != NULL; }
-    void SetAlpha(unsigned char *alpha = NULL);
+    void SetAlpha(unsigned char *alpha = NULL, bool static_data=false);
     void InitAlpha();
 
     // Mask functions
index bf0c2ee8cfe1b9d46b1a2eccc12f06838fbfe58a..bbd82b9eec0c2746f10a9bccc710c448328664dd 100644 (file)
@@ -891,7 +891,7 @@ unsigned char *wxImage::GetData() const
     return M_IMGDATA->m_data;
 }
 
-void wxImage::SetData( unsigned char *data )
+void wxImage::SetData( unsigned char *data, bool static_data  )
 {
     wxCHECK_RET( Ok(), wxT("invalid image") );
 
@@ -905,13 +905,14 @@ void wxImage::SetData( unsigned char *data )
     newRefData->m_maskGreen = M_IMGDATA->m_maskGreen;
     newRefData->m_maskBlue = M_IMGDATA->m_maskBlue;
     newRefData->m_hasMask = M_IMGDATA->m_hasMask;
+    newRefData->m_static = static_data;
 
     UnRef();
 
     m_refData = newRefData;
 }
 
-void wxImage::SetData( unsigned char *data, int new_width, int new_height )
+void wxImage::SetData( unsigned char *data, int new_width, int new_height, bool static_data )
 {
     wxImageRefData *newRefData = new wxImageRefData();
 
@@ -933,6 +934,7 @@ void wxImage::SetData( unsigned char *data, int new_width, int new_height )
         newRefData->m_data = data;
         newRefData->m_ok = true;
     }
+    newRefData->m_static = static_data;
 
     UnRef();
 
@@ -994,7 +996,7 @@ bool wxImage::ConvertColourToAlpha( unsigned char r, unsigned char g, unsigned c
     return true;
 }
 
-void wxImage::SetAlpha( unsigned char *alpha )
+void wxImage::SetAlpha( unsigned char *alpha, bool static_data )
 {
     wxCHECK_RET( Ok(), wxT("invalid image") );
 
@@ -1005,6 +1007,8 @@ void wxImage::SetAlpha( unsigned char *alpha )
 
     free(M_IMGDATA->m_alpha);
     M_IMGDATA->m_alpha = alpha;
+    M_IMGDATA->m_static = static_data;
+
 }
 
 unsigned char *wxImage::GetAlpha() const