X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/39f6b6ba784f17c64b2b3a864beafcd8bf3bca73..7198c3368055d88249a338eb33b21f051f674806:/src/common/artprov.cpp?ds=sidebyside diff --git a/src/common/artprov.cpp b/src/common/artprov.cpp index 79c9470e01..69c6928528 100644 --- a/src/common/artprov.cpp +++ b/src/common/artprov.cpp @@ -204,11 +204,8 @@ wxArtProvider::~wxArtProvider() while ( !sm_providers->empty() ) delete *sm_providers->begin(); - delete sm_providers; - sm_providers = NULL; - - delete sm_cache; - sm_cache = NULL; + wxDELETE(sm_providers); + wxDELETE(sm_cache); } } @@ -234,39 +231,43 @@ wxArtProvider::~wxArtProvider() node; node = node->GetNext()) { bmp = node->GetData()->CreateBitmap(id, client, size); - if ( bmp.Ok() ) + if ( bmp.IsOk() ) break; } - if ( !bmp.Ok() ) + wxSize sizeNeeded = size; + if ( !bmp.IsOk() ) { // no bitmap created -- as a fallback, try if we can find desired // icon in a bundle wxIconBundle iconBundle = DoGetIconBundle(id, client); if ( iconBundle.IsOk() ) { - wxSize sz(size != wxDefaultSize - ? size - : GetNativeSizeHint(client)); - wxIcon icon(iconBundle.GetIcon(sz)); + if ( sizeNeeded == wxDefaultSize ) + sizeNeeded = GetNativeSizeHint(client); + + wxIcon icon(iconBundle.GetIcon(sizeNeeded)); if ( icon.IsOk() ) + { + // this icon may be not of the correct size, it will be + // rescaled below in such case bmp.CopyFromIcon(icon); + } } } - if ( bmp.IsOk() ) - { - // if we didn't get the correct size, resize the bitmap + // if we didn't get the correct size, resize the bitmap #if wxUSE_IMAGE && (!defined(__WXMSW__) || wxUSE_WXDIB) - if ( size != wxDefaultSize && - (bmp.GetWidth() != size.x || bmp.GetHeight() != size.y) ) + if ( bmp.IsOk() && sizeNeeded != wxDefaultSize ) + { + if ( bmp.GetSize() != sizeNeeded ) { wxImage img = bmp.ConvertToImage(); - img.Rescale(size.x, size.y); + img.Rescale(sizeNeeded.x, sizeNeeded.y); bmp = wxBitmap(img); } -#endif } +#endif // wxUSE_IMAGE sm_cache->PutBitmap(hashId, bmp); } @@ -439,7 +440,12 @@ class wxArtProviderModule: public wxModule public: bool OnInit() { +#if wxUSE_ARTPROVIDER_STD wxArtProvider::InitStdProvider(); +#endif // wxUSE_ARTPROVIDER_STD +#if wxUSE_ARTPROVIDER_TANGO + wxArtProvider::InitTangoProvider(); +#endif // wxUSE_ARTPROVIDER_TANGO wxArtProvider::InitNativeProvider(); return true; }