X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4cd411faeee9c175fb72053a48db5ed1babea43e..85f296a34215665472cc3d80b866009947f7bb70:/src/mac/bitmap.cpp?ds=sidebyside diff --git a/src/mac/bitmap.cpp b/src/mac/bitmap.cpp index a37654c059..df8d319f43 100644 --- a/src/mac/bitmap.cpp +++ b/src/mac/bitmap.cpp @@ -199,33 +199,34 @@ wxBitmapRefData::wxBitmapRefData() m_bitmapType = kMacBitmapTypeUnknownType ; } -wxBitmapRefData::~wxBitmapRefData() +// TODO move this do a public function of Bitmap Ref +static void DisposeBitmapRefData(wxBitmapRefData *data) { - switch (m_bitmapType) + switch (data->m_bitmapType) { case kMacBitmapTypePict : { - if ( m_hPict ) + if ( data->m_hPict ) { - KillPicture( m_hPict ) ; - m_hPict = NULL ; + KillPicture( data->m_hPict ) ; + data->m_hPict = NULL ; } } break ; case kMacBitmapTypeGrafWorld : { - if ( m_hBitmap ) + if ( data->m_hBitmap ) { - wxMacDestroyGWorld( m_hBitmap ) ; - m_hBitmap = NULL ; + wxMacDestroyGWorld( data->m_hBitmap ) ; + data->m_hBitmap = NULL ; } } break ; case kMacBitmapTypeIcon : - if ( m_hIcon ) + if ( data->m_hIcon ) { - DisposeCIcon( m_hIcon ) ; - m_hIcon = NULL ; + DisposeCIcon( data->m_hIcon ) ; + data->m_hIcon = NULL ; } default : @@ -233,13 +234,18 @@ wxBitmapRefData::~wxBitmapRefData() break ; } - if (m_bitmapMask) + if (data->m_bitmapMask) { - delete m_bitmapMask; - m_bitmapMask = NULL; + delete data->m_bitmapMask; + data->m_bitmapMask = NULL; } } +wxBitmapRefData::~wxBitmapRefData() +{ + DisposeBitmapRefData( this ) ; +} + wxList wxBitmapBase::sm_handlers; @@ -438,7 +444,7 @@ wxBitmap wxBitmap::GetSubBitmap(const wxRect &rect) const RGBColor color; bitmap = GetHBITMAP(); - subbitmap = wxMacCreateGWorld(rect.width, rect.height, GetDepth()); + subbitmap = ref->m_hBitmap ; LockPixels(GetGWorldPixMap(bitmap)); LockPixels(GetGWorldPixMap(subbitmap)); @@ -454,7 +460,6 @@ wxBitmap wxBitmap::GetSubBitmap(const wxRect &rect) const } UnlockPixels(GetGWorldPixMap(bitmap)); UnlockPixels(GetGWorldPixMap(subbitmap)); - ret.SetHBITMAP(subbitmap); } } SetGWorld( origPort, origDevice ); @@ -487,9 +492,11 @@ int wxBitmap::GetBitmapType() const void wxBitmap::SetHBITMAP(WXHBITMAP bmp) { + DisposeBitmapRefData( M_BITMAPDATA ) ; + M_BITMAPDATA->m_bitmapType = kMacBitmapTypeGrafWorld ; M_BITMAPDATA->m_hBitmap = bmp ; - M_BITMAPDATA->m_ok = (M_BITMAPDATA->m_hBitmap != NULL ) ; + M_BITMAPDATA->m_ok = (M_BITMAPDATA->m_hBitmap != NULL ) ; } bool wxBitmap::LoadFile(const wxString& filename, wxBitmapType type)