sw/qa/extras/ooxmlexport/data/para-shadow.docx |binary sw/qa/extras/ooxmlexport/ooxmlexport.cxx | 12 ++++++++++++ sw/source/filter/ww8/docxattributeoutput.cxx | 16 ++++++++-------- writerfilter/source/dmapper/DomainMapper.cxx | 6 ++++++ writerfilter/source/dmapper/PropertyIds.cxx | 1 + writerfilter/source/dmapper/PropertyIds.hxx | 1 + writerfilter/source/dmapper/PropertyMap.cxx | 22 ++++++++++++++-------- writerfilter/source/dmapper/PropertyMap.hxx | 2 ++ 8 files changed, 44 insertions(+), 16 deletions(-)
New commits: commit 65afb07d56e8faf0cf020de784747046cbcb9d0e Author: Miklos Vajna <[email protected]> Date: Tue Aug 13 15:20:24 2013 +0200 DOCX export of paragraph border drop shadow Instead of passing over shadow location only in case of page borders, do the same for paragraph borders as well. Change-Id: I311638fe0f41ef47ae351f7d199bfbc8b8aabfbe diff --git a/sw/qa/extras/ooxmlexport/data/para-shadow.docx b/sw/qa/extras/ooxmlexport/data/para-shadow.docx new file mode 100755 index 0000000..d35d5f9 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/para-shadow.docx differ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx index 0b4003e..fc55bb9 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx @@ -106,6 +106,7 @@ public: void testFdo65718(); void testFdo64350(); void testFdo67013(); + void testParaShadow(); CPPUNIT_TEST_SUITE(Test); #if !defined(MACOSX) && !defined(WNT) @@ -188,6 +189,7 @@ void Test::run() {"fdo65718.docx", &Test::testFdo65718}, {"fdo64350.docx", &Test::testFdo64350}, {"fdo67013.docx", &Test::testFdo67013}, + {"para-shadow.docx", &Test::testParaShadow}, }; // Don't test the first import of these, for some reason those tests fail const char* aBlacklist[] = { @@ -1134,6 +1136,16 @@ void Test::testFdo67013() CPPUNIT_ASSERT_EQUAL(sal_Int16(106), aFooterTopBorder.OuterLineWidth); } +void Test::testParaShadow() +{ + // The problem was that in w:pBdr, child elements had a w:shadow attribute, but that was ignored. + table::ShadowFormat aShadow = getProperty<table::ShadowFormat>(getParagraph(2), "ParaShadowFormat"); + CPPUNIT_ASSERT_EQUAL(COL_BLACK, sal_uInt32(aShadow.Color)); + CPPUNIT_ASSERT_EQUAL(table::ShadowLocation_BOTTOM_RIGHT, aShadow.Location); + // w:sz="48" is in eights of a point, 1 pt is 20 twips. + CPPUNIT_ASSERT_EQUAL(sal_Int16(TWIP_TO_MM100(24/8*20)), aShadow.ShadowWidth); +} + CPPUNIT_TEST_SUITE_REGISTRATION(Test); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index 55de9c9..51caae9 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -5125,6 +5125,14 @@ void DocxAttributeOutput::FormatBox( const SvxBoxItem& rBox ) OutputBorderOptions aOutputBorderOptions = lcl_getBoxBorderOptions(); + // Check if there is a shadow item + const SfxPoolItem* pItem = GetExport().HasItem( RES_SHADOW ); + if ( pItem ) + { + const SvxShadowItem* pShadowItem = (const SvxShadowItem*)pItem; + aOutputBorderOptions.aShadowLocation = pShadowItem->GetLocation(); + } + if ( m_bOpenedSectPr && GetWritingHeaderFooter() == false) { @@ -5133,14 +5141,6 @@ void DocxAttributeOutput::FormatBox( const SvxBoxItem& rBox ) // Check if the distance is larger than 31 points aOutputBorderOptions.bCheckDistanceSize = true; - // Check if there is a shadow item - const SfxPoolItem* pItem = GetExport().HasItem( RES_SHADOW ); - if ( pItem ) - { - const SvxShadowItem* pShadowItem = (const SvxShadowItem*)pItem; - aOutputBorderOptions.aShadowLocation = pShadowItem->GetLocation(); - } - impl_borders( m_pSerializer, rBox, aOutputBorderOptions, &m_pageMargins ); // Special handling for pgBorder commit 590751d98e10867609c45fff93edae53dfaef3a8 Author: Miklos Vajna <[email protected]> Date: Tue Aug 13 15:09:12 2013 +0200 DOCX import of paragraph border drop shadow Change-Id: I566c491d65b65def65b78afb583624d8272027e0 diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index ee863fa..51f43c7 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -29,6 +29,7 @@ #include <ooxml/OOXMLFastTokens.hxx> #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp> #include <com/sun/star/document/XOOXMLDocumentPropertiesImporter.hpp> +#include <com/sun/star/table/ShadowFormat.hpp> #include <com/sun/star/text/HoriOrientation.hpp> #include <com/sun/star/text/RelOrientation.hpp> #include <com/sun/star/text/VertOrientation.hpp> @@ -1797,6 +1798,11 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext, SprmType rContext->Insert( eBorderId, uno::makeAny( pBorderHandler->getBorderLine()) , true); if(eBorderDistId) rContext->Insert(eBorderDistId, uno::makeAny( pBorderHandler->getLineDistance()), true); + if (nSprmId == NS_sprm::LN_PBrcRight && pBorderHandler->getShadow()) + { + table::ShadowFormat aFormat = rContext->getShadowFromBorder(pBorderHandler->getBorderLine()); + rContext->Insert(PROP_PARA_SHADOW_FORMAT, uno::makeAny(aFormat)); + } } } else diff --git a/writerfilter/source/dmapper/PropertyIds.cxx b/writerfilter/source/dmapper/PropertyIds.cxx index cee68ea..34a0017 100644 --- a/writerfilter/source/dmapper/PropertyIds.cxx +++ b/writerfilter/source/dmapper/PropertyIds.cxx @@ -330,6 +330,7 @@ const OUString& PropertyNameSupplier::GetName( PropertyIds eId ) const case PROP_FIRST_IS_SHARED : sName = "FirstIsShared"; break; case PROP_MIRROR_INDENTS : sName = "MirrorIndents"; break; case PROP_SURROUND_TEXT_WRAP_SMALL: sName = "SurroundTextWrapSmall"; break; + case PROP_PARA_SHADOW_FORMAT: sName = "ParaShadowFormat"; break; } ::std::pair<PropertyNameMap_t::iterator,bool> aInsertIt = m_pImpl->aNameMap.insert( PropertyNameMap_t::value_type( eId, sName )); diff --git a/writerfilter/source/dmapper/PropertyIds.hxx b/writerfilter/source/dmapper/PropertyIds.hxx index 2a6b764..de53e7d 100644 --- a/writerfilter/source/dmapper/PropertyIds.hxx +++ b/writerfilter/source/dmapper/PropertyIds.hxx @@ -301,6 +301,7 @@ enum PropertyIds ,PROP_FIRST_IS_SHARED ,PROP_MIRROR_INDENTS ,PROP_SURROUND_TEXT_WRAP_SMALL + ,PROP_PARA_SHADOW_FORMAT }; struct PropertyNameSupplier_Impl; class PropertyNameSupplier diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx index 257ec94..ccb0506 100644 --- a/writerfilter/source/dmapper/PropertyMap.cxx +++ b/writerfilter/source/dmapper/PropertyMap.cxx @@ -533,14 +533,7 @@ void SectionPropertyMap::ApplyBorderToPageStyles( if (m_bBorderShadows[BORDER_RIGHT]) { - // In Word UI, shadow is a boolean property, in OOXML, it's a boolean - // property of each 4 border type, finally in Writer the border is a - // property of the page style, with shadow location, distance and - // color. See SwWW8ImplReader::SetShadow(). - table::ShadowFormat aFormat; - aFormat.Color = COL_BLACK; - aFormat.Location = table::ShadowLocation_BOTTOM_RIGHT; - aFormat.ShadowWidth = m_pBorderLines[BORDER_RIGHT]->LineWidth; + table::ShadowFormat aFormat = getShadowFromBorder(*m_pBorderLines[BORDER_RIGHT]); if (xFirst.is()) xFirst->setPropertyValue(rPropNameSupplier.GetName(PROP_SHADOW_FORMAT), uno::makeAny(aFormat)); if (xSecond.is()) @@ -548,6 +541,19 @@ void SectionPropertyMap::ApplyBorderToPageStyles( } } +table::ShadowFormat PropertyMap::getShadowFromBorder(table::BorderLine2 aBorder) +{ + // In Word UI, shadow is a boolean property, in OOXML, it's a boolean + // property of each 4 border type, finally in Writer the border is a + // property of the page style, with shadow location, distance and + // color. See SwWW8ImplReader::SetShadow(). + table::ShadowFormat aFormat; + aFormat.Color = COL_BLACK; + aFormat.Location = table::ShadowLocation_BOTTOM_RIGHT; + aFormat.ShadowWidth = aBorder.LineWidth; + return aFormat; +} + void SectionPropertyMap::SetBorderDistance( uno::Reference< beans::XPropertySet > xStyle, PropertyIds eMarginId, PropertyIds eDistId, sal_Int32 nDistance, sal_Int32 nOffsetFrom, sal_uInt32 nLineWidth ) { diff --git a/writerfilter/source/dmapper/PropertyMap.hxx b/writerfilter/source/dmapper/PropertyMap.hxx index ed0f6cb..da59728 100644 --- a/writerfilter/source/dmapper/PropertyMap.hxx +++ b/writerfilter/source/dmapper/PropertyMap.hxx @@ -48,6 +48,7 @@ namespace com{namespace sun{namespace star{ } namespace table{ struct BorderLine2; + struct ShadowFormat; } }}} @@ -123,6 +124,7 @@ public: #if OSL_DEBUG_LEVEL > 1 virtual void dumpXml( const TagLogger::Pointer_t pLogger ) const; #endif + static com::sun::star::table::ShadowFormat getShadowFromBorder(com::sun::star::table::BorderLine2 aBorder); }; typedef boost::shared_ptr<PropertyMap> PropertyMapPtr; _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
