[Libreoffice-commits] core.git: editeng/source include/editeng sw/source

Justin Luth justin_luth at sil.org
Sat Nov 5 20:04:18 UTC 2016


 editeng/source/items/frmitems.cxx |   27 +++++++++++++++++++++++++++
 include/editeng/boxitem.hxx       |    1 +
 sw/source/filter/ww8/ww8graf.cxx  |   24 ++++--------------------
 sw/source/filter/ww8/ww8par2.cxx  |   12 +-----------
 4 files changed, 33 insertions(+), 31 deletions(-)

New commits:
commit a5f8c5f9338e140c8ec3198228917a8a1a54dc35
Author: Justin Luth <justin_luth at sil.org>
Date:   Sat Nov 5 15:40:29 2016 +0300

    make a useful function - SvxBoxItem::CalcLineWidth
    
    It saves lots of extra code: no separately checking if a line exists,
    and then getting the width.  Closely matches the existing CalcLineSpace.
    
    sc/source/ui/view/printfun.cxx is another place that could use this
    heavily to replace their lcl_LineTotal function. Perhaps something
    good for an easyHack. (Wait until LO5.4, since much of the logic
    should use CalcLineSpace(,true) instead, and that function probably
    will have the default bEvenIfNoLine changed to true. Compiler doesn't
    like providing "true" when the default value is also "true".)
    
    Change-Id: I298d057b2bf04959434736f6ab2666d2de4222f9
    Reviewed-on: https://gerrit.libreoffice.org/30589
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Justin Luth <justin_luth at sil.org>

diff --git a/editeng/source/items/frmitems.cxx b/editeng/source/items/frmitems.cxx
index ffd0caf..7de28e3 100644
--- a/editeng/source/items/frmitems.cxx
+++ b/editeng/source/items/frmitems.cxx
@@ -2420,6 +2420,33 @@ void SvxBoxItem::SetDistance( sal_uInt16 nNew, SvxBoxItemLine nLine )
     }
 }
 
+sal_uInt16 SvxBoxItem::CalcLineWidth( SvxBoxItemLine nLine ) const
+{
+    SvxBorderLine* pTmp = nullptr;
+    sal_uInt16 nWidth = 0;
+    switch ( nLine )
+    {
+    case SvxBoxItemLine::TOP:
+        pTmp = pTop;
+        break;
+    case SvxBoxItemLine::BOTTOM:
+        pTmp = pBottom;
+        break;
+    case SvxBoxItemLine::LEFT:
+        pTmp = pLeft;
+        break;
+    case SvxBoxItemLine::RIGHT:
+        pTmp = pRight;
+        break;
+    default:
+        OSL_FAIL( "wrong line" );
+    }
+
+    if( pTmp )
+        nWidth = pTmp->GetScaledWidth();
+
+    return nWidth;
+}
 
 sal_uInt16 SvxBoxItem::CalcLineSpace( SvxBoxItemLine nLine, bool bEvenIfNoLine ) const
 {
diff --git a/include/editeng/boxitem.hxx b/include/editeng/boxitem.hxx
index 00227a4..a63d4a1 100644
--- a/include/editeng/boxitem.hxx
+++ b/include/editeng/boxitem.hxx
@@ -110,6 +110,7 @@ public:
 
     // Line width plus Space plus inward distance
     // bEvenIfNoLine = TRUE -> Also return distance, when no Line is set
+    sal_uInt16  CalcLineWidth( SvxBoxItemLine nLine ) const;
     sal_uInt16  CalcLineSpace( SvxBoxItemLine nLine, bool bEvenIfNoLine = false ) const;
     bool HasBorder( bool bTreatPaddingAsBorder = false ) const;
     static css::table::BorderLine2 SvxLineToLine( const editeng::SvxBorderLine* pLine, bool bConvert );
diff --git a/sw/source/filter/ww8/ww8graf.cxx b/sw/source/filter/ww8/ww8graf.cxx
index b20d5e2..35059e4 100644
--- a/sw/source/filter/ww8/ww8graf.cxx
+++ b/sw/source/filter/ww8/ww8graf.cxx
@@ -1678,26 +1678,10 @@ void SwWW8ImplReader::MatchSdrItemsIntoFlySet( SdrObject* pSdrObj,
     rInnerDist.Right()+=nLineThick;
     rInnerDist.Bottom()+=nLineThick;
 
-    const SvxBorderLine *pLine;
-    if (nullptr != (pLine = aBox.GetLine(SvxBoxItemLine::LEFT)))
-    {
-        rInnerDist.Left() -= (pLine->GetScaledWidth());
-    }
-
-    if (nullptr != (pLine = aBox.GetLine(SvxBoxItemLine::TOP)))
-    {
-        rInnerDist.Top() -= (pLine->GetScaledWidth());
-    }
-
-    if (nullptr != (pLine = aBox.GetLine(SvxBoxItemLine::RIGHT)))
-    {
-        rInnerDist.Right() -= (pLine->GetScaledWidth());
-    }
-
-    if (nullptr != (pLine = aBox.GetLine(SvxBoxItemLine::BOTTOM)))
-    {
-        rInnerDist.Bottom() -= (pLine->GetScaledWidth());
-    }
+    rInnerDist.Left()   -= aBox.CalcLineWidth( SvxBoxItemLine::LEFT );
+    rInnerDist.Top()    -= aBox.CalcLineWidth( SvxBoxItemLine::TOP );
+    rInnerDist.Right()  -= aBox.CalcLineWidth( SvxBoxItemLine::RIGHT );
+    rInnerDist.Bottom() -= aBox.CalcLineWidth( SvxBoxItemLine::BOTTOM );
 
     // set distances from box's border to text contained within the box
     if( 0 < rInnerDist.Left() )
diff --git a/sw/source/filter/ww8/ww8par2.cxx b/sw/source/filter/ww8/ww8par2.cxx
index 0f9f245..d737553 100644
--- a/sw/source/filter/ww8/ww8par2.cxx
+++ b/sw/source/filter/ww8/ww8par2.cxx
@@ -3231,21 +3231,11 @@ void WW8TabDesc::AdjustNewBand()
         // we have to mimic this in the filter by picking the larger of the
         // sides and using that one on one side of the line (right)
         SvxBoxItem aCurrentBox(sw::util::ItemGet<SvxBoxItem>(*(pBox->GetFrameFormat()), RES_BOX));
-        const ::editeng::SvxBorderLine *pLeftLine = aCurrentBox.GetLine(SvxBoxItemLine::LEFT);
-        int nCurrentRightLineWidth = 0;
-        if(pLeftLine)
-            nCurrentRightLineWidth = pLeftLine->GetScaledWidth();
-
         if (i != 0)
         {
             SwTableBox* pBox2 = (*m_pTabBoxes)[i-1];
             SvxBoxItem aOldBox(sw::util::ItemGet<SvxBoxItem>(*(pBox2->GetFrameFormat()), RES_BOX));
-            const ::editeng::SvxBorderLine *pRightLine = aOldBox.GetLine(SvxBoxItemLine::RIGHT);
-            int nOldBoxRightLineWidth = 0;
-            if(pRightLine)
-                nOldBoxRightLineWidth = pRightLine->GetScaledWidth();
-
-            if(nOldBoxRightLineWidth>nCurrentRightLineWidth)
+            if( aOldBox.CalcLineWidth(SvxBoxItemLine::RIGHT) > aCurrentBox.CalcLineWidth(SvxBoxItemLine::LEFT) )
                 aCurrentBox.SetLine(aOldBox.GetLine(SvxBoxItemLine::RIGHT), SvxBoxItemLine::LEFT);
 
             aOldBox.SetLine(nullptr, SvxBoxItemLine::RIGHT);


More information about the Libreoffice-commits mailing list