X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/655719367ac5e131d9642e5783f3ecf64d1a3385..fe19000379ee9d39a58db249e53db25b2b719297:/src/common/artprov.cpp diff --git a/src/common/artprov.cpp b/src/common/artprov.cpp index a14428f89e..c0c91304cb 100644 --- a/src/common/artprov.cpp +++ b/src/common/artprov.cpp @@ -36,9 +36,6 @@ #include "wx/image.h" #endif -// For the purposes of forcing this module to link -extern char g_ArtProviderModule; - // =========================================================================== // implementation // =========================================================================== @@ -75,20 +72,17 @@ bool wxArtProviderCache::GetBitmap(const wxString& full_id, wxBitmap* bmp) wxArtProviderBitmapsHash::iterator entry = m_bitmapsHash.find(full_id); if ( entry == m_bitmapsHash.end() ) { - return FALSE; + return false; } else { *bmp = entry->second; - return TRUE; + return true; } } void wxArtProviderCache::Clear() { - // Hack to make the default provider link - // with the application - g_ArtProviderModule = 0; m_bitmapsHash.clear(); } @@ -125,27 +119,27 @@ wxArtProviderCache *wxArtProvider::sm_cache = NULL; /*static*/ bool wxArtProvider::PopProvider() { - wxCHECK_MSG( sm_providers, FALSE, _T("no wxArtProvider exists") ); - wxCHECK_MSG( sm_providers->GetCount() > 0, FALSE, _T("wxArtProviders stack is empty") ); + wxCHECK_MSG( sm_providers, false, _T("no wxArtProvider exists") ); + wxCHECK_MSG( sm_providers->GetCount() > 0, false, _T("wxArtProviders stack is empty") ); delete sm_providers->GetFirst()->GetData(); sm_providers->Erase(sm_providers->GetFirst()); sm_cache->Clear(); - return TRUE; + return true; } /*static*/ bool wxArtProvider::RemoveProvider(wxArtProvider *provider) { - wxCHECK_MSG( sm_providers, FALSE, _T("no wxArtProvider exists") ); + wxCHECK_MSG( sm_providers, false, _T("no wxArtProvider exists") ); if ( sm_providers->DeleteObject(provider) ) { delete provider; sm_cache->Clear(); - return TRUE; + return true; } - return FALSE; + return false; } /*static*/ void wxArtProvider::CleanUpProviders() @@ -183,7 +177,7 @@ wxArtProviderCache *wxArtProvider::sm_cache = NULL; img.Rescale(size.x, size.y); bmp = wxBitmap(img); } -#endif +#endif break; } } @@ -209,6 +203,51 @@ wxArtProviderCache *wxArtProvider::sm_cache = NULL; 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 { @@ -216,7 +255,8 @@ public: bool OnInit() { wxArtProvider::InitStdProvider(); - return TRUE; + wxArtProvider::InitNativeProvider(); + return true; } void OnExit() {