[Libreoffice-commits] core.git: Branch 'libreoffice-7-0' - oox/source sd/qa
Mark Hung (via logerrit)
logerrit at kemper.freedesktop.org
Thu Jan 21 14:30:48 UTC 2021
oox/source/ppt/timenode.cxx | 57 ++++++++++++++++++++++++++++++------
sd/qa/unit/data/pptx/tdf128550.pptx |binary
sd/qa/unit/export-tests.cxx | 14 ++++++++
3 files changed, 63 insertions(+), 8 deletions(-)
New commits:
commit d56e4aea5fd5d777204f9f4e4b14cf0047348beb
Author: Mark Hung <marklh9 at gmail.com>
AuthorDate: Sat Jan 16 23:48:56 2021 +0800
Commit: Xisco Fauli <xiscofauli at libreoffice.org>
CommitDate: Thu Jan 21 15:30:11 2021 +0100
tdf#128550 set sub item on the ancestor node.
The target of a animation node may resolved to
a subitem. However it only has effect on a
iterate container or animate node, not on any
other containers. Subitem setting like background
and paragraph got ignored, so everything were shown
together. The patch find the ancestor node
that is iterate container or animate, and set
the subitem on it.
Change-Id: Iaaa52aed3a34eb2d70b3b318b8336246e17e1e98
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109444
Tested-by: Jenkins
Reviewed-by: Mark Hung <marklh9 at gmail.com>
(cherry picked from commit 9b19bf0283b569a5c134de6b5cce1d72d8f37879)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109679
Reviewed-by: Michael Stahl <michael.stahl at allotropia.de>
Signed-off-by: Xisco Fauli <xiscofauli at libreoffice.org>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109754
diff --git a/oox/source/ppt/timenode.cxx b/oox/source/ppt/timenode.cxx
index 41fb39fba150..4071f8b6a8b8 100644
--- a/oox/source/ppt/timenode.cxx
+++ b/oox/source/ppt/timenode.cxx
@@ -51,8 +51,37 @@ using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::animations;
using namespace ::com::sun::star::presentation;
-namespace oox::ppt {
+namespace {
+
+void lcl_setAncestorSubItem( const Reference<XAnimationNode>& xParent, sal_Int16 nSubItem )
+{
+
+ Reference<XAnimationNode> xNode = xParent;
+
+ while ( xNode.is() )
+ {
+ if ( xNode->getType() == AnimationNodeType::ANIMATE )
+ {
+ Reference<XAnimate> xAnimate( xNode, UNO_QUERY );
+ if ( xAnimate.is() )
+ xAnimate->setSubItem( nSubItem );
+ break;
+ }
+ else if ( xNode->getType() == AnimationNodeType::ITERATE )
+ {
+ Reference<XIterateContainer> xIterateContainer( xNode, UNO_QUERY );
+ if ( xIterateContainer.is() )
+ xIterateContainer->setSubItem( nSubItem );
+ break;
+ }
+
+ xNode.set( xNode->getParent(), UNO_QUERY );
+ }
+}
+
+}
+namespace oox::ppt {
OUString TimeNode::getServiceName( sal_Int16 nNodeType )
{
OUString sServiceName;
@@ -225,11 +254,17 @@ namespace oox::ppt {
if( mpTarget )
{
- sal_Int16 nSubType(0);
- maNodeProperties[ NP_TARGET ] = mpTarget->convert( pSlide, nSubType );
+ sal_Int16 nSubItem(0);
+ maNodeProperties[ NP_TARGET ] = mpTarget->convert( pSlide, nSubItem );
if( mpTarget->mnType == XML_spTgt )
{
- maNodeProperties[ NP_SUBITEM ] <<= nSubType;
+ if ( xNode->getType() == AnimationNodeType::ANIMATE ||
+ xNode->getType() == AnimationNodeType::ITERATE )
+ {
+ maNodeProperties[ NP_SUBITEM ] <<= nSubItem;
+ }
+ else
+ lcl_setAncestorSubItem( xParent, nSubItem );
}
}
@@ -338,15 +373,21 @@ namespace oox::ppt {
}
break;
case NP_SUBITEM:
- if( xAnimate.is() )
+ if( aValue >>= nInt16 )
{
- if( aValue >>= nInt16 )
+ if( xAnimate.is() )
+ {
xAnimate->setSubItem( nInt16 );
- else
+ }
+ else if ( xIterateContainer.is() )
{
- SAL_INFO("oox.ppt","any >>= failed " << __LINE__ );
+ xIterateContainer->setSubItem( nInt16 );
}
}
+ else
+ {
+ SAL_INFO("oox.ppt","any >>= failed " << __LINE__ );
+ }
break;
case NP_ATTRIBUTENAME:
if( xAnimate.is() )
diff --git a/sd/qa/unit/data/pptx/tdf128550.pptx b/sd/qa/unit/data/pptx/tdf128550.pptx
new file mode 100755
index 000000000000..e2be342b2e51
Binary files /dev/null and b/sd/qa/unit/data/pptx/tdf128550.pptx differ
diff --git a/sd/qa/unit/export-tests.cxx b/sd/qa/unit/export-tests.cxx
index a2186fae62af..b5db56f0bf7a 100644
--- a/sd/qa/unit/export-tests.cxx
+++ b/sd/qa/unit/export-tests.cxx
@@ -76,6 +76,7 @@ public:
void testTdf126761();
void testGlow();
void testSoftEdges();
+ void testTdf128550();
CPPUNIT_TEST_SUITE(SdExportTest);
@@ -112,6 +113,7 @@ public:
CPPUNIT_TEST(testTdf126761);
CPPUNIT_TEST(testGlow);
CPPUNIT_TEST(testSoftEdges);
+ CPPUNIT_TEST(testTdf128550);
CPPUNIT_TEST_SUITE_END();
@@ -1307,6 +1309,18 @@ void SdExportTest::testSoftEdges()
xDocShRef->DoClose();
}
+void SdExportTest::testTdf128550()
+{
+ utl::TempFile tempFile;
+ sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf128550.pptx"), PPTX);
+ xDocShRef = saveAndReload(xDocShRef.get(), ODP, &tempFile);
+ xmlDocUniquePtr pXmlDoc = parseExport(tempFile, "content.xml");
+ assertXPath( pXmlDoc, "//anim:iterate[@anim:sub-item='background']", 1);
+ assertXPath( pXmlDoc, "//anim:iterate[@anim:sub-item='text']", 4);
+ xDocShRef->DoClose();
+
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(SdExportTest);
CPPUNIT_PLUGIN_IMPLEMENT();
More information about the Libreoffice-commits
mailing list