summaryrefslogtreecommitdiff
path: root/include/editeng
diff options
context:
space:
mode:
authorMichael Stahl <michael.stahl@allotropia.de>2023-02-07 20:22:25 +0100
committerMichael Stahl <michael.stahl@allotropia.de>2023-02-08 11:03:36 +0000
commita0875d09d9eeb368e9e319f3f2f29ec3be71b56c (patch)
tree179c3f2e27c16226e166d25abf679672dcbe348f /include/editeng
parent9bf7092aa05b47e6290d894edaf00f21038a636a (diff)
editeng: remove SvxLRSpaceItem::nTxtLeft
Several parts of SvxLRSpaceItem appear to maintain an invariant of the 3 members nTxtLeft/nLeftMargin/nFirstLineOffset: nLeftMargin is either equal to nTxtLeft if nFirstLineOffset is positive, otherwise equal to nTxtLeft + nFirstLineOffset. But not every part maintains it: there are functions SetLeftValue() and SetLeft() which simply write into nLeftMargin regardless, and a constructor that takes 3 separate numbers without any checks. The constructor calls violate the invariant in 2 ways: nTxtLeft is simply set to 0 (many cases), and one case in OutlineView::OutlineView() that sets nTxtLeft to 2000 but the other 2 at 0. Another odd thing is that the UNO services that expose SvxLRSpaceItem either expose a property for MID_L_MARGIN or for MID_TXT_LMARGIN but never both. It looks like there are 2 distinct usages of SvxLRSpaceItem: for anything that's applied to paragraphs, all 3 members are used; for anything else, nTxtLeft is unused. Try to simplify this by removing the nTxtLeft member, instead GetTextLeft() simply calculates it. Also assert in SetLeftValue()/SetLeft() that nFirstLineOffset is 0. Change-Id: Ida900c6ff04ef78e92e8914beda1cc731a695b06 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146643 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
Diffstat (limited to 'include/editeng')
-rw-r--r--include/editeng/lrspitem.hxx12
1 files changed, 5 insertions, 7 deletions
diff --git a/include/editeng/lrspitem.hxx b/include/editeng/lrspitem.hxx
index 8ddaa157416c..3072e385f939 100644
--- a/include/editeng/lrspitem.hxx
+++ b/include/editeng/lrspitem.hxx
@@ -49,7 +49,8 @@ SetTextLeft SetTextFirst GetLeft GetTextLeft GetTextFirst (What?)
class EDITENG_DLLPUBLIC SvxLRSpaceItem final : public SfxPoolItem
{
- tools::Long nTxtLeft; // We spend a sal_uInt16
+ /// First-line indent always relative to GetTextLeft()
+ short nFirstLineOffset;
tools::Long nLeftMargin; // nLeft or the negative first-line indent
tools::Long nRightMargin; // The unproblematic right edge
/// The amount of extra space added to the left margin.
@@ -58,20 +59,17 @@ class EDITENG_DLLPUBLIC SvxLRSpaceItem final : public SfxPoolItem
tools::Long m_nRightGutterMargin;
sal_uInt16 nPropFirstLineOffset, nPropLeftMargin, nPropRightMargin;
- short nFirstLineOffset; // First-line indent _always_ relative to nTxtLeft
bool bAutoFirst; // Automatic calculation of the first line indent
bool bExplicitZeroMarginValRight;
bool bExplicitZeroMarginValLeft;
- void AdjustLeft(); // nLeftMargin and nTxtLeft are being adjusted.
-
public:
static SfxPoolItem* CreateDefault();
explicit SvxLRSpaceItem( const sal_uInt16 nId );
SvxLRSpaceItem( const tools::Long nLeft, const tools::Long nRight,
- const tools::Long nTLeft /*= 0*/, const short nOfset /*= 0*/,
+ const short nOfset /*= 0*/,
const sal_uInt16 nId );
SvxLRSpaceItem(SvxLRSpaceItem const &) = default; // SfxPoolItem copy function dichotomy
@@ -97,7 +95,7 @@ public:
// Query/direct setting of the absolute values
tools::Long GetLeft() const { return nLeftMargin; }
tools::Long GetRight() const { return nRightMargin;}
- void SetLeftValue( const tools::Long nL ) { nTxtLeft = nLeftMargin = nL; }
+ void SetLeftValue( const tools::Long nL ) { assert(nFirstLineOffset == 0); nLeftMargin = nL; }
void SetRightValue( const tools::Long nR ) { nRightMargin = nR; }
bool IsAutoFirst() const { return bAutoFirst; }
void SetAutoFirst( const bool bNew ) { bAutoFirst = bNew; }
@@ -111,7 +109,7 @@ public:
// The UI/text interface:
void SetTextLeft(const tools::Long nL, const sal_uInt16 nProp = 100);
- tools::Long GetTextLeft() const { return nTxtLeft; }
+ tools::Long GetTextLeft() const;
void SetTextFirstLineOffset(const short nF, const sal_uInt16 nProp = 100);
short GetTextFirstLineOffset() const { return nFirstLineOffset; }