summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cui/source/tabpages/transfrm.cxx48
-rw-r--r--include/LibreOfficeKit/LibreOfficeKitEnums.h6
-rw-r--r--svx/sdi/svx.sdi2
-rw-r--r--svx/source/sidebar/possize/PosSizePropertyPanel.cxx66
-rw-r--r--svx/source/svdraw/svdedtv1.cxx58
-rw-r--r--svx/source/svdraw/svdmrkv.cxx11
6 files changed, 164 insertions, 27 deletions
diff --git a/cui/source/tabpages/transfrm.cxx b/cui/source/tabpages/transfrm.cxx
index 2b56a7a76ad0..1918f676a15d 100644
--- a/cui/source/tabpages/transfrm.cxx
+++ b/cui/source/tabpages/transfrm.cxx
@@ -41,6 +41,7 @@
#include <svl/rectitem.hxx>
#include <svl/aeitem.hxx>
#include <swpossizetabpage.hxx>
+#include <comphelper/lok.hxx>
// static ----------------------------------------------------------------
@@ -83,6 +84,28 @@ const sal_uInt16 SvxSlantTabPage::pSlantRanges[] =
0
};
+namespace {
+
+bool lcl_twipsNeeded(const SdrView* pView)
+{
+ const bool bTiledRendering = comphelper::LibreOfficeKit::isActive();
+ if (bTiledRendering)
+ {
+ // We gets the position in twips
+ if (OutputDevice* pOutputDevice = pView->GetFirstOutputDevice())
+ {
+ if (pOutputDevice->GetMapMode().GetMapUnit() == MapUnit::Map100thMM)
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+} // anonymouus ns
+
+
/*************************************************************************
|*
|* constructor of the tab dialog: adds the pages to the dialog
@@ -252,9 +275,18 @@ bool SvxAngleTabPage::FillItemSet(SfxItemSet* rSet)
const double fTmpX((GetCoreValue(*m_xMtrPosX, ePoolUnit) + maAnchor.getX()) * fUIScale);
const double fTmpY((GetCoreValue(*m_xMtrPosY, ePoolUnit) + maAnchor.getY()) * fUIScale);
+ long nRotateX = basegfx::fround(fTmpX);
+ long nRotateY = basegfx::fround(fTmpY);
+
+ if (lcl_twipsNeeded(pView))
+ {
+ nRotateX = OutputDevice::LogicToLogic(nRotateX, MapUnit::Map100thMM, MapUnit::MapTwip);
+ nRotateY = OutputDevice::LogicToLogic(nRotateY, MapUnit::Map100thMM, MapUnit::MapTwip);
+ }
+
rSet->Put(SfxInt32Item(GetWhich(SID_ATTR_TRANSFORM_ANGLE), m_aCtlAngle.GetRotation()));
- rSet->Put(SfxInt32Item(GetWhich(SID_ATTR_TRANSFORM_ROT_X), basegfx::fround(fTmpX)));
- rSet->Put(SfxInt32Item(GetWhich(SID_ATTR_TRANSFORM_ROT_Y), basegfx::fround(fTmpY)));
+ rSet->Put(SfxInt32Item(GetWhich(SID_ATTR_TRANSFORM_ROT_X), nRotateX));
+ rSet->Put(SfxInt32Item(GetWhich(SID_ATTR_TRANSFORM_ROT_Y), nRotateY));
bModified = true;
}
@@ -938,6 +970,12 @@ bool SvxPositionSizeTabPage::FillItemSet( SfxItemSet* rOutAttrs )
// #101581# GetTopLeftPosition(...) needs coordinates after UI scaling, in real PagePositions
GetTopLeftPosition(fX, fY, maRange);
+ if (lcl_twipsNeeded(mpView))
+ {
+ fX = OutputDevice::LogicToLogic(fX, MapUnit::Map100thMM, MapUnit::MapTwip);
+ fY = OutputDevice::LogicToLogic(fY, MapUnit::Map100thMM, MapUnit::MapTwip);
+ }
+
rOutAttrs->Put(SfxInt32Item(GetWhich(SID_ATTR_TRANSFORM_POS_X), basegfx::fround(fX)));
rOutAttrs->Put(SfxInt32Item(GetWhich(SID_ATTR_TRANSFORM_POS_Y), basegfx::fround(fY)));
@@ -977,6 +1015,12 @@ bool SvxPositionSizeTabPage::FillItemSet( SfxItemSet* rOutAttrs )
lHeight = OutputDevice::LogicToLogic( lHeight, MapUnit::Map100thMM, mePoolUnit );
lHeight = static_cast<long>(m_xMtrHeight->denormalize( lHeight ));
+ if (lcl_twipsNeeded(mpView))
+ {
+ lWidth = OutputDevice::LogicToLogic(lWidth, MapUnit::Map100thMM, MapUnit::MapTwip);
+ lHeight = OutputDevice::LogicToLogic(lHeight, MapUnit::Map100thMM, MapUnit::MapTwip);
+ }
+
// put Width & Height to itemset
rOutAttrs->Put( SfxUInt32Item( GetWhich( SID_ATTR_TRANSFORM_WIDTH ), static_cast<sal_uInt32>(lWidth) ) );
rOutAttrs->Put( SfxUInt32Item( GetWhich( SID_ATTR_TRANSFORM_HEIGHT ), static_cast<sal_uInt32>(lHeight) ) );
diff --git a/include/LibreOfficeKit/LibreOfficeKitEnums.h b/include/LibreOfficeKit/LibreOfficeKitEnums.h
index cb9091711acc..1d55ce8583b3 100644
--- a/include/LibreOfficeKit/LibreOfficeKitEnums.h
+++ b/include/LibreOfficeKit/LibreOfficeKitEnums.h
@@ -161,9 +161,11 @@ typedef enum
*/
LOK_CALLBACK_CURSOR_VISIBLE = 5,
/**
- * The size and/or the position of the graphic selection changed.
+ * The size and/or the position of the graphic selection changed and
+ * the rotation angle of the embedded graphic object
*
- * Rectangle format is the same as LOK_CALLBACK_INVALIDATE_TILES.
+ * Format is "x, y, width, height, angle", where angle is in 100th
+ * of degree.
*/
LOK_CALLBACK_GRAPHIC_SELECTION = 6,
diff --git a/svx/sdi/svx.sdi b/svx/sdi/svx.sdi
index 694b9d01d172..d3aa1537be8f 100644
--- a/svx/sdi/svx.sdi
+++ b/svx/sdi/svx.sdi
@@ -8504,7 +8504,7 @@ SvxULSpaceItem TopBottomMargin SID_ATTR_ULSPACE
SfxVoidItem TransformDialog SID_ATTR_TRANSFORM
-(SfxUInt32Item TransformRotationDeltaAngle SID_ATTR_TRANSFORM_DELTA_ANGLE,SfxUInt32Item TransformRotationAngle SID_ATTR_TRANSFORM_ANGLE,SfxUInt32Item TransformRotationX SID_ATTR_TRANSFORM_ROT_X,SfxUInt32Item TransformRotationY SID_ATTR_TRANSFORM_ROT_Y)
+(SfxUInt32Item TransformPosX SID_ATTR_TRANSFORM_POS_X,SfxUInt32Item TransformPosY SID_ATTR_TRANSFORM_POS_Y,SfxUInt32Item TransformWidth SID_ATTR_TRANSFORM_WIDTH, SfxUInt32Item TransformHeight SID_ATTR_TRANSFORM_HEIGHT,SfxUInt32Item TransformRotationDeltaAngle SID_ATTR_TRANSFORM_DELTA_ANGLE,SfxUInt32Item TransformRotationAngle SID_ATTR_TRANSFORM_ANGLE,SfxUInt32Item TransformRotationX SID_ATTR_TRANSFORM_ROT_X,SfxUInt32Item TransformRotationY SID_ATTR_TRANSFORM_ROT_Y)
[
AutoUpdate = FALSE,
FastCall = TRUE,
diff --git a/svx/source/sidebar/possize/PosSizePropertyPanel.cxx b/svx/source/sidebar/possize/PosSizePropertyPanel.cxx
index 1afdf1e725b9..e210f75cfdd9 100644
--- a/svx/source/sidebar/possize/PosSizePropertyPanel.cxx
+++ b/svx/source/sidebar/possize/PosSizePropertyPanel.cxx
@@ -38,15 +38,35 @@
#include <svl/aeitem.hxx>
#include <svx/svdview.hxx>
#include <svx/transfrmhelper.hxx>
-#include <sal/log.hxx>
+#include <comphelper/lok.hxx>
using namespace css;
using namespace css::uno;
const char USERITEM_NAME[] = "FitItem";
-namespace svx { namespace sidebar {
+namespace {
+bool lcl_twipsNeeded(const SdrView* pView)
+{
+ const bool bTiledRendering = comphelper::LibreOfficeKit::isActive();
+ if (bTiledRendering)
+ {
+ // We gets the position in twips
+ if (OutputDevice* pOutputDevice = pView->GetFirstOutputDevice())
+ {
+ if (pOutputDevice->GetMapMode().GetMapUnit() == MapUnit::Map100thMM)
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+} // anonymouus ns
+
+namespace svx { namespace sidebar {
PosSizePropertyPanel::PosSizePropertyPanel(
vcl::Window* pParent,
@@ -373,6 +393,11 @@ IMPL_LINK_NOARG( PosSizePropertyPanel, ChangePosXHdl, Edit&, void )
Fraction aUIScale = mpView->GetModel()->GetUIScale();
lX = long( lX * aUIScale );
+ if (lcl_twipsNeeded(mpView))
+ {
+ lX = OutputDevice::LogicToLogic(lX, MapUnit::Map100thMM, MapUnit::MapTwip);
+ }
+
SfxInt32Item aPosXItem( SID_ATTR_TRANSFORM_POS_X,static_cast<sal_uInt32>(lX));
GetBindings()->GetDispatcher()->ExecuteList(
@@ -390,6 +415,11 @@ IMPL_LINK_NOARG( PosSizePropertyPanel, ChangePosYHdl, Edit&, void )
Fraction aUIScale = mpView->GetModel()->GetUIScale();
lY = long( lY * aUIScale );
+ if (lcl_twipsNeeded(mpView))
+ {
+ lY = OutputDevice::LogicToLogic(lY, MapUnit::Map100thMM, MapUnit::MapTwip);
+ }
+
SfxInt32Item aPosYItem( SID_ATTR_TRANSFORM_POS_Y,static_cast<sal_uInt32>(lY));
GetBindings()->GetDispatcher()->ExecuteList(
@@ -447,9 +477,18 @@ IMPL_LINK_NOARG( PosSizePropertyPanel, AngleModifiedHdl, Edit&, void )
// #i123993# Need to take UIScale into account when executing rotations
const double fUIScale(mpView && mpView->GetModel() ? double(mpView->GetModel()->GetUIScale()) : 1.0);
+ long nRotateX = basegfx::fround(mlRotX * fUIScale);
+ long nRotateY = basegfx::fround(mlRotY * fUIScale);
+
+ if (lcl_twipsNeeded(mpView))
+ {
+ nRotateX = OutputDevice::LogicToLogic(nRotateX, MapUnit::Map100thMM, MapUnit::MapTwip);
+ nRotateY = OutputDevice::LogicToLogic(nRotateY, MapUnit::Map100thMM, MapUnit::MapTwip);
+ }
+
SfxInt32Item aAngleItem( SID_ATTR_TRANSFORM_ANGLE,static_cast<sal_uInt32>(nTmp));
- SfxInt32Item aRotXItem( SID_ATTR_TRANSFORM_ROT_X, basegfx::fround(mlRotX * fUIScale));
- SfxInt32Item aRotYItem( SID_ATTR_TRANSFORM_ROT_Y, basegfx::fround(mlRotY * fUIScale));
+ SfxInt32Item aRotXItem( SID_ATTR_TRANSFORM_ROT_X, nRotateX);
+ SfxInt32Item aRotYItem( SID_ATTR_TRANSFORM_ROT_Y, nRotateY);
GetBindings()->GetDispatcher()->ExecuteList(SID_ATTR_TRANSFORM,
SfxCallMode::RECORD, { &aAngleItem, &aRotXItem, &aRotYItem });
@@ -462,9 +501,18 @@ IMPL_LINK_NOARG( PosSizePropertyPanel, RotationHdl, DialControl*, void )
// #i123993# Need to take UIScale into account when executing rotations
const double fUIScale(mpView && mpView->GetModel() ? double(mpView->GetModel()->GetUIScale()) : 1.0);
+ long nRotateX = basegfx::fround(mlRotX * fUIScale);
+ long nRotateY = basegfx::fround(mlRotY * fUIScale);
+
+ if (lcl_twipsNeeded(mpView))
+ {
+ nRotateX = OutputDevice::LogicToLogic(nRotateX, MapUnit::Map100thMM, MapUnit::MapTwip);
+ nRotateY = OutputDevice::LogicToLogic(nRotateY, MapUnit::Map100thMM, MapUnit::MapTwip);
+ }
+
SfxInt32Item aAngleItem( SID_ATTR_TRANSFORM_ANGLE,static_cast<sal_uInt32>(nTmp));
- SfxInt32Item aRotXItem( SID_ATTR_TRANSFORM_ROT_X, basegfx::fround(mlRotX * fUIScale));
- SfxInt32Item aRotYItem( SID_ATTR_TRANSFORM_ROT_Y, basegfx::fround(mlRotY * fUIScale));
+ SfxInt32Item aRotXItem( SID_ATTR_TRANSFORM_ROT_X, nRotateX);
+ SfxInt32Item aRotYItem( SID_ATTR_TRANSFORM_ROT_Y, nRotateY);
GetBindings()->GetDispatcher()->ExecuteList(SID_ATTR_TRANSFORM,
SfxCallMode::RECORD, { &aAngleItem, &aRotXItem, &aRotYItem });
@@ -831,6 +879,12 @@ void PosSizePropertyPanel::executeSize()
lHeight = OutputDevice::LogicToLogic( lHeight, MapUnit::Map100thMM, mePoolUnit );
lHeight = static_cast<long>(mpMtrWidth->Denormalize( lHeight ));
+ if (lcl_twipsNeeded(mpView))
+ {
+ lWidth = OutputDevice::LogicToLogic(lWidth, MapUnit::Map100thMM, MapUnit::MapTwip);
+ lHeight = OutputDevice::LogicToLogic(lHeight, MapUnit::Map100thMM, MapUnit::MapTwip);
+ }
+
// put Width & Height to itemset
SfxUInt32Item aWidthItem( SID_ATTR_TRANSFORM_WIDTH, static_cast<sal_uInt32>(lWidth));
SfxUInt32Item aHeightItem( SID_ATTR_TRANSFORM_HEIGHT, static_cast<sal_uInt32>(lHeight));
diff --git a/svx/source/svdraw/svdedtv1.cxx b/svx/source/svdraw/svdedtv1.cxx
index 784cbc462215..b0a53732e973 100644
--- a/svx/source/svdraw/svdedtv1.cxx
+++ b/svx/source/svdraw/svdedtv1.cxx
@@ -1425,6 +1425,20 @@ static Point ImpGetPoint(const tools::Rectangle& rRect, RectPoint eRP)
void SdrEditView::SetGeoAttrToMarked(const SfxItemSet& rAttr)
{
+ bool bDealingWithTwips = false;
+ const bool bTiledRendering = comphelper::LibreOfficeKit::isActive();
+ if (bTiledRendering)
+ {
+ // We gets the position in twips
+ if (OutputDevice* pOutputDevice = mpMarkedPV->GetView().GetFirstOutputDevice())
+ {
+ if (pOutputDevice->GetMapMode().GetMapUnit() == MapUnit::Map100thMM)
+ {
+ bDealingWithTwips = true;
+ }
+ }
+ }
+
tools::Rectangle aRect(GetMarkedObjRect());
if(GetSdrPageView())
@@ -1439,8 +1453,14 @@ void SdrEditView::SetGeoAttrToMarked(const SfxItemSet& rAttr)
SdrObject* pObj=nullptr;
RectPoint eSizePoint=RectPoint::MM;
- long nPosDX=0;
- long nPosDY=0;
+ long nPosX=aRect.Left();
+ long nPosY=aRect.Top();
+ if (bDealingWithTwips)
+ {
+ nPosX = OutputDevice::LogicToLogic(nPosX, MapUnit::Map100thMM, MapUnit::MapTwip);
+ nPosY = OutputDevice::LogicToLogic(nPosY, MapUnit::Map100thMM, MapUnit::MapTwip);
+ }
+
long nSizX=0;
long nSizY=0;
long nRotateAngle=0;
@@ -1482,26 +1502,29 @@ void SdrEditView::SetGeoAttrToMarked(const SfxItemSet& rAttr)
// position
if (SfxItemState::SET==rAttr.GetItemState(SID_ATTR_TRANSFORM_POS_X,true,&pPoolItem)) {
- nPosDX=static_cast<const SfxInt32Item*>(pPoolItem)->GetValue()-aRect.Left();
+ nPosX=static_cast<const SfxInt32Item*>(pPoolItem)->GetValue();
bChgPos=true;
}
if (SfxItemState::SET==rAttr.GetItemState(SID_ATTR_TRANSFORM_POS_Y,true,&pPoolItem)){
- nPosDY=static_cast<const SfxInt32Item*>(pPoolItem)->GetValue()-aRect.Top();
+ nPosY=static_cast<const SfxInt32Item*>(pPoolItem)->GetValue();
bChgPos=true;
}
// size
if (SfxItemState::SET==rAttr.GetItemState(SID_ATTR_TRANSFORM_WIDTH,true,&pPoolItem)) {
- nSizX=static_cast<const SfxUInt32Item*>(pPoolItem)->GetValue();
+ nSizX=static_cast<const SfxInt32Item*>(pPoolItem)->GetValue();
bChgSiz=true;
bChgWdh=true;
}
if (SfxItemState::SET==rAttr.GetItemState(SID_ATTR_TRANSFORM_HEIGHT,true,&pPoolItem)) {
- nSizY=static_cast<const SfxUInt32Item*>(pPoolItem)->GetValue();
+ nSizY=static_cast<const SfxInt32Item*>(pPoolItem)->GetValue();
bChgSiz=true;
bChgHgt=true;
}
if (bChgSiz) {
- eSizePoint=static_cast<RectPoint>(rAttr.Get(SID_ATTR_TRANSFORM_SIZE_POINT).GetValue());
+ if (bTiledRendering && SfxItemState::SET != rAttr.GetItemState(SID_ATTR_TRANSFORM_SIZE_POINT, true, &pPoolItem))
+ eSizePoint = RectPoint::LT;
+ else
+ eSizePoint = static_cast<RectPoint>(rAttr.Get(SID_ATTR_TRANSFORM_SIZE_POINT).GetValue());
}
// rotation
@@ -1573,6 +1596,18 @@ void SdrEditView::SetGeoAttrToMarked(const SfxItemSet& rAttr)
bSetAttr=true;
}
+ if(bDealingWithTwips) {
+ nPosX = OutputDevice::LogicToLogic(nPosX, MapUnit::MapTwip, MapUnit::Map100thMM);
+ nPosY = OutputDevice::LogicToLogic(nPosY, MapUnit::MapTwip, MapUnit::Map100thMM);
+ nSizX = OutputDevice::LogicToLogic(nSizX, MapUnit::MapTwip, MapUnit::Map100thMM);
+ nSizY = OutputDevice::LogicToLogic(nSizY, MapUnit::MapTwip, MapUnit::Map100thMM);
+ nRotateX = OutputDevice::LogicToLogic(nRotateX, MapUnit::MapTwip, MapUnit::Map100thMM);
+ nRotateY = OutputDevice::LogicToLogic(nRotateY, MapUnit::MapTwip, MapUnit::Map100thMM);
+ }
+
+ long nPosDX = nPosX - aRect.Left();
+ long nPosDY = nPosY - aRect.Top();
+
ForcePossibilities();
BegUndo(SvxResId(STR_EditTransform),GetDescriptionOfMarkedObjects());
@@ -1601,15 +1636,6 @@ void SdrEditView::SetGeoAttrToMarked(const SfxItemSet& rAttr)
if(GetSdrPageView())
{
- const bool bTiledRendering = comphelper::LibreOfficeKit::isActive();
- if(bTiledRendering) {
- // We gets the position in twips
- if (OutputDevice* pOutputDevice = mpMarkedPV->GetView().GetFirstOutputDevice())
- {
- if (pOutputDevice->GetMapMode().GetMapUnit() == MapUnit::Map100thMM)
- aRef = OutputDevice::LogicToLogic(aRef, MapMode(MapUnit::MapTwip), MapMode(MapUnit::Map100thMM));
- }
- }
GetSdrPageView()->PagePosToLogic(aRef);
}
diff --git a/svx/source/svdraw/svdmrkv.cxx b/svx/source/svdraw/svdmrkv.cxx
index 8c4be9154284..42926e718100 100644
--- a/svx/source/svdraw/svdmrkv.cxx
+++ b/svx/source/svdraw/svdmrkv.cxx
@@ -782,6 +782,17 @@ void SdrMarkView::SetMarkHandles(SfxViewShell* pOtherShell)
}
if(SfxViewShell* pViewShell = GetSfxViewShell())
{
+
+ long nRotAngle(0);
+ if(GetMarkedObjectCount())
+ {
+ SdrMark* pM = GetSdrMarkByIndex(0);
+ SdrObject* pO = pM->GetMarkedSdrObj();
+
+ nRotAngle = pO->GetRotateAngle();
+ sSelection += OString(", ") + OString::number(nRotAngle);
+ }
+
if (pOtherShell)
{
// Another shell wants to know about our existing