diff options
Diffstat (limited to 'drawinglayer/source/primitive2d/pagepreviewprimitive2d.cxx')
-rw-r--r-- | drawinglayer/source/primitive2d/pagepreviewprimitive2d.cxx | 65 |
1 files changed, 26 insertions, 39 deletions
diff --git a/drawinglayer/source/primitive2d/pagepreviewprimitive2d.cxx b/drawinglayer/source/primitive2d/pagepreviewprimitive2d.cxx index 3c2db2f6e91c..5cb7232e9af0 100644 --- a/drawinglayer/source/primitive2d/pagepreviewprimitive2d.cxx +++ b/drawinglayer/source/primitive2d/pagepreviewprimitive2d.cxx @@ -66,48 +66,37 @@ namespace drawinglayer // create a mapping from content to object. basegfx::B2DHomMatrix aPageTrans; - if(getKeepAspectRatio()) + // #i101075# when keeping the aspect ratio is wanted, it is necessary to calculate + // an equidistant scaling in X and Y and a corresponding translation to + // center the output. Calculate needed scale factors + const double fScaleX(aScale.getX() / getContentWidth()); + const double fScaleY(aScale.getY() / getContentHeight()); + + // to keep the aspect, use the smaller scale and adapt missing size by translation + if(fScaleX < fScaleY) { - // #i101075# when keeping the aspect ratio is wanted, it is necessary to calculate - // an equidistant scaling in X and Y and a corresponding translation to - // center the output. Calculate needed scale factors - const double fScaleX(aScale.getX() / getContentWidth()); - const double fScaleY(aScale.getY() / getContentHeight()); - - // to keep the aspect, use the smaller scale and adapt missing size by translation - if(fScaleX < fScaleY) - { - // height needs to be adapted - const double fNeededHeight(aScale.getY() / fScaleX); - const double fSpaceToAdd(fNeededHeight - getContentHeight()); - - aPageTrans.translate(0.0, fSpaceToAdd * 0.5); - aPageTrans.scale(fScaleX, aScale.getY() / fNeededHeight); - } - else - { - // width needs to be adapted - const double fNeededWidth(aScale.getX() / fScaleY); - const double fSpaceToAdd(fNeededWidth - getContentWidth()); - - aPageTrans.translate(fSpaceToAdd * 0.5, 0.0); - aPageTrans.scale(aScale.getX() / fNeededWidth, fScaleY); - } - - // add the missing object transformation aspects - const basegfx::B2DHomMatrix aCombined(basegfx::tools::createShearXRotateTranslateB2DHomMatrix( - fShearX, fRotate, aTranslate.getX(), aTranslate.getY())); - aPageTrans = aCombined * aPageTrans; + // height needs to be adapted + const double fNeededHeight(aScale.getY() / fScaleX); + const double fSpaceToAdd(fNeededHeight - getContentHeight()); + + aPageTrans.translate(0.0, fSpaceToAdd * 0.5); + aPageTrans.scale(fScaleX, aScale.getY() / fNeededHeight); } else { - // completely scale to PageObject size. Scale to unit size. - aPageTrans.scale(1.0/ getContentWidth(), 1.0 / getContentHeight()); + // width needs to be adapted + const double fNeededWidth(aScale.getX() / fScaleY); + const double fSpaceToAdd(fNeededWidth - getContentWidth()); - // apply object matrix - aPageTrans *= getTransform(); + aPageTrans.translate(fSpaceToAdd * 0.5, 0.0); + aPageTrans.scale(aScale.getX() / fNeededWidth, fScaleY); } + // add the missing object transformation aspects + const basegfx::B2DHomMatrix aCombined(basegfx::tools::createShearXRotateTranslateB2DHomMatrix( + fShearX, fRotate, aTranslate.getX(), aTranslate.getY())); + aPageTrans = aCombined * aPageTrans; + // embed in necessary transformation to map from SdrPage to SdrPageObject const Primitive2DReference xReferenceB(new TransformPrimitive2D(aPageTrans, aContent)); xRetval = Primitive2DContainer { xReferenceB }; @@ -128,8 +117,7 @@ namespace drawinglayer maPageContent(rPageContent), maTransform(rTransform), mfContentWidth(fContentWidth), - mfContentHeight(fContentHeight), - mbKeepAspectRatio(true) + mfContentHeight(fContentHeight) { } @@ -143,8 +131,7 @@ namespace drawinglayer && getPageContent() == rCompare.getPageContent() && getTransform() == rCompare.getTransform() && getContentWidth() == rCompare.getContentWidth() - && getContentHeight() == rCompare.getContentHeight() - && getKeepAspectRatio() == rCompare.getKeepAspectRatio()); + && getContentHeight() == rCompare.getContentHeight()); } return false; |