diff options
author | Marco Cecchetti <mrcekets@gmail.com> | 2018-11-30 17:20:37 +0100 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2018-12-15 12:33:16 +0100 |
commit | 0be31ab89261524a6c979332e45ae1eb6dcbe5e4 (patch) | |
tree | f4f38ee54e9554df149bd04ce1e73ba85f253b8b | |
parent | dfe497c0c7628ed2d2abb5dbae2bf8756a371f29 (diff) |
lok: shape selection: perform the needed unit conversion in a clever way
Change-Id: I505bd41801b5fd1898a9eddc81b102f2f7ae20b5
-rw-r--r-- | cui/source/tabpages/transfrm.cxx | 48 | ||||
-rw-r--r-- | desktop/source/lib/init.cxx | 32 | ||||
-rw-r--r-- | svx/source/sidebar/possize/PosSizePropertyPanel.cxx | 65 | ||||
-rw-r--r-- | svx/source/svdraw/svdedtv1.cxx | 38 |
4 files changed, 43 insertions, 140 deletions
diff --git a/cui/source/tabpages/transfrm.cxx b/cui/source/tabpages/transfrm.cxx index 5fbd368c7cd1..d9a3ff38ac85 100644 --- a/cui/source/tabpages/transfrm.cxx +++ b/cui/source/tabpages/transfrm.cxx @@ -38,7 +38,6 @@ #include <svl/rectitem.hxx> #include <svl/aeitem.hxx> #include <swpossizetabpage.hxx> -#include <comphelper/lok.hxx> // static ---------------------------------------------------------------- @@ -81,28 +80,6 @@ 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 @@ -294,18 +271,9 @@ bool SvxAngleTabPage::FillItemSet(SfxItemSet* rSet) const double fTmpX((GetCoreValue(*m_pMtrPosX, ePoolUnit) + maAnchor.getX()) * fUIScale); const double fTmpY((GetCoreValue(*m_pMtrPosY, 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_pCtlAngle->GetRotation())); - rSet->Put(SfxInt32Item(GetWhich(SID_ATTR_TRANSFORM_ROT_X), nRotateX)); - rSet->Put(SfxInt32Item(GetWhich(SID_ATTR_TRANSFORM_ROT_Y), nRotateY)); + rSet->Put(SfxInt32Item(GetWhich(SID_ATTR_TRANSFORM_ROT_X), basegfx::fround(fTmpX))); + rSet->Put(SfxInt32Item(GetWhich(SID_ATTR_TRANSFORM_ROT_Y), basegfx::fround(fTmpY))); bModified = true; } @@ -968,12 +936,6 @@ 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))); @@ -1015,12 +977,6 @@ bool SvxPositionSizeTabPage::FillItemSet( SfxItemSet* rOutAttrs ) lHeight = OutputDevice::LogicToLogic( lHeight, MapUnit::Map100thMM, mePoolUnit ); lHeight = static_cast<long>(m_pMtrHeight->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 ), (sal_uInt32) lWidth ) ); rOutAttrs->Put( SfxUInt32Item( GetWhich( SID_ATTR_TRANSFORM_HEIGHT ), (sal_uInt32) lHeight ) ); diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index 42a06ce2be6c..33bac792668f 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -97,6 +97,7 @@ #include <svx/dialogs.hrc> #include <svx/strings.hrc> #include <svx/ruler.hxx> +#include <svx/svdview.hxx> #include <svx/svxids.hrc> #include <svx/ucsubset.hxx> #include <vcl/vclevent.hxx> @@ -2766,6 +2767,37 @@ static void doc_postUnoCommand(LibreOfficeKitDocument* pThis, const char* pComma return; } } + else if (gImpl && aCommand == ".uno:TransformDialog") + { + bool bNeedConversion = false; + SfxViewShell* pViewShell = SfxViewShell::Current(); + if (const SdrView* pView = pViewShell->GetDrawView()) + { + if (OutputDevice* pOutputDevice = pView->GetFirstOutputDevice()) + { + bNeedConversion = (pOutputDevice->GetMapMode().GetMapUnit() == MapUnit::Map100thMM); + } + } + if (bNeedConversion) + { + sal_Int32 value; + for (beans::PropertyValue& rPropValue: aPropertyValuesVector) + { + if (rPropValue.Name == "TransformPosX" + || rPropValue.Name == "TransformPosY" + || rPropValue.Name == "TransformWidth" + || rPropValue.Name == "TransformHeight" + || rPropValue.Name == "TransformRotationX" + || rPropValue.Name == "TransformRotationY") + { + rPropValue.Value >>= value; + value = OutputDevice::LogicToLogic(value, MapUnit::MapTwip, MapUnit::Map100thMM); + rPropValue.Value <<= value; + } + + } + } + } bool bResult = false; if (bNotifyWhenFinished && pDocument->mpCallbackFlushHandlers[nView]) diff --git a/svx/source/sidebar/possize/PosSizePropertyPanel.cxx b/svx/source/sidebar/possize/PosSizePropertyPanel.cxx index 4985f370dfe3..3ac3a789c58d 100644 --- a/svx/source/sidebar/possize/PosSizePropertyPanel.cxx +++ b/svx/source/sidebar/possize/PosSizePropertyPanel.cxx @@ -37,34 +37,13 @@ #include <svl/aeitem.hxx> #include <svx/svdview.hxx> #include <svx/transfrmhelper.hxx> -#include <comphelper/lok.hxx> + using namespace css; using namespace css::uno; const char USERITEM_NAME[] = "FitItem"; -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( @@ -394,11 +373,6 @@ IMPL_LINK_NOARG( PosSizePropertyPanel, ChangePosXHdl, Edit&, void ) lX += maAnchorPos.X(); 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( @@ -417,11 +391,6 @@ IMPL_LINK_NOARG( PosSizePropertyPanel, ChangePosYHdl, Edit&, void ) lY += maAnchorPos.Y(); 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( @@ -479,18 +448,9 @@ 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, nRotateX); - SfxInt32Item aRotYItem( SID_ATTR_TRANSFORM_ROT_Y, nRotateY); + SfxInt32Item aRotXItem( SID_ATTR_TRANSFORM_ROT_X, basegfx::fround(mlRotX * fUIScale)); + SfxInt32Item aRotYItem( SID_ATTR_TRANSFORM_ROT_Y, basegfx::fround(mlRotY * fUIScale)); GetBindings()->GetDispatcher()->ExecuteList(SID_ATTR_TRANSFORM, SfxCallMode::RECORD, { &aAngleItem, &aRotXItem, &aRotYItem }); @@ -503,18 +463,9 @@ 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, nRotateX); - SfxInt32Item aRotYItem( SID_ATTR_TRANSFORM_ROT_Y, nRotateY); + SfxInt32Item aRotXItem( SID_ATTR_TRANSFORM_ROT_X, basegfx::fround(mlRotX * fUIScale)); + SfxInt32Item aRotYItem( SID_ATTR_TRANSFORM_ROT_Y, basegfx::fround(mlRotY * fUIScale)); GetBindings()->GetDispatcher()->ExecuteList(SID_ATTR_TRANSFORM, SfxCallMode::RECORD, { &aAngleItem, &aRotXItem, &aRotYItem }); @@ -881,12 +832,6 @@ void PosSizePropertyPanel::executeSize() lHeight = OutputDevice::LogicToLogic( lHeight, MapUnit::Map100thMM, mePoolUnit ); lHeight = (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, (sal_uInt32) lWidth); SfxUInt32Item aHeightItem( SID_ATTR_TRANSFORM_HEIGHT, (sal_uInt32) lHeight); diff --git a/svx/source/svdraw/svdedtv1.cxx b/svx/source/svdraw/svdedtv1.cxx index 1dda837a5d1f..d25711fa4eac 100644 --- a/svx/source/svdraw/svdedtv1.cxx +++ b/svx/source/svdraw/svdedtv1.cxx @@ -1438,19 +1438,7 @@ 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()); @@ -1466,14 +1454,8 @@ void SdrEditView::SetGeoAttrToMarked(const SfxItemSet& rAttr) SdrObject* pObj=nullptr; RectPoint eSizePoint=RectPoint::MM; - 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 nPosDX=0; + long nPosDY=0; long nSizX=0; long nSizY=0; long nRotateAngle=0; @@ -1515,11 +1497,11 @@ void SdrEditView::SetGeoAttrToMarked(const SfxItemSet& rAttr) // position if (SfxItemState::SET==rAttr.GetItemState(SID_ATTR_TRANSFORM_POS_X,true,&pPoolItem)) { - nPosX=static_cast<const SfxInt32Item*>(pPoolItem)->GetValue(); + nPosDX=static_cast<const SfxInt32Item*>(pPoolItem)->GetValue() - aRect.Left(); bChgPos=true; } if (SfxItemState::SET==rAttr.GetItemState(SID_ATTR_TRANSFORM_POS_Y,true,&pPoolItem)){ - nPosY=static_cast<const SfxInt32Item*>(pPoolItem)->GetValue(); + nPosDY=static_cast<const SfxInt32Item*>(pPoolItem)->GetValue() - aRect.Top(); bChgPos=true; } // size @@ -1609,18 +1591,6 @@ 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(ImpGetResStr(STR_EditTransform),GetDescriptionOfMarkedObjects()); |