[PATCH] fdo#36791 : fix for import of greeting card

Adam CloudOn (via Code Review) gerrit at gerrit.libreoffice.org
Thu Jun 13 01:36:41 PDT 2013


Hi,

I have submitted a patch for review:

    https://gerrit.libreoffice.org/4240

To pull it, you can do:

    git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/40/4240/1

fdo#36791 : fix for import of greeting card

Change-Id: Id9d68e3e5bc2e2335ef1d1b3a8605a0de64ae8ea
---
M editeng/source/editeng/editeng.cxx
M editeng/source/outliner/outliner.cxx
M include/editeng/editeng.hxx
M include/editeng/outliner.hxx
M include/oox/vml/vmltextbox.hxx
M oox/source/vml/vmlshape.cxx
M oox/source/vml/vmlshapecontext.cxx
M oox/source/vml/vmltextbox.cxx
M oox/source/vml/vmltextboxcontext.cxx
M svx/source/customshapes/EnhancedCustomShape2d.cxx
M svx/source/svdraw/svdmodel.cxx
M svx/source/svdraw/svdograf.cxx
M svx/source/svdraw/svdotextdecomposition.cxx
M svx/source/unodraw/unoshap2.cxx
M sw/qa/extras/ooxmlimport/ooxmlimport.cxx
M sw/source/core/layout/fly.cxx
M sw/source/filter/ww8/docxattributeoutput.cxx
17 files changed, 190 insertions(+), 14 deletions(-)



diff --git a/editeng/source/editeng/editeng.cxx b/editeng/source/editeng/editeng.cxx
index 9bf29e5..7aa5cf1 100644
--- a/editeng/source/editeng/editeng.cxx
+++ b/editeng/source/editeng/editeng.cxx
@@ -102,6 +102,7 @@
 {
     DBG_CTOR( EditEngine, 0 );
     pImpEditEngine = new ImpEditEngine( this, pItemPool );
+    mpStripRec = new Rectangle();
 }
 
 EditEngine::~EditEngine()
@@ -1879,12 +1880,34 @@
 {
     DBG_CHKTHIS( EditEngine, 0 );
     VirtualDevice aTmpDev;
+#if 0  // Modify for greeting.docx error.
     Rectangle aBigRect( Point( 0, 0 ), Size( 0x7FFFFFFF, 0x7FFFFFFF ) );
     if ( IsVertical() )
     {
         aBigRect.Right() = 0;
         aBigRect.Left() = -0x7FFFFFFF;
     }
+#endif
+    // Set Clipping area
+    Rectangle aBigRect;
+
+    GetStripArea(aBigRect);
+    sal_uInt32 rectHeight = aBigRect.GetHeight();
+
+    sal_uInt16 nParaNum = GetParagraphCount();
+    sal_uInt32 nHeight = 0;
+    sal_uInt32 nLastHeight = 0;
+    for(int i = 0; i < nParaNum; i ++)
+    {
+        nLastHeight = GetTextHeight( i );
+        nHeight += nLastHeight;
+        if (nHeight >= rectHeight)
+            break;
+    }
+
+    aBigRect.Top() = 0;
+    aBigRect.Bottom() = (rectHeight - nLastHeight);
+
     pImpEditEngine->Paint( &aTmpDev, aBigRect, Point(), sal_True );
 }
 
@@ -2936,11 +2959,21 @@
     return pImpEditEngine->InsertLineBreak(rEditSelection);
 }
 
+void EditEngine::SetStripArea( const Rectangle& rRect )
+{
+    (*mpStripRec) = rRect;
+}
+
+void EditEngine::GetStripArea( Rectangle& rRect )
+{
+    rRect = (*mpStripRec);
+}
+
+
 EFieldInfo::EFieldInfo()
 {
     pFieldItem = NULL;
 }
-
 
 EFieldInfo::EFieldInfo( const SvxFieldItem& rFieldItem, sal_Int32 nPara, sal_uInt16 nPos ) : aPosition( nPara, nPos )
 {
diff --git a/editeng/source/outliner/outliner.cxx b/editeng/source/outliner/outliner.cxx
index db6915d..895bbfa 100644
--- a/editeng/source/outliner/outliner.cxx
+++ b/editeng/source/outliner/outliner.cxx
@@ -1335,6 +1335,7 @@
     bBlockInsCallback   = sal_False;
 
     nMaxDepth           = 9;
+    mStripRec = Rectangle();
 
     pParaList = new ParagraphList;
     pParaList->SetVisibleStateChangedHdl( LINK( this, Outliner, ParaVisibleStateChangedHdl ) );
@@ -1784,6 +1785,7 @@
 {
     DBG_CHKTHIS(Outliner,0);
     bStrippingPortions = sal_True;
+    pEditEngine->SetStripArea(GetStripArea());
     pEditEngine->StripPortions();
     bStrippingPortions = sal_False;
 }
diff --git a/include/editeng/editeng.hxx b/include/editeng/editeng.hxx
index a3ba78d..d71043d 100644
--- a/include/editeng/editeng.hxx
+++ b/include/editeng/editeng.hxx
@@ -129,6 +129,7 @@
 
 private:
     ImpEditEngine*  pImpEditEngine;
+    Rectangle*      mpStripRec;
 
                     EDITENG_DLLPRIVATE EditEngine( const EditEngine& );
     EDITENG_DLLPRIVATE EditEngine&      operator=( const EditEngine& );
@@ -579,6 +580,9 @@
 
     bool Undo(EditView* pView);
     bool Redo(EditView* pView);
+
+    virtual void        SetStripArea( const Rectangle& rRect );
+    virtual void        GetStripArea( Rectangle& rRect );
 };
 
 #endif // _MyEDITENG_HXX
diff --git a/include/editeng/outliner.hxx b/include/editeng/outliner.hxx
index c9c0b0b..7f2f1ba 100644
--- a/include/editeng/outliner.hxx
+++ b/include/editeng/outliner.hxx
@@ -633,6 +633,8 @@
 
     sal_uLong               nDummy;
 
+    Rectangle               mStripRec;
+
     DECL_LINK(              ParaVisibleStateChangedHdl, Paragraph* );
     DECL_LINK(              BeginMovingParagraphsHdl, void* );
     DECL_LINK(              EndMovingParagraphsHdl, MoveParagraphsInfo* );
@@ -1040,6 +1042,9 @@
 
     // convenient method to determine the bullets/numbering status for all paragraphs
     sal_Int32 GetBulletsNumberingStatus() const;
+
+    void        SetStripArea( const Rectangle& rRect ) { mStripRec = rRect; }
+    Rectangle   GetStripArea() const { return mStripRec; };
 };
 
 #endif
diff --git a/include/oox/vml/vmltextbox.hxx b/include/oox/vml/vmltextbox.hxx
index 4975e6b..3643855 100644
--- a/include/oox/vml/vmltextbox.hxx
+++ b/include/oox/vml/vmltextbox.hxx
@@ -59,8 +59,9 @@
 {
     TextFontModel       maFont;
     OUString     maText;
+    OUString     maJc;
 
-    explicit            TextPortionModel( const TextFontModel& rFont, const OUString& rText );
+    explicit            TextPortionModel( const TextFontModel& rFont, const OUString& rText, const OUString& rJc );
 };
 
 // ============================================================================
@@ -73,6 +74,12 @@
 
     /** Appends a new text portion to the textbox. */
     void                appendPortion( const TextFontModel& rFont, const OUString& rText );
+
+    /** Appends LINE_BREAK to last text portion . */
+    void                appendLineBreak();
+
+    /** Set TextPortionModel`s justify. */
+    void                setJustify(const OUString& rText);
 
     /** Returns the current number of text portions. */
     inline size_t       getPortionCount() const { return maPortions.size(); }
@@ -92,6 +99,7 @@
     typedef ::std::vector< TextPortionModel > PortionVector;
 
     PortionVector       maPortions;
+    OUString            maJc;
 };
 
 // ============================================================================
diff --git a/oox/source/vml/vmlshape.cxx b/oox/source/vml/vmlshape.cxx
index 35ad93d..5156357 100644
--- a/oox/source/vml/vmlshape.cxx
+++ b/oox/source/vml/vmlshape.cxx
@@ -481,6 +481,7 @@
 Reference< XShape > SimpleShape::implConvertAndInsert( const Reference< XShapes >& rxShapes, const awt::Rectangle& rShapeRect ) const
 {
     awt::Rectangle aShapeRect(rShapeRect);
+    bool bFlipX = false, bFlipY = false;
     boost::optional<sal_Int32> oRotation;
     if (!maTypeModel.maRotation.isEmpty())
         oRotation.reset(maTypeModel.maRotation.toInt32());
@@ -492,15 +493,18 @@
             aShapeRect.Width *= -1;
             if (oRotation)
                 oRotation.reset(360 - *oRotation);
+            bFlipX = true;
         }
         else if (maTypeModel.maFlip.equalsAscii("y"))
         {
             aShapeRect.Y += aShapeRect.Height;
             aShapeRect.Height *= -1;
+            bFlipY = true;
         }
     }
 
     Reference< XShape > xShape = mrDrawing.createAndInsertXShape( maService, rxShapes, aShapeRect );
+    PropertySet( xShape ).setProperty( PROP_TextAutoGrowHeight, false);
     convertShapeProperties( xShape );
 
     if ( maService.equalsAscii( "com.sun.star.text.TextFrame" ) )
@@ -558,7 +562,7 @@
     }
 
     PropertySet aPropertySet(xShape);
-    if (xShape.is() && oRotation)
+    /* if (xShape.is() && oRotation)
     {
         // See DffPropertyReader::Fix16ToAngle(): in VML, positive rotation angles are clockwise, we have them as counter-clockwise.
         // Additionally, VML type is 0..360, our is 0.36000.
@@ -566,6 +570,23 @@
         // If rotation is used, simple setPosition() is not enough.
         aPropertySet.setAnyProperty(PROP_HoriOrientPosition, makeAny( aShapeRect.X ) );
         aPropertySet.setAnyProperty(PROP_VertOrientPosition, makeAny( aShapeRect.Y ) );
+    } */
+    if (xShape.is() && (oRotation || bFlipX || bFlipY))
+    {
+        if (oRotation)
+        {
+            // See DffPropertyReader::Fix16ToAngle(): in VML, positive rotation angles are clockwise, we have them as counter-clockwise.
+            // Additionally, VML type is 0..360, our is 0.36000.
+            aPropertySet.setAnyProperty(PROP_RotateAngle, makeAny(sal_Int32(NormAngle360((*oRotation) * -100))));
+            // If rotation is used, simple setPosition() is not enough.
+            //aPropertySet.setAnyProperty(PROP_HoriOrientPosition, makeAny( aShapeRect.X ) );
+            //aPropertySet.setAnyProperty(PROP_VertOrientPosition, makeAny( aShapeRect.Y ) );
+        }
+        if (bFlipX)
+            aPropertySet.setAnyProperty(PROP_MirroredX, makeAny( bFlipX ) );
+        if (bFlipY)
+            aPropertySet.setAnyProperty(PROP_MirroredY, makeAny( bFlipY ) );
+        aPropertySet.setAnyProperty(PROP_CustomShapeGeometry, makeAny( true ) );
     }
 
     lcl_SetAnchorType(aPropertySet, maTypeModel);
diff --git a/oox/source/vml/vmlshapecontext.cxx b/oox/source/vml/vmlshapecontext.cxx
index efa6e38..8b2f14d 100644
--- a/oox/source/vml/vmlshapecontext.cxx
+++ b/oox/source/vml/vmlshapecontext.cxx
@@ -246,9 +246,26 @@
             return new GroupShapeContext( rParent, rShapes.createShape< GroupShape >(), rAttribs );
         case VML_TOKEN( shape ):
             if (rAttribs.hasAttribute(XML_path))
-                return new ShapeContext( rParent, rShapes.createShape< BezierShape >(), rAttribs );
+            {
+                bool bBezier = false;
+                const OUString path = rAttribs.getXString( XML_path, OUString() );
+                for ( sal_Int32 i = 0; i < path.getLength(); i++ )
+                {
+                    if (path[i] == 'c')
+                    {
+                        bBezier = true;
+                        break;
+                    }
+                }
+                if (bBezier)
+                    return new ShapeContext( rParent, rShapes.createShape< BezierShape >(), rAttribs );
+                else
+                    return new ShapeContext( rParent, rShapes.createShape< ComplexShape >(), rAttribs );
+            }
             else
+            {
                 return new ShapeContext( rParent, rShapes.createShape< ComplexShape >(), rAttribs );
+            }
         case VML_TOKEN( rect ):
             return new RectangleShapeContext( rParent, rAttribs, rShapes.createShape< RectangleShape >() );
         case VML_TOKEN( roundrect ):
diff --git a/oox/source/vml/vmltextbox.cxx b/oox/source/vml/vmltextbox.cxx
index 1499091..0146d48 100644
--- a/oox/source/vml/vmltextbox.cxx
+++ b/oox/source/vml/vmltextbox.cxx
@@ -24,6 +24,7 @@
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include <com/sun/star/text/XTextAppend.hpp>
 #include <com/sun/star/text/WritingMode.hpp>
+#include <com/sun/star/text/ControlCharacter.hpp>
 
 namespace oox {
 namespace vml {
@@ -34,9 +35,10 @@
 {
 }
 
-TextPortionModel::TextPortionModel( const TextFontModel& rFont, const OUString& rText ) :
+TextPortionModel::TextPortionModel( const TextFontModel& rFont, const OUString& rText, const OUString& rJc ) :
     maFont( rFont ),
-    maText( rText )
+    maText( rText ),
+    maJc( rJc )
 {
 }
 
@@ -52,7 +54,20 @@
 
 void TextBox::appendPortion( const TextFontModel& rFont, const OUString& rText )
 {
-    maPortions.push_back( TextPortionModel( rFont, rText ) );
+    maPortions.push_back( TextPortionModel( rFont, rText, maJc ) );
+}
+
+void TextBox::appendLineBreak()
+{
+    if (getPortionCount() <= 0)
+        return;
+
+    maPortions.push_back( TextPortionModel( maPortions.back().maFont, OUString("\x0A"), maJc ) );
+}
+
+void TextBox::setJustify(const OUString& rText)
+{
+    maJc = rText;
 }
 
 const TextFontModel* TextBox::getFirstFont() const
@@ -88,6 +103,29 @@
             aPropertyValue.Value = uno::makeAny(double(rFont.monSize.get()) / 2.);
             aPropVec.push_back(aPropertyValue);
         }
+
+        if (rFont.moName.has())
+        {
+            aPropertyValue.Name = "CharFontName";
+            aPropertyValue.Value = uno::makeAny(rFont.moName.get());
+            aPropVec.push_back(aPropertyValue);
+        }
+        if (!aIt->maJc.isEmpty())
+        {
+            sal_Int16 adj = 0; // left - SVX_ADJUST_LEFT
+            if (aIt->maJc == "right") // - SVX_ADJUST_RIGHT
+                adj = 1;
+            else if (aIt->maJc == "block") // - SVX_ADJUST_BLOCK
+                adj = 2;
+            else if (aIt->maJc == "center") // - SVX_ADJUST_CENTER
+                adj = 3;
+            else if (aIt->maJc == "blockline") // - SVX_ADJUST_BLOCKLINE
+                adj = 4;
+            aPropertyValue.Name = "ParaAdjust";
+            aPropertyValue.Value = uno::makeAny(adj);
+            aPropVec.push_back(aPropertyValue);
+        }
+
         uno::Sequence<beans::PropertyValue> aPropSeq(aPropVec.size());
         beans::PropertyValue* pValues = aPropSeq.getArray();
         for (std::vector<beans::PropertyValue>::iterator i = aPropVec.begin(); i != aPropVec.end(); ++i)
diff --git a/oox/source/vml/vmltextboxcontext.cxx b/oox/source/vml/vmltextboxcontext.cxx
index ca124bc..f135de0 100644
--- a/oox/source/vml/vmltextboxcontext.cxx
+++ b/oox/source/vml/vmltextboxcontext.cxx
@@ -125,6 +125,15 @@
         case OOX_TOKEN(doc, sz):
             maFont.monSize = rAttribs.getInteger( OOX_TOKEN(doc, val) );
         break;
+        case OOX_TOKEN(doc, rFonts):
+            maFont.moName = rAttribs.getString( OOX_TOKEN(doc, ascii) );
+        break;
+        case OOX_TOKEN(doc, u):
+            maFont.monUnderline = rAttribs.getInteger( OOX_TOKEN(doc, val) );
+        break;
+        case OOX_TOKEN(doc, i):
+            maFont.mobItalic = true;
+        break;
     }
 }
 
@@ -203,10 +212,22 @@
             if( nElement == XML_font ) return new TextPortionContext( *this, mrTextBox, TextFontModel(), nElement, rAttribs );
         break;
         case OOX_TOKEN(doc, txbxContent):
-            if (nElement == OOX_TOKEN(doc, p)) return this;
+            if (nElement == OOX_TOKEN(doc, p))
+            {
+                if (mrTextBox.getPortionCount() > 0)
+                    mrTextBox.appendLineBreak();
+                mrTextBox.setJustify(OUString(""));
+
+                return this;
+            }
         break;
         case OOX_TOKEN(doc, p):
             if (nElement == OOX_TOKEN(doc, r)) return new TextPortionContext( *this, mrTextBox, TextFontModel(), nElement, rAttribs );
+            if (nElement == OOX_TOKEN(doc, pPr)) return this;
+        break;
+        case OOX_TOKEN(doc, pPr):
+            if (nElement == OOX_TOKEN(doc, jc))
+                mrTextBox.setJustify(rAttribs.getString( OOX_TOKEN(doc, val) ).get());
         break;
     }
     return 0;
diff --git a/svx/source/customshapes/EnhancedCustomShape2d.cxx b/svx/source/customshapes/EnhancedCustomShape2d.cxx
index f17e145..8bce424 100644
--- a/svx/source/customshapes/EnhancedCustomShape2d.cxx
+++ b/svx/source/customshapes/EnhancedCustomShape2d.cxx
@@ -1434,6 +1434,14 @@
         }
     }
 
+    // Make twice - this is wrong.
+    aRect.Left() -= aRect.GetWidth();
+    aRect.Bottom() += aRect.GetHeight();
+    aStart.X() -= (aRect.Right() - aStart.X());
+    aStart.Y() += (aStart.Y() - aRect.Top());
+    aEnd.X() -= (aRect.Right() - aEnd.X());
+    aEnd.Y() += (aEnd.Y() - aRect.Top());
+
     Polygon aTempPoly( aRect, aStart, aEnd, POLY_ARC, bFullCircle );
     basegfx::B2DPolygon aRetval;
 
diff --git a/svx/source/svdraw/svdmodel.cxx b/svx/source/svdraw/svdmodel.cxx
index a184de7..f55e693 100644
--- a/svx/source/svdraw/svdmodel.cxx
+++ b/svx/source/svdraw/svdmodel.cxx
@@ -195,7 +195,7 @@
     else
         nDefTextHgt = SdrEngineDefaults::GetFontHeight();
 
-    pItemPool->SetPoolDefaultItem( SdrTextWordWrapItem( sal_False ) );
+    pItemPool->SetPoolDefaultItem( SdrTextWordWrapItem( sal_True ) );
 
     SetTextDefaults();
     pLayerAdmin=new SdrLayerAdmin;
diff --git a/svx/source/svdraw/svdograf.cxx b/svx/source/svdraw/svdograf.cxx
index c968809..5d63691 100644
--- a/svx/source/svdraw/svdograf.cxx
+++ b/svx/source/svdraw/svdograf.cxx
@@ -49,6 +49,7 @@
 #include <svx/svdogrp.hxx>
 #include <svx/xbtmpit.hxx>
 #include <svx/xflbmtit.hxx>
+#include <svx/xflclit.hxx>
 #include <svx/svdundo.hxx>
 #include "svdfmtf.hxx"
 #include <svx/sdgcpitm.hxx>
@@ -977,7 +978,8 @@
         }
         else
         {
-            SetMergedItem(XFillStyleItem(XFILL_NONE));
+            SetMergedItem(XFillColorItem(String(), Color( COL_WHITE )));
+            SetMergedItem(XFillStyleItem(XFILL_SOLID));
             SetMergedItem(XLineStyleItem(XLINE_NONE));
         }
     }
diff --git a/svx/source/svdraw/svdotextdecomposition.cxx b/svx/source/svdraw/svdotextdecomposition.cxx
index 0d53e44..a0291fd 100644
--- a/svx/source/svdraw/svdotextdecomposition.cxx
+++ b/svx/source/svdraw/svdotextdecomposition.cxx
@@ -1053,6 +1053,8 @@
         aClipRange.expand(basegfx::B2DTuple(aAnchorTextSize.Width(), aAnchorTextSize.Height()) - aAdjOffset);
     }
 
+    rOutliner.SetStripArea(GetGeoRect());
+
     // now break up text primitives.
     impTextBreakupHandler aConverter(rOutliner);
     aConverter.decomposeBlockTextPrimitive(aNewTransformA, aNewTransformB, aClipRange);
diff --git a/svx/source/unodraw/unoshap2.cxx b/svx/source/unodraw/unoshap2.cxx
index e96f7e1..8b8dd83 100644
--- a/svx/source/unodraw/unoshap2.cxx
+++ b/svx/source/unodraw/unoshap2.cxx
@@ -1900,6 +1900,13 @@
 
     bool bCustomShapeGeometry = pObject && aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "CustomShapeGeometry" ) );
 
+    sal_Bool bSetMirroredX = pObject && aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "MirroredX" ) );
+    sal_Bool bSetMirroredY = pObject && aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "MirroredY" ) );
+    if (bSetMirroredX)
+        ((SdrObjCustomShape*)pObject)->SetMirroredX(true);
+    if (bSetMirroredY)
+        ((SdrObjCustomShape*)pObject)->SetMirroredY(true);
+
     sal_Bool bMirroredX = sal_False;
     sal_Bool bMirroredY = sal_False;
 
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
index c422ecc..69b69c4 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
@@ -357,7 +357,7 @@
     uno::Reference<drawing::XDrawPage> xDrawPage = xDrawPageSupplier->getDrawPage();
     uno::Reference<drawing::XShapes> xShapes(xDrawPage->getByIndex(1), uno::UNO_QUERY);
     uno::Reference<text::XTextRange> xShape(xShapes->getByIndex(0), uno::UNO_QUERY);
-    CPPUNIT_ASSERT_EQUAL(OUString("TEXT1"), xShape->getString());
+    CPPUNIT_ASSERT_EQUAL(OUString("TEXT1\n"), xShape->getString());
     // we want to test the textbox is on the first page (it was put onto another page without the fix),
     // use a small trick and instead of checking the page layout, check the page style
     uno::Reference<text::XTextContent> xTextContent(xShape, uno::UNO_QUERY);
diff --git a/sw/source/core/layout/fly.cxx b/sw/source/core/layout/fly.cxx
index d921849..3fbc00e 100644
--- a/sw/source/core/layout/fly.cxx
+++ b/sw/source/core/layout/fly.cxx
@@ -453,9 +453,12 @@
     SdrLayerID nHeavenId = pIDDMA->GetHeavenId();
     SdrLayerID nHellId = pIDDMA->GetHellId();
     // OD 2004-03-22 #i26791#
+    // At sw/source/core/basetyp/init.cxx:564, sw/source/core/unocore/unoframe.cxx:394,
+    // In case in document there has no opaque item, default set value. So a value will always exist.
+    // In case there is no opaque item, set layer to HellId.
     GetVirtDrawObj()->SetLayer( GetFmt()->GetOpaque().GetValue()
-                                ? nHeavenId
-                                : nHellId );
+                                ? nHellId
+                                : nHeavenId );
     if ( bNotify )
         NotifyDrawObj();
 }
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index a062499..4f09f10 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -4718,7 +4718,12 @@
             OString sColor("#" + msfilter::util::ConvertColor(pTop->GetColor()));
             m_pFlyAttrList->add(XML_strokecolor, sColor);
 
-            double const fConverted(editeng::ConvertBorderWidthToWord(pTop->GetBorderLineStyle(), pTop->GetWidth()));
+            double fConverted = 0;
+            if (pTop->GetBorderLineStyle() != com::sun::star::table::BorderLineStyle::NONE)
+            {
+                fConverted = editeng::ConvertBorderWidthToWord(pTop->GetBorderLineStyle(), pTop->GetWidth());
+            }
+
             sal_Int32 nWidth = sal_Int32(fConverted / 20);
             m_pFlyAttrList->add(XML_strokeweight, OString::valueOf(nWidth) + "pt");
         }

-- 
To view, visit https://gerrit.libreoffice.org/4240
To unsubscribe, visit https://gerrit.libreoffice.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Id9d68e3e5bc2e2335ef1d1b3a8605a0de64ae8ea
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: master
Gerrit-Owner: Adam CloudOn <rattles2013 at gmail.com>



More information about the LibreOffice mailing list