IconRef m_iconRef;
int m_width;
int m_height;
+
+ // We can (easily) copy m_iconRef so we don't implement the copy ctor.
+ wxDECLARE_NO_COPY_CLASS(wxIconRefData);
};
return new wxIconRefData;
}
-wxGDIRefData *wxIcon::CloneGDIRefData(const wxGDIRefData *data) const
+wxGDIRefData *
+wxIcon::CloneGDIRefData(const wxGDIRefData * WXUNUSED(data)) const
{
- return new wxIconRefData(*static_cast<const wxIconRefData *>(data));
+ wxFAIL_MSG( wxS("Cloning icons is not implemented in wxCarbon.") );
+
+ return new wxIconRefData;
}
WXHICON wxIcon::GetHICON() const
ReleaseResource( resHandle ) ;
}
}
+ if ( iconRef == NULL )
+ {
+ wxCFStringRef name(resourceName);
+ FSRef iconFSRef;
+
+ wxCFRef<CFURLRef> iconURL(CFBundleCopyResourceURL(CFBundleGetMainBundle(), name, CFSTR("icns"), NULL));
+
+ if (CFURLGetFSRef(iconURL, &iconFSRef))
+ {
+ // Get a handle on the icon family
+ IconFamilyHandle iconFamily;
+ OSStatus err = ReadIconFromFSRef( &iconFSRef, &iconFamily );
+
+ if ( err == noErr )
+ {
+ err = GetIconRefFromIconFamilyPtr( *iconFamily, GetHandleSize((Handle) iconFamily), &iconRef );
+ }
+ ReleaseResource( (Handle) iconFamily );
+ }
+ }
if ( iconRef )
{
UnRef() ;
// as the bitmap owns that ref, we have to acquire it as well
- IconRef iconRef = bmp.CreateIconRef() ;
- m_refData = new wxIconRefData( (WXHICON) iconRef, bmp.GetWidth(), bmp.GetHeight() ) ;
+
+ int w = bmp.GetWidth() ;
+ int h = bmp.GetHeight() ;
+ int sz = wxMax( w , h ) ;
+
+ if ( sz == 24 || sz == 64 )
+ {
+ wxBitmap scaleBmp( bmp.ConvertToImage().Scale( w * 2 , h * 2 ) ) ;
+ m_refData = new wxIconRefData( (WXHICON) scaleBmp.CreateIconRef(), bmp.GetWidth(), bmp.GetHeight() ) ;
+ }
+ else
+ {
+ m_refData = new wxIconRefData( (WXHICON) bmp.CreateIconRef() , bmp.GetWidth(), bmp.GetHeight() ) ;
+ }
+
}
IMPLEMENT_DYNAMIC_CLASS(wxICONResourceHandler, wxBitmapHandler)