]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/icon.cpp
Use FillHilite style
[wxWidgets.git] / src / mac / carbon / icon.cpp
index ee61c69a8daacceac8cb19ce6ea7307a789dc235..2d7a1a16b26ea23ae3de3e68b3a0bc00a027bb78 100644 (file)
@@ -23,6 +23,56 @@ IMPLEMENT_DYNAMIC_CLASS(wxIcon, wxBitmap)
 
 #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,9 +110,7 @@ wxIcon::wxIcon(WXHICON icon, const wxSize& size)
     if (icon)
         AcquireIconRef( (IconRef) icon ) ;
 
-    m_refData = new wxIconRefData( icon ) ;
-    M_ICONDATA->SetWidth( size.x ) ;
-    M_ICONDATA->SetHeight( size.y ) ;
+    m_refData = new wxIconRefData( icon, size.x, size.y ) ;
 }
 
 wxIcon::~wxIcon()
@@ -177,7 +225,7 @@ bool wxIcon::LoadFile(
             }
                        if ( iconRef )
                        {
-                       m_refData = new wxIconRefData( (WXHICON) iconRef ) ;
+                       m_refData = new wxIconRefData( (WXHICON) iconRef, desiredWidth, desiredHeight ) ;
                        return true ;
                        }       
         }
@@ -188,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 ;
             }
@@ -241,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)