From f9c213a146acb14fe635b0a0de687ebfcca8039a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Sun, 16 Mar 2008 00:36:37 +0000 Subject: [PATCH] Fixed generic art provider to scale bitmaps down to client-specific best size if needed. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@52561 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/changes.txt | 2 ++ src/common/artstd.cpp | 14 +++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/docs/changes.txt b/docs/changes.txt index 34a6b29480..f1f3b42405 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -125,6 +125,8 @@ All (GUI): - Added wxSizer::ComputeFittingClientSize() and ComputeFittingWindowSize(). - Fixed wxSizer::SetSizeHints() to work when the best size decreases. - Fixed crash in wxHtmlHelpController if the help window is still open. +- Fixed generic art provider to scale bitmaps down to client-specific + best size if needed. All (Unix): diff --git a/src/common/artstd.cpp b/src/common/artstd.cpp index ad34da92d5..a37ceacc67 100644 --- a/src/common/artstd.cpp +++ b/src/common/artstd.cpp @@ -235,14 +235,26 @@ wxBitmap wxDefaultArtProvider::CreateBitmap(const wxArtID& id, { int bmp_w = bmp.GetWidth(); int bmp_h = bmp.GetHeight(); - // want default size but it's smaller, paste into transparent image + if ((bmp_h < bestSize.x) && (bmp_w < bestSize.y)) { + // the caller wants default size, which is larger than + // the image we have; to avoid degrading it visually by + // scaling it up, paste it into transparent image instead: wxPoint offset((bestSize.x - bmp_w)/2, (bestSize.y - bmp_h)/2); wxImage img = bmp.ConvertToImage(); img.Resize(bestSize, offset); bmp = wxBitmap(img); } + else // scale (down or mixed, but not up) + { + wxImage img = bmp.ConvertToImage(); + bmp = wxBitmap + ( + img.Scale(bestSize.x, bestSize.y, + wxIMAGE_QUALITY_HIGH) + ); + } } } }