]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/icon.cpp
fixed (rare but fatal) bug in wxWindowDisabler
[wxWidgets.git] / src / mac / icon.cpp
index 6deee7dbdc2d7baea731c76061cf01cda56e13ed..2fb0616ba868dd7be6f3d61460c6c464f2489fed 100644 (file)
@@ -15,9 +15,7 @@
 
 #include "wx/icon.h"
 
-#if !USE_SHARED_LIBRARIES
 IMPLEMENT_DYNAMIC_CLASS(wxIcon, wxBitmap)
-#endif
 
 /*
  * Icons
@@ -26,12 +24,30 @@ IMPLEMENT_DYNAMIC_CLASS(wxIcon, wxBitmap)
 
 wxIconRefData::wxIconRefData()
 {
-    // TODO: init icon handle
+    m_ok = FALSE;
+    m_width = 0;
+    m_height = 0;
+    m_depth = 0;
+    m_quality = 0;
+    m_numColors = 0;
+    m_bitmapMask = NULL;
+               m_hBitmap = NULL ;
+               m_hIcon = NULL ;
 }
 
 wxIconRefData::~wxIconRefData()
 {
-    // TODO: destroy icon handle
+       if ( m_hIcon )
+       {
+               DisposeCIcon( m_hIcon ) ;
+               m_hIcon = NULL ;
+       }
+               
+  if (m_bitmapMask)
+  {
+    delete m_bitmapMask;
+    m_bitmapMask = NULL;
+  }
 }
 
 wxIcon::wxIcon()
@@ -68,3 +84,32 @@ bool wxIcon::LoadFile(const wxString& filename, long type,
        return FALSE;
 }
 
+IMPLEMENT_DYNAMIC_CLASS(wxICONResourceHandler, wxBitmapHandler)
+
+bool  wxICONResourceHandler::LoadFile(wxBitmap *bitmap, const wxString& name, long flags,
+          int desiredWidth, int desiredHeight)
+{
+       Str255 theName ;
+       short theId ;
+       OSType theType ;
+       strcpy( (char*) theName , name ) ;
+       c2pstr( (char*) theName ) ;
+       
+       Handle resHandle = GetNamedResource( 'cicn' , theName ) ;
+       GetResInfo( resHandle , &theId , &theType , theName ) ;
+       ReleaseResource( resHandle ) ;
+       
+       CIconHandle theIcon = (CIconHandle ) GetCIcon( theId ) ;
+       if ( theIcon )
+       {
+               M_ICONHANDLERDATA->m_hIcon = theIcon ;
+               M_ICONHANDLERDATA->m_width =  32 ;
+               M_ICONHANDLERDATA->m_height = 32 ;
+               
+               M_ICONHANDLERDATA->m_depth = 8 ;
+               M_ICONHANDLERDATA->m_ok = true ;
+               M_ICONHANDLERDATA->m_numColors = 256 ;
+               return TRUE ;
+       }
+       return FALSE ;
+}