[Libreoffice-commits] core.git: include/svl svl/source svx/source sw/inc sw/source

Noel Grandin (via logerrit) logerrit at kemper.freedesktop.org
Fri Jul 2 13:53:53 UTC 2021


 include/svl/style.hxx                            |    3 +-
 svl/source/items/style.cxx                       |    4 +--
 svx/source/styles/CommonStylePreviewRenderer.cxx |    2 -
 svx/source/tbxctrls/StylesPreviewWindow.cxx      |   13 +++++------
 svx/source/tbxctrls/tbcontrl.cxx                 |    2 -
 sw/inc/docstyle.hxx                              |    5 ++--
 sw/source/uibase/app/docstyle.cxx                |   26 +++++++++++++----------
 7 files changed, 30 insertions(+), 25 deletions(-)

New commits:
commit 51f00abe7a17c91476375babaa69f4c7b1883c09
Author:     Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Thu Jul 1 12:26:35 2021 +0200
Commit:     Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Fri Jul 2 15:53:15 2021 +0200

    no need to allocate return val on heap for GetItemSetForPreview
    
    Change-Id: I261182ec2348df045171c5e1beb33579e2c0c766
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118284
    Tested-by: Noel Grandin <noel.grandin at collabora.co.uk>
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/include/svl/style.hxx b/include/svl/style.hxx
index 735e3607242d..b3db632c4841 100644
--- a/include/svl/style.hxx
+++ b/include/svl/style.hxx
@@ -37,6 +37,7 @@
 #include <tools/solar.h>
 
 #include <memory>
+#include <optional>
 
 // This is used as a flags enum in sw/, but only there,
 // so I don't pull in o3tl::typed_flags here
@@ -178,7 +179,7 @@ public:
     /// preview only; it shall not create the style in case it does not exist.
     /// If the style has parents, it is _not_ required that the returned item
     /// set has parents (i.e. use it for display purposes only).
-    virtual std::unique_ptr<SfxItemSet> GetItemSetForPreview();
+    virtual std::optional<SfxItemSet> GetItemSetForPreview();
 
     /// Fix for expensive dynamic_cast
     virtual bool isScStyleSheet() const { return false; }
diff --git a/svl/source/items/style.cxx b/svl/source/items/style.cxx
index 8036c3ce4907..2e54c9f53439 100644
--- a/svl/source/items/style.cxx
+++ b/svl/source/items/style.cxx
@@ -262,9 +262,9 @@ SfxItemSet& SfxStyleSheetBase::GetItemSet()
     return *pSet;
 }
 
-std::unique_ptr<SfxItemSet> SfxStyleSheetBase::GetItemSetForPreview()
+std::optional<SfxItemSet> SfxStyleSheetBase::GetItemSetForPreview()
 {
-    return std::make_unique<SfxItemSet>(GetItemSet());
+    return GetItemSet();
 }
 
 /**
diff --git a/svx/source/styles/CommonStylePreviewRenderer.cxx b/svx/source/styles/CommonStylePreviewRenderer.cxx
index 65690bed792b..fbd03539fda5 100644
--- a/svx/source/styles/CommonStylePreviewRenderer.cxx
+++ b/svx/source/styles/CommonStylePreviewRenderer.cxx
@@ -62,7 +62,7 @@ bool CommonStylePreviewRenderer::recalculate()
 {
     m_pFont.reset();
 
-    std::unique_ptr<SfxItemSet> pItemSet(mpStyle->GetItemSetForPreview());
+    std::optional<SfxItemSet> pItemSet(mpStyle->GetItemSetForPreview());
 
     if (!pItemSet) return false;
 
diff --git a/svx/source/tbxctrls/StylesPreviewWindow.cxx b/svx/source/tbxctrls/StylesPreviewWindow.cxx
index 228fc3f05102..eef8bba791e5 100644
--- a/svx/source/tbxctrls/StylesPreviewWindow.cxx
+++ b/svx/source/tbxctrls/StylesPreviewWindow.cxx
@@ -143,7 +143,7 @@ bool StylesPreviewWindow_Base::Command(const CommandEvent& rEvent)
     return false;
 }
 
-static Color GetTextColorFromItemSet(std::unique_ptr<const SfxItemSet> const& pItemSet)
+static Color GetTextColorFromItemSet(std::optional<SfxItemSet> const& pItemSet)
 {
     const SfxPoolItem* pItem = pItemSet->GetItem(SID_ATTR_CHAR_COLOR);
     if (pItem)
@@ -152,7 +152,7 @@ static Color GetTextColorFromItemSet(std::unique_ptr<const SfxItemSet> const& pI
     return COL_AUTO;
 }
 
-static Color GetHighlightColorFromItemSet(std::unique_ptr<const SfxItemSet> const& pItemSet)
+static Color GetHighlightColorFromItemSet(std::optional<SfxItemSet> const& pItemSet)
 {
     const SfxPoolItem* pItem = pItemSet->GetItem(SID_ATTR_BRUSH_CHAR);
     if (pItem)
@@ -161,7 +161,7 @@ static Color GetHighlightColorFromItemSet(std::unique_ptr<const SfxItemSet> cons
     return COL_AUTO;
 }
 
-static Color GetBackgroundColorFromItemSet(std::unique_ptr<const SfxItemSet> const& pItemSet)
+static Color GetBackgroundColorFromItemSet(std::optional<SfxItemSet> const& pItemSet)
 {
     const SfxPoolItem* pItem = pItemSet->GetItem(XATTR_FILLCOLOR);
     if (pItem)
@@ -170,8 +170,7 @@ static Color GetBackgroundColorFromItemSet(std::unique_ptr<const SfxItemSet> con
     return COL_AUTO;
 }
 
-static css::drawing::FillStyle
-GetFillStyleFromItemSet(std::unique_ptr<const SfxItemSet> const& pItemSet)
+static css::drawing::FillStyle GetFillStyleFromItemSet(std::optional<SfxItemSet> const& pItemSet)
 {
     const SfxPoolItem* pItem = pItemSet->GetItem(XATTR_FILLSTYLE);
     if (pItem)
@@ -181,7 +180,7 @@ GetFillStyleFromItemSet(std::unique_ptr<const SfxItemSet> const& pItemSet)
 }
 
 static SvxFont GetFontFromItems(const SvxFontItem* pFontItem, Size aPixelFontSize,
-                                std::unique_ptr<const SfxItemSet> const& pItemSet)
+                                std::optional<SfxItemSet> const& pItemSet)
 {
     SvxFont aFont;
 
@@ -261,7 +260,7 @@ void StyleItemController::DrawEntry(vcl::RenderContext& rRenderContext)
 
     DrawContentBackground(rRenderContext, aContentRect, aOriginalColor);
 
-    std::unique_ptr<const SfxItemSet> const pItemSet(pStyle->GetItemSetForPreview());
+    std::optional<SfxItemSet> const pItemSet(pStyle->GetItemSetForPreview());
     if (!pItemSet)
         return;
 
diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx
index 4521be0db733..1add34406833 100644
--- a/svx/source/tbxctrls/tbcontrl.cxx
+++ b/svx/source/tbxctrls/tbcontrl.cxx
@@ -1168,7 +1168,7 @@ void SvxStyleBox_Base::SetupEntry(vcl::RenderContext& rRenderContext, sal_Int32
     if (!pStyle )
         return;
 
-    std::unique_ptr<const SfxItemSet> const pItemSet(pStyle->GetItemSetForPreview());
+    std::optional<SfxItemSet> const pItemSet(pStyle->GetItemSetForPreview());
     if (!pItemSet) return;
 
     const SvxFontItem * const pFontItem =
diff --git a/sw/inc/docstyle.hxx b/sw/inc/docstyle.hxx
index 049070da9c65..025bcc436413 100644
--- a/sw/inc/docstyle.hxx
+++ b/sw/inc/docstyle.hxx
@@ -28,6 +28,7 @@
 
 #include <unordered_map>
 #include <memory>
+#include <optional>
 #include <string_view>
 #include <vector>
 
@@ -72,7 +73,7 @@ class SW_DLLPUBLIC SwDocStyleSheet final : public SfxStyleSheetBase
     };
 
     SAL_DLLPRIVATE bool FillStyleSheet(FillStyleType eFType,
-            std::unique_ptr<SfxItemSet> * o_ppFlatSet = nullptr);
+            std::optional<SfxItemSet> * o_ppFlatSet = nullptr);
 
     virtual ~SwDocStyleSheet() override;
 
@@ -102,7 +103,7 @@ public:
                                         const bool bResetIndentAttrsAtParagraphStyle = false );
 
     virtual SfxItemSet&     GetItemSet() override;
-    virtual std::unique_ptr<SfxItemSet> GetItemSetForPreview() override;
+    virtual std::optional<SfxItemSet> GetItemSetForPreview() override;
     /** new method for paragraph styles to merge indent attributes of applied list
      style into the given item set, if the list style indent attributes are applicable. */
     void MergeIndentAttrsOfListStyle( SfxItemSet& rSet );
diff --git a/sw/source/uibase/app/docstyle.cxx b/sw/source/uibase/app/docstyle.cxx
index b10570b348a2..9d441beedae7 100644
--- a/sw/source/uibase/app/docstyle.cxx
+++ b/sw/source/uibase/app/docstyle.cxx
@@ -1216,7 +1216,7 @@ bool   SwDocStyleSheet::SetFollow( const OUString& rStr)
 }
 
 static
-std::unique_ptr<SfxItemSet> lcl_SwFormatToFlatItemSet(SwFormat const *const pFormat)
+void lcl_SwFormatToFlatItemSet(SwFormat const *const pFormat, std::optional<SfxItemSet>& pRet)
 {
     // note: we don't add the odd items that GetItemSet() would add
     // because they don't seem relevant for preview
@@ -1227,21 +1227,20 @@ std::unique_ptr<SfxItemSet> lcl_SwFormatToFlatItemSet(SwFormat const *const pFor
         sets.push_back(pParent);
     }
     // start by copying top-level parent set
-    std::unique_ptr<SfxItemSet> pRet(new SfxItemSet(*sets.back()));
+    pRet.emplace(*sets.back());
     sets.pop_back();
     for (auto iter = sets.rbegin(); iter != sets.rend(); ++iter)
     {   // in reverse so child overrides parent
         pRet->Put(**iter);
     }
-    return pRet;
 }
 
-std::unique_ptr<SfxItemSet> SwDocStyleSheet::GetItemSetForPreview()
+std::optional<SfxItemSet> SwDocStyleSheet::GetItemSetForPreview()
 {
     if (SfxStyleFamily::Page == nFamily || SfxStyleFamily::Pseudo == nFamily || SfxStyleFamily::Table == nFamily)
     {
         SAL_WARN("sw.ui", "GetItemSetForPreview not implemented for page or number or table style");
-        return std::unique_ptr<SfxItemSet>();
+        return std::optional<SfxItemSet>();
     }
     if (!m_bPhysical)
     {
@@ -1249,7 +1248,7 @@ std::unique_ptr<SfxItemSet> SwDocStyleSheet::GetItemSetForPreview()
         // (or follow style) may not actually exist in the document at this
         // time, return one "flattened" item set that contains all items from
         // all parents.
-        std::unique_ptr<SfxItemSet> pRet;
+        std::optional<SfxItemSet> pRet;
 
         bool bModifiedEnabled = m_rDoc.getIDocumentState().IsEnableSetModified();
         m_rDoc.getIDocumentState().SetEnableSetModified(false);
@@ -1263,17 +1262,22 @@ std::unique_ptr<SfxItemSet> SwDocStyleSheet::GetItemSetForPreview()
     }
     else
     {
+        std::optional<SfxItemSet> pRet;
         switch (nFamily)
         {
             case SfxStyleFamily::Char:
-                return lcl_SwFormatToFlatItemSet(m_pCharFormat);
+                lcl_SwFormatToFlatItemSet(m_pCharFormat, pRet);
+                break;
             case SfxStyleFamily::Para:
-                return lcl_SwFormatToFlatItemSet(m_pColl);
+                lcl_SwFormatToFlatItemSet(m_pColl, pRet);
+                break;
             case SfxStyleFamily::Frame:
-                return lcl_SwFormatToFlatItemSet(m_pFrameFormat);
+                lcl_SwFormatToFlatItemSet(m_pFrameFormat, pRet);
+                break;
             default:
                 std::abort();
         }
+        return pRet;
     }
 }
 
@@ -1818,7 +1822,7 @@ static void lcl_DeleteInfoStyles( SfxStyleFamily nFamily, std::vector<void*> con
 
 // determine the format
 bool SwDocStyleSheet::FillStyleSheet(
-    FillStyleType const eFType, std::unique_ptr<SfxItemSet> *const o_ppFlatSet)
+    FillStyleType const eFType, std::optional<SfxItemSet> *const o_ppFlatSet)
 {
     bool bRet = false;
     sal_uInt16 nPoolId = USHRT_MAX;
@@ -2016,7 +2020,7 @@ bool SwDocStyleSheet::FillStyleSheet(
             if (FillPreview == eFType)
             {
                 assert(o_ppFlatSet);
-                *o_ppFlatSet = lcl_SwFormatToFlatItemSet(pFormat);
+                lcl_SwFormatToFlatItemSet(pFormat, *o_ppFlatSet);
             }
         }
 


More information about the Libreoffice-commits mailing list