summaryrefslogtreecommitdiff
path: root/svx/source/svdraw/svdmrkv.cxx
diff options
context:
space:
mode:
authorArmin Le Grand <alg@apache.org>2013-05-17 16:29:11 +0000
committerCaolán McNamara <caolanm@redhat.com>2013-06-17 15:39:48 +0100
commit3a8dbb63197c5b9298015cbd5b15e607ec9a3705 (patch)
treed7edd0ed73a7d7ebafd449c924bd54ea0aad9065 /svx/source/svdraw/svdmrkv.cxx
parent997cc4804d947fdd751e457fda47f95ecf3ac909 (diff)
Resolves: #i74211# Correct crop of bitmap data when...
logical size and MapMode do not match real pixel size (cherry picked from commit a24965371f7e881671182bc51432c08cbf667b56) Conflicts: svtools/inc/svtools/grfmgr.hxx svtools/source/graphic/grfmgr.cxx svx/inc/svx/svdhdl.hxx svx/inc/svx/svdograf.hxx svx/source/svdraw/svdhdl.cxx Change-Id: Icfb9091b55e50081e8daf697c9f00f5b5a10531a
Diffstat (limited to 'svx/source/svdraw/svdmrkv.cxx')
-rw-r--r--svx/source/svdraw/svdmrkv.cxx51
1 files changed, 51 insertions, 0 deletions
diff --git a/svx/source/svdraw/svdmrkv.cxx b/svx/source/svdraw/svdmrkv.cxx
index ff27728c1d09..cefe73b1cf8b 100644
--- a/svx/source/svdraw/svdmrkv.cxx
+++ b/svx/source/svdraw/svdmrkv.cxx
@@ -48,6 +48,7 @@
#include <svx/sdrpagewindow.hxx>
#include <svx/sdrhittesthelper.hxx>
#include <svx/svdocapt.hxx>
+#include <svx/svdograf.hxx>
#include <editeng/editdata.hxx>
@@ -667,6 +668,56 @@ void SdrMarkView::SetMarkHandles()
}
else if( eDragMode==SDRDRAG_CROP )
{
+ const SdrGrafObj* pSdrGrafObj = dynamic_cast< const SdrGrafObj* >(pMarkedObj);
+
+ if(pSdrGrafObj)
+ {
+ const SdrGrafCropItem& rCrop = static_cast< const SdrGrafCropItem& >(pSdrGrafObj->GetMergedItem(SDRATTR_GRAFCROP));
+
+ if(rCrop.GetLeft() || rCrop.GetTop() || rCrop.GetRight() ||rCrop.GetBottom())
+ {
+ basegfx::B2DHomMatrix aMatrix;
+ basegfx::B2DPolyPolygon aPolyPolygon;
+
+ pSdrGrafObj->TRGetBaseGeometry(aMatrix, aPolyPolygon);
+
+ // decompose to have current translate and scale
+ basegfx::B2DVector aScale, aTranslate;
+ double fRotate, fShearX;
+
+ aMatrix.decompose(aScale, aTranslate, fRotate, fShearX);
+
+ if(!aScale.equalZero())
+ {
+ // get crop scale
+ const basegfx::B2DVector aCropScaleFactor(
+ pSdrGrafObj->GetGraphicObject().calculateCropScaling(
+ aScale.getX(),
+ aScale.getY(),
+ rCrop.GetLeft(),
+ rCrop.GetTop(),
+ rCrop.GetRight(),
+ rCrop.GetBottom()));
+
+ // apply crop scale
+ const double fCropLeft(rCrop.GetLeft() * aCropScaleFactor.getX());
+ const double fCropTop(rCrop.GetTop() * aCropScaleFactor.getY());
+ const double fCropRight(rCrop.GetRight() * aCropScaleFactor.getX());
+ const double fCropBottom(rCrop.GetBottom() * aCropScaleFactor.getY());
+
+ aHdl.AddHdl(
+ new SdrCropViewHdl(
+ aMatrix,
+ pSdrGrafObj->GetGraphicObject().GetGraphic(),
+ fCropLeft,
+ fCropTop,
+ fCropRight,
+ fCropBottom,
+ pSdrGrafObj->IsMirrored()));
+ }
+ }
+ }
+
aHdl.AddHdl(new SdrCropHdl(aRect.TopLeft() ,HDL_UPLFT));
aHdl.AddHdl(new SdrCropHdl(aRect.TopCenter() ,HDL_UPPER));
aHdl.AddHdl(new SdrCropHdl(aRect.TopRight() ,HDL_UPRGT));