diff options
-rw-r--r-- | include/oox/drawingml/theme.hxx | 13 | ||||
-rw-r--r-- | oox/source/drawingml/diagram/diagramhelper.cxx | 5 | ||||
-rw-r--r-- | oox/source/drawingml/shape.cxx | 3 | ||||
-rw-r--r-- | oox/source/drawingml/theme.cxx | 67 | ||||
-rw-r--r-- | oox/source/drawingml/themefragmenthandler.cxx | 4 | ||||
-rw-r--r-- | oox/source/ppt/presentationfragmenthandler.cxx | 6 | ||||
-rw-r--r-- | oox/source/shape/ShapeContextHandler.cxx | 9 | ||||
-rw-r--r-- | sc/source/filter/oox/workbookfragment.cxx | 12 | ||||
-rw-r--r-- | writerfilter/source/dmapper/ThemeHandler.cxx | 4 | ||||
-rw-r--r-- | writerfilter/source/ooxml/OOXMLFastContextHandlerTheme.cxx | 4 | ||||
-rw-r--r-- | writerfilter/source/ooxml/OOXMLFastContextHandlerTheme.hxx | 1 |
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); |