From 023f27388f87672679e19a9fd6d1a53155b14b0d Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Tue, 29 Sep 2009 17:04:08 +0000 Subject: [PATCH] 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 --- src/msw/artmsw.cpp | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/src/msw/artmsw.cpp b/src/msw/artmsw.cpp index 695fad7d28..10fd2621ee 100644 --- a/src/msw/artmsw.cpp +++ b/src/msw/artmsw.cpp @@ -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; -- 2.45.2