X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2dace059ee7aefeea0f2b843f1808b117f112795..59c962bf54667cab735353b2ec3b7a2438464f22:/src/msw/gdiimage.cpp diff --git a/src/msw/gdiimage.cpp b/src/msw/gdiimage.cpp index d97e57e0fa..ba85991599 100644 --- a/src/msw/gdiimage.cpp +++ b/src/msw/gdiimage.cpp @@ -175,10 +175,10 @@ private: // wxWin macros // ---------------------------------------------------------------------------- - IMPLEMENT_DYNAMIC_CLASS(wxBMPFileHandler, wxBitmapHandler) - IMPLEMENT_DYNAMIC_CLASS(wxBMPResourceHandler, wxBitmapHandler) - IMPLEMENT_DYNAMIC_CLASS(wxICOFileHandler, wxGDIImageHandler) - IMPLEMENT_DYNAMIC_CLASS(wxICOResourceHandler, wxGDIImageHandler) +IMPLEMENT_DYNAMIC_CLASS(wxBMPFileHandler, wxBitmapHandler) +IMPLEMENT_DYNAMIC_CLASS(wxBMPResourceHandler, wxBitmapHandler) +IMPLEMENT_DYNAMIC_CLASS(wxICOFileHandler, wxObject) +IMPLEMENT_DYNAMIC_CLASS(wxICOResourceHandler, wxObject) // ---------------------------------------------------------------------------- // private functions @@ -355,6 +355,8 @@ bool wxBMPFileHandler::LoadFile(wxBitmap *bitmap, #if wxUSE_IMAGE_LOADING_IN_MSW wxPalette *palette = NULL; bool success = wxLoadIntoBitmap(WXSTRINGCAST name, bitmap, &palette) != 0; + +#if wxUSE_PALETTE if ( success && palette ) { bitmap->SetPalette(*palette); @@ -362,6 +364,7 @@ bool wxBMPFileHandler::LoadFile(wxBitmap *bitmap, // it was copied by the bitmap if it was loaded successfully delete palette; +#endif // wxUSE_PALETTE return success; #else @@ -375,9 +378,15 @@ bool wxBMPFileHandler::SaveFile(wxBitmap *bitmap, const wxPalette *pal) { #if wxUSE_IMAGE_LOADING_IN_MSW + +#if wxUSE_PALETTE wxPalette *actualPalette = (wxPalette *)pal; if ( !actualPalette ) actualPalette = bitmap->GetPalette(); +#else + wxPalette *actualPalette = NULL; +#endif // wxUSE_PALETTE + return wxSaveBitmap(WXSTRINGCAST name, bitmap, actualPalette) != 0; #else return FALSE; @@ -493,24 +502,33 @@ bool wxICOResourceHandler::LoadIcon(wxIcon *icon, { HICON hicon; + // do we need the icon of the specific size or would any icon do? + bool hasSize = desiredWidth != -1 || desiredHeight != -1; + + wxASSERT_MSG( !hasSize || (desiredWidth != -1 && desiredHeight != -1), + _T("width and height should be either both -1 or not") ); + // try to load the icon from this program first to allow overriding the // standard icons (although why one would want to do it considering that // we already have wxApp::GetStdIcon() is unclear) #if defined(__WIN32__) && !defined(__SC__) - if ( desiredWidth != -1 && desiredHeight != -1 ) + if ( !hasSize ) { - hicon = (HICON)::LoadImage(wxGetInstance(), name, IMAGE_ICON, - desiredWidth, desiredHeight, - LR_DEFAULTCOLOR); - } - else -#endif // Win32 - { - hicon = ::LoadIcon(wxGetInstance(), name); + // use the actual size of the resource (as we don't specify + // LR_DEFAULTSIZE) + desiredWidth = + desiredHeight = 0; } + hicon = (HICON)::LoadImage(wxGetInstance(), name, IMAGE_ICON, + desiredWidth, desiredHeight, + LR_DEFAULTCOLOR); +#else // !Win32 + hicon = ::LoadIcon(wxGetInstance(), name); +#endif // Win32/!Win32 + // next check if it's not a standard icon - if ( !hicon ) + if ( !hicon && !hasSize ) { static const struct { @@ -528,11 +546,7 @@ bool wxICOResourceHandler::LoadIcon(wxIcon *icon, { if ( name == stdIcons[nIcon].name ) { - hicon = (HICON)::LoadImage((HINSTANCE)NULL, - stdIcons[nIcon].id, - IMAGE_ICON, - desiredWidth, desiredHeight, - LR_DEFAULTCOLOR); + hicon = ::LoadIcon((HINSTANCE)NULL, stdIcons[nIcon].id); } } } @@ -541,7 +555,7 @@ bool wxICOResourceHandler::LoadIcon(wxIcon *icon, icon->SetSize(size.x, size.y); // Override the found values with desired values - if ( desiredWidth > -1 && desiredHeight > -1 ) + if ( hasSize ) { icon->SetSize(desiredWidth, desiredHeight); }