From: Václav Slavík Date: Thu, 16 Oct 2008 19:10:55 +0000 (+0000) Subject: wxArtProvider cleanup: added artmsw.cpp accidentally missing from r56372 X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/7abd9a0331124b50f17d64faec77b7917c9990b5 wxArtProvider cleanup: added artmsw.cpp accidentally missing from r56372 git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56373 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/msw/artmsw.cpp b/src/msw/artmsw.cpp new file mode 100644 index 0000000000..695fad7d28 --- /dev/null +++ b/src/msw/artmsw.cpp @@ -0,0 +1,106 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: src/msw/artmsw.cpp +// Purpose: stock wxArtProvider instance with native MSW stock icons +// Author: Vaclav Slavik +// Modified by: +// Created: 2008-10-15 +// RCS-ID: $Id$ +// Copyright: (c) Vaclav Slavik, 2008 +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +// --------------------------------------------------------------------------- +// headers +// --------------------------------------------------------------------------- + +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#if defined(__BORLANDC__) + #pragma hdrstop +#endif + +#include "wx/artprov.h" +#include "wx/msw/wrapwin.h" + + +// ---------------------------------------------------------------------------- +// wxWindowsArtProvider +// ---------------------------------------------------------------------------- + +class wxWindowsArtProvider : public wxArtProvider +{ +protected: + virtual wxBitmap CreateBitmap(const wxArtID& id, const wxArtClient& client, + const wxSize& size); +}; + +static wxBitmap CreateFromStdIcon(const char *iconName) +{ + wxIcon icon(iconName); + wxBitmap bmp; + bmp.CopyFromIcon(icon); + return bmp; +} + +wxBitmap wxWindowsArtProvider::CreateBitmap(const wxArtID& id, + const wxArtClient& WXUNUSED(client), + const wxSize& WXUNUSED(size)) +{ + // handle message box icons specially (wxIcon ctor treat these names + // as special cases via wxICOResourceHandler::LoadIcon): + if ( id == wxART_ERROR ) + return CreateFromStdIcon("wxICON_ERROR"); + else if ( id == wxART_INFORMATION ) + return CreateFromStdIcon("wxICON_INFORMATION"); + else if ( id == wxART_WARNING ) + return CreateFromStdIcon("wxICON_WARNING"); + else if ( id == wxART_QUESTION ) + return CreateFromStdIcon("wxICON_QUESTION"); + + // for anything else, fall back to generic provider: + return wxNullBitmap; +} + +// ---------------------------------------------------------------------------- +// wxArtProvider::InitNativeProvider() +// ---------------------------------------------------------------------------- + +/*static*/ void wxArtProvider::InitNativeProvider() +{ + Push(new wxWindowsArtProvider); +} + +// ---------------------------------------------------------------------------- +// wxArtProvider::GetNativeSizeHint() +// ---------------------------------------------------------------------------- + +/*static*/ +wxSize wxArtProvider::GetNativeSizeHint(const wxArtClient& client) +{ + if ( client == wxART_TOOLBAR ) + { + return wxSize(24, 24); + } + else if ( client == wxART_MENU ) + { + return wxSize(16, 16); + } + else if ( client == wxART_FRAME_ICON ) + { + return wxSize(::GetSystemMetrics(SM_CXSMICON), + ::GetSystemMetrics(SM_CYSMICON)); + } + else if ( client == wxART_CMN_DIALOG || + client == wxART_MESSAGE_BOX ) + { + return wxSize(::GetSystemMetrics(SM_CXICON), + ::GetSystemMetrics(SM_CYICON)); + } + else if (client == wxART_BUTTON) + { + return wxSize(16, 16); + } + + return wxDefaultSize; +}