summaryrefslogtreecommitdiff
path: root/sfx2
diff options
context:
space:
mode:
authorCédric Bosdonnat <cedric.bosdonnat@free.fr>2012-12-05 18:40:16 +0100
committerCédric Bosdonnat <cedric.bosdonnat@free.fr>2012-12-06 10:41:54 +0100
commit4396c1f1572de98b39937e4c07bdc68a8b84dee1 (patch)
tree745411cd3a8ec50942c92a3ed4e36d248367d35d /sfx2
parent133f92643beed84ce298c054097a0ea637a408c4 (diff)
Template manager: keep thumbnails ratio when scaling down
Change-Id: Ic597dd9fd12895c0d21f678cba44feba9f6fcd47
Diffstat (limited to 'sfx2')
-rw-r--r--sfx2/source/control/templateabstractview.cxx29
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;
}