diff options
author | Michael Stahl <michael.stahl@allotropia.de> | 2023-02-07 20:22:25 +0100 |
---|---|---|
committer | Michael Stahl <michael.stahl@allotropia.de> | 2023-02-08 11:03:36 +0000 |
commit | a0875d09d9eeb368e9e319f3f2f29ec3be71b56c (patch) | |
tree | 179c3f2e27c16226e166d25abf679672dcbe348f /include/editeng | |
parent | 9bf7092aa05b47e6290d894edaf00f21038a636a (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.hxx | 12 |
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; } |