diff options
-rw-r--r-- | editeng/source/items/frmitems.cxx | 2 | ||||
-rw-r--r-- | sw/qa/extras/ooxmlexport/data/tdf129522_removeShadowStyle.odt | bin | 0 -> 14253 bytes | |||
-rw-r--r-- | sw/qa/extras/ooxmlexport/ooxmlexport14.cxx | 23 | ||||
-rw-r--r-- | sw/qa/extras/ww8export/data/tdf129522_removeShadowStyle.odt | bin | 0 -> 14253 bytes | |||
-rw-r--r-- | sw/qa/extras/ww8export/ww8export3.cxx | 23 | ||||
-rw-r--r-- | sw/source/filter/ww8/ww8par6.cxx | 8 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper.cxx | 8 |
7 files changed, 58 insertions, 6 deletions
diff --git a/editeng/source/items/frmitems.cxx b/editeng/source/items/frmitems.cxx index 718e87ee2e37..643f8b1db471 100644 --- a/editeng/source/items/frmitems.cxx +++ b/editeng/source/items/frmitems.cxx @@ -1093,9 +1093,9 @@ bool SvxShadowItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId ) if ( bRet ) { -// SvxShadowLocation eSet = SvxShadowLocation::NONE; switch( aShadow.Location ) { + case table::ShadowLocation_NONE : eLocation = SvxShadowLocation::NONE; break; case table::ShadowLocation_TOP_LEFT : eLocation = SvxShadowLocation::TopLeft; break; case table::ShadowLocation_TOP_RIGHT : eLocation = SvxShadowLocation::TopRight; break; case table::ShadowLocation_BOTTOM_LEFT : eLocation = SvxShadowLocation::BottomLeft ; break; diff --git a/sw/qa/extras/ooxmlexport/data/tdf129522_removeShadowStyle.odt b/sw/qa/extras/ooxmlexport/data/tdf129522_removeShadowStyle.odt Binary files differnew file mode 100644 index 000000000000..7ced9fc647c4 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/tdf129522_removeShadowStyle.odt diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx index fb93572bf725..216cdec15c3c 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx @@ -15,6 +15,7 @@ #include <editsh.hxx> #include <frmatr.hxx> #include <tools/lineend.hxx> +#include <com/sun/star/table/ShadowFormat.hpp> #include <com/sun/star/text/TableColumnSeparator.hpp> #include <com/sun/star/text/XDocumentIndex.hpp> #include <com/sun/star/text/RelOrientation.hpp> @@ -79,6 +80,28 @@ DECLARE_OOXMLEXPORT_TEST(testTdf108350_noFontdefaults, "tdf108350_noFontdefaults //CPPUNIT_ASSERT_EQUAL_MESSAGE("Font size", 10.f, getProperty<float>(xStyleProps, "CharHeight")); } +DECLARE_OOXMLEXPORT_TEST(testTdf129522_removeShadowStyle, "tdf129522_removeShadowStyle.odt") +{ + uno::Reference< container::XNameAccess > paragraphStyles = getStyles("ParagraphStyles"); + uno::Reference< beans::XPropertySet > xStyleProps(paragraphStyles->getByName("Shadow"), uno::UNO_QUERY_THROW); + table::ShadowFormat aShadow = getProperty<table::ShadowFormat>(xStyleProps, "ParaShadowFormat"); + CPPUNIT_ASSERT_EQUAL(table::ShadowLocation_BOTTOM_RIGHT, aShadow.Location); + + // Shadows were inherited regardless of whether the style disabled them. + xStyleProps.set(paragraphStyles->getByName("Shadow-removed"), uno::UNO_QUERY_THROW); + aShadow = getProperty<table::ShadowFormat>(xStyleProps, "ParaShadowFormat"); + CPPUNIT_ASSERT_EQUAL(table::ShadowLocation_NONE, aShadow.Location); + + uno::Reference< container::XNameAccess > characterStyles = getStyles("CharacterStyles"); + xStyleProps.set(characterStyles->getByName("CharShadow"), uno::UNO_QUERY_THROW); + aShadow = getProperty<table::ShadowFormat>(xStyleProps, "CharShadowFormat"); + CPPUNIT_ASSERT_EQUAL(table::ShadowLocation_BOTTOM_RIGHT, aShadow.Location); + + xStyleProps.set(characterStyles->getByName("CharShadow-removed"), uno::UNO_QUERY_THROW); + aShadow = getProperty<table::ShadowFormat>(xStyleProps, "CharShadowFormat"); + //CPPUNIT_ASSERT_EQUAL(table::ShadowLocation_NONE, aShadow.Location); +} + DECLARE_OOXMLIMPORT_TEST(testTdf125038, "tdf125038.docx") { OUString aActual = getParagraph(1)->getString(); diff --git a/sw/qa/extras/ww8export/data/tdf129522_removeShadowStyle.odt b/sw/qa/extras/ww8export/data/tdf129522_removeShadowStyle.odt Binary files differnew file mode 100644 index 000000000000..7ced9fc647c4 --- /dev/null +++ b/sw/qa/extras/ww8export/data/tdf129522_removeShadowStyle.odt diff --git a/sw/qa/extras/ww8export/ww8export3.cxx b/sw/qa/extras/ww8export/ww8export3.cxx index cb04cc83bc20..231aaabe58ad 100644 --- a/sw/qa/extras/ww8export/ww8export3.cxx +++ b/sw/qa/extras/ww8export/ww8export3.cxx @@ -15,6 +15,7 @@ #include <com/sun/star/drawing/FillStyle.hpp> #include <com/sun/star/drawing/LineDash.hpp> #include <com/sun/star/graphic/XGraphic.hpp> +#include <com/sun/star/table/ShadowFormat.hpp> #include <com/sun/star/text/XFormField.hpp> #include <com/sun/star/text/XTextTable.hpp> #include <com/sun/star/text/XTextTablesSupplier.hpp> @@ -285,6 +286,28 @@ DECLARE_WW8EXPORT_TEST(testTdf120711_joinedParagraphWithChangeTracking, "tdf1207 CPPUNIT_ASSERT(style::NumberingType::CHAR_SPECIAL != numFormat); } +DECLARE_WW8EXPORT_TEST(testTdf129522_removeShadowStyle, "tdf129522_removeShadowStyle.odt") +{ + uno::Reference< container::XNameAccess > paragraphStyles = getStyles("ParagraphStyles"); + uno::Reference< beans::XPropertySet > xStyleProps(paragraphStyles->getByName("Shadow"), uno::UNO_QUERY_THROW); + table::ShadowFormat aShadow = getProperty<table::ShadowFormat>(xStyleProps, "ParaShadowFormat"); + CPPUNIT_ASSERT_EQUAL(table::ShadowLocation_BOTTOM_RIGHT, aShadow.Location); + + // Shadows were inherited regardless of whether the style disabled them. + xStyleProps.set(paragraphStyles->getByName("Shadow-removed"), uno::UNO_QUERY_THROW); + aShadow = getProperty<table::ShadowFormat>(xStyleProps, "ParaShadowFormat"); + CPPUNIT_ASSERT_EQUAL(table::ShadowLocation_NONE, aShadow.Location); + + uno::Reference< container::XNameAccess > characterStyles = getStyles("CharacterStyles"); + xStyleProps.set(characterStyles->getByName("CharShadow"), uno::UNO_QUERY_THROW); + aShadow = getProperty<table::ShadowFormat>(xStyleProps, "CharShadowFormat"); + CPPUNIT_ASSERT_EQUAL(table::ShadowLocation_BOTTOM_RIGHT, aShadow.Location); + + xStyleProps.set(characterStyles->getByName("CharShadow-removed"), uno::UNO_QUERY_THROW); + aShadow = getProperty<table::ShadowFormat>(xStyleProps, "CharShadowFormat"); + //CPPUNIT_ASSERT_EQUAL(table::ShadowLocation_NONE, aShadow.Location); +} + DECLARE_WW8EXPORT_TEST(testBtlrCell, "btlr-cell.doc") { // Without the accompanying fix in place, this test would have failed, as diff --git a/sw/source/filter/ww8/ww8par6.cxx b/sw/source/filter/ww8/ww8par6.cxx index 6e83c5e6afb2..c40215422bfd 100644 --- a/sw/source/filter/ww8/ww8par6.cxx +++ b/sw/source/filter/ww8/ww8par6.cxx @@ -4996,7 +4996,7 @@ void SwWW8ImplReader::Read_Border(sal_uInt16 , const sal_uInt8*, short nLen) // otherwise there is none at all! // even if no border is set, the attribute has to be set, - // otherwise it's not possible to turn of the style attribute hard. + // otherwise it's not possible to turn off the style attribute. const SvxBoxItem* pBox = static_cast<const SvxBoxItem*>(GetFormatAttr( RES_BOX )); std::shared_ptr<SvxBoxItem> aBox(std::make_shared<SvxBoxItem>(RES_BOX)); @@ -5024,8 +5024,10 @@ void SwWW8ImplReader::Read_Border(sal_uInt16 , const sal_uInt8*, short nLen) NewAttr( *aBox ); SvxShadowItem aS(RES_SHADOW); - if( SetShadow( aS, &aSizeArray[0], aBrcs[WW8_RIGHT] ) ) - NewAttr( aS ); + // Word only allows shadows on visible borders + if ( aBox->CalcLineSpace( SvxBoxItemLine::RIGHT ) ) + SetShadow( aS, &aSizeArray[0], aBrcs[WW8_RIGHT] ); + NewAttr( aS ); } } } diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 3d47c93732e1..4e4fc983db07 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -32,6 +32,7 @@ #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp> #include <com/sun/star/document/XOOXMLDocumentPropertiesImporter.hpp> #include <com/sun/star/drawing/TextVerticalAdjust.hpp> +#include <com/sun/star/table/BorderLineStyle.hpp> #include <com/sun/star/table/ShadowFormat.hpp> #include <com/sun/star/text/HoriOrientation.hpp> #include <com/sun/star/text/RelOrientation.hpp> @@ -1375,9 +1376,12 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext ) rContext->Insert( eBorderId, uno::makeAny( pBorderHandler->getBorderLine()) ); if(eBorderDistId) rContext->Insert(eBorderDistId, uno::makeAny( pBorderHandler->getLineDistance())); - if (nSprmId == NS_ooxml::LN_CT_PBdr_right && pBorderHandler->getShadow()) + if ( nSprmId == NS_ooxml::LN_CT_PBdr_right ) { - table::ShadowFormat aFormat = writerfilter::dmapper::PropertyMap::getShadowFromBorder(pBorderHandler->getBorderLine()); + table::ShadowFormat aFormat; + // Word only allows shadows on visible borders + if ( pBorderHandler->getShadow() && pBorderHandler->getBorderLine().LineStyle != table::BorderLineStyle::NONE ) + aFormat = writerfilter::dmapper::PropertyMap::getShadowFromBorder(pBorderHandler->getBorderLine()); rContext->Insert(PROP_PARA_SHADOW_FORMAT, uno::makeAny(aFormat)); } } |