X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c41acdab517ea043497c4ef7d3f06827f5965165..9d5507f7a2701395e1d5c121bd877bb9066ee6ea:/src/mac/carbon/icon.cpp diff --git a/src/mac/carbon/icon.cpp b/src/mac/carbon/icon.cpp index 3457355e0c..87c0ceb969 100644 --- a/src/mac/carbon/icon.cpp +++ b/src/mac/carbon/icon.cpp @@ -19,10 +19,60 @@ #include "wx/mac/private.h" -IMPLEMENT_DYNAMIC_CLASS(wxIcon, wxBitmap) +IMPLEMENT_DYNAMIC_CLASS(wxIcon, wxGDIObject) #define M_ICONDATA ((wxIconRefData *)m_refData) +class WXDLLEXPORT wxIconRefData : public wxGDIRefData +{ +public: + wxIconRefData(); + wxIconRefData( WXHICON iconref, int desiredWidth, int desiredHeight ); + virtual ~wxIconRefData() { Free(); } + + void Init(); + virtual void Free(); + + void SetWidth( int width ) { m_width = width; } + void SetHeight( int height ) { m_height = height; } + + int GetWidth() const { return m_width; } + int GetHeight() const { return m_height; } + + WXHICON GetHICON() const { return (WXHICON) m_iconRef; } + private : + IconRef m_iconRef; + int m_width; + int m_height; +}; + + +wxIconRefData::wxIconRefData( WXHICON icon, int desiredWidth, int desiredHeight ) +{ + m_iconRef = MAC_WXHICON( icon ) ; + + // Standard sizes + SetWidth( desiredWidth == -1 ? 32 : desiredWidth ) ; + SetHeight( desiredHeight == -1 ? 32 : desiredHeight ) ; +} + +void wxIconRefData::Init() +{ + m_iconRef = NULL ; +} + +void wxIconRefData::Free() +{ + if ( m_iconRef ) + { + ReleaseIconRef( m_iconRef ) ; + m_iconRef = NULL ; + } +} + +// +// +// wxIcon::wxIcon() { @@ -60,12 +110,7 @@ wxIcon::wxIcon(WXHICON icon, const wxSize& size) if (icon) AcquireIconRef( (IconRef) icon ) ; - m_refData = new wxIconRefData( icon ) ; - if ( (size.x != -1) && (size.y != -1) ) - { - M_ICONDATA->SetWidth( size.x ) ; - M_ICONDATA->SetHeight( size.y ) ; - } + m_refData = new wxIconRefData( icon, size.x, size.y ) ; } wxIcon::~wxIcon() @@ -180,7 +225,7 @@ bool wxIcon::LoadFile( } if ( iconRef ) { - m_refData = new wxIconRefData( (WXHICON) iconRef ) ; + m_refData = new wxIconRefData( (WXHICON) iconRef, desiredWidth, desiredHeight ) ; return true ; } } @@ -191,7 +236,7 @@ bool wxIcon::LoadFile( verify_noerr( GetIconRef( kOnSystemDisk, kSystemIconsCreator, theId, &iconRef ) ) ; if ( iconRef ) { - m_refData = new wxIconRefData( (WXHICON) iconRef ) ; + m_refData = new wxIconRefData( (WXHICON) iconRef, desiredWidth, desiredHeight ) ; return true ; } @@ -244,35 +289,8 @@ void wxIcon::CopyFromBitmap( const wxBitmap& bmp ) UnRef() ; // as the bitmap owns that ref, we have to acquire it as well - IconRef iconRef = bmp.GetBitmapData()->GetIconRef() ; - AcquireIconRef( iconRef ) ; - - m_refData = new wxIconRefData( (WXHICON) iconRef ) ; - M_ICONDATA->SetWidth( bmp.GetWidth() ) ; - M_ICONDATA->SetHeight( bmp.GetHeight() ) ; -} - -wxIconRefData::wxIconRefData( WXHICON icon ) -{ - m_iconRef = MAC_WXHICON( icon ) ; - - // Standard sizes - SetWidth( 32 ) ; - SetHeight( 32 ) ; -} - -void wxIconRefData::Init() -{ - m_iconRef = NULL ; -} - -void wxIconRefData::Free() -{ - if ( m_iconRef ) - { - ReleaseIconRef( m_iconRef ) ; - m_iconRef = NULL ; - } + IconRef iconRef = bmp.CreateIconRef() ; + m_refData = new wxIconRefData( (WXHICON) iconRef, bmp.GetWidth(), bmp.GetHeight() ) ; } IMPLEMENT_DYNAMIC_CLASS(wxICONResourceHandler, wxBitmapHandler)