/////////////////////////////////////////////////////////////////////////////
-// Name: artprov.cpp
+// Name: src/common/artprov.cpp
// Purpose: wxArtProvider class
// Author: Vaclav Slavik
// Modified by:
// headers
// ---------------------------------------------------------------------------
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
- #pragma implementation "artprov.h"
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#endif
#ifndef WX_PRECOMP
- #include "wx/log.h"
#include "wx/list.h"
+ #include "wx/log.h"
#endif
#include "wx/artprov.h"
#include "wx/hashmap.h"
#include "wx/module.h"
+
#if wxUSE_IMAGE
-#include "wx/image.h"
+ #include "wx/image.h"
#endif
// ===========================================================================
#include "wx/listimpl.cpp"
WX_DECLARE_LIST(wxArtProvider, wxArtProvidersList);
-WX_DEFINE_LIST(wxArtProvidersList);
+WX_DEFINE_LIST(wxArtProvidersList)
// ----------------------------------------------------------------------------
// Cache class - stores already requested bitmaps
bmp = node->GetData()->CreateBitmap(id, client, size);
if ( bmp.Ok() )
{
-#if wxUSE_IMAGE
+#if wxUSE_IMAGE && (!defined(__WXMSW__) || wxUSE_WXDIB)
if ( size != wxDefaultSize &&
(bmp.GetWidth() != size.x || bmp.GetHeight() != size.y) )
{
return icon;
}
+#if defined(__WXGTK20__) && !defined(__WXUNIVERSAL__)
+ #include "wx/gtk/private.h"
+ extern GtkIconSize wxArtClientToIconSize(const wxArtClient& client);
+#endif // defined(__WXGTK20__) && !defined(__WXUNIVERSAL__)
+
+/*static*/ wxSize wxArtProvider::GetSizeHint(const wxArtClient& client,
+ bool platform_dependent)
+{
+ if (!platform_dependent)
+ {
+ wxArtProvidersList::compatibility_iterator node = sm_providers->GetFirst();
+ if (node)
+ return node->GetData()->DoGetSizeHint(client);
+ }
+
+ // else return platform dependent size
+
+#if defined(__WXGTK20__) && !defined(__WXUNIVERSAL__)
+ // Gtk has specific sizes for each client, see artgtk.cpp
+ GtkIconSize gtk_size = wxArtClientToIconSize(client);
+ // no size hints for this client
+ if (gtk_size == GTK_ICON_SIZE_INVALID)
+ return wxDefaultSize;
+ gint width, height;
+ gtk_icon_size_lookup( gtk_size, &width, &height);
+ return wxSize(width, height);
+#else // !GTK+ 2
+ // NB: These size hints may have to be adjusted per platform
+ if (client == wxART_TOOLBAR)
+ return wxSize(16, 15);
+ else if (client == wxART_MENU)
+ return wxSize(16, 15);
+ else if (client == wxART_FRAME_ICON)
+ return wxSize(16, 15);
+ else if (client == wxART_CMN_DIALOG || client == wxART_MESSAGE_BOX)
+ return wxSize(32, 32);
+ else if (client == wxART_HELP_BROWSER)
+ return wxSize(16, 15);
+ else if (client == wxART_BUTTON)
+ return wxSize(16, 15);
+ else // wxART_OTHER or perhaps a user's client, no specified size
+ return wxDefaultSize;
+#endif // GTK+ 2/else
+}
+
class wxArtProviderModule: public wxModule
{