]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/icon.cpp
mac cgcolor changes & cleanup
[wxWidgets.git] / src / mac / carbon / icon.cpp
index 7084b59cfcd6f6e2a6f545c18f3c577fb1cf75a0..3457355e0c0e27fe3d8c9da6b8e5b6f29d3bb9f5 100644 (file)
@@ -53,6 +53,21 @@ wxIcon::wxIcon(
     LoadFile( icon_file, (wxBitmapType) flags, desiredWidth, desiredHeight );
 }
 
+wxIcon::wxIcon(WXHICON icon, const wxSize& size)
+      : wxGDIObject()
+{
+    // as the icon owns that ref, we have to acquire it as well
+    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 ) ;
+    }
+}
+
 wxIcon::~wxIcon()
 {
 }
@@ -83,15 +98,15 @@ int wxIcon::GetDepth() const
     return 32;
 }
 
-void wxIcon::SetDepth( int depth )
+void wxIcon::SetDepth( int WXUNUSED(depth) )
 {
 }
 
-void wxIcon::SetWidth( int width )
+void wxIcon::SetWidth( int WXUNUSED(width) )
 {
 }
 
-void wxIcon::SetHeight( int height )
+void wxIcon::SetHeight( int WXUNUSED(height) )
 {
 }
 
@@ -126,20 +141,48 @@ bool wxIcon::LoadFile(
         {
             theId = kAlertStopIcon ;
         }
+        else if ( filename == wxT("wxICON_FOLDER") )
+        {
+            theId = kGenericFolderIcon ;
+        }
+        else if ( filename == wxT("wxICON_FOLDER_OPEN") )
+        {
+            theId = kOpenFolderIcon ;
+        }
+        else if ( filename == wxT("wxICON_NORMAL_FILE") )
+        {
+            theId = kGenericDocumentIcon ;
+        }
         else
         {
-#if 0
-            Str255 theName ;
-            OSType theType ;
-            wxMacStringToPascal( name , theName ) ;
-
-            Handle resHandle = GetNamedResource( 'cicn' , theName ) ;
-            if ( resHandle != 0L )
+               IconRef iconRef = NULL ;
+               
+               // first look in the resource fork
+               if ( iconRef == NULL )
+               {
+                       Str255 theName ;
+
+                       wxMacStringToPascal( filename , theName ) ;
+                       Handle resHandle = GetNamedResource( 'icns' , theName ) ;
+                       if ( resHandle != 0L )
+                       {
+                                       IconFamilyHandle iconFamily = (IconFamilyHandle) resHandle ;
+                    HLock((Handle) iconFamily);
+                    OSStatus err = GetIconRefFromIconFamilyPtr( *iconFamily, GetHandleSize((Handle) iconFamily), &iconRef );
+                    HUnlock((Handle) iconFamily);
+                    wxASSERT_MSG( err == noErr , wxT("Error when constructing icon ref") );
+                    ReleaseResource( resHandle ) ;
+                       }
+                       }
+            if ( iconRef == NULL )
             {
-                GetResInfo( resHandle , &theId , &theType , theName ) ;
-                ReleaseResource( resHandle ) ;
+                // TODO add other attempts to load it from files etc here
             }
-#endif
+                       if ( iconRef )
+                       {
+                       m_refData = new wxIconRefData( (WXHICON) iconRef ) ;
+                       return true ;
+                       }       
         }
 
         if ( theId != 0 )
@@ -235,7 +278,7 @@ void wxIconRefData::Free()
 IMPLEMENT_DYNAMIC_CLASS(wxICONResourceHandler, wxBitmapHandler)
 
 bool  wxICONResourceHandler::LoadFile(
-    wxBitmap *bitmap, const wxString& name, long flags,
+    wxBitmap *bitmap, const wxString& name, long WXUNUSED(flags),
     int desiredWidth, int desiredHeight )
 {
     wxIcon icon ;