summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Luth <justin_luth@sil.org>2022-02-15 14:26:35 +0200
committerJustin Luth <jluth@mail.com>2022-02-24 07:36:57 +0100
commite87f9b4fa158b917bb38fc00513bae7f94024e58 (patch)
tree3b497b99bdba64c9f602981086426b78d810458c
parentdc4c55c51d52340c84e21da92d61d3488a253cd3 (diff)
tdf#95882 svxruler: restore adjustment for borders
This restores the clause removed from LO 3.6's commit 47a77d7dbc427e51421e2df8d59695834cb74980 Ruler: disable snapping, tooltips [Because that removal left behind dead code, which was later cleared out, of course this patch restores that as well. commit 8303e7ed668fbcbd0ba75bd9dd259f03073ffd46 Author: Noel Grandin on Fri Jun 14 10:41:11 2019 +0200 ] Basic borders on the paragraph itself do not affect where LO ends the tabstop, and thus the removal of that clause was partially justified. But the table/frame/page/headers definitely need to be adjusted in order for the tabstops to show in the correct position. RightFrameMargin needed this as well, especially now that RTL is supported by the ruler since LO 3.6, although the Left/Right functions are very different. [Frames never worked because the aCoreSet wasn't accepting RES_BOX items. Interesting error considering all of the other sections of code created a new CoreSet.] Change-Id: Ic24839dbbd730e66d8b0d588bfbd73bc7cb260bf Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130125 Tested-by: Justin Luth <jluth@mail.com> Reviewed-by: Justin Luth <jluth@mail.com>
-rw-r--r--include/svx/ruler.hxx3
-rw-r--r--svx/source/dialog/rlrcitem.cxx2
-rw-r--r--svx/source/dialog/svxruler.cxx13
-rw-r--r--sw/source/uibase/uiview/viewtab.cxx22
4 files changed, 26 insertions, 14 deletions
diff --git a/include/svx/ruler.hxx b/include/svx/ruler.hxx
index 374209a73f69..010af4b17936 100644
--- a/include/svx/ruler.hxx
+++ b/include/svx/ruler.hxx
@@ -91,6 +91,7 @@ class SVX_DLLPUBLIC SvxRuler: public Ruler, public SfxListener
std::unique_ptr<SvxLongULSpaceItem> mxULSpaceItem; // upper and lower edge
std::unique_ptr<SvxTabStopItem> mxTabStopItem; // tab stops
std::unique_ptr<SvxLRSpaceItem> mxParaItem; // paragraphs
+ std::unique_ptr<SvxLRSpaceItem> mxBorderItem; // border distance
std::unique_ptr<SvxPagePosSizeItem> mxPagePosItem; // page distance to the rule
std::unique_ptr<SvxColumnItem> mxColumnItem; // columns
std::unique_ptr<SvxObjectItem> mxObjectItem; // object
@@ -140,7 +141,7 @@ class SVX_DLLPUBLIC SvxRuler: public Ruler, public SfxListener
// paragraph indentations
void UpdatePara(const SvxLRSpaceItem* pItem);
// Border distance
- void UpdateParaBorder();
+ void UpdateBorder(const SvxLRSpaceItem* pItem);
// Tabs
void Update(const SvxTabStopItem* pItem);
// page position and width
diff --git a/svx/source/dialog/rlrcitem.cxx b/svx/source/dialog/rlrcitem.cxx
index 873663b27e30..a73cd00bdac5 100644
--- a/svx/source/dialog/rlrcitem.cxx
+++ b/svx/source/dialog/rlrcitem.cxx
@@ -131,7 +131,7 @@ void SvxRulerItem::StateChangedAtToolBoxControl( sal_uInt16 nSID, SfxItemState e
{
const SvxLRSpaceItem *pItem = dynamic_cast<const SvxLRSpaceItem*>( pState );
SAL_WARN_IF(pState != nullptr && pItem == nullptr, "svx.dialog", "SvxLRSpaceItem expected");
- rRuler.UpdateParaBorder();
+ rRuler.UpdateBorder(pItem);
}
break;
case SID_RULER_TEXT_RIGHT_TO_LEFT :
diff --git a/svx/source/dialog/svxruler.cxx b/svx/source/dialog/svxruler.cxx
index 6e960a18433d..d676c3c1208f 100644
--- a/svx/source/dialog/svxruler.cxx
+++ b/svx/source/dialog/svxruler.cxx
@@ -881,11 +881,16 @@ void SvxRuler::UpdatePara(const SvxLRSpaceItem *pItem) // new value of paragraph
}
}
-void SvxRuler::UpdateParaBorder()
+void SvxRuler::UpdateBorder(const SvxLRSpaceItem * pItem)
{
/* Border distance */
if(bActive)
{
+ if (pItem)
+ mxBorderItem.reset(new SvxLRSpaceItem(*pItem));
+ else
+ mxBorderItem.reset();
+
StartListening_Impl();
}
}
@@ -1206,6 +1211,9 @@ tools::Long SvxRuler::GetLeftFrameMargin() const
nLeft = mxColumnItem->GetActiveColumnDescription().nStart;
}
+ if (mxBorderItem && (!mxColumnItem || mxColumnItem->IsTable()))
+ nLeft += mxBorderItem->GetLeft();
+
return nLeft;
}
@@ -1257,6 +1265,9 @@ tools::Long SvxRuler::GetRightFrameMargin() const
else if(!bHorz && mxULSpaceItem)
lResult += mxULSpaceItem->GetLower();
+ if (bHorz && mxBorderItem && (!mxColumnItem || mxColumnItem->IsTable()))
+ lResult += mxBorderItem->GetRight();
+
if(bHorz)
lResult = mxPagePosItem->GetWidth() - lResult;
else
diff --git a/sw/source/uibase/uiview/viewtab.cxx b/sw/source/uibase/uiview/viewtab.cxx
index 6bf269219d9a..c911971fd314 100644
--- a/sw/source/uibase/uiview/viewtab.cxx
+++ b/sw/source/uibase/uiview/viewtab.cxx
@@ -1699,6 +1699,8 @@ void SwView::StateTabWin(SfxItemSet& rSet)
{
m_nLeftBorderDistance = 0;
m_nRightBorderDistance = 0;
+ SfxItemSetFixed<RES_BOX, RES_BOX,
+ SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER> aCoreSet2(GetPool());
if ( nSelType & SelectionType::Graphic ||
nSelType & SelectionType::Frame ||
nSelType & SelectionType::Ole ||
@@ -1714,15 +1716,17 @@ void SwView::StateTabWin(SfxItemSet& rSet)
const SwRect& rFlyPrtRect = rSh.GetAnyCurRect( CurRectType::FlyEmbeddedPrt, pPt );
aDistLR.SetLeft(rFlyPrtRect.Left());
aDistLR.SetRight(rFlyPrtRect.Left());
+ rSet.Put(aDistLR);
}
else
{
SvxBoxInfoItem aBoxInfo( SID_ATTR_BORDER_INNER );
- aCoreSet.Put( aBoxInfo );
- rSh.GetFlyFrameAttr( aCoreSet );
- const SvxBoxItem& rBox = aCoreSet.Get(RES_BOX);
+ aCoreSet2.Put(aBoxInfo);
+ rSh.GetFlyFrameAttr(aCoreSet2);
+ const SvxBoxItem& rBox = aCoreSet2.Get(RES_BOX);
aDistLR.SetLeft(rBox.GetDistance(SvxBoxItemLine::LEFT));
aDistLR.SetRight(rBox.GetDistance(SvxBoxItemLine::RIGHT));
+ rSet.Put(aDistLR);
//add the paragraph border distance
SfxItemSetFixed<RES_BOX, RES_BOX> aCoreSet1( GetPool() );
@@ -1731,7 +1735,6 @@ void SwView::StateTabWin(SfxItemSet& rSet)
aDistLR.SetLeft(aDistLR.GetLeft() + rParaBox.GetDistance(SvxBoxItemLine::LEFT));
aDistLR.SetRight(aDistLR.GetRight() + rParaBox.GetDistance(SvxBoxItemLine::RIGHT));
}
- rSet.Put(aDistLR);
m_nLeftBorderDistance = static_cast< sal_uInt16 >(aDistLR.GetLeft());
m_nRightBorderDistance = static_cast< sal_uInt16 >(aDistLR.GetRight());
}
@@ -1739,8 +1742,6 @@ void SwView::StateTabWin(SfxItemSet& rSet)
( rSh.GetTableFormat() && !bFrameSelection &&
!(nFrameType & FrameTypeFlags::COLSECT ) ) )
{
- SfxItemSetFixed<RES_BOX, RES_BOX,
- SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER> aCoreSet2( GetPool() );
SvxBoxInfoItem aBoxInfo( SID_ATTR_BORDER_INNER );
aBoxInfo.SetTable(false);
aBoxInfo.SetDist(true);
@@ -1749,6 +1750,7 @@ void SwView::StateTabWin(SfxItemSet& rSet)
const SvxBoxItem& rBox = aCoreSet2.Get(RES_BOX);
aDistLR.SetLeft(rBox.GetDistance(SvxBoxItemLine::LEFT));
aDistLR.SetRight(rBox.GetDistance(SvxBoxItemLine::RIGHT));
+ rSet.Put(aDistLR);
//add the border distance of the paragraph
SfxItemSetFixed<RES_BOX, RES_BOX> aCoreSet1( GetPool() );
@@ -1756,7 +1758,6 @@ void SwView::StateTabWin(SfxItemSet& rSet)
const SvxBoxItem& rParaBox = aCoreSet1.Get(RES_BOX);
aDistLR.SetLeft(aDistLR.GetLeft() + rParaBox.GetDistance(SvxBoxItemLine::LEFT));
aDistLR.SetRight(aDistLR.GetRight() + rParaBox.GetDistance(SvxBoxItemLine::RIGHT));
- rSet.Put(aDistLR);
m_nLeftBorderDistance = static_cast< sal_uInt16 >(aDistLR.GetLeft());
m_nRightBorderDistance = static_cast< sal_uInt16 >(aDistLR.GetRight());
}
@@ -1789,14 +1790,13 @@ void SwView::StateTabWin(SfxItemSet& rSet)
aDistLR.SetLeft(pBox->GetDistance(SvxBoxItemLine::LEFT));
aDistLR.SetRight(pBox->GetDistance(SvxBoxItemLine::RIGHT));
}
+ rSet.Put(aDistLR);
//add the border distance of the paragraph
- SfxItemSetFixed<RES_BOX, RES_BOX> aCoreSetTmp( GetPool() );
- rSh.GetCurAttr( aCoreSetTmp );
- const SvxBoxItem& rParaBox = aCoreSetTmp.Get(RES_BOX);
+ rSh.GetCurAttr(aCoreSet2);
+ const SvxBoxItem& rParaBox = aCoreSet2.Get(RES_BOX);
aDistLR.SetLeft(aDistLR.GetLeft() + rParaBox.GetDistance(SvxBoxItemLine::LEFT));
aDistLR.SetRight(aDistLR.GetRight() + rParaBox.GetDistance(SvxBoxItemLine::RIGHT));
- rSet.Put(aDistLR);
m_nLeftBorderDistance = static_cast< sal_uInt16 >(aDistLR.GetLeft());
m_nRightBorderDistance = static_cast< sal_uInt16 >(aDistLR.GetRight());
}