oox/source/drawingml/shape.cxx | 6 ++ oox/source/export/drawingml.cxx | 2 sw/qa/extras/ooxmlexport/data/textbox_picturefill.docx |binary sw/qa/extras/ooxmlexport/ooxmlexport.cxx | 7 ++ sw/source/filter/ww8/docxattributeoutput.cxx | 41 ++++++++++++----- 5 files changed, 45 insertions(+), 11 deletions(-)
New commits: commit 854d7a1cc77b82ef6b5d72a7889743c1ebe6fe6e Author: sushil_shinde <sushil.shi...@synerzip.com> Date: Thu Jan 2 16:31:26 2014 +0530 fdo#73217 : Textbox with picture fill are rendered and saved properly. - Bitmap url was not stored propertly for textframes. - Exported background image fill for text box properly. - Added unit test. Conflicts: sw/qa/extras/ooxmlexport/ooxmlexport.cxx Reviewed on: https://gerrit.libreoffice.org/7259 Change-Id: I1fbab24b2a83b22be04fd6950c80ddf274436738 diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx index b42e27e..b191762 100644 --- a/oox/source/drawingml/shape.cxx +++ b/oox/source/drawingml/shape.cxx @@ -633,6 +633,12 @@ Reference< XShape > Shape::createAndInsert( aShapeProps.setProperty(PROP_BackColorTransparency, aShapeProps[PROP_FillTransparence]); aShapeProps.erase(PROP_FillTransparence); } + // TextFrames have BackGrahicURL, not FillBitmapURL + if (aShapeProps.hasProperty(PROP_FillBitmapURL)) + { + aShapeProps.setProperty(PROP_BackGraphicURL, aShapeProps[PROP_FillBitmapURL]); + aShapeProps.erase(PROP_FillBitmapURL); + } // And no LineColor property; individual borders can have colors if (aShapeProps.hasProperty(PROP_LineColor)) { diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx index 030beb5..b533d747 100644 --- a/oox/source/export/drawingml.cxx +++ b/oox/source/export/drawingml.cxx @@ -608,7 +608,7 @@ void DrawingML::WriteBlipFill( Reference< XPropertySet > rXPropSet, OUString sUR WriteBlip( rXPropSet, aURL ); - if( sURLPropName == "FillBitmapURL" ) + if( sURLPropName == "FillBitmapURL" || sURLPropName == "BackGraphicURL") WriteBlipMode( rXPropSet ); else if( GetProperty( rXPropSet, "FillBitmapStretch" ) ) { bool bStretch = false; diff --git a/sw/qa/extras/ooxmlexport/data/textbox_picturefill.docx b/sw/qa/extras/ooxmlexport/data/textbox_picturefill.docx new file mode 100644 index 0000000..f4fab1b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/textbox_picturefill.docx differ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx index 126516f..dc8726c 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx @@ -2253,6 +2253,13 @@ DECLARE_OOXMLEXPORT_TEST(testFdo69649, "fdo69649.docx") CPPUNIT_ASSERT(contents.match("15")); } +DECLARE_OOXMLEXPORT_TEST(testTextBoxPictureFill, "textbox_picturefill.docx") +{ + uno::Reference<beans::XPropertySet> xFrame(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_BITMAP, getProperty<drawing::FillStyle>(xFrame, "FillStyle")); + CPPUNIT_ASSERT(!(getProperty<OUString>(xFrame,"BackGraphicURL")).isEmpty()); +} + #endif CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index d1d617e..0aa7e36 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -5716,16 +5716,29 @@ void DocxAttributeOutput::FormatBackground( const SvxBrushItem& rBrush ) } else if (m_bDMLTextFrameSyntax) { - m_pSerializer->startElementNS(XML_a, XML_solidFill, FSEND); - m_pSerializer->startElementNS(XML_a, XML_srgbClr, - XML_val, sColor, - FSEND); - if (oAlpha) - m_pSerializer->singleElementNS(XML_a, XML_alpha, - XML_val, OString::number(*oAlpha), - FSEND); - m_pSerializer->endElementNS(XML_a, XML_srgbClr); - m_pSerializer->endElementNS(XML_a, XML_solidFill); + bool bImageBackground = false; + const SfxPoolItem* pItem = GetExport().HasItem(RES_FILL_STYLE); + if (pItem) + { + const XFillStyleItem* pFillStyle = static_cast<const XFillStyleItem*>(pItem); + if(pFillStyle->GetValue() == XFILL_BITMAP) + { + bImageBackground = true; + } + } + if (!bImageBackground) + { + m_pSerializer->startElementNS(XML_a, XML_solidFill, FSEND); + m_pSerializer->startElementNS(XML_a, XML_srgbClr, + XML_val, sColor, + FSEND); + if (oAlpha) + m_pSerializer->singleElementNS(XML_a, XML_alpha, + XML_val, OString::number(*oAlpha), + FSEND); + m_pSerializer->endElementNS(XML_a, XML_srgbClr); + m_pSerializer->endElementNS(XML_a, XML_solidFill); + } } else if ( !m_rExport.bOutPageDescs ) { @@ -5823,6 +5836,14 @@ void DocxAttributeOutput::FormatBox( const SvxBoxItem& rBox ) { const XFillStyleItem* pFillStyle = static_cast<const XFillStyleItem*>(pItem); FormatFillStyle(*pFillStyle); + if (m_oFillStyle && *m_oFillStyle == XFILL_BITMAP) + { + const SdrObject* pSdrObj = m_rExport.mpParentFrame->GetFrmFmt().FindRealSdrObject(); + uno::Reference< drawing::XShape > xShape( ((SdrObject*)pSdrObj)->getUnoShape(), uno::UNO_QUERY ); + uno::Reference< beans::XPropertySet > xPropertySet( xShape, uno::UNO_QUERY ); + m_rDrawingML.SetFS(m_pSerializer); + m_rDrawingML.WriteBlipFill( xPropertySet, "BackGraphicURL" ); + } } pItem = GetExport().HasItem(RES_FILL_GRADIENT); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits