Files
wxWidgets/src/msw/artmsw.cpp

130 lines
3.9 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// 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/image.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,
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& 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 )
name = "wxICON_ERROR";
else if ( id == wxART_INFORMATION )
name = "wxICON_INFORMATION";
else if ( id == wxART_WARNING )
name = "wxICON_WARNING";
else if ( id == wxART_QUESTION )
name = "wxICON_QUESTION";
if ( name )
return CreateFromStdIcon(name, client);
// 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;
}