X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f618020a15f1647a83aaeab1fe315f90497a9876..7fa4dc1cfcc55b0fe425a3ebe5e992ff8255481b:/src/common/iconbndl.cpp?ds=sidebyside diff --git a/src/common/iconbndl.cpp b/src/common/iconbndl.cpp index 13a5d84d34..2fa8344534 100644 --- a/src/common/iconbndl.cpp +++ b/src/common/iconbndl.cpp @@ -8,7 +8,7 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "iconbndl.h" #endif @@ -21,10 +21,14 @@ #ifndef WX_PRECOMP #include "wx/settings.h" - #include "wx/image.h" #include "wx/icon.h" #include "wx/log.h" #include "wx/intl.h" + #include "wx/bitmap.h" +#endif + +#if wxUSE_IMAGE && !defined(_WX_IMAGE_H_) + #include "wx/image.h" #endif #include "wx/iconbndl.h" @@ -50,12 +54,16 @@ void wxIconBundle::DeleteIcons() m_icons.Empty(); } +#if wxUSE_IMAGE void wxIconBundle::AddIcon( const wxString& file, long type ) +#else +void wxIconBundle::AddIcon( const wxString& WXUNUSED(file), long WXUNUSED(type) ) +#endif { +#if wxUSE_IMAGE size_t count = wxImage::GetImageCount( file, type ); size_t i; wxImage image; - wxIcon tmp; for( i = 0; i < count; ++i ) { @@ -66,9 +74,12 @@ void wxIconBundle::AddIcon( const wxString& file, long type ) continue; } - tmp.CopyFromBitmap( wxBitmap( image ) ); - AddIcon( tmp ); + wxIcon* tmp = new wxIcon(); + tmp->CopyFromBitmap( wxBitmap( image ) ); + AddIcon( *tmp ); + delete tmp; } +#endif } const wxIcon& wxIconBundle::GetIcon( const wxSize& size ) const @@ -76,14 +87,23 @@ const wxIcon& wxIconBundle::GetIcon( const wxSize& size ) const size_t i, max = m_icons.GetCount(); wxCoord sysX = wxSystemSettings::GetMetric( wxSYS_ICON_X ), sysY = wxSystemSettings::GetMetric( wxSYS_ICON_Y ); - wxIcon* sysIcon = 0; - for( i = 0; i < max; ++i ) + wxIcon *sysIcon = 0; + // temp. variable needed to fix Borland C++ 5.5.1 problem + // with passing a return value through two functions + wxIcon *tmp; + + for( i = 0; i < max; i++ ) { + if( !m_icons[i].Ok() ) + continue; wxCoord sx = m_icons[i].GetWidth(), sy = m_icons[i].GetHeight(); // requested size if( sx == size.x && sy == size.y ) - return m_icons[i]; + { + tmp = &m_icons[i]; // fix for broken BCC + return *tmp; + } // keep track if there is a system-size icon if( sx == sysX && sy == sysY ) sysIcon = &m_icons[i]; @@ -92,7 +112,11 @@ const wxIcon& wxIconBundle::GetIcon( const wxSize& size ) const // return the system-sized icon if we've got one if( sysIcon ) return *sysIcon; // return the first icon, if we have one - return max > 0 ? m_icons[0] : wxNullIcon; + if( max > 0 ) // fix for broken BCC + tmp = &m_icons[0]; + else + tmp = &wxNullIcon; + return *tmp; } void wxIconBundle::AddIcon( const wxIcon& icon ) @@ -102,7 +126,7 @@ void wxIconBundle::AddIcon( const wxIcon& icon ) for( i = 0; i < max; ++i ) { wxIcon& tmp = m_icons[i]; - if( tmp.GetWidth() == icon.GetWidth() && + if( tmp.Ok() && tmp.GetWidth() == icon.GetWidth() && tmp.GetHeight() == icon.GetHeight() ) { tmp = icon;