include/docmodel/theme/FormatScheme.hxx       |   31 +++++++++++---
 oox/source/drawingml/themeelementscontext.cxx |   21 +++++++---
 sw/qa/core/theme/ThemeTest.cxx                |   54 ++++++++++++++++++++++++++
 3 files changed, 94 insertions(+), 12 deletions(-)

New commits:
commit 4208d95a292674c80592a7b0b69e5417939b31c1
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Sun Feb 26 12:04:46 2023 +0900
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Sat Apr 8 09:02:13 2023 +0200

    oox: add FormatScheme test case and make sure FillStyle is imorted
    
    Extends ThemeTest in sw with the use cases relevant for import of
    FormatScheme into the model::Theme (as much as it is implemented
    currently).
    
    Change-Id: I888f64c24ba455913d688be256f095d9c298dc2f
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/147693
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>

diff --git a/include/docmodel/theme/FormatScheme.hxx 
b/include/docmodel/theme/FormatScheme.hxx
index 39fa5d36ae0b..07829c866162 100644
--- a/include/docmodel/theme/FormatScheme.hxx
+++ b/include/docmodel/theme/FormatScheme.hxx
@@ -213,18 +213,12 @@ public:
     std::shared_ptr<Fill> mpFill;
 };
 
-class DOCMODEL_DLLPUBLIC BackgroundFillStyle
-{
-public:
-    std::shared_ptr<Fill> mpFill;
-};
-
 class DOCMODEL_DLLPUBLIC FormatScheme
 {
 private:
     OUString maName;
     std::vector<FillStyle> maFillStyleList;
-    std::vector<BackgroundFillStyle> maBackgroundFillStyleList;
+    std::vector<FillStyle> maBackgroundFillStyleList;
 
 public:
     FormatScheme() = default;
@@ -235,6 +229,29 @@ public:
     }
 
     const OUString& getName() const { return maName; }
+
+    std::vector<FillStyle> const& getFillStyleList() const { return 
maFillStyleList; }
+
+    FillStyle* addFillStyle()
+    {
+        if (maFillStyleList.size() > 3)
+            return nullptr;
+        auto& rFillStyle = maFillStyleList.emplace_back();
+        return &rFillStyle;
+    }
+
+    std::vector<FillStyle> const& getBackgroundFillStyleList() const
+    {
+        return maBackgroundFillStyleList;
+    }
+
+    FillStyle* addBackgroundFillStyle()
+    {
+        if (maBackgroundFillStyleList.size() > 3)
+            return nullptr;
+        auto& rBackgroundFillStyle = maBackgroundFillStyleList.emplace_back();
+        return &rBackgroundFillStyle;
+    }
 };
 
 } // end of namespace svx
diff --git a/oox/source/drawingml/themeelementscontext.cxx 
b/oox/source/drawingml/themeelementscontext.cxx
index 7d37145661cf..ae38d3eb8d43 100644
--- a/oox/source/drawingml/themeelementscontext.cxx
+++ b/oox/source/drawingml/themeelementscontext.cxx
@@ -45,17 +45,21 @@ public:
     FillStyleListContext(ContextHandler2Helper const & rParent, FillStyleList& 
rFillStyleList, model::FormatScheme& rFormatScheme);
     virtual ContextHandlerRef onCreateContext( sal_Int32 nElement, const 
AttributeList& rAttribs ) override;
 
-private:
+protected:
     FillStyleList& mrFillStyleList;
-    //model::FormatScheme& mrFormatScheme;
+    model::FormatScheme& mrFormatScheme;
+    virtual model::FillStyle* createAndAddFillStyle()
+    {
+        return mrFormatScheme.addFillStyle();
+    }
 };
 
 }
 
-FillStyleListContext::FillStyleListContext(ContextHandler2Helper const & 
rParent, FillStyleList& rFillStyleList, model::FormatScheme& /*rFormatScheme*/)
+FillStyleListContext::FillStyleListContext(ContextHandler2Helper const & 
rParent, FillStyleList& rFillStyleList, model::FormatScheme& rFormatScheme)
     : ContextHandler2(rParent)
     , mrFillStyleList(rFillStyleList)
-    //, mrFormatScheme(rFormatScheme)
+    , mrFormatScheme(rFormatScheme)
 {
 }
 
@@ -71,7 +75,8 @@ ContextHandlerRef FillStyleListContext::onCreateContext( 
sal_Int32 nElement, con
         case A_TOKEN( grpFill ):
         {
             mrFillStyleList.push_back(std::make_shared<FillProperties>());
-            return FillPropertiesContext::createFillContext(*this, nElement, 
rAttribs, *mrFillStyleList.back(), nullptr);
+            model::FillStyle* pFillStyle = createAndAddFillStyle();
+            return FillPropertiesContext::createFillContext(*this, nElement, 
rAttribs, *mrFillStyleList.back(), pFillStyle);
         }
     }
     return nullptr;
@@ -86,6 +91,12 @@ public:
     BackgroundFillStyleListContext(ContextHandler2Helper const & rParent, 
FillStyleList& rFillStyleList, model::FormatScheme& rFormatScheme)
         : FillStyleListContext(rParent, rFillStyleList, rFormatScheme)
     {}
+
+protected:
+    model::FillStyle* createAndAddFillStyle() override
+    {
+        return mrFormatScheme.addBackgroundFillStyle();
+    }
 };
 
 } // end anonymous ns
diff --git a/sw/qa/core/theme/ThemeTest.cxx b/sw/qa/core/theme/ThemeTest.cxx
index f13063bc30ac..c94b195eef0e 100644
--- a/sw/qa/core/theme/ThemeTest.cxx
+++ b/sw/qa/core/theme/ThemeTest.cxx
@@ -82,6 +82,60 @@ CPPUNIT_TEST_FIXTURE(SwCoreThemeTest, 
testDrawPageThemeExistsDOCX)
                          rFontScheme.findMajorSupplementalTypeface(u"Thai"));
     CPPUNIT_ASSERT_EQUAL(OUString(u"Cordia New"),
                          rFontScheme.findMinorSupplementalTypeface(u"Thai"));
+
+    model::FormatScheme const& rFormatScheme = pTheme->getFormatScheme();
+    CPPUNIT_ASSERT_EQUAL(size_t(3), rFormatScheme.getFillStyleList().size());
+    CPPUNIT_ASSERT_EQUAL(size_t(3), 
rFormatScheme.getBackgroundFillStyleList().size());
+
+    {
+        model::FillStyle const& rFillStyle = 
rFormatScheme.getFillStyleList().at(0);
+        CPPUNIT_ASSERT(rFillStyle.mpFill);
+        CPPUNIT_ASSERT_EQUAL(model::FillType::Solid, 
rFillStyle.mpFill->meType);
+        auto* pSolidFill = 
static_cast<model::SolidFill*>(rFillStyle.mpFill.get());
+        CPPUNIT_ASSERT_EQUAL(model::ColorType::Placeholder, 
pSolidFill->maColorDefinition.meType);
+    }
+
+    {
+        model::FillStyle const& rFillStyle = 
rFormatScheme.getFillStyleList().at(1);
+        CPPUNIT_ASSERT(rFillStyle.mpFill);
+        CPPUNIT_ASSERT_EQUAL(model::FillType::Gradient, 
rFillStyle.mpFill->meType);
+        auto* pGradientFill = 
static_cast<model::GradientFill*>(rFillStyle.mpFill.get());
+        CPPUNIT_ASSERT_EQUAL(model::GradientType::Linear, 
pGradientFill->meGradientType);
+        CPPUNIT_ASSERT_EQUAL(size_t(3), pGradientFill->maGradientStops.size());
+
+        CPPUNIT_ASSERT_EQUAL(0.0, 
pGradientFill->maGradientStops[0].mfPosition);
+        CPPUNIT_ASSERT_EQUAL(model::ColorType::Placeholder,
+                             pGradientFill->maGradientStops[0].maColor.meType);
+
+        CPPUNIT_ASSERT_EQUAL(0.5, 
pGradientFill->maGradientStops[1].mfPosition);
+        CPPUNIT_ASSERT_EQUAL(model::ColorType::Placeholder,
+                             pGradientFill->maGradientStops[1].maColor.meType);
+
+        CPPUNIT_ASSERT_EQUAL(1.0, 
pGradientFill->maGradientStops[2].mfPosition);
+        CPPUNIT_ASSERT_EQUAL(model::ColorType::Placeholder,
+                             pGradientFill->maGradientStops[2].maColor.meType);
+    }
+
+    {
+        model::FillStyle const& rFillStyle = 
rFormatScheme.getFillStyleList().at(2);
+        CPPUNIT_ASSERT(rFillStyle.mpFill);
+        CPPUNIT_ASSERT_EQUAL(model::FillType::Gradient, 
rFillStyle.mpFill->meType);
+        auto* pGradientFill = 
static_cast<model::GradientFill*>(rFillStyle.mpFill.get());
+        CPPUNIT_ASSERT_EQUAL(model::GradientType::Linear, 
pGradientFill->meGradientType);
+        CPPUNIT_ASSERT_EQUAL(size_t(3), pGradientFill->maGradientStops.size());
+
+        CPPUNIT_ASSERT_EQUAL(0.0, 
pGradientFill->maGradientStops[0].mfPosition);
+        CPPUNIT_ASSERT_EQUAL(model::ColorType::Placeholder,
+                             pGradientFill->maGradientStops[0].maColor.meType);
+
+        CPPUNIT_ASSERT_EQUAL(0.5, 
pGradientFill->maGradientStops[1].mfPosition);
+        CPPUNIT_ASSERT_EQUAL(model::ColorType::Placeholder,
+                             pGradientFill->maGradientStops[1].maColor.meType);
+
+        CPPUNIT_ASSERT_EQUAL(1.0, 
pGradientFill->maGradientStops[2].mfPosition);
+        CPPUNIT_ASSERT_EQUAL(model::ColorType::Placeholder,
+                             pGradientFill->maGradientStops[2].maColor.meType);
+    }
 }
 
 CPPUNIT_TEST_FIXTURE(SwCoreThemeTest, testDrawPageThemeExistsODT)

Reply via email to