summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/oox/drawingml/theme.hxx13
-rw-r--r--oox/source/drawingml/diagram/diagramhelper.cxx5
-rw-r--r--oox/source/drawingml/shape.cxx3
-rw-r--r--oox/source/drawingml/theme.cxx67
-rw-r--r--oox/source/drawingml/themefragmenthandler.cxx4
-rw-r--r--oox/source/ppt/presentationfragmenthandler.cxx6
-rw-r--r--oox/source/shape/ShapeContextHandler.cxx9
-rw-r--r--sc/source/filter/oox/workbookfragment.cxx12
-rw-r--r--writerfilter/source/dmapper/ThemeHandler.cxx4
-rw-r--r--writerfilter/source/ooxml/OOXMLFastContextHandlerTheme.cxx4
-rw-r--r--writerfilter/source/ooxml/OOXMLFastContextHandlerTheme.hxx1
11 files changed, 44 insertions, 84 deletions
diff --git a/include/oox/drawingml/theme.hxx b/include/oox/drawingml/theme.hxx
index c2408ec1c015..84b75ea1e7a1 100644
--- a/include/oox/drawingml/theme.hxx
+++ b/include/oox/drawingml/theme.hxx
@@ -30,6 +30,7 @@
#include <oox/helper/refvector.hxx>
#include <rtl/ustring.hxx>
#include <sal/types.h>
+#include <docmodel/theme/Theme.hxx>
namespace com::sun::star {
namespace drawing { class XDrawPage; }
@@ -107,9 +108,17 @@ public:
const css::uno::Reference<css::xml::dom::XDocument>& getFragment() const { return mxFragment; }
void setFragment( const css::uno::Reference< css::xml::dom::XDocument>& xRef ) { mxFragment=xRef; }
- std::shared_ptr<model::Theme> createSvxTheme() const;
void addTheme(const css::uno::Reference<css::drawing::XDrawPage>& xDrawPage) const;
+ void setTheme(std::shared_ptr<model::Theme> const& pTheme)
+ {
+ mpTheme = pTheme;
+ }
+
+ std::shared_ptr<model::Theme> const& getTheme() const
+ {
+ return mpTheme;
+ }
private:
OUString maThemeName;
OUString maFontSchemeName;
@@ -125,6 +134,8 @@ private:
Shape maLnDef;
Shape maTxDef;
css::uno::Reference< css::xml::dom::XDocument> mxFragment;
+
+ std::shared_ptr<model::Theme> mpTheme;
};
diff --git a/oox/source/drawingml/diagram/diagramhelper.cxx b/oox/source/drawingml/diagram/diagramhelper.cxx
index daf3047b6433..3b25951bb910 100644
--- a/oox/source/drawingml/diagram/diagramhelper.cxx
+++ b/oox/source/drawingml/diagram/diagramhelper.cxx
@@ -251,11 +251,12 @@ const std::shared_ptr< ::oox::drawingml::Theme >& AdvancedDiagramHelper::getOrCr
// reset local Theme ModelData *always* to get rid of former data that would
// else be added additionally
const_cast<AdvancedDiagramHelper*>(this)->mpThemePtr = std::make_shared<oox::drawingml::Theme>();
- model::Theme aTheme;
+ auto pTheme = std::make_shared<model::Theme>();
+ mpThemePtr->setTheme(pTheme);
// import Theme ModelData
rxFilter->importFragment(
- new ThemeFragmentHandler(*rxFilter, OUString(), *mpThemePtr, aTheme),
+ new ThemeFragmentHandler(*rxFilter, OUString(), *mpThemePtr, *pTheme),
uno::Reference< css::xml::sax::XFastSAXSerializable >(
xThemeDocument,
uno::UNO_QUERY_THROW));
diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx
index 41d2befad1a7..fbd3e79c5a6e 100644
--- a/oox/source/drawingml/shape.cxx
+++ b/oox/source/drawingml/shape.cxx
@@ -2198,9 +2198,8 @@ void Shape::finalizeXShape( XmlFilterBase& rFilter, const Reference< XShapes >&
rFilter.importFragment(aThemeOverrideFragmentPath), uno::UNO_QUERY_THROW);
pTheme = pPowerPointImport->getActualSlidePersist()->getTheme();
auto pThemeOverride = std::make_shared<Theme>(*pTheme);
- model::Theme aTheme;
rFilter.importFragment(
- new ThemeOverrideFragmentHandler(rFilter, aThemeOverrideFragmentPath, *pThemeOverride, aTheme),
+ new ThemeOverrideFragmentHandler(rFilter, aThemeOverrideFragmentPath, *pThemeOverride, *pThemeOverride->getTheme()),
xDoc);
pPowerPointImport->getActualSlidePersist()->setTheme(pThemeOverride);
}
diff --git a/oox/source/drawingml/theme.cxx b/oox/source/drawingml/theme.cxx
index b108d8106322..e8511a32eb5d 100644
--- a/oox/source/drawingml/theme.cxx
+++ b/oox/source/drawingml/theme.cxx
@@ -109,71 +109,6 @@ const TextFont* Theme::resolveFont( std::u16string_view rName ) const
return nullptr;
}
-std::shared_ptr<model::Theme> Theme::createSvxTheme() const
-{
- auto pTheme = std::make_shared<model::Theme>(maThemeName);
-
- auto pColorSet = std::make_unique<model::ColorSet>(maClrScheme.GetName());
- maClrScheme.fill(*pColorSet);
- pTheme->SetColorSet(std::move(pColorSet));
-
- model::FontScheme aFontScheme(maFontSchemeName);
-
- if (auto* pCharProps = getFontStyle(XML_minor))
- {
- model::ThemeFont aMinorLatin;
- pCharProps->maLatinFont.fillThemeFont(aMinorLatin);
- aFontScheme.setMinorLatin(aMinorLatin);
-
- model::ThemeFont aMinorAsian;
- pCharProps->maAsianFont.fillThemeFont(aMinorAsian);
- aFontScheme.setMinorAsian(aMinorAsian);
-
- model::ThemeFont aMinorComplex;
- pCharProps->maComplexFont.fillThemeFont(aMinorComplex);
- aFontScheme.setMinorComplex(aMinorComplex);
- }
-
- if (auto* pCharProps = getFontStyle(XML_major))
- {
- model::ThemeFont aMajorLatin;
- pCharProps->maLatinFont.fillThemeFont(aMajorLatin);
- aFontScheme.setMajorLatin(aMajorLatin);
-
- model::ThemeFont aMajorAsian;
- pCharProps->maAsianFont.fillThemeFont(aMajorAsian);
- aFontScheme.setMajorAsian(aMajorAsian);
-
- model::ThemeFont aMajorComplex;
- pCharProps->maComplexFont.fillThemeFont(aMajorComplex);
- aFontScheme.setMajorComplex(aMajorComplex);
- }
-
- if (maSupplementalFontMap.find(XML_minor) != maSupplementalFontMap.cend())
- {
- std::vector<model::ThemeSupplementalFont> aList;
- for (auto const& [rScript, rTypeface] : maSupplementalFontMap.at(XML_minor))
- {
- aList.push_back(model::ThemeSupplementalFont{rScript, rTypeface});
- }
- aFontScheme.setMinorSupplementalFontList(aList);
- }
-
- if (maSupplementalFontMap.find(XML_major) != maSupplementalFontMap.cend())
- {
- std::vector<model::ThemeSupplementalFont> aList;
- for (auto const& [rScript, rTypeface] : maSupplementalFontMap.at(XML_major))
- {
- aList.push_back(model::ThemeSupplementalFont{rScript, rTypeface});
- }
- aFontScheme.setMajorSupplementalFontList(aList);
- }
-
- pTheme->setFontScheme(aFontScheme);
-
- return pTheme;
-}
-
void Theme::addTheme(const css::uno::Reference<css::drawing::XDrawPage>& xDrawPage) const
{
SAL_WARN_IF(!xDrawPage.is(), "oox", "DrawPage is not set");
@@ -185,7 +120,7 @@ void Theme::addTheme(const css::uno::Reference<css::drawing::XDrawPage>& xDrawPa
if (!pPage)
return;
- pPage->getSdrPageProperties().SetTheme(createSvxTheme());
+ pPage->getSdrPageProperties().SetTheme(getTheme());
}
} // namespace oox::drawingml
diff --git a/oox/source/drawingml/themefragmenthandler.cxx b/oox/source/drawingml/themefragmenthandler.cxx
index baaec066219b..ed654aac9dff 100644
--- a/oox/source/drawingml/themefragmenthandler.cxx
+++ b/oox/source/drawingml/themefragmenthandler.cxx
@@ -71,7 +71,9 @@ void ThemeFragmentHandler::onStartElement(const AttributeList& rAttribs)
{
if (getCurrentElement() == A_TOKEN(theme))
{
- mrOoxTheme.setThemeName(rAttribs.getStringDefaulted(XML_name));
+ OUString aName = rAttribs.getStringDefaulted(XML_name);
+ mrOoxTheme.setThemeName(aName);
+ mrTheme.SetName(aName);
}
}
diff --git a/oox/source/ppt/presentationfragmenthandler.cxx b/oox/source/ppt/presentationfragmenthandler.cxx
index b8906c735d16..5f35dbdfdb1c 100644
--- a/oox/source/ppt/presentationfragmenthandler.cxx
+++ b/oox/source/ppt/presentationfragmenthandler.cxx
@@ -351,9 +351,11 @@ void PresentationFragmentHandler::importSlide(sal_uInt32 nSlide, bool bFirstPage
Reference<xml::dom::XDocument> xDoc=
rFilter.importFragment(aThemeFragmentPath);
- model::Theme aTheme;
+ auto pTheme = std::make_shared<model::Theme>();
+ pThemePtr->setTheme(pTheme);
+
rFilter.importFragment(
- new ThemeFragmentHandler(rFilter, aThemeFragmentPath, *pThemePtr, aTheme),
+ new ThemeFragmentHandler(rFilter, aThemeFragmentPath, *pThemePtr, *pTheme),
Reference<xml::sax::XFastSAXSerializable>(
xDoc,
UNO_QUERY_THROW));
diff --git a/oox/source/shape/ShapeContextHandler.cxx b/oox/source/shape/ShapeContextHandler.cxx
index b6d4bcab0345..7665022c56df 100644
--- a/oox/source/shape/ShapeContextHandler.cxx
+++ b/oox/source/shape/ShapeContextHandler.cxx
@@ -267,7 +267,6 @@ void SAL_CALL ShapeContextHandler::startFastElement
// Parse the theme relation, if available; the diagram won't have colors without it.
if (!mpThemePtr && !msRelationFragmentPath.isEmpty())
{
- mpThemePtr = std::make_shared<Theme>();
// Get Target for Type = "officeDocument" from _rels/.rels file
// aOfficeDocumentFragmentPath is pointing to "word/document.xml" for docx & to "ppt/presentation.xml" for pptx
FragmentHandlerRef rFragmentHandlerRef(new ShapeFragmentHandler(*mxShapeFilterBase, "/"));
@@ -278,11 +277,13 @@ void SAL_CALL ShapeContextHandler::startFastElement
FragmentHandlerRef rFragmentHandler(new ShapeFragmentHandler(*mxShapeFilterBase, aOfficeDocumentFragmentPath));
OUString aThemeFragmentPath = rFragmentHandler->getFragmentPathFromFirstTypeFromOfficeDoc( u"theme" );
- if(!aThemeFragmentPath.isEmpty())
+ if (!aThemeFragmentPath.isEmpty())
{
- model::Theme aTheme;
+ mpThemePtr = std::make_shared<Theme>();
+ auto pTheme = std::make_shared<model::Theme>();
+ mpThemePtr->setTheme(pTheme);
uno::Reference<xml::sax::XFastSAXSerializable> xDoc(mxShapeFilterBase->importFragment(aThemeFragmentPath), uno::UNO_QUERY_THROW);
- mxShapeFilterBase->importFragment(new ThemeFragmentHandler(*mxShapeFilterBase, aThemeFragmentPath, *mpThemePtr, aTheme), xDoc);
+ mxShapeFilterBase->importFragment(new ThemeFragmentHandler(*mxShapeFilterBase, aThemeFragmentPath, *mpThemePtr, *pTheme), xDoc);
mxShapeFilterBase->setCurrentTheme(mpThemePtr);
}
}
diff --git a/sc/source/filter/oox/workbookfragment.cxx b/sc/source/filter/oox/workbookfragment.cxx
index 685b9e91ea4f..076dbe24b63f 100644
--- a/sc/source/filter/oox/workbookfragment.cxx
+++ b/sc/source/filter/oox/workbookfragment.cxx
@@ -349,9 +349,17 @@ void WorkbookFragment::finalizeImport()
// read the theme substream
OUString aThemeFragmentPath = getFragmentPathFromFirstTypeFromOfficeDoc( u"theme" );
- model::Theme aTheme;
+ auto& rOoxTheme = getTheme();
+
+ auto pTheme = rOoxTheme.oox::drawingml::Theme::getTheme(); // needed full name here because a conflict with WorkbookHelper and Theme in ThemeBuffer
+ if (!pTheme)
+ {
+ pTheme = std::make_shared<model::Theme>();
+ rOoxTheme.setTheme(pTheme);
+ }
+
if( !aThemeFragmentPath.isEmpty() )
- importOoxFragment(new ThemeFragmentHandler(getFilter(), aThemeFragmentPath, getTheme(), aTheme));
+ importOoxFragment(new ThemeFragmentHandler(getFilter(), aThemeFragmentPath, rOoxTheme, *pTheme));
xGlobalSegment->setPosition( 0.25 );
// read the styles substream (requires finalized theme buffer)
diff --git a/writerfilter/source/dmapper/ThemeHandler.cxx b/writerfilter/source/dmapper/ThemeHandler.cxx
index fef0cabe1d29..1acd7073f69c 100644
--- a/writerfilter/source/dmapper/ThemeHandler.cxx
+++ b/writerfilter/source/dmapper/ThemeHandler.cxx
@@ -408,8 +408,8 @@ OUString ThemeHandler::getStringForTheme(const Id id)
OUString ThemeHandler::getFontNameForTheme(const Id id) const
{
- auto pSvxTheme = mpTheme->createSvxTheme();
- model::FontScheme const& rFontScheme = pSvxTheme->getFontScheme();
+ auto pModelTheme = mpTheme->getTheme();
+ model::FontScheme const& rFontScheme = pModelTheme->getFontScheme();
OUString aSupplementalTypeFace = resolveSupplementalFontList(
rFontScheme, id, maThemeFontLangEastAsia, maThemeFontLangBidi);
if (!aSupplementalTypeFace.isEmpty())
diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandlerTheme.cxx b/writerfilter/source/ooxml/OOXMLFastContextHandlerTheme.cxx
index 09432d1d4381..0167f0416a26 100644
--- a/writerfilter/source/ooxml/OOXMLFastContextHandlerTheme.cxx
+++ b/writerfilter/source/ooxml/OOXMLFastContextHandlerTheme.cxx
@@ -43,10 +43,12 @@ void OOXMLFastContextHandlerTheme::lcl_startFastElement(
if (!pThemePtr)
{
pThemePtr = std::make_shared<oox::drawingml::Theme>();
+ auto pTheme = std::make_shared<model::Theme>();
+ pThemePtr->setTheme(pTheme);
getDocument()->setTheme(pThemePtr);
}
mpThemeFragmentHandler = new oox::drawingml::ThemeFragmentHandler(
- *xThemeFilterBase, aThemeFragmentPath, *pThemePtr, maTheme);
+ *xThemeFilterBase, aThemeFragmentPath, *pThemePtr, *pThemePtr->getTheme());
}
if (mpThemeFragmentHandler.is())
diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandlerTheme.hxx b/writerfilter/source/ooxml/OOXMLFastContextHandlerTheme.hxx
index c0b11bcae084..9622406f7867 100644
--- a/writerfilter/source/ooxml/OOXMLFastContextHandlerTheme.hxx
+++ b/writerfilter/source/ooxml/OOXMLFastContextHandlerTheme.hxx
@@ -26,7 +26,6 @@ class OOXMLFastContextHandlerTheme : public OOXMLFastContextHandler
{
private:
rtl::Reference<oox::drawingml::ThemeFragmentHandler> mpThemeFragmentHandler;
- model::Theme maTheme;
public:
explicit OOXMLFastContextHandlerTheme(OOXMLFastContextHandler* pContext);