sw/source/core/inc/UndoInsert.hxx    |    4 +--
 sw/source/core/undo/unins.cxx        |    8 +++---
 sw/source/filter/ww8/ww8graf2.cxx    |   18 +++++++--------
 sw/source/filter/ww8/ww8par.hxx      |    3 +-
 sw/source/uibase/dochdl/swdtflvr.cxx |   42 +++++++++++++++++------------------
 sw/source/uibase/inc/swdtflvr.hxx    |    5 ++--
 6 files changed, 41 insertions(+), 39 deletions(-)

New commits:
commit 9e67902277421aa3fae3bf10eb7bb8b70259c78e
Author:     Noel Grandin <noelgran...@gmail.com>
AuthorDate: Fri Sep 9 17:06:10 2022 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Sat Sep 10 11:47:32 2022 +0200

    unique_ptr->optional for Graphic
    
    Graphic is just a wrapper around shared_ptr, so no need to
    allocate this separately
    
    Change-Id: If4d6367d16d6ebc6c70c9cb39f8635ddaebccd72
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139737
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/sw/source/core/inc/UndoInsert.hxx 
b/sw/source/core/inc/UndoInsert.hxx
index 8a313ba50381..7602820ce313 100644
--- a/sw/source/core/inc/UndoInsert.hxx
+++ b/sw/source/core/inc/UndoInsert.hxx
@@ -25,12 +25,12 @@
 #include <undobj.hxx>
 #include <svx/svdtypes.hxx>
 #include <rtl/ustring.hxx>
+#include <vcl/graph.hxx>
 #include <swtypes.hxx>
 #include <ndindex.hxx>
 #include <IDocumentContentOperations.hxx>
 #include <optional>
 
-class Graphic;
 class SwGrfNode;
 class SwUndoDelete;
 class SwUndoFormatAttr;
@@ -138,7 +138,7 @@ private:
 
 class SwUndoReRead final : public SwUndo
 {
-    std::unique_ptr<Graphic> mpGraphic;
+    std::optional<Graphic> moGraphic;
     std::optional<OUString> maNm;
     std::optional<OUString> maFltr;
     SwNodeOffset mnPosition;
diff --git a/sw/source/core/undo/unins.cxx b/sw/source/core/undo/unins.cxx
index e69b6a311caf..29eb0408d5bc 100644
--- a/sw/source/core/undo/unins.cxx
+++ b/sw/source/core/undo/unins.cxx
@@ -780,7 +780,7 @@ void SwUndoReRead::SetAndSave(::sw::UndoRedoContext & 
rContext)
         return ;
 
     // cache the old values
-    std::unique_ptr<Graphic> pOldGrf( mpGraphic ? new Graphic(*mpGraphic) : 
nullptr);
+    std::optional<Graphic> oOldGrf(moGraphic);
     std::optional<OUString> aOldNm = maNm;
     MirrorGraph nOldMirr = mnMirror;
     // since all of them are cleared/modified by SaveGraphicData:
@@ -792,7 +792,7 @@ void SwUndoReRead::SetAndSave(::sw::UndoRedoContext & 
rContext)
     }
     else
     {
-        pGrfNd->ReRead( OUString(), OUString(), pOldGrf.get() );
+        pGrfNd->ReRead( OUString(), OUString(), oOldGrf ? &*oOldGrf : nullptr 
);
     }
 
     if( MirrorGraph::Dont != nOldMirr )
@@ -818,11 +818,11 @@ void SwUndoReRead::SaveGraphicData( const SwGrfNode& 
rGrfNd )
         maNm = OUString();
         maFltr = OUString();
         rGrfNd.GetFileFilterNms(&*maNm, &*maFltr);
-        mpGraphic.reset();
+        moGraphic.reset();
     }
     else
     {
-        mpGraphic.reset( new Graphic( rGrfNd.GetGrf(true) ) );
+        moGraphic.emplace( rGrfNd.GetGrf(true) );
         maNm.reset();
         maFltr.reset();
     }
diff --git a/sw/source/filter/ww8/ww8graf2.cxx 
b/sw/source/filter/ww8/ww8graf2.cxx
index a2de36616a3e..35219922db83 100644
--- a/sw/source/filter/ww8/ww8graf2.cxx
+++ b/sw/source/filter/ww8/ww8graf2.cxx
@@ -235,7 +235,7 @@ bool SwWW8ImplReader::GetPictGrafFromStream(Graphic& 
rGraphic, SvStream& rSrc)
     return ERRCODE_NONE == 
GraphicFilter::GetGraphicFilter().ImportGraphic(rGraphic, u"", rSrc);
 }
 
-bool SwWW8ImplReader::ReadGrafFile(OUString& rFileName, 
std::unique_ptr<Graphic>& rpGraphic,
+bool SwWW8ImplReader::ReadGrafFile(OUString& rFileName, 
std::optional<Graphic>& roGraphic,
     const WW8_PIC& rPic, SvStream* pSt, sal_uLong nFilePos, bool* pbInDoc)
 {                                                  // Write the graphic to the 
file
     *pbInDoc = true;                               // default
@@ -272,7 +272,7 @@ bool SwWW8ImplReader::ReadGrafFile(OUString& rFileName, 
std::unique_ptr<Graphic>
 
     if (m_xWwFib->m_envr != 1) // !MAC as creator
     {
-        rpGraphic.reset(new Graphic(aWMF));
+        roGraphic.emplace(aWMF);
         return true;
     }
 
@@ -284,10 +284,10 @@ bool SwWW8ImplReader::ReadGrafFile(OUString& rFileName, 
std::unique_ptr<Graphic>
     tools::Long nData = rPic.lcb - ( pSt->Tell() - nPosFc );
     if (nData > 0)
     {
-        rpGraphic.reset(new Graphic());
-        bOk = SwWW8ImplReader::GetPictGrafFromStream(*rpGraphic, *pSt);
+        roGraphic.emplace();
+        bOk = SwWW8ImplReader::GetPictGrafFromStream(*roGraphic, *pSt);
         if (!bOk)
-            rpGraphic.reset();
+            roGraphic.reset();
     }
     return bOk; // Contains graphic
 }
@@ -415,8 +415,8 @@ SwFrameFormat* SwWW8ImplReader::ImportGraf1(WW8_PIC const & 
rPic, SvStream* pSt,
 
     OUString aFileName;
     bool bInDoc;
-    std::unique_ptr<Graphic> pGraph;
-    bool bOk = ReadGrafFile(aFileName, pGraph, rPic, pSt, nFilePos, &bInDoc);
+    std::optional<Graphic> oGraph;
+    bool bOk = ReadGrafFile(aFileName, oGraph, rPic, pSt, nFilePos, &bInDoc);
 
     if (!bOk)
     {
@@ -433,9 +433,9 @@ SwFrameFormat* SwWW8ImplReader::ImportGraf1(WW8_PIC const & 
rPic, SvStream* pSt,
     }
 
     if (m_xWFlyPara && m_xWFlyPara->bGrafApo)
-        pRet = MakeGrafNotInContent(aPD, pGraph.get(), aFileName, aGrfSet);
+        pRet = MakeGrafNotInContent(aPD, oGraph ? &*oGraph : nullptr, 
aFileName, aGrfSet);
     else
-        pRet = MakeGrafInContent(rPic, aPD, pGraph.get(), aFileName, aGrfSet);
+        pRet = MakeGrafInContent(rPic, aPD, oGraph ? &*oGraph : nullptr, 
aFileName, aGrfSet);
     return pRet;
 }
 
diff --git a/sw/source/filter/ww8/ww8par.hxx b/sw/source/filter/ww8/ww8par.hxx
index fc0dcd521cdb..3a771e1076b4 100644
--- a/sw/source/filter/ww8/ww8par.hxx
+++ b/sw/source/filter/ww8/ww8par.hxx
@@ -36,6 +36,7 @@
 #include <deque>
 #include <map>
 #include <memory>
+#include <optional>
 
 #include "ww8struc.hxx"
 #include "ww8scan.hxx"
@@ -1541,7 +1542,7 @@ private:
     bool ProcessSpecial(bool &rbReSync, WW8_CP nStartCp);
     sal_uInt16 TabRowSprm(int nLevel) const;
 
-    bool ReadGrafFile(OUString& rFileName, std::unique_ptr<Graphic>& rpGraphic,
+    bool ReadGrafFile(OUString& rFileName, std::optional<Graphic>& rpGraphic,
        const WW8_PIC& rPic, SvStream* pSt, sal_uLong nFilePos, bool* pDelIt);
 
     static void ReplaceObj(const SdrObject &rReplaceTextObj,
diff --git a/sw/source/uibase/dochdl/swdtflvr.cxx 
b/sw/source/uibase/dochdl/swdtflvr.cxx
index 79837db672b3..0907404dd0bc 100644
--- a/sw/source/uibase/dochdl/swdtflvr.cxx
+++ b/sw/source/uibase/dochdl/swdtflvr.cxx
@@ -494,12 +494,12 @@ bool SwTransferable::GetData( const DataFlavor& rFlavor, 
const OUString& rDestDo
         // SEL_GRF is from ContentType of editsh
         if(bPending || ((SelectionType::Graphic | SelectionType::DrawObject | 
SelectionType::DbForm) & nSelectionType))
         {
-            m_pClpGraphic.reset(new Graphic);
-            if( !m_pWrtShell->GetDrawObjGraphic( 
SotClipboardFormatId::GDIMETAFILE, *m_pClpGraphic ))
-                m_pOrigGraphic = m_pClpGraphic.get();
-            m_pClpBitmap.reset(new Graphic);
-            if( !m_pWrtShell->GetDrawObjGraphic( SotClipboardFormatId::BITMAP, 
*m_pClpBitmap ))
-                m_pOrigGraphic = m_pClpBitmap.get();
+            m_oClpGraphic.emplace();
+            if( !m_pWrtShell->GetDrawObjGraphic( 
SotClipboardFormatId::GDIMETAFILE, *m_oClpGraphic ))
+                m_pOrigGraphic = &*m_oClpGraphic;
+            m_oClpBitmap.emplace();
+            if( !m_pWrtShell->GetDrawObjGraphic( SotClipboardFormatId::BITMAP, 
*m_oClpBitmap ))
+                m_pOrigGraphic = &*m_oClpBitmap;
 
             // is it a URL-Button ?
             OUString sURL;
@@ -636,13 +636,13 @@ bool SwTransferable::GetData( const DataFlavor& rFlavor, 
const OUString& rDestDo
 
         case SotClipboardFormatId::GDIMETAFILE:
             if( m_eBufferType & TransferBufferType::Graphic )
-                bOK = SetGDIMetaFile( m_pClpGraphic->GetGDIMetaFile() );
+                bOK = SetGDIMetaFile( m_oClpGraphic->GetGDIMetaFile() );
             break;
         case SotClipboardFormatId::BITMAP:
         case SotClipboardFormatId::PNG:
             // Neither pClpBitmap nor pClpGraphic are necessarily set
-            if( (m_eBufferType & TransferBufferType::Graphic) && (m_pClpBitmap 
!= nullptr || m_pClpGraphic != nullptr))
-                bOK = SetBitmapEx( (m_pClpBitmap ? m_pClpBitmap : 
m_pClpGraphic)->GetBitmapEx(), rFlavor );
+            if( (m_eBufferType & TransferBufferType::Graphic) && (m_oClpBitmap 
|| m_oClpGraphic))
+                bOK = SetBitmapEx( (m_oClpBitmap ? m_oClpBitmap : 
m_oClpGraphic)->GetBitmapEx(), rFlavor );
             break;
 
         case SotClipboardFormatId::SVIM:
@@ -968,12 +968,12 @@ int SwTransferable::PrepareForCopy( bool bIsCut )
     const SelectionType nSelection = m_pWrtShell->GetSelectionType();
     if( nSelection == SelectionType::Graphic )
     {
-        m_pClpGraphic.reset(new Graphic);
-        if( !m_pWrtShell->GetDrawObjGraphic( 
SotClipboardFormatId::GDIMETAFILE, *m_pClpGraphic ))
-            m_pOrigGraphic = m_pClpGraphic.get();
-        m_pClpBitmap.reset(new Graphic);
-        if( !m_pWrtShell->GetDrawObjGraphic( SotClipboardFormatId::BITMAP, 
*m_pClpBitmap ))
-            m_pOrigGraphic = m_pClpBitmap.get();
+        m_oClpGraphic.emplace();
+        if( !m_pWrtShell->GetDrawObjGraphic( 
SotClipboardFormatId::GDIMETAFILE, *m_oClpGraphic ))
+            m_pOrigGraphic = &*m_oClpGraphic;
+        m_oClpBitmap.emplace();
+        if( !m_pWrtShell->GetDrawObjGraphic( SotClipboardFormatId::BITMAP, 
*m_oClpBitmap ))
+            m_pOrigGraphic = &*m_oClpBitmap;
 
         m_pClpDocFac.reset(new SwDocFac);
         SwDoc& rDoc = lcl_GetDoc(*m_pClpDocFac);
@@ -1119,12 +1119,12 @@ int SwTransferable::PrepareForCopy( bool bIsCut )
             }
             m_eBufferType = static_cast<TransferBufferType>( 
TransferBufferType::Graphic | m_eBufferType );
 
-            m_pClpGraphic.reset(new Graphic);
-            if( !m_pWrtShell->GetDrawObjGraphic( 
SotClipboardFormatId::GDIMETAFILE, *m_pClpGraphic ))
-                m_pOrigGraphic = m_pClpGraphic.get();
-            m_pClpBitmap.reset(new Graphic);
-            if( !m_pWrtShell->GetDrawObjGraphic( SotClipboardFormatId::BITMAP, 
*m_pClpBitmap ))
-                m_pOrigGraphic = m_pClpBitmap.get();
+            m_oClpGraphic.emplace();
+            if( !m_pWrtShell->GetDrawObjGraphic( 
SotClipboardFormatId::GDIMETAFILE, *m_oClpGraphic ))
+                m_pOrigGraphic = &*m_oClpGraphic;
+            m_oClpBitmap.emplace();
+            if( !m_pWrtShell->GetDrawObjGraphic( SotClipboardFormatId::BITMAP, 
*m_oClpBitmap ))
+                m_pOrigGraphic = &*m_oClpBitmap;
 
             // is it a URL-Button ?
             OUString sURL;
diff --git a/sw/source/uibase/inc/swdtflvr.hxx 
b/sw/source/uibase/inc/swdtflvr.hxx
index b165cd7b6b4a..df16e3a8bd56 100644
--- a/sw/source/uibase/inc/swdtflvr.hxx
+++ b/sw/source/uibase/inc/swdtflvr.hxx
@@ -30,6 +30,7 @@
 #include <o3tl/typed_flags_set.hxx>
 #include <svx/swframetypes.hxx>
 #include <memory>
+#include <optional>
 
 #include <swdllapi.h>
 
@@ -84,8 +85,8 @@ class SW_DLLPUBLIC SwTransferable final : public 
TransferableHelper
        SwWrtShell. */
     const SwFrameShell *m_pCreatorView;
     std::unique_ptr<SwDocFac, o3tl::default_delete<SwDocFac>> m_pClpDocFac;
-    std::unique_ptr<Graphic>        m_pClpGraphic;
-    std::unique_ptr<Graphic>        m_pClpBitmap;
+    std::optional<Graphic>        m_oClpGraphic;
+    std::optional<Graphic>        m_oClpBitmap;
     Graphic                         *m_pOrigGraphic;
     std::unique_ptr<INetBookmark>   m_pBookmark;     // URL and description!
     std::unique_ptr<ImageMap>       m_pImageMap;

Reply via email to