From: Stefan Csomor Date: Fri, 5 Sep 2003 14:44:48 +0000 (+0000) Subject: selection for DeleteAllPages corrected, images scaleing in order to avoid crashes... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/061174e31a8450d6a5821914bb5872bd698be2c4?ds=inline selection for DeleteAllPages corrected, images scaleing in order to avoid crashes under OSX git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@23402 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/mac/carbon/notebmac.cpp b/src/mac/carbon/notebmac.cpp index 3a45c336fa..36a27df2eb 100644 --- a/src/mac/carbon/notebmac.cpp +++ b/src/mac/carbon/notebmac.cpp @@ -24,6 +24,7 @@ #include "wx/string.h" #include "wx/log.h" #include "wx/imaglist.h" +#include "wx/image.h" #include "wx/notebook.h" #include "wx/mac/uma.h" // ---------------------------------------------------------------------------- @@ -341,11 +342,9 @@ wxNotebookPage* wxNotebook::DoRemovePage(size_t nPage) // remove all pages bool wxNotebook::DeleteAllPages() { - // TODO: delete native widget pages - WX_CLEAR_ARRAY(m_pages) ; MacSetupTabs(); - + m_nSelection = -1 ; return TRUE; } @@ -423,22 +422,32 @@ void wxNotebook::MacSetupTabs() // afterwards Unregister it (IconRef is ref counted, so it will stay on the tab even if we // unregister it) in case this will ever lead to having the same icon everywhere add some kind // of static counter - ControlButtonContentInfo info ; - wxMacCreateBitmapButton( &info , *GetImageList()->GetBitmap( GetPageImage(ii ) ) , kControlContentPictHandle) ; - IconFamilyHandle iconFamily = (IconFamilyHandle) NewHandle(0) ; - OSErr err = SetIconFamilyData( iconFamily, 'PICT' , (Handle) info.u.picture ) ; - wxASSERT_MSG( err == noErr , wxT("Error when adding bitmap") ) ; - IconRef iconRef ; - err = RegisterIconRefFromIconFamily( 'WXNG' , (OSType) 1 , iconFamily, &iconRef ) ; - wxASSERT_MSG( err == noErr , wxT("Error when adding bitmap") ) ; - info.contentType = kControlContentIconRef ; - info.u.iconRef = iconRef ; - SetControlData( (ControlHandle) m_macControl, ii+1,kControlTabImageContentTag, - sizeof( info ), (Ptr)&info ); - wxASSERT_MSG( err == noErr , wxT("Error when setting icon on tab") ) ; - UnregisterIconRef( 'WXNG' , (OSType) 1 ) ; - ReleaseIconRef( iconRef ) ; - DisposeHandle( (Handle) iconFamily ) ; + wxBitmap* bmap = GetImageList()->GetBitmap( GetPageImage(ii ) ) ; + if ( bmap ) + { + wxBitmap scaledBitmap ; + if ( bmap->GetWidth() != 16 || bmap->GetHeight() != 16 ) + { + scaledBitmap = wxBitmap( bmap->ConvertToImage().Scale(16,16) ) ; + bmap = &scaledBitmap ; + } + ControlButtonContentInfo info ; + wxMacCreateBitmapButton( &info , *bmap , kControlContentPictHandle) ; + IconFamilyHandle iconFamily = (IconFamilyHandle) NewHandle(0) ; + OSErr err = SetIconFamilyData( iconFamily, 'PICT' , (Handle) info.u.picture ) ; + wxASSERT_MSG( err == noErr , wxT("Error when adding bitmap") ) ; + IconRef iconRef ; + err = RegisterIconRefFromIconFamily( 'WXNG' , (OSType) 1 , iconFamily, &iconRef ) ; + wxASSERT_MSG( err == noErr , wxT("Error when adding bitmap") ) ; + info.contentType = kControlContentIconRef ; + info.u.iconRef = iconRef ; + SetControlData( (ControlHandle) m_macControl, ii+1,kControlTabImageContentTag, + sizeof( info ), (Ptr)&info ); + wxASSERT_MSG( err == noErr , wxT("Error when setting icon on tab") ) ; + UnregisterIconRef( 'WXNG' , (OSType) 1 ) ; + ReleaseIconRef( iconRef ) ; + DisposeHandle( (Handle) iconFamily ) ; + } } #endif } diff --git a/src/mac/notebmac.cpp b/src/mac/notebmac.cpp index 3a45c336fa..36a27df2eb 100644 --- a/src/mac/notebmac.cpp +++ b/src/mac/notebmac.cpp @@ -24,6 +24,7 @@ #include "wx/string.h" #include "wx/log.h" #include "wx/imaglist.h" +#include "wx/image.h" #include "wx/notebook.h" #include "wx/mac/uma.h" // ---------------------------------------------------------------------------- @@ -341,11 +342,9 @@ wxNotebookPage* wxNotebook::DoRemovePage(size_t nPage) // remove all pages bool wxNotebook::DeleteAllPages() { - // TODO: delete native widget pages - WX_CLEAR_ARRAY(m_pages) ; MacSetupTabs(); - + m_nSelection = -1 ; return TRUE; } @@ -423,22 +422,32 @@ void wxNotebook::MacSetupTabs() // afterwards Unregister it (IconRef is ref counted, so it will stay on the tab even if we // unregister it) in case this will ever lead to having the same icon everywhere add some kind // of static counter - ControlButtonContentInfo info ; - wxMacCreateBitmapButton( &info , *GetImageList()->GetBitmap( GetPageImage(ii ) ) , kControlContentPictHandle) ; - IconFamilyHandle iconFamily = (IconFamilyHandle) NewHandle(0) ; - OSErr err = SetIconFamilyData( iconFamily, 'PICT' , (Handle) info.u.picture ) ; - wxASSERT_MSG( err == noErr , wxT("Error when adding bitmap") ) ; - IconRef iconRef ; - err = RegisterIconRefFromIconFamily( 'WXNG' , (OSType) 1 , iconFamily, &iconRef ) ; - wxASSERT_MSG( err == noErr , wxT("Error when adding bitmap") ) ; - info.contentType = kControlContentIconRef ; - info.u.iconRef = iconRef ; - SetControlData( (ControlHandle) m_macControl, ii+1,kControlTabImageContentTag, - sizeof( info ), (Ptr)&info ); - wxASSERT_MSG( err == noErr , wxT("Error when setting icon on tab") ) ; - UnregisterIconRef( 'WXNG' , (OSType) 1 ) ; - ReleaseIconRef( iconRef ) ; - DisposeHandle( (Handle) iconFamily ) ; + wxBitmap* bmap = GetImageList()->GetBitmap( GetPageImage(ii ) ) ; + if ( bmap ) + { + wxBitmap scaledBitmap ; + if ( bmap->GetWidth() != 16 || bmap->GetHeight() != 16 ) + { + scaledBitmap = wxBitmap( bmap->ConvertToImage().Scale(16,16) ) ; + bmap = &scaledBitmap ; + } + ControlButtonContentInfo info ; + wxMacCreateBitmapButton( &info , *bmap , kControlContentPictHandle) ; + IconFamilyHandle iconFamily = (IconFamilyHandle) NewHandle(0) ; + OSErr err = SetIconFamilyData( iconFamily, 'PICT' , (Handle) info.u.picture ) ; + wxASSERT_MSG( err == noErr , wxT("Error when adding bitmap") ) ; + IconRef iconRef ; + err = RegisterIconRefFromIconFamily( 'WXNG' , (OSType) 1 , iconFamily, &iconRef ) ; + wxASSERT_MSG( err == noErr , wxT("Error when adding bitmap") ) ; + info.contentType = kControlContentIconRef ; + info.u.iconRef = iconRef ; + SetControlData( (ControlHandle) m_macControl, ii+1,kControlTabImageContentTag, + sizeof( info ), (Ptr)&info ); + wxASSERT_MSG( err == noErr , wxT("Error when setting icon on tab") ) ; + UnregisterIconRef( 'WXNG' , (OSType) 1 ) ; + ReleaseIconRef( iconRef ) ; + DisposeHandle( (Handle) iconFamily ) ; + } } #endif }