sw/qa/extras/ooxmlexport/data/textframe-borders.docx |binary sw/qa/extras/ooxmlexport/ooxmlexport.cxx | 20 ++++++ sw/source/filter/ww8/docxattributeoutput.cxx | 59 ++++++++++++++++++- 3 files changed, 76 insertions(+), 3 deletions(-)
New commits: commit 77479d619b3d22fc521be87a98587f031382b156 Author: Miklos Vajna <vmik...@suse.cz> Date: Tue Jan 22 16:04:29 2013 +0100 sw: DOCX export of TextFrame border/shadow testcase Change-Id: I26be6fbd5f0cd95218cdd7235e1fc10eeafb6704 diff --git a/sw/qa/extras/ooxmlexport/data/textframe-borders.docx b/sw/qa/extras/ooxmlexport/data/textframe-borders.docx new file mode 100755 index 0000000..424ed2a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/textframe-borders.docx differ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx index c1fd412..4ff3f98 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx @@ -35,6 +35,7 @@ #include <com/sun/star/style/ParagraphAdjust.hpp> #include <com/sun/star/view/XSelectionSupplier.hpp> #include <com/sun/star/table/BorderLine2.hpp> +#include <com/sun/star/table/ShadowFormat.hpp> #include <com/sun/star/text/XPageCursor.hpp> #include <unotools/tempfile.hxx> @@ -69,6 +70,7 @@ public: void testN789482(); void test1Table1Page(); void testTextFrames(); + void testTextFrameBorders(); CPPUNIT_TEST_SUITE(Test); #if !defined(MACOSX) && !defined(WNT) @@ -109,6 +111,7 @@ void Test::run() {"n789482.docx", &Test::testN789482}, // {"1-table-1-page.docx", &Test::test1Table1Page}, // doesn't work on openSUSE12.2 at least {"textframes.odt", &Test::testTextFrames}, + {"textframe-borders.docx", &Test::testTextFrameBorders} }; // Don't test the first import of these, for some reason those tests fail const char* aBlacklist[] = { @@ -519,6 +522,23 @@ void Test::testTextFrames() CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xIndexAccess->getCount()); } +void Test::testTextFrameBorders() +{ + uno::Reference<text::XTextFramesSupplier> xTextFramesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XIndexAccess> xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY); + uno::Reference<beans::XPropertySet> xFrame(xIndexAccess->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0xD99594), getProperty<sal_Int32>(xFrame, "BackColor")); + + table::BorderLine2 aBorder = getProperty<table::BorderLine2>(xFrame, "TopBorder"); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0xC0504D), aBorder.Color); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(35), aBorder.LineWidth); + + table::ShadowFormat aShadowFormat = getProperty<table::ShadowFormat>(xFrame, "ShadowFormat"); + CPPUNIT_ASSERT_EQUAL(table::ShadowLocation_BOTTOM_RIGHT, aShadowFormat.Location); + CPPUNIT_ASSERT_EQUAL(sal_Int16(48), aShadowFormat.ShadowWidth); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0x622423), aShadowFormat.Color); +} + CPPUNIT_TEST_SUITE_REGISTRATION(Test); CPPUNIT_PLUGIN_IMPLEMENT(); commit d0fcf8340d5319524dd0f9d8fb24666229d5fd92 Author: Miklos Vajna <vmik...@suse.cz> Date: Tue Jan 22 13:20:57 2013 +0100 sw: DOCX export of TextFrame shadow Change-Id: Ia095a3adee271cf7235fb7c13824d7f265658897 diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index 9cb2c33..0e82f7f 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -188,6 +188,7 @@ class FieldMarkParamsHelper return bResult; } }; +static OString impl_ConvertColor( const Color &rColor ); void DocxAttributeOutput::RTLAndCJKState( bool bIsRTL, sal_uInt16 /*nScript*/ ) { if (bIsRTL) @@ -251,6 +252,35 @@ void DocxAttributeOutput::StartParagraph( ww8::WW8TableNodeInfo::Pointer_t pText m_bParagraphOpened = true; } +void lcl_TextFrameShadow(FSHelperPtr pSerializer, const SwFrmFmt& rFrmFmt) +{ + SvxShadowItem aShadowItem = rFrmFmt.GetShadow(); + if (aShadowItem.GetLocation() == SVX_SHADOW_NONE) + return; + + OString aShadowWidth( OString::valueOf( double( aShadowItem.GetWidth() ) / 20) + "pt"); + OString aOffset; + switch (aShadowItem.GetLocation()) + { + case SVX_SHADOW_TOPLEFT: aOffset = "-" + aShadowWidth + ",-" + aShadowWidth; break; + case SVX_SHADOW_TOPRIGHT: aOffset = aShadowWidth + ",-" + aShadowWidth; break; + case SVX_SHADOW_BOTTOMLEFT: aOffset = "-" + aShadowWidth + "," + aShadowWidth; break; + case SVX_SHADOW_BOTTOMRIGHT: aOffset = aShadowWidth + "," + aShadowWidth; break; + case SVX_SHADOW_NONE: + case SVX_SHADOW_END: + break; + } + if (aOffset.isEmpty()) + return; + + OString aShadowColor = impl_ConvertColor(aShadowItem.GetColor()); + pSerializer->singleElementNS(XML_v, XML_shadow, + XML_on, "t", + XML_color, "#" + aShadowColor, + XML_offset, aOffset, + FSEND); +} + void DocxAttributeOutput::EndParagraph( ww8::WW8TableNodeInfoInner::Pointer_t pTextNodeInfoInner ) { // write the paragraph properties + the run, already in the correct order @@ -284,6 +314,7 @@ void DocxAttributeOutput::EndParagraph( ww8::WW8TableNodeInfoInner::Pointer_t pT m_pSerializer->startElementNS( XML_w, XML_r, FSEND ); m_pSerializer->startElementNS( XML_w, XML_pict, FSEND ); m_pSerializer->startElementNS( XML_v, XML_rect, xFlyAttrList ); + lcl_TextFrameShadow(m_pSerializer, rFrmFmt); m_pSerializer->startElementNS( XML_v, XML_textbox, FSEND ); m_pSerializer->startElementNS( XML_w, XML_txbxContent, FSEND ); m_rExport.WriteText( ); commit f04bcdc4681e76b26b2f5e78232ccfb2d3cb891e Author: Miklos Vajna <vmik...@suse.cz> Date: Tue Jan 22 12:06:54 2013 +0100 sw: DOCX export of TextFrame border width / color Change-Id: If88abe20eeec478d340f913973d4f4815dc0e510 diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index a6b7dff..9cb2c33 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -4512,7 +4512,23 @@ void DocxAttributeOutput::FormatBackground( const SvxBrushItem& rBrush ) void DocxAttributeOutput::FormatBox( const SvxBoxItem& rBox ) { if (m_bTextFrameSyntax) + { + const SvxBorderLine* pLeft = rBox.GetLine(BOX_LINE_LEFT); + const SvxBorderLine* pRight = rBox.GetLine(BOX_LINE_RIGHT); + const SvxBorderLine* pTop = rBox.GetLine(BOX_LINE_TOP); + const SvxBorderLine* pBottom = rBox.GetLine(BOX_LINE_BOTTOM); + if (pLeft && pRight && pTop && pBottom && + *pLeft == *pRight && *pLeft == *pTop && *pLeft == *pBottom) + { + OString sColor("#" + impl_ConvertColor(pTop->GetColor())); + m_pFlyAttrList->add(XML_strokecolor, sColor); + + double const fConverted(editeng::ConvertBorderWidthToWord(pTop->GetBorderLineStyle(), pTop->GetWidth())); + sal_Int32 nWidth = sal_Int32(fConverted / 20); + m_pFlyAttrList->add(XML_strokeweight, OString::valueOf(nWidth) + "pt"); + } return; + } if ( !m_bOpenedSectPr ) { commit 6eb6fc826e54d4464ecc56911a9cb192382319ea Author: Miklos Vajna <vmik...@suse.cz> Date: Tue Jan 22 11:03:36 2013 +0100 sw: DOCX export of TextFrame background color Change-Id: If488129c8b563b82932b58e16328922cc2653da8 diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index 416063a..a6b7dff 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -273,13 +273,17 @@ void DocxAttributeOutput::EndParagraph( ww8::WW8TableNodeInfoInner::Pointer_t pT m_rExport.mpParentFrame = pParentFrame; m_bTextFrameSyntax = true; + m_pFlyAttrList = m_pSerializer->createAttrList( ); m_aTextFrameStyle = "position:absolute"; m_rExport.OutputFormat( pParentFrame->GetFrmFmt(), false, false, true ); + m_pFlyAttrList->add(XML_style, m_aTextFrameStyle.makeStringAndClear()); + XFastAttributeListRef xFlyAttrList( m_pFlyAttrList ); + m_pFlyAttrList = NULL; m_bTextFrameSyntax = false; m_pSerializer->startElementNS( XML_w, XML_r, FSEND ); m_pSerializer->startElementNS( XML_w, XML_pict, FSEND ); - m_pSerializer->startElementNS( XML_v, XML_rect, XML_style, m_aTextFrameStyle.makeStringAndClear(), FSEND ); + m_pSerializer->startElementNS( XML_v, XML_rect, xFlyAttrList ); m_pSerializer->startElementNS( XML_v, XML_textbox, FSEND ); m_pSerializer->startElementNS( XML_w, XML_txbxContent, FSEND ); m_rExport.WriteText( ); @@ -4493,9 +4497,11 @@ void DocxAttributeOutput::FormatAnchor( const SwFmtAnchor& ) void DocxAttributeOutput::FormatBackground( const SvxBrushItem& rBrush ) { - if ( !m_rExport.bOutPageDescs ) + OString sColor = impl_ConvertColor( rBrush.GetColor( ) ); + if (m_bTextFrameSyntax) + m_pFlyAttrList->add(XML_fillcolor, "#" + sColor); + else if ( !m_rExport.bOutPageDescs ) { - OString sColor = impl_ConvertColor( rBrush.GetColor( ) ); m_pSerializer->singleElementNS( XML_w, XML_shd, FSNS( XML_w, XML_fill ), sColor.getStr( ), FSNS( XML_w, XML_val ), "clear", _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits