diff options
author | Cédric Bosdonnat <cedric.bosdonnat@free.fr> | 2012-12-05 18:40:16 +0100 |
---|---|---|
committer | Cédric Bosdonnat <cedric.bosdonnat@free.fr> | 2012-12-06 10:41:54 +0100 |
commit | 4396c1f1572de98b39937e4c07bdc68a8b84dee1 (patch) | |
tree | 745411cd3a8ec50942c92a3ed4e36d248367d35d /sfx2 | |
parent | 133f92643beed84ce298c054097a0ea637a408c4 (diff) |
Template manager: keep thumbnails ratio when scaling down
Change-Id: Ic597dd9fd12895c0d21f678cba44feba9f6fcd47
Diffstat (limited to 'sfx2')
-rw-r--r-- | sfx2/source/control/templateabstractview.cxx | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/sfx2/source/control/templateabstractview.cxx b/sfx2/source/control/templateabstractview.cxx index 8cbf60fcea4c..0baed64e28d5 100644 --- a/sfx2/source/control/templateabstractview.cxx +++ b/sfx2/source/control/templateabstractview.cxx @@ -137,10 +137,33 @@ BitmapEx TemplateAbstractView::scaleImg (const BitmapEx &rImg, long width, long { BitmapEx aImg = rImg; - int sWidth = std::min(aImg.GetSizePixel().getWidth(),width); - int sHeight = std::min(aImg.GetSizePixel().getHeight(),height); + if ( !rImg.IsEmpty() ) + { + + const Size& aImgSize = aImg.GetSizePixel(); + double nRatio = double(aImgSize.getWidth()) / double(aImgSize.getHeight()); + + long nDestWidth = aImgSize.getWidth(); + long nDestHeight = aImgSize.getHeight(); + + // Which one side is the overflowing most? + long nDistW = aImgSize.getWidth() - width; + long nDistH = aImgSize.getHeight() - height; + + // Use the biggest overflow side to make it fit the destination + if ( nDistW >= nDistH && nDistW > 0 ) + { + nDestWidth = width; + nDestHeight = width / nRatio; + } + else if ( nDistW < nDistH && nDistH > 0 ) + { + nDestHeight = height; + nDestWidth = height * nRatio; + } - aImg.Scale(Size(sWidth,sHeight),BMP_SCALE_INTERPOLATE); + aImg.Scale(Size(nDestWidth,nDestHeight)); + } return aImg; } |