fix message box icons sizes in wxWindowsArtProvider: they should respect client ID and not be 32x32 all the time

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62199 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
2009-09-29 17:04:08 +00:00
parent 24985a9b5b
commit 023f27388f

View File

@@ -21,6 +21,7 @@
#endif
#include "wx/artprov.h"
#include "wx/image.h"
#include "wx/msw/wrapwin.h"
@@ -35,28 +36,50 @@ protected:
const wxSize& size);
};
static wxBitmap CreateFromStdIcon(const char *iconName)
static wxBitmap CreateFromStdIcon(const char *iconName,
const wxArtClient& client)
{
wxIcon icon(iconName);
wxBitmap bmp;
bmp.CopyFromIcon(icon);
#if wxUSE_IMAGE
// The standard native message box icons are in message box size (32x32).
// If they are requested in any size other than the default or message
// box size, they must be rescaled first.
if ( client != wxART_MESSAGE_BOX && client != wxART_OTHER )
{
const wxSize size = wxArtProvider::GetNativeSizeHint(client);
if ( size != wxDefaultSize )
{
wxImage img = bmp.ConvertToImage();
img.Rescale(size.x, size.y);
bmp = wxBitmap(img);
}
}
#endif // wxUSE_IMAGE
return bmp;
}
wxBitmap wxWindowsArtProvider::CreateBitmap(const wxArtID& id,
const wxArtClient& WXUNUSED(client),
const wxArtClient& client,
const wxSize& WXUNUSED(size))
{
// handle message box icons specially (wxIcon ctor treat these names
// as special cases via wxICOResourceHandler::LoadIcon):
const char *name = NULL;
if ( id == wxART_ERROR )
return CreateFromStdIcon("wxICON_ERROR");
name = "wxICON_ERROR";
else if ( id == wxART_INFORMATION )
return CreateFromStdIcon("wxICON_INFORMATION");
name = "wxICON_INFORMATION";
else if ( id == wxART_WARNING )
return CreateFromStdIcon("wxICON_WARNING");
name = "wxICON_WARNING";
else if ( id == wxART_QUESTION )
return CreateFromStdIcon("wxICON_QUESTION");
name = "wxICON_QUESTION";
if ( name )
return CreateFromStdIcon(name, client);
// for anything else, fall back to generic provider:
return wxNullBitmap;