summaryrefslogtreecommitdiff
path: root/oox
diff options
context:
space:
mode:
authorMatúš Kukan <matus.kukan@collabora.com>2014-07-04 15:12:59 +0200
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2014-07-10 05:10:09 +0000
commit9e3adc0ee35d9922a12b63d0b36f7790247dec0f (patch)
tree98d49630a5c7667547aca966f17f7bf913d7018f /oox
parent2ced18a6e90e3c9494e48994af39c5d710188c44 (diff)
bnc#882383: Do not ignore themeOverride for charts in .pptx
Otherwise wrong colors are displayed. (cherry picked from commit 08818d8a45e034ad825c7fafbb76766f106f1d1d) Conflicts: oox/source/drawingml/shape.cxx Change-Id: I5d7444100355fdbc5fcd2aaa1c01202ace54312d Reviewed-on: https://gerrit.libreoffice.org/10134 Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com> Tested-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
Diffstat (limited to 'oox')
-rw-r--r--oox/Library_oox.mk1
-rw-r--r--oox/source/drawingml/ThemeOverrideFragmentHandler.cxx48
-rw-r--r--oox/source/drawingml/shape.cxx20
3 files changed, 68 insertions, 1 deletions
diff --git a/oox/Library_oox.mk b/oox/Library_oox.mk
index 4f4a35b658e8..f356565dbef8 100644
--- a/oox/Library_oox.mk
+++ b/oox/Library_oox.mk
@@ -197,6 +197,7 @@ $(eval $(call gb_Library_add_exception_objects,oox,\
oox/source/drawingml/theme \
oox/source/drawingml/themeelementscontext \
oox/source/drawingml/themefragmenthandler \
+ oox/source/drawingml/ThemeOverrideFragmentHandler \
oox/source/drawingml/transform2dcontext \
oox/source/dump/dffdumper \
oox/source/dump/dumperbase \
diff --git a/oox/source/drawingml/ThemeOverrideFragmentHandler.cxx b/oox/source/drawingml/ThemeOverrideFragmentHandler.cxx
new file mode 100644
index 000000000000..5f3e7fc85a76
--- /dev/null
+++ b/oox/source/drawingml/ThemeOverrideFragmentHandler.cxx
@@ -0,0 +1,48 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include "oox/drawingml/ThemeOverrideFragmentHandler.hxx"
+#include "oox/drawingml/theme.hxx"
+#include "oox/drawingml/themeelementscontext.hxx"
+
+using namespace ::oox::core;
+
+namespace oox {
+namespace drawingml {
+
+ThemeOverrideFragmentHandler::ThemeOverrideFragmentHandler( XmlFilterBase& rFilter, const OUString& rFragmentPath, Theme& rTheme ) :
+ FragmentHandler2( rFilter, rFragmentPath ),
+ mrTheme( rTheme )
+{
+}
+
+ThemeOverrideFragmentHandler::~ThemeOverrideFragmentHandler()
+{
+}
+
+ContextHandlerRef ThemeOverrideFragmentHandler::onCreateContext( sal_Int32 nElement, const AttributeList& )
+{
+ // CT_OfficeStyleSheet
+ switch( getCurrentElement() )
+ {
+ case XML_ROOT_CONTEXT:
+ switch( nElement )
+ {
+ case A_TOKEN( themeOverride ): // CT_BaseStylesOverride
+ return new ThemeElementsContext( *this, mrTheme );
+ }
+ break;
+ }
+ return 0;
+}
+
+} // namespace drawingml
+} // namespace oox
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx
index 0737830ece35..21a559795509 100644
--- a/oox/source/drawingml/shape.cxx
+++ b/oox/source/drawingml/shape.cxx
@@ -25,10 +25,12 @@
#include "oox/drawingml/effectproperties.hxx"
#include "oox/drawingml/shapepropertymap.hxx"
#include "oox/drawingml/textbody.hxx"
+#include "oox/drawingml/ThemeOverrideFragmentHandler.hxx"
#include "oox/drawingml/table/tableproperties.hxx"
#include "oox/drawingml/chart/chartconverter.hxx"
#include "oox/drawingml/chart/chartspacefragment.hxx"
#include "oox/drawingml/chart/chartspacemodel.hxx"
+#include "oox/ppt/pptimport.hxx"
#include "oox/vml/vmldrawing.hxx"
#include "oox/vml/vmlshape.hxx"
#include "oox/vml/vmlshapecontainer.hxx"
@@ -47,6 +49,7 @@
#include <com/sun/star/beans/XMultiPropertySet.hpp>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/xml/AttributeData.hpp>
+#include <com/sun/star/xml/sax/XFastSAXSerializable.hpp>
#include <com/sun/star/drawing/HomogenMatrix3.hpp>
#include <com/sun/star/drawing/TextVerticalAdjust.hpp>
#include <com/sun/star/drawing/GraphicExportFilter.hpp>
@@ -1236,7 +1239,22 @@ void Shape::finalizeXShape( XmlFilterBase& rFilter, const Reference< XShapes >&
// load the chart data from the XML fragment
chart::ChartSpaceModel aModel;
- rFilter.importFragment( new chart::ChartSpaceFragment( rFilter, mxChartShapeInfo->maFragmentPath, aModel ) );
+ chart::ChartSpaceFragment *pChartSpaceFragment = new chart::ChartSpaceFragment(
+ rFilter, mxChartShapeInfo->maFragmentPath, aModel );
+ const OUString aThemeOverrideFragmentPath( pChartSpaceFragment->
+ getFragmentPathFromFirstTypeFromOfficeDoc("themeOverride") );
+ rFilter.importFragment( pChartSpaceFragment );
+ ::oox::ppt::PowerPointImport *pPowerPointImport =
+ dynamic_cast< ::oox::ppt::PowerPointImport* >(&rFilter);
+ if (!aThemeOverrideFragmentPath.isEmpty() && pPowerPointImport)
+ {
+ uno::Reference< xml::sax::XFastSAXSerializable > xDoc(
+ rFilter.importFragment(aThemeOverrideFragmentPath), uno::UNO_QUERY_THROW);
+ ThemePtr pTheme = pPowerPointImport->getActualSlidePersist()->getTheme();
+ rFilter.importFragment(new ThemeOverrideFragmentHandler(
+ rFilter, aThemeOverrideFragmentPath, *pTheme), xDoc);
+ pPowerPointImport->getActualSlidePersist()->setTheme(pTheme);
+ }
// convert imported chart model to chart document
Reference< drawing::XShapes > xExternalPage;