include/svx/sdr/contact/viewcontact.hxx                            |    7 
 include/svx/sdr/contact/viewcontactofe3dscene.hxx                  |    2 
 include/svx/sdr/contact/viewcontactofsdrmediaobj.hxx               |    4 
 include/svx/sdr/contact/viewcontactofvirtobj.hxx                   |    4 
 sd/source/core/CustomAnimationEffect.cxx                           |    3 
 sd/source/ui/animations/motionpathtag.cxx                          |    5 
 svx/inc/sdr/contact/viewcontactofe3d.hxx                           |    4 
 svx/inc/sdr/contact/viewcontactofgraphic.hxx                       |    2 
 svx/inc/sdr/contact/viewcontactofgroup.hxx                         |    2 
 svx/inc/sdr/contact/viewcontactofmasterpagedescriptor.hxx          |    2 
 svx/inc/sdr/contact/viewcontactofpageobj.hxx                       |    4 
 svx/inc/sdr/contact/viewcontactofsdrcaptionobj.hxx                 |    2 
 svx/inc/sdr/contact/viewcontactofsdrcircobj.hxx                    |    2 
 svx/inc/sdr/contact/viewcontactofsdredgeobj.hxx                    |    2 
 svx/inc/sdr/contact/viewcontactofsdrmeasureobj.hxx                 |    2 
 svx/inc/sdr/contact/viewcontactofsdrobjcustomshape.hxx             |    2 
 svx/inc/sdr/contact/viewcontactofsdrole2obj.hxx                    |    7 
 svx/inc/sdr/contact/viewcontactofsdrpage.hxx                       |   20 +-
 svx/inc/sdr/contact/viewcontactofsdrpathobj.hxx                    |    2 
 svx/inc/sdr/contact/viewcontactofsdrrectobj.hxx                    |    4 
 svx/inc/sdr/contact/viewcontactofunocontrol.hxx                    |    2 
 svx/source/engine3d/view3d.cxx                                     |    4 
 svx/source/sdr/contact/viewcontact.cxx                             |   16 -
 svx/source/sdr/contact/viewcontactofe3d.cxx                        |    4 
 svx/source/sdr/contact/viewcontactofe3dscene.cxx                   |    8 
 svx/source/sdr/contact/viewcontactofgraphic.cxx                    |    4 
 svx/source/sdr/contact/viewcontactofgroup.cxx                      |   11 -
 svx/source/sdr/contact/viewcontactofmasterpagedescriptor.cxx       |    7 
 svx/source/sdr/contact/viewcontactofpageobj.cxx                    |    6 
 svx/source/sdr/contact/viewcontactofsdrcaptionobj.cxx              |   14 -
 svx/source/sdr/contact/viewcontactofsdrcircobj.cxx                 |    6 
 svx/source/sdr/contact/viewcontactofsdredgeobj.cxx                 |    4 
 svx/source/sdr/contact/viewcontactofsdrmeasureobj.cxx              |    4 
 svx/source/sdr/contact/viewcontactofsdrmediaobj.cxx                |    4 
 svx/source/sdr/contact/viewcontactofsdrobjcustomshape.cxx          |   11 -
 svx/source/sdr/contact/viewcontactofsdrole2obj.cxx                 |    8 
 svx/source/sdr/contact/viewcontactofsdrpage.cxx                    |   84 
+++-------
 svx/source/sdr/contact/viewcontactofsdrpathobj.cxx                 |    4 
 svx/source/sdr/contact/viewcontactofsdrrectobj.cxx                 |    4 
 svx/source/sdr/contact/viewcontactofunocontrol.cxx                 |    6 
 svx/source/sdr/contact/viewcontactofvirtobj.cxx                    |   10 -
 svx/source/sdr/contact/viewobjectcontact.cxx                       |    5 
 svx/source/sdr/contact/viewobjectcontactofmasterpagedescriptor.cxx |   10 -
 svx/source/sdr/contact/viewobjectcontactofsdrole2obj.cxx           |    2 
 svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx           |    3 
 svx/source/sdr/primitive2d/primitivefactory2d.cxx                  |    9 -
 svx/source/sdr/primitive2d/sdrole2primitive2d.cxx                  |    2 
 svx/source/svdraw/svdcrtv.cxx                                      |    5 
 svx/source/svdraw/svddrgmt.cxx                                     |    8 
 svx/source/svdraw/svdobj.cxx                                       |    9 -
 svx/source/svdraw/svdotxtr.cxx                                     |    3 
 svx/source/svdraw/svdxcgv.cxx                                      |    4 
 svx/source/table/viewcontactoftableobj.cxx                         |    6 
 svx/source/table/viewcontactoftableobj.hxx                         |    2 
 svx/source/unodraw/unoshape.cxx                                    |    4 
 sw/source/core/draw/dcontact.cxx                                   |    2 
 sw/source/core/draw/dflyobj.cxx                                    |   16 -
 57 files changed, 175 insertions(+), 218 deletions(-)

New commits:
commit b739bdaba8064ae8b428cfa1c7c6010d662539a3
Author:     Noel Grandin <[email protected]>
AuthorDate: Fri Dec 3 14:11:06 2021 +0200
Commit:     Noel Grandin <[email protected]>
CommitDate: Sat Dec 4 12:32:06 2021 +0100

    use visitor in getViewIndependentPrimitive2DContainer
    
    to reduce intermediate temporary data creation
    
    Change-Id: I3f13b0e02c1fa374e8d70768ae47c7f6da254462
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/126322
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <[email protected]>

diff --git a/include/svx/sdr/contact/viewcontact.hxx 
b/include/svx/sdr/contact/viewcontact.hxx
index c7119fcd93e2..238d188d6e5b 100644
--- a/include/svx/sdr/contact/viewcontact.hxx
+++ b/include/svx/sdr/contact/viewcontact.hxx
@@ -75,8 +75,8 @@ protected:
     // visualisation method and will also be used for BoundRect computations 
in the long run.
     // This means it's always an error when the default implementation is 
called and thus gets
     // asserted there
-    virtual drawinglayer::primitive2d::Primitive2DContainer
-    createViewIndependentPrimitive2DSequence() const;
+    virtual void createViewIndependentPrimitive2DSequence(
+        drawinglayer::primitive2d::Primitive2DDecompositionVisitor& rVisitor) 
const;
 
     // basic constructor. Since this is a base class only, it shall
     // never be called directly
@@ -118,7 +118,8 @@ public:
 
     // access to the local primitive. This will ensure that the primitive is
     // current in comparing the local one with a fresh created incarnation
-    drawinglayer::primitive2d::Primitive2DContainer 
getViewIndependentPrimitive2DContainer() const;
+    void getViewIndependentPrimitive2DContainer(
+        drawinglayer::primitive2d::Primitive2DDecompositionVisitor& rVisitor) 
const;
 
     // add Gluepoints (if available)
     virtual drawinglayer::primitive2d::Primitive2DContainer
diff --git a/include/svx/sdr/contact/viewcontactofe3dscene.hxx 
b/include/svx/sdr/contact/viewcontactofe3dscene.hxx
index b26e272f91f3..82de5435eef5 100644
--- a/include/svx/sdr/contact/viewcontactofe3dscene.hxx
+++ b/include/svx/sdr/contact/viewcontactofe3dscene.hxx
@@ -83,7 +83,7 @@ private:
 
     // This method is responsible for creating the graphical visualisation data
     // ONLY based on model data
-    virtual drawinglayer::primitive2d::Primitive2DContainer 
createViewIndependentPrimitive2DSequence() const override;
+    virtual void 
createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const override;
 
     // the 3d transformation stack
     drawinglayer::geometry::ViewInformation3D           maViewInformation3D;
diff --git a/include/svx/sdr/contact/viewcontactofsdrmediaobj.hxx 
b/include/svx/sdr/contact/viewcontactofsdrmediaobj.hxx
index 95c2eda21b8f..4490818a005a 100644
--- a/include/svx/sdr/contact/viewcontactofsdrmediaobj.hxx
+++ b/include/svx/sdr/contact/viewcontactofsdrmediaobj.hxx
@@ -64,8 +64,8 @@ private:
 
     // This method is responsible for creating the graphical visualisation data
     // ONLY based on model data
-    virtual drawinglayer::primitive2d::Primitive2DContainer
-    createViewIndependentPrimitive2DSequence() const override;
+    virtual void createViewIndependentPrimitive2DSequence(
+        drawinglayer::primitive2d::Primitive2DDecompositionVisitor& rVisitor) 
const override;
 };
 }
 
diff --git a/include/svx/sdr/contact/viewcontactofvirtobj.hxx 
b/include/svx/sdr/contact/viewcontactofvirtobj.hxx
index 189a93382fc9..3054e63f39b1 100644
--- a/include/svx/sdr/contact/viewcontactofvirtobj.hxx
+++ b/include/svx/sdr/contact/viewcontactofvirtobj.hxx
@@ -44,8 +44,8 @@ public:
 protected:
     // This method is responsible for creating the graphical visualisation data
     // ONLY based on model data
-    virtual drawinglayer::primitive2d::Primitive2DContainer
-    createViewIndependentPrimitive2DSequence() const override;
+    virtual void createViewIndependentPrimitive2DSequence(
+        drawinglayer::primitive2d::Primitive2DDecompositionVisitor& rVisitor) 
const override;
 };
 }
 
diff --git a/sd/source/core/CustomAnimationEffect.cxx 
b/sd/source/core/CustomAnimationEffect.cxx
index ee6317916f23..aaa5f36dcd83 100644
--- a/sd/source/core/CustomAnimationEffect.cxx
+++ b/sd/source/core/CustomAnimationEffect.cxx
@@ -1606,7 +1606,8 @@ void CustomAnimationEffect::updatePathFromSdrPathObj( 
const SdrPathObj& rPathObj
     {
         ::tools::Rectangle aBoundRect(0,0,0,0);
 
-        const drawinglayer::primitive2d::Primitive2DContainer& 
xPrimitives(pObj->GetViewContact().getViewIndependentPrimitive2DContainer());
+        drawinglayer::primitive2d::Primitive2DContainer xPrimitives;
+        
pObj->GetViewContact().getViewIndependentPrimitive2DContainer(xPrimitives);
         const drawinglayer::geometry::ViewInformation2D aViewInformation2D;
         const basegfx::B2DRange 
aRange(xPrimitives.getB2DRange(aViewInformation2D));
 
diff --git a/sd/source/ui/animations/motionpathtag.cxx 
b/sd/source/ui/animations/motionpathtag.cxx
index 72bf2d1620b4..ced68539517b 100644
--- a/sd/source/ui/animations/motionpathtag.cxx
+++ b/sd/source/ui/animations/motionpathtag.cxx
@@ -300,8 +300,9 @@ void SdPathHdl::CreateB2dIAObject()
             if (xManager.is() && mpPathObj)
             {
                 const sdr::contact::ViewContact& rVC = 
mpPathObj->GetViewContact();
-                const drawinglayer::primitive2d::Primitive2DContainer& 
aSequence = rVC.getViewIndependentPrimitive2DContainer();
-                std::unique_ptr<sdr::overlay::OverlayObject> pNew(new 
sdr::overlay::OverlayPrimitive2DSequenceObject(drawinglayer::primitive2d::Primitive2DContainer(aSequence)));
+                drawinglayer::primitive2d::Primitive2DContainer aSequence;
+                rVC.getViewIndependentPrimitive2DContainer(aSequence);
+                std::unique_ptr<sdr::overlay::OverlayObject> pNew(new 
sdr::overlay::OverlayPrimitive2DSequenceObject(std::move(aSequence)));
 
                 // OVERLAYMANAGER
                 insertNewlyCreatedOverlayObjectForSdrHdl(
diff --git a/svx/inc/sdr/contact/viewcontactofe3d.hxx 
b/svx/inc/sdr/contact/viewcontactofe3d.hxx
index 2f24460cd106..553407deb4fb 100644
--- a/svx/inc/sdr/contact/viewcontactofe3d.hxx
+++ b/svx/inc/sdr/contact/viewcontactofe3d.hxx
@@ -74,8 +74,8 @@ protected:
     // This method is responsible for creating the graphical visualisation 
data derived ONLY from
     // the model data. The default implementation will try to create a 3D to 
2D embedding (will work
     // when scene is known) which can then be used for 2D processing 
concerning ranges
-    virtual drawinglayer::primitive2d::Primitive2DContainer
-    createViewIndependentPrimitive2DSequence() const override;
+    virtual void createViewIndependentPrimitive2DSequence(
+        drawinglayer::primitive2d::Primitive2DDecompositionVisitor& rVisitor) 
const override;
 
 public:
     // access to the local primitive without the object's local 3D transform. 
This is e.g. needed
diff --git a/svx/inc/sdr/contact/viewcontactofgraphic.hxx 
b/svx/inc/sdr/contact/viewcontactofgraphic.hxx
index 0c554ec9100a..bf3ecabcd3e6 100644
--- a/svx/inc/sdr/contact/viewcontactofgraphic.hxx
+++ b/svx/inc/sdr/contact/viewcontactofgraphic.hxx
@@ -65,7 +65,7 @@ namespace sdr::contact
         private:
             // This method is responsible for creating the graphical 
visualisation data
             // ONLY based on model data
-            virtual drawinglayer::primitive2d::Primitive2DContainer 
createViewIndependentPrimitive2DSequence() const override;
+            virtual void 
createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const override;
         };
 } // end of namespace sdr::contact
 
diff --git a/svx/inc/sdr/contact/viewcontactofgroup.hxx 
b/svx/inc/sdr/contact/viewcontactofgroup.hxx
index 21900c906f71..de1b4aa7fc88 100644
--- a/svx/inc/sdr/contact/viewcontactofgroup.hxx
+++ b/svx/inc/sdr/contact/viewcontactofgroup.hxx
@@ -47,7 +47,7 @@ namespace sdr::contact
 
             // This method is responsible for creating the graphical 
visualisation data
             // ONLY based on model data
-            virtual drawinglayer::primitive2d::Primitive2DContainer 
createViewIndependentPrimitive2DSequence() const override;
+            virtual void 
createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const override;
         };
 } // end of namespace sdr::contact
 
diff --git a/svx/inc/sdr/contact/viewcontactofmasterpagedescriptor.hxx 
b/svx/inc/sdr/contact/viewcontactofmasterpagedescriptor.hxx
index a807829007f7..9d6f86f09e46 100644
--- a/svx/inc/sdr/contact/viewcontactofmasterpagedescriptor.hxx
+++ b/svx/inc/sdr/contact/viewcontactofmasterpagedescriptor.hxx
@@ -40,7 +40,7 @@ namespace sdr::contact
             virtual ViewObjectContact& 
CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;
 
             // This method is responsible for creating the graphical 
visualisation data
-            virtual drawinglayer::primitive2d::Primitive2DContainer 
createViewIndependentPrimitive2DSequence() const override;
+            virtual void 
createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const override;
 
         public:
             // basic constructor
diff --git a/svx/inc/sdr/contact/viewcontactofpageobj.hxx 
b/svx/inc/sdr/contact/viewcontactofpageobj.hxx
index b32fd7cae7f9..672d42042697 100644
--- a/svx/inc/sdr/contact/viewcontactofpageobj.hxx
+++ b/svx/inc/sdr/contact/viewcontactofpageobj.hxx
@@ -34,8 +34,8 @@ class ViewContactOfPageObj final : public ViewContactOfSdrObj
     CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) 
override;
 
     // create graphical visualisation data
-    virtual drawinglayer::primitive2d::Primitive2DContainer
-    createViewIndependentPrimitive2DSequence() const override;
+    virtual void createViewIndependentPrimitive2DSequence(
+        drawinglayer::primitive2d::Primitive2DDecompositionVisitor& rVisitor) 
const override;
 
 public:
     // basic constructor, used from SdrObject.
diff --git a/svx/inc/sdr/contact/viewcontactofsdrcaptionobj.hxx 
b/svx/inc/sdr/contact/viewcontactofsdrcaptionobj.hxx
index 230c6d4c4b9b..d39758be36fb 100644
--- a/svx/inc/sdr/contact/viewcontactofsdrcaptionobj.hxx
+++ b/svx/inc/sdr/contact/viewcontactofsdrcaptionobj.hxx
@@ -36,7 +36,7 @@ namespace sdr::contact
         private:
             // This method is responsible for creating the graphical 
visualisation data
             // ONLY based on model data
-            virtual drawinglayer::primitive2d::Primitive2DContainer 
createViewIndependentPrimitive2DSequence() const override;
+            virtual void 
createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const override;
         };
 } // end of namespace sdr::contact
 
diff --git a/svx/inc/sdr/contact/viewcontactofsdrcircobj.hxx 
b/svx/inc/sdr/contact/viewcontactofsdrcircobj.hxx
index 1a88e55de13d..281cad956461 100644
--- a/svx/inc/sdr/contact/viewcontactofsdrcircobj.hxx
+++ b/svx/inc/sdr/contact/viewcontactofsdrcircobj.hxx
@@ -42,7 +42,7 @@ namespace sdr::contact
 
             // This method is responsible for creating the graphical 
visualisation data
             // ONLY based on model data
-            virtual drawinglayer::primitive2d::Primitive2DContainer 
createViewIndependentPrimitive2DSequence() const override;
+            virtual void 
createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const override;
         };
 } // end of namespace sdr::contact
 
diff --git a/svx/inc/sdr/contact/viewcontactofsdredgeobj.hxx 
b/svx/inc/sdr/contact/viewcontactofsdredgeobj.hxx
index 1d27161b1be2..24ed402852c6 100644
--- a/svx/inc/sdr/contact/viewcontactofsdredgeobj.hxx
+++ b/svx/inc/sdr/contact/viewcontactofsdredgeobj.hxx
@@ -42,7 +42,7 @@ namespace sdr::contact
 
             // This method is responsible for creating the graphical 
visualisation data
             // ONLY based on model data
-            virtual drawinglayer::primitive2d::Primitive2DContainer 
createViewIndependentPrimitive2DSequence() const override;
+            virtual void 
createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const override;
         };
 } // end of namespace sdr::contact
 
diff --git a/svx/inc/sdr/contact/viewcontactofsdrmeasureobj.hxx 
b/svx/inc/sdr/contact/viewcontactofsdrmeasureobj.hxx
index e74f48dfa92e..6b4d89323493 100644
--- a/svx/inc/sdr/contact/viewcontactofsdrmeasureobj.hxx
+++ b/svx/inc/sdr/contact/viewcontactofsdrmeasureobj.hxx
@@ -42,7 +42,7 @@ namespace sdr::contact
 
             // This method is responsible for creating the graphical 
visualisation data
             // ONLY based on model data
-            virtual drawinglayer::primitive2d::Primitive2DContainer 
createViewIndependentPrimitive2DSequence() const override;
+            virtual void 
createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const override;
         };
 } // end of namespace sdr::contact
 
diff --git a/svx/inc/sdr/contact/viewcontactofsdrobjcustomshape.hxx 
b/svx/inc/sdr/contact/viewcontactofsdrobjcustomshape.hxx
index 196eabf8f4dd..6bdcbb5dfbef 100644
--- a/svx/inc/sdr/contact/viewcontactofsdrobjcustomshape.hxx
+++ b/svx/inc/sdr/contact/viewcontactofsdrobjcustomshape.hxx
@@ -45,7 +45,7 @@ namespace sdr::contact
 
             // This method is responsible for creating the graphical 
visualisation data
             // ONLY based on model data
-            virtual drawinglayer::primitive2d::Primitive2DContainer 
createViewIndependentPrimitive2DSequence() const override;
+            virtual void 
createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const override;
         };
 } // end of namespace sdr::contact
 
diff --git a/svx/inc/sdr/contact/viewcontactofsdrole2obj.hxx 
b/svx/inc/sdr/contact/viewcontactofsdrole2obj.hxx
index f034f02a6da5..d5ca82fbcd3f 100644
--- a/svx/inc/sdr/contact/viewcontactofsdrole2obj.hxx
+++ b/svx/inc/sdr/contact/viewcontactofsdrole2obj.hxx
@@ -51,7 +51,8 @@ public:
     // scaling (e.g. for EmptyPresObj's), the correct graphic and other stuff. 
It is used from
     // createViewIndependentPrimitive2DSequence with false, and with evtl. 
HighContrast true
     // from the VOC which knows that
-    drawinglayer::primitive2d::Primitive2DContainer 
createPrimitive2DSequenceWithParameters() const;
+    void createPrimitive2DSequenceWithParameters(
+        drawinglayer::primitive2d::Primitive2DDecompositionVisitor& rVisitor) 
const;
 
     virtual basegfx::B2DRange
     getRange(const drawinglayer::geometry::ViewInformation2D& rViewInfo2D) 
const override;
@@ -59,8 +60,8 @@ public:
 private:
     // This method is responsible for creating the graphical visualisation data
     // ONLY based on model data, just wraps to call 
createPrimitive2DSequenceWithParameters(false)
-    virtual drawinglayer::primitive2d::Primitive2DContainer
-    createViewIndependentPrimitive2DSequence() const override;
+    virtual void createViewIndependentPrimitive2DSequence(
+        drawinglayer::primitive2d::Primitive2DDecompositionVisitor& rVisitor) 
const override;
 };
 }
 
diff --git a/svx/inc/sdr/contact/viewcontactofsdrpage.hxx 
b/svx/inc/sdr/contact/viewcontactofsdrpage.hxx
index 59e49b5f2a62..98d6f577e86e 100644
--- a/svx/inc/sdr/contact/viewcontactofsdrpage.hxx
+++ b/svx/inc/sdr/contact/viewcontactofsdrpage.hxx
@@ -44,7 +44,7 @@ public:
 class ViewContactOfPageBackground final : public ViewContactOfPageSubObject
 {
     virtual ViewObjectContact& 
CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;
-    virtual drawinglayer::primitive2d::Primitive2DContainer 
createViewIndependentPrimitive2DSequence() const override;
+    virtual void 
createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const override;
 
 public:
     explicit ViewContactOfPageBackground(ViewContactOfSdrPage& 
rParentViewContactOfSdrPage);
@@ -54,7 +54,7 @@ public:
 class ViewContactOfPageShadow final : public ViewContactOfPageSubObject
 {
     virtual ViewObjectContact& 
CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;
-    virtual drawinglayer::primitive2d::Primitive2DContainer 
createViewIndependentPrimitive2DSequence() const override;
+    virtual void 
createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const override;
 
 public:
     explicit ViewContactOfPageShadow(ViewContactOfSdrPage& 
rParentViewContactOfSdrPage);
@@ -64,7 +64,7 @@ public:
 class ViewContactOfPageFill final : public ViewContactOfPageSubObject
 {
     virtual ViewObjectContact& 
CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;
-    virtual drawinglayer::primitive2d::Primitive2DContainer 
createViewIndependentPrimitive2DSequence() const override;
+    virtual void 
createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const override;
 
 public:
     explicit ViewContactOfPageFill(ViewContactOfSdrPage& 
rParentViewContactOfSdrPage);
@@ -74,7 +74,7 @@ public:
 class ViewContactOfMasterPage final : public ViewContactOfPageSubObject
 {
     virtual ViewObjectContact& 
CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;
-    virtual drawinglayer::primitive2d::Primitive2DContainer 
createViewIndependentPrimitive2DSequence() const override;
+    virtual void 
createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const override;
 
 public:
     explicit ViewContactOfMasterPage(ViewContactOfSdrPage& 
rParentViewContactOfSdrPage);
@@ -84,7 +84,7 @@ public:
 class ViewContactOfOuterPageBorder final : public ViewContactOfPageSubObject
 {
     virtual ViewObjectContact& 
CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;
-    virtual drawinglayer::primitive2d::Primitive2DContainer 
createViewIndependentPrimitive2DSequence() const override;
+    virtual void 
createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const override;
 
 public:
     explicit ViewContactOfOuterPageBorder(ViewContactOfSdrPage& 
rParentViewContactOfSdrPage);
@@ -94,7 +94,7 @@ public:
 class ViewContactOfInnerPageBorder final : public ViewContactOfPageSubObject
 {
     virtual ViewObjectContact& 
CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;
-    virtual drawinglayer::primitive2d::Primitive2DContainer 
createViewIndependentPrimitive2DSequence() const override;
+    virtual void 
createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const override;
 
 public:
     explicit ViewContactOfInnerPageBorder(ViewContactOfSdrPage& 
rParentViewContactOfSdrPage);
@@ -111,7 +111,7 @@ public:
 class ViewContactOfPageHierarchy final : public ViewContactOfPageSubObject
 {
     virtual ViewObjectContact& 
CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;
-    virtual drawinglayer::primitive2d::Primitive2DContainer 
createViewIndependentPrimitive2DSequence() const override;
+    virtual void 
createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const override;
 
 public:
     explicit ViewContactOfPageHierarchy(ViewContactOfSdrPage& 
rParentViewContactOfSdrPage);
@@ -126,7 +126,7 @@ class ViewContactOfGrid final : public 
ViewContactOfPageSubObject
     bool                                        mbFront : 1;
 
     virtual ViewObjectContact& 
CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;
-    virtual drawinglayer::primitive2d::Primitive2DContainer 
createViewIndependentPrimitive2DSequence() const override;
+    virtual void 
createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const override;
 
 public:
     ViewContactOfGrid(ViewContactOfSdrPage& rParentViewContactOfSdrPage, bool 
bFront);
@@ -140,7 +140,7 @@ class ViewContactOfHelplines final : public 
ViewContactOfPageSubObject
     bool                                        mbFront : 1;
 
     virtual ViewObjectContact& 
CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;
-    virtual drawinglayer::primitive2d::Primitive2DContainer 
createViewIndependentPrimitive2DSequence() const override;
+    virtual void 
createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const override;
 
 public:
     ViewContactOfHelplines(ViewContactOfSdrPage& rParentViewContactOfSdrPage, 
bool bFront);
@@ -194,7 +194,7 @@ public:
 private:
     // This method is responsible for creating the graphical visualisation data
     // ONLY based on model data
-    virtual drawinglayer::primitive2d::Primitive2DContainer 
createViewIndependentPrimitive2DSequence() const override;
+    virtual void 
createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const override;
 };
 
 }
diff --git a/svx/inc/sdr/contact/viewcontactofsdrpathobj.hxx 
b/svx/inc/sdr/contact/viewcontactofsdrpathobj.hxx
index c3f71af08e15..bc4063a42e0a 100644
--- a/svx/inc/sdr/contact/viewcontactofsdrpathobj.hxx
+++ b/svx/inc/sdr/contact/viewcontactofsdrpathobj.hxx
@@ -42,7 +42,7 @@ namespace sdr::contact
 
             // This method is responsible for creating the graphical 
visualisation data
             // ONLY based on model data
-            virtual drawinglayer::primitive2d::Primitive2DContainer 
createViewIndependentPrimitive2DSequence() const override;
+            virtual void 
createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const override;
         };
 } // end of namespace sdr::contact
 
diff --git a/svx/inc/sdr/contact/viewcontactofsdrrectobj.hxx 
b/svx/inc/sdr/contact/viewcontactofsdrrectobj.hxx
index 3477ce4f8f87..6971f8f0cadc 100644
--- a/svx/inc/sdr/contact/viewcontactofsdrrectobj.hxx
+++ b/svx/inc/sdr/contact/viewcontactofsdrrectobj.hxx
@@ -38,8 +38,8 @@ public:
 protected:
     // This method is responsible for creating the graphical visualisation data
     // ONLY based on model data
-    virtual drawinglayer::primitive2d::Primitive2DContainer
-    createViewIndependentPrimitive2DSequence() const override;
+    virtual void createViewIndependentPrimitive2DSequence(
+        drawinglayer::primitive2d::Primitive2DDecompositionVisitor& rVisitor) 
const override;
 };
 }
 
diff --git a/svx/inc/sdr/contact/viewcontactofunocontrol.hxx 
b/svx/inc/sdr/contact/viewcontactofunocontrol.hxx
index 8d16362aa092..04cdf7c07ba8 100644
--- a/svx/inc/sdr/contact/viewcontactofunocontrol.hxx
+++ b/svx/inc/sdr/contact/viewcontactofunocontrol.hxx
@@ -65,7 +65,7 @@ namespace sdr::contact {
 
         // This method is responsible for creating the graphical visualisation 
data
         // ONLY based on model data
-        virtual drawinglayer::primitive2d::Primitive2DContainer 
createViewIndependentPrimitive2DSequence() const override;
+        virtual void 
createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const override;
     };
 
 
diff --git a/svx/source/engine3d/view3d.cxx b/svx/source/engine3d/view3d.cxx
index 8f339f5b747e..e5caf53556c7 100644
--- a/svx/source/engine3d/view3d.cxx
+++ b/svx/source/engine3d/view3d.cxx
@@ -107,9 +107,7 @@ 
Impl3DMirrorConstructOverlay::Impl3DMirrorConstructOverlay(const E3dView& rView)
                 {
                     // use the view-independent primitive representation 
(without
                     // evtl. GridOffset, that may be applied to the DragEntry 
individually)
-                    const drawinglayer::primitive2d::Primitive2DContainer& 
aNewSequence(
-                        
pObject->GetViewContact().getViewIndependentPrimitive2DContainer());
-                    maFullOverlay.append(aNewSequence);
+                    
pObject->GetViewContact().getViewIndependentPrimitive2DContainer(maFullOverlay);
                 }
             }
         }
diff --git a/svx/source/sdr/contact/viewcontact.cxx 
b/svx/source/sdr/contact/viewcontact.cxx
index c6b85b5aa7b9..3c1c875acba3 100644
--- a/svx/source/sdr/contact/viewcontact.cxx
+++ b/svx/source/sdr/contact/viewcontact.cxx
@@ -201,8 +201,8 @@ SdrObject* ViewContact::TryToGetSdrObject() const { return 
nullptr; }
 
 // primitive stuff
 
-drawinglayer::primitive2d::Primitive2DContainer
-ViewContact::createViewIndependentPrimitive2DSequence() const
+void ViewContact::createViewIndependentPrimitive2DSequence(
+    drawinglayer::primitive2d::Primitive2DDecompositionVisitor& rVisitor) const
 {
     // This is the default implementation and should never be called (see 
header). If this is called,
     // someone implemented a ViewContact (VC) visualisation object without 
defining the visualisation by
@@ -217,14 +217,14 @@ ViewContact::createViewIndependentPrimitive2DSequence() 
const
     const drawinglayer::primitive2d::Primitive2DReference xReference(
         new drawinglayer::primitive2d::PolygonHairlinePrimitive2D(aOutline, 
aYellow));
 
-    return drawinglayer::primitive2d::Primitive2DContainer{ xReference };
+    rVisitor.visit(xReference);
 }
 
-drawinglayer::primitive2d::Primitive2DContainer
-ViewContact::getViewIndependentPrimitive2DContainer() const
+void ViewContact::getViewIndependentPrimitive2DContainer(
+    drawinglayer::primitive2d::Primitive2DDecompositionVisitor& rVisitor) const
 {
-    drawinglayer::primitive2d::Primitive2DContainer xNew(
-        createViewIndependentPrimitive2DSequence());
+    drawinglayer::primitive2d::Primitive2DContainer xNew;
+    createViewIndependentPrimitive2DSequence(xNew);
 
     if (!xNew.empty())
     {
@@ -232,7 +232,7 @@ ViewContact::getViewIndependentPrimitive2DContainer() const
         xNew = embedToObjectSpecificInformation(std::move(xNew));
     }
 
-    return xNew;
+    rVisitor.visit(xNew);
 }
 
 // add Gluepoints (if available)
diff --git a/svx/source/sdr/contact/viewcontactofe3d.cxx 
b/svx/source/sdr/contact/viewcontactofe3d.cxx
index 809c99d22788..a504038cece0 100644
--- a/svx/source/sdr/contact/viewcontactofe3d.cxx
+++ b/svx/source/sdr/contact/viewcontactofe3d.cxx
@@ -174,12 +174,12 @@ drawinglayer::primitive3d::Primitive3DContainer 
ViewContactOfE3d::getViewIndepen
     return xRetval;
 }
 
-drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfE3d::createViewIndependentPrimitive2DSequence() const
+void 
ViewContactOfE3d::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const
 {
     // also need to create a 2D embedding when the view-independent part is 
requested,
     // see view-dependent part in 
ViewObjectContactOfE3d::createPrimitive2DSequence
     // get 3d primitive vector, isPrimitiveVisible() is done in 3d creator
-    return 
impCreateWithGivenPrimitive3DContainer(getViewIndependentPrimitive3DContainer());
+    return 
rVisitor.visit(impCreateWithGivenPrimitive3DContainer(getViewIndependentPrimitive3DContainer()));
 }
 
 ViewObjectContact& 
ViewContactOfE3d::CreateObjectSpecificViewObjectContact(ObjectContact& 
rObjectContact)
diff --git a/svx/source/sdr/contact/viewcontactofe3dscene.cxx 
b/svx/source/sdr/contact/viewcontactofe3dscene.cxx
index 8b8823b520ae..6bae552631d5 100644
--- a/svx/source/sdr/contact/viewcontactofe3dscene.cxx
+++ b/svx/source/sdr/contact/viewcontactofe3dscene.cxx
@@ -320,17 +320,13 @@ drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfE3dScene::createSce
     return xRetval;
 }
 
-drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfE3dScene::createViewIndependentPrimitive2DSequence() const
+void 
ViewContactOfE3dScene::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const
 {
-    drawinglayer::primitive2d::Primitive2DContainer xRetval;
-
     if(GetObjectCount())
     {
         // create a default ScenePrimitive2D (without visibility test of 
members)
-        xRetval = createScenePrimitive2DSequence(nullptr);
+        rVisitor.visit(createScenePrimitive2DSequence(nullptr));
     }
-
-    return xRetval;
 }
 
 void ViewContactOfE3dScene::ActionChanged()
diff --git a/svx/source/sdr/contact/viewcontactofgraphic.cxx 
b/svx/source/sdr/contact/viewcontactofgraphic.cxx
index 8e284f7ae79d..8639bf8aa085 100644
--- a/svx/source/sdr/contact/viewcontactofgraphic.cxx
+++ b/svx/source/sdr/contact/viewcontactofgraphic.cxx
@@ -281,7 +281,7 @@ namespace sdr::contact
             return xRetval;
         }
 
-        drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfGraphic::createViewIndependentPrimitive2DSequence() const
+        void 
ViewContactOfGraphic::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const
         {
             drawinglayer::primitive2d::Primitive2DContainer xRetval;
             const SfxItemSet& rItemSet = GetGrafObject().GetMergedItemSet();
@@ -386,7 +386,7 @@ namespace sdr::contact
                 drawinglayer::primitive2d::createHiddenGeometryPrimitives2D(
                     aObjectMatrix));
 
-            return xRetval;
+            rVisitor.visit(std::move(xRetval));
         }
 
         bool ViewContactOfGraphic::visualisationUsesPresObj() const
diff --git a/svx/source/sdr/contact/viewcontactofgroup.cxx 
b/svx/source/sdr/contact/viewcontactofgroup.cxx
index 6a98565c0cd6..18e5e07aa27f 100644
--- a/svx/source/sdr/contact/viewcontactofgroup.cxx
+++ b/svx/source/sdr/contact/viewcontactofgroup.cxx
@@ -47,9 +47,8 @@ namespace sdr::contact
         {
         }
 
-        drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfGroup::createViewIndependentPrimitive2DSequence() const
+        void 
ViewContactOfGroup::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const
         {
-            drawinglayer::primitive2d::Primitive2DContainer xRetval;
             const sal_uInt32 nObjectCount(GetObjectCount());
 
             if(nObjectCount)
@@ -58,9 +57,7 @@ namespace sdr::contact
                 for(sal_uInt32 a(0); a < nObjectCount; a++)
                 {
                     const ViewContact& rCandidate(GetViewContact(a));
-                    const drawinglayer::primitive2d::Primitive2DContainer& 
aCandSeq(rCandidate.getViewIndependentPrimitive2DContainer());
-
-                    xRetval.insert(xRetval.end(), aCandSeq.begin(), 
aCandSeq.end());
+                    
rCandidate.getViewIndependentPrimitive2DContainer(rVisitor);
                 }
             }
             else
@@ -72,10 +69,8 @@ namespace sdr::contact
                     
drawinglayer::primitive2d::createHiddenGeometryPrimitives2D(
                         false, aCurrentRange));
 
-                xRetval = drawinglayer::primitive2d::Primitive2DContainer { 
xReference };
+                rVisitor.visit(xReference);
             }
-
-            return xRetval;
         }
 
 } // end of namespace
diff --git a/svx/source/sdr/contact/viewcontactofmasterpagedescriptor.cxx 
b/svx/source/sdr/contact/viewcontactofmasterpagedescriptor.cxx
index c588d0c555f3..20463d0fc2ef 100644
--- a/svx/source/sdr/contact/viewcontactofmasterpagedescriptor.cxx
+++ b/svx/source/sdr/contact/viewcontactofmasterpagedescriptor.cxx
@@ -37,9 +37,8 @@ namespace sdr::contact
             return *(new 
ViewObjectContactOfMasterPageDescriptor(rObjectContact, *this));
         }
 
-        drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfMasterPageDescriptor::createViewIndependentPrimitive2DSequence() 
const
+        void 
ViewContactOfMasterPageDescriptor::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const
         {
-            drawinglayer::primitive2d::Primitive2DContainer xRetval;
             drawinglayer::attribute::SdrFillAttribute aFill;
             const SdrPageProperties* pCorrectProperties = 
GetMasterPageDescriptor().getCorrectSdrPageProperties();
 
@@ -69,10 +68,8 @@ namespace sdr::contact
                         aFill,
                         drawinglayer::attribute::FillGradientAttribute()));
 
-                xRetval = drawinglayer::primitive2d::Primitive2DContainer{ 
xReference };
+                rVisitor.visit(xReference);
             }
-
-            return xRetval;
         }
 
         // basic constructor
diff --git a/svx/source/sdr/contact/viewcontactofpageobj.cxx 
b/svx/source/sdr/contact/viewcontactofpageobj.cxx
index bc2fb7c1e836..8d4fdbaf4f19 100644
--- a/svx/source/sdr/contact/viewcontactofpageobj.cxx
+++ b/svx/source/sdr/contact/viewcontactofpageobj.cxx
@@ -59,8 +59,8 @@ void ViewContactOfPageObj::ActionChanged()
     }
 }
 
-drawinglayer::primitive2d::Primitive2DContainer
-ViewContactOfPageObj::createViewIndependentPrimitive2DSequence() const
+void ViewContactOfPageObj::createViewIndependentPrimitive2DSequence(
+    drawinglayer::primitive2d::Primitive2DDecompositionVisitor& rVisitor) const
 {
     // create graphical visualisation data. Since this is the view-independent 
version which should not be used,
     // create a replacement graphic visualisation here. Use GetLastBoundRect 
to access the model data directly
@@ -72,7 +72,7 @@ 
ViewContactOfPageObj::createViewIndependentPrimitive2DSequence() const
     const drawinglayer::primitive2d::Primitive2DReference xReference(
         new drawinglayer::primitive2d::PolygonHairlinePrimitive2D(aOutline, 
aYellow));
 
-    return drawinglayer::primitive2d::Primitive2DContainer{ xReference };
+    rVisitor.visit(xReference);
 }
 }
 
diff --git a/svx/source/sdr/contact/viewcontactofsdrcaptionobj.cxx 
b/svx/source/sdr/contact/viewcontactofsdrcaptionobj.cxx
index 44eea3a13fd4..2e668b4dd579 100644
--- a/svx/source/sdr/contact/viewcontactofsdrcaptionobj.cxx
+++ b/svx/source/sdr/contact/viewcontactofsdrcaptionobj.cxx
@@ -54,9 +54,8 @@ namespace sdr::contact
         {
         }
 
-        drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfSdrCaptionObj::createViewIndependentPrimitive2DSequence() const
+        void 
ViewContactOfSdrCaptionObj::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const
         {
-            drawinglayer::primitive2d::Primitive2DContainer xRetval;
             const SdrCaptionObj& rCaptionObj(static_cast<const 
SdrCaptionObj&>(GetSdrObject()));
             const SfxItemSet& rItemSet = rCaptionObj.GetMergedItemSet();
             const drawinglayer::attribute::SdrLineFillEffectsTextAttribute 
aAttribute(
@@ -86,7 +85,7 @@ namespace sdr::contact
 
             // create primitive. Always create one (even if invisible) to let 
the decomposition
             // of SdrCaptionPrimitive2D create needed invisible elements for 
HitTest and BoundRect
-            const drawinglayer::primitive2d::Primitive2DReference xReference(
+            drawinglayer::primitive2d::Primitive2DReference xReference(
                 new drawinglayer::primitive2d::SdrCaptionPrimitive2D(
                     aObjectMatrix,
                     aAttribute,
@@ -94,8 +93,6 @@ namespace sdr::contact
                     fCornerRadiusX,
                     fCornerRadiusY));
 
-            xRetval = drawinglayer::primitive2d::Primitive2DContainer { 
xReference };
-
             if(!aAttribute.isDefault() && 
rCaptionObj.GetSpecialTextBoxShadow())
             {
                 // for SC, the caption object may have a specialized shadow. 
The usual object shadow is off
@@ -181,14 +178,11 @@ namespace sdr::contact
                 {
                     // if we really got a special shadow, create a two-element 
retval with the shadow
                     // behind the standard object's geometry
-                    xRetval.resize(2);
-
-                    xRetval[0] = xSpecialShadow;
-                    xRetval[1] = xReference;
+                    rVisitor.visit(std::move(xSpecialShadow));
                 }
             }
 
-            return xRetval;
+            rVisitor.visit(std::move(xReference));
         }
 
 } // end of namespace
diff --git a/svx/source/sdr/contact/viewcontactofsdrcircobj.cxx 
b/svx/source/sdr/contact/viewcontactofsdrcircobj.cxx
index e150a6be7377..c05905cbfc20 100644
--- a/svx/source/sdr/contact/viewcontactofsdrcircobj.cxx
+++ b/svx/source/sdr/contact/viewcontactofsdrcircobj.cxx
@@ -39,7 +39,7 @@ namespace sdr::contact
         {
         }
 
-        drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfSdrCircObj::createViewIndependentPrimitive2DSequence() const
+        void 
ViewContactOfSdrCircObj::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const
         {
             const SfxItemSet& rItemSet = GetCircObj().GetMergedItemSet();
             const drawinglayer::attribute::SdrLineFillEffectsTextAttribute 
aAttribute(
@@ -73,7 +73,7 @@ namespace sdr::contact
                         aObjectMatrix,
                         aAttribute));
 
-                return drawinglayer::primitive2d::Primitive2DContainer { 
xReference };
+                rVisitor.visit(xReference);
             }
             else
             {
@@ -93,7 +93,7 @@ namespace sdr::contact
                         bCloseSegment,
                         bCloseUsingCenter));
 
-                return drawinglayer::primitive2d::Primitive2DContainer { 
xReference };
+                rVisitor.visit(xReference);
             }
         }
 
diff --git a/svx/source/sdr/contact/viewcontactofsdredgeobj.cxx 
b/svx/source/sdr/contact/viewcontactofsdredgeobj.cxx
index e27bf663f0a8..347eaae33f00 100644
--- a/svx/source/sdr/contact/viewcontactofsdredgeobj.cxx
+++ b/svx/source/sdr/contact/viewcontactofsdredgeobj.cxx
@@ -35,7 +35,7 @@ namespace sdr::contact
         {
         }
 
-        drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfSdrEdgeObj::createViewIndependentPrimitive2DSequence() const
+        void 
ViewContactOfSdrEdgeObj::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const
         {
             const basegfx::B2DPolygon aEdgeTrack(GetEdgeObj().getEdgeTrack());
 
@@ -57,7 +57,7 @@ namespace sdr::contact
                     aAttribute,
                     aEdgeTrack));
 
-            return drawinglayer::primitive2d::Primitive2DContainer { 
xReference };
+            rVisitor.visit(xReference);
         }
 
 } // end of namespace
diff --git a/svx/source/sdr/contact/viewcontactofsdrmeasureobj.cxx 
b/svx/source/sdr/contact/viewcontactofsdrmeasureobj.cxx
index 4676a6b72768..eb04efd715c8 100644
--- a/svx/source/sdr/contact/viewcontactofsdrmeasureobj.cxx
+++ b/svx/source/sdr/contact/viewcontactofsdrmeasureobj.cxx
@@ -41,7 +41,7 @@ namespace sdr::contact
         {
         }
 
-        drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfSdrMeasureObj::createViewIndependentPrimitive2DSequence() const
+        void 
ViewContactOfSdrMeasureObj::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const
         {
             const SfxItemSet& rItemSet = GetMeasureObj().GetMergedItemSet();
             const drawinglayer::attribute::SdrLineEffectsTextAttribute 
aAttribute(
@@ -120,7 +120,7 @@ namespace sdr::contact
                     fLeftDelta, fRightDelta, bBelow,
                     bTextRotation, bTextAutoAngle));
 
-            return drawinglayer::primitive2d::Primitive2DContainer { 
xReference };
+            rVisitor.visit(xReference);
         }
 } // end of namespace
 
diff --git a/svx/source/sdr/contact/viewcontactofsdrmediaobj.cxx 
b/svx/source/sdr/contact/viewcontactofsdrmediaobj.cxx
index f836d4329f56..7c713bc4b7b9 100644
--- a/svx/source/sdr/contact/viewcontactofsdrmediaobj.cxx
+++ b/svx/source/sdr/contact/viewcontactofsdrmediaobj.cxx
@@ -96,7 +96,7 @@ void ViewContactOfSdrMediaObj::mediaPropertiesChanged( const 
::avmedia::MediaIte
     static_cast< SdrMediaObj& 
>(GetSdrObject()).mediaPropertiesChanged(rNewState);
 }
 
-drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfSdrMediaObj::createViewIndependentPrimitive2DSequence() const
+void 
ViewContactOfSdrMediaObj::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const
 {
     // create range using the model data directly. This is in 
SdrTextObj::aRect which i will access using
     // GetGeoRect() to not trigger any calculations. It's the unrotated 
geometry which is okay for MediaObjects ATM.
@@ -121,7 +121,7 @@ drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfSdrMediaObj::create
             aTransform, rURL, aBackgroundColor, nPixelBorder,
             GetSdrMediaObj().getSnapshot()));
 
-    return drawinglayer::primitive2d::Primitive2DContainer { xRetval };
+    rVisitor.visit(xRetval);
 }
 
 }
diff --git a/svx/source/sdr/contact/viewcontactofsdrobjcustomshape.cxx 
b/svx/source/sdr/contact/viewcontactofsdrobjcustomshape.cxx
index 879f36971f85..e03dfced85ea 100644
--- a/svx/source/sdr/contact/viewcontactofsdrobjcustomshape.cxx
+++ b/svx/source/sdr/contact/viewcontactofsdrobjcustomshape.cxx
@@ -102,9 +102,8 @@ namespace sdr::contact
             return aTextRange;
         }
 
-        drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfSdrObjCustomShape::createViewIndependentPrimitive2DSequence() const
+        void 
ViewContactOfSdrObjCustomShape::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const
         {
-            drawinglayer::primitive2d::Primitive2DContainer xRetval;
             const SfxItemSet& rItemSet = 
GetCustomShapeObj().GetMergedItemSet();
 
             // #i98072# Get shadow and text; eventually suppress the text if 
it's
@@ -138,9 +137,7 @@ namespace sdr::contact
                 // only visible when transparency involved, but 
runtime-expensive).
                 // Thus: Just do not iterate, will check behaviour deeply.
                 b3DShape = (nullptr != dynamic_cast< const E3dObject* 
>(pSdrObjRepresentation));
-                const drawinglayer::primitive2d::Primitive2DContainer& xNew(
-                    
pSdrObjRepresentation->GetViewContact().getViewIndependentPrimitive2DContainer());
-                xGroup.insert(xGroup.end(), xNew.begin(), xNew.end());
+                
pSdrObjRepresentation->GetViewContact().getViewIndependentPrimitive2DContainer(xGroup);
             }
 
             if(bHasText || !xGroup.empty())
@@ -232,10 +229,8 @@ namespace sdr::contact
                         bWordWrap,
                         b3DShape,
                         aObjectMatrix));
-                xRetval = drawinglayer::primitive2d::Primitive2DContainer { 
xReference };
+                rVisitor.visit(xReference);
             }
-
-            return xRetval;
         }
 
 } // end of namespace
diff --git a/svx/source/sdr/contact/viewcontactofsdrole2obj.cxx 
b/svx/source/sdr/contact/viewcontactofsdrole2obj.cxx
index a9ee47a30af3..c1a73278645b 100644
--- a/svx/source/sdr/contact/viewcontactofsdrole2obj.cxx
+++ b/svx/source/sdr/contact/viewcontactofsdrole2obj.cxx
@@ -71,7 +71,7 @@ basegfx::B2DHomMatrix 
ViewContactOfSdrOle2Obj::createObjectTransform() const
         aObjectRange.getMinX(), aObjectRange.getMinY());
 }
 
-drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfSdrOle2Obj::createPrimitive2DSequenceWithParameters() const
+void 
ViewContactOfSdrOle2Obj::createPrimitive2DSequenceWithParameters(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const
 {
     // get object transformation
     const basegfx::B2DHomMatrix aObjectMatrix(createObjectTransform());
@@ -140,7 +140,7 @@ drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfSdrOle2Obj::createP
             aObjectMatrix,
             aAttribute));
 
-    return drawinglayer::primitive2d::Primitive2DContainer { xReference };
+    rVisitor.visit(xReference);
 }
 
 basegfx::B2DRange ViewContactOfSdrOle2Obj::getRange( const 
drawinglayer::geometry::ViewInformation2D& rViewInfo2D ) const
@@ -169,9 +169,9 @@ basegfx::B2DRange ViewContactOfSdrOle2Obj::getRange( const 
drawinglayer::geometr
     return 
drawinglayer::primitive2d::getB2DRangeFromPrimitive2DReference(xReference, 
rViewInfo2D);
 }
 
-drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfSdrOle2Obj::createViewIndependentPrimitive2DSequence() const
+void 
ViewContactOfSdrOle2Obj::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const
 {
-    return createPrimitive2DSequenceWithParameters();
+    createPrimitive2DSequenceWithParameters(rVisitor);
 }
 
 }
diff --git a/svx/source/sdr/contact/viewcontactofsdrpage.cxx 
b/svx/source/sdr/contact/viewcontactofsdrpage.cxx
index ca3ed5f0f82f..49a04b8a49f2 100644
--- a/svx/source/sdr/contact/viewcontactofsdrpage.cxx
+++ b/svx/source/sdr/contact/viewcontactofsdrpage.cxx
@@ -69,7 +69,7 @@ ViewObjectContact& 
ViewContactOfPageBackground::CreateObjectSpecificViewObjectCo
     return *pRetval;
 }
 
-drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfPageBackground::createViewIndependentPrimitive2DSequence() const
+void 
ViewContactOfPageBackground::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const
 {
     // We have only the page information, not the view information. Use the
     // svtools::DOCCOLOR color for initialisation
@@ -79,7 +79,7 @@ drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfPageBackground::cre
     const drawinglayer::primitive2d::Primitive2DReference xReference(
         new drawinglayer::primitive2d::BackgroundColorPrimitive2D(aRGBColor));
 
-    return drawinglayer::primitive2d::Primitive2DContainer { xReference };
+    rVisitor.visit(xReference);
 }
 
 ViewContactOfPageBackground::ViewContactOfPageBackground(ViewContactOfSdrPage& 
rParentViewContactOfSdrPage)
@@ -99,7 +99,7 @@ ViewObjectContact& 
ViewContactOfPageShadow::CreateObjectSpecificViewObjectContac
     return *pRetval;
 }
 
-drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfPageShadow::createViewIndependentPrimitive2DSequence() const
+void 
ViewContactOfPageShadow::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const
 {
     static bool bUseOldPageShadow(false); // loplugin:constvars:ignore
     const SdrPage& rPage = getPage();
@@ -131,7 +131,7 @@ drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfPageShadow::createV
                 basegfx::B2DPolyPolygon(aPageShadowPolygon),
                 aRGBShadowColor));
 
-        return drawinglayer::primitive2d::Primitive2DContainer { xReference };
+        rVisitor.visit(xReference);
     }
     else
     {
@@ -145,10 +145,8 @@ drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfPageShadow::createV
                     aPageMatrix,
                     *aDiscreteShadow.get()));
 
-            return drawinglayer::primitive2d::Primitive2DContainer { 
xReference };
+            rVisitor.visit(xReference);
         }
-
-        return drawinglayer::primitive2d::Primitive2DContainer();
     }
 }
 
@@ -169,10 +167,8 @@ ViewObjectContact& 
ViewContactOfMasterPage::CreateObjectSpecificViewObjectContac
     return *pRetval;
 }
 
-drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfMasterPage::createViewIndependentPrimitive2DSequence() const
+void 
ViewContactOfMasterPage::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const
 {
-    drawinglayer::primitive2d::Primitive2DContainer xRetval;
-
     // this class is used when the page is a MasterPage and is responsible to
     // create a visualisation for the MPBGO, if exists. This needs to be 
suppressed
     // when a SdrPage which uses a MasterPage creates it's output. Suppression
@@ -219,12 +215,10 @@ drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfMasterPage::createV
                         aFill,
                         drawinglayer::attribute::FillGradientAttribute()));
 
-                xRetval = drawinglayer::primitive2d::Primitive2DContainer { 
xReference };
+                rVisitor.visit(xReference);
             }
         }
     }
-
-    return xRetval;
 }
 
 ViewContactOfMasterPage::ViewContactOfMasterPage(ViewContactOfSdrPage& 
rParentViewContactOfSdrPage)
@@ -244,7 +238,7 @@ ViewObjectContact& 
ViewContactOfPageFill::CreateObjectSpecificViewObjectContact(
     return *pRetval;
 }
 
-drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfPageFill::createViewIndependentPrimitive2DSequence() const
+void 
ViewContactOfPageFill::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const
 {
     const SdrPage& rPage = getPage();
     const basegfx::B2DRange aPageFillRange(0.0, 0.0, 
static_cast<double>(rPage.GetWidth()), static_cast<double>(rPage.GetHeight()));
@@ -257,9 +251,7 @@ drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfPageFill::createVie
 
     // create and add primitive
     const basegfx::BColor aRGBColor(aPageFillColor.getBColor());
-    const drawinglayer::primitive2d::Primitive2DReference xReference(new 
drawinglayer::primitive2d::PolyPolygonColorPrimitive2D(basegfx::B2DPolyPolygon(aPageFillPolygon),
 aRGBColor));
-
-    return drawinglayer::primitive2d::Primitive2DContainer { xReference };
+    rVisitor.visit(drawinglayer::primitive2d::Primitive2DReference(new 
drawinglayer::primitive2d::PolyPolygonColorPrimitive2D(basegfx::B2DPolyPolygon(aPageFillPolygon),
 aRGBColor)));
 }
 
 ViewContactOfPageFill::ViewContactOfPageFill(ViewContactOfSdrPage& 
rParentViewContactOfSdrPage)
@@ -279,9 +271,8 @@ ViewObjectContact& 
ViewContactOfOuterPageBorder::CreateObjectSpecificViewObjectC
     return *pRetval;
 }
 
-drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfOuterPageBorder::createViewIndependentPrimitive2DSequence() const
+void 
ViewContactOfOuterPageBorder::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const
 {
-    drawinglayer::primitive2d::Primitive2DContainer xRetval;
     const SdrPage& rPage = getPage();
     const basegfx::B2DRange aPageBorderRange(0.0, 0.0, 
static_cast<double>(rPage.GetWidth()), static_cast<double>(rPage.GetHeight()));
 
@@ -309,18 +300,14 @@ drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfOuterPageBorder::cr
         aRight.append(basegfx::B2DPoint(aPageBorderRange.getMaxX(), 
aPageBorderRange.getMinY()));
         aRight.append(basegfx::B2DPoint(aPageBorderRange.getMaxX(), 
aPageBorderRange.getMaxY()));
 
-        xRetval.resize(2);
-        xRetval[0] = drawinglayer::primitive2d::Primitive2DReference(new 
drawinglayer::primitive2d::PolygonHairlinePrimitive2D(aLeft, aRGBBorderColor));
-        xRetval[1] = drawinglayer::primitive2d::Primitive2DReference(new 
drawinglayer::primitive2d::PolygonHairlinePrimitive2D(aRight, aRGBBorderColor));
+        rVisitor.visit(drawinglayer::primitive2d::Primitive2DReference(new 
drawinglayer::primitive2d::PolygonHairlinePrimitive2D(aLeft, aRGBBorderColor)));
+        rVisitor.visit(drawinglayer::primitive2d::Primitive2DReference(new 
drawinglayer::primitive2d::PolygonHairlinePrimitive2D(aRight, 
aRGBBorderColor)));
     }
     else
     {
-        xRetval.resize(1);
         const basegfx::B2DPolygon 
aPageBorderPolygon(basegfx::utils::createPolygonFromRect(aPageBorderRange));
-        xRetval[0] = drawinglayer::primitive2d::Primitive2DReference(new 
drawinglayer::primitive2d::PolygonHairlinePrimitive2D(aPageBorderPolygon, 
aRGBBorderColor));
+        rVisitor.visit(drawinglayer::primitive2d::Primitive2DReference(new 
drawinglayer::primitive2d::PolygonHairlinePrimitive2D(aPageBorderPolygon, 
aRGBBorderColor)));
     }
-
-    return xRetval;
 }
 
 
ViewContactOfOuterPageBorder::ViewContactOfOuterPageBorder(ViewContactOfSdrPage&
 rParentViewContactOfSdrPage)
@@ -340,7 +327,7 @@ ViewObjectContact& 
ViewContactOfInnerPageBorder::CreateObjectSpecificViewObjectC
     return *pRetval;
 }
 
-drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfInnerPageBorder::createViewIndependentPrimitive2DSequence() const
+void 
ViewContactOfInnerPageBorder::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const
 {
     const SdrPage& rPage = getPage();
     const basegfx::B2DRange aPageBorderRange(
@@ -366,9 +353,7 @@ drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfInnerPageBorder::cr
 
     // create page outer border primitive
     const basegfx::BColor aRGBBorderColor(aBorderColor.getBColor());
-    const drawinglayer::primitive2d::Primitive2DReference xReference(new 
drawinglayer::primitive2d::PolygonHairlinePrimitive2D(aPageBorderPolygon, 
aRGBBorderColor));
-
-    return drawinglayer::primitive2d::Primitive2DContainer { xReference };
+    rVisitor.visit(drawinglayer::primitive2d::Primitive2DReference(new 
drawinglayer::primitive2d::PolygonHairlinePrimitive2D(aPageBorderPolygon, 
aRGBBorderColor)));
 }
 
 
ViewContactOfInnerPageBorder::ViewContactOfInnerPageBorder(ViewContactOfSdrPage&
 rParentViewContactOfSdrPage)
@@ -388,22 +373,17 @@ ViewObjectContact& 
ViewContactOfPageHierarchy::CreateObjectSpecificViewObjectCon
     return *pRetval;
 }
 
-drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfPageHierarchy::createViewIndependentPrimitive2DSequence() const
+void 
ViewContactOfPageHierarchy::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const
 {
     // collect sub-hierarchy
-    drawinglayer::primitive2d::Primitive2DContainer xRetval;
     const sal_uInt32 nObjectCount(GetObjectCount());
 
     // collect all sub-primitives
     for(sal_uInt32 a(0); a < nObjectCount; a++)
     {
         const ViewContact& rCandidate(GetViewContact(a));
-        const drawinglayer::primitive2d::Primitive2DContainer& 
aCandSeq(rCandidate.getViewIndependentPrimitive2DContainer());
-
-        xRetval.insert(xRetval.end(), aCandSeq.begin(), aCandSeq.end());
+        rCandidate.getViewIndependentPrimitive2DContainer(rVisitor);
     }
-
-    return xRetval;
 }
 
 ViewContactOfPageHierarchy::ViewContactOfPageHierarchy(ViewContactOfSdrPage& 
rParentViewContactOfSdrPage)
@@ -435,11 +415,10 @@ ViewObjectContact& 
ViewContactOfGrid::CreateObjectSpecificViewObjectContact(Obje
     return *pRetval;
 }
 
-drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfGrid::createViewIndependentPrimitive2DSequence() const
+void 
ViewContactOfGrid::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&)
 const
 {
     // We have only the page information, not the view information and thus no 
grid settings. Create empty
     // default. For the view-dependent implementation, see 
ViewObjectContactOfPageGrid::createPrimitive2DSequence
-    return drawinglayer::primitive2d::Primitive2DContainer();
 }
 
 ViewContactOfGrid::ViewContactOfGrid(ViewContactOfSdrPage& 
rParentViewContactOfSdrPage, bool bFront)
@@ -460,11 +439,10 @@ ViewObjectContact& 
ViewContactOfHelplines::CreateObjectSpecificViewObjectContact
     return *pRetval;
 }
 
-drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfHelplines::createViewIndependentPrimitive2DSequence() const
+void 
ViewContactOfHelplines::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&)
 const
 {
     // We have only the page information, not the view information and thus no 
helplines. Create empty
     // default. For the view-dependent implementation, see 
ViewObjectContactOfPageHelplines::createPrimitive2DSequence
-    return drawinglayer::primitive2d::Primitive2DContainer();
 }
 
 ViewContactOfHelplines::ViewContactOfHelplines(ViewContactOfSdrPage& 
rParentViewContactOfSdrPage, bool bFront)
@@ -580,31 +558,27 @@ void ViewContactOfSdrPage::ActionChanged()
     maViewContactOfHelplinesFront.ActionChanged();
 }
 
-drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfSdrPage::createViewIndependentPrimitive2DSequence() const
+void 
ViewContactOfSdrPage::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const
 {
-    drawinglayer::primitive2d::Primitive2DContainer xRetval;
-
     // collect all sub-sequences including sub hierarchy.
-    
xRetval.append(maViewContactOfPageBackground.getViewIndependentPrimitive2DContainer());
-    
xRetval.append(maViewContactOfPageShadow.getViewIndependentPrimitive2DContainer());
-    
xRetval.append(maViewContactOfPageFill.getViewIndependentPrimitive2DContainer());
+    
maViewContactOfPageBackground.getViewIndependentPrimitive2DContainer(rVisitor);
+    maViewContactOfPageShadow.getViewIndependentPrimitive2DContainer(rVisitor);
+    maViewContactOfPageFill.getViewIndependentPrimitive2DContainer(rVisitor);
 
     const SdrPage& rPage = GetSdrPage();
 
     if(rPage.TRG_HasMasterPage())
     {
-        xRetval.append(
-            
rPage.TRG_GetMasterPageDescriptorViewContact().getViewIndependentPrimitive2DContainer());
+        
rPage.TRG_GetMasterPageDescriptorViewContact().getViewIndependentPrimitive2DContainer(rVisitor);
     }
     else if(rPage.IsMasterPage())
     {
-        xRetval.append(
-            
maViewContactOfMasterPage.getViewIndependentPrimitive2DContainer());
+        
maViewContactOfMasterPage.getViewIndependentPrimitive2DContainer(rVisitor);
     }
 
-    
xRetval.append(maViewContactOfOuterPageBorder.getViewIndependentPrimitive2DContainer());
-    
xRetval.append(maViewContactOfInnerPageBorder.getViewIndependentPrimitive2DContainer());
-    
xRetval.append(maViewContactOfPageHierarchy.getViewIndependentPrimitive2DContainer());
+    
maViewContactOfOuterPageBorder.getViewIndependentPrimitive2DContainer(rVisitor);
+    
maViewContactOfInnerPageBorder.getViewIndependentPrimitive2DContainer(rVisitor);
+    
maViewContactOfPageHierarchy.getViewIndependentPrimitive2DContainer(rVisitor);
 
     // Only add front versions of grid and helplines since no visibility test 
is done,
     // so adding the back incarnations is not necessary. This makes the Front
@@ -617,8 +591,6 @@ drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfSdrPage::createView
 
     // 
drawinglayer::primitive2d::appendPrimitive2DSequenceToPrimitive2DSequence(xRetval,
 maViewContactOfGridFront.getViewIndependentPrimitive2DContainer());
     // 
drawinglayer::primitive2d::appendPrimitive2DSequenceToPrimitive2DSequence(xRetval,
 maViewContactOfHelplinesFront.getViewIndependentPrimitive2DContainer());
-
-    return xRetval;
 }
 
 }
diff --git a/svx/source/sdr/contact/viewcontactofsdrpathobj.cxx 
b/svx/source/sdr/contact/viewcontactofsdrpathobj.cxx
index b326fd8af787..d0635f005716 100644
--- a/svx/source/sdr/contact/viewcontactofsdrpathobj.cxx
+++ b/svx/source/sdr/contact/viewcontactofsdrpathobj.cxx
@@ -66,7 +66,7 @@ namespace sdr::contact
             return nPolyCount;
         }
 
-        drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfSdrPathObj::createViewIndependentPrimitive2DSequence() const
+        void 
ViewContactOfSdrPathObj::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const
         {
             const SfxItemSet& rItemSet = GetPathObj().GetMergedItemSet();
             const drawinglayer::attribute::SdrLineFillEffectsTextAttribute 
aAttribute(
@@ -198,7 +198,7 @@ namespace sdr::contact
                     aUnitPolyPolygon,
                     aUnitDefinitionPolyPolygon));
 
-            return drawinglayer::primitive2d::Primitive2DContainer { 
xReference };
+            rVisitor.visit(xReference);
         }
 
 } // end of namespace
diff --git a/svx/source/sdr/contact/viewcontactofsdrrectobj.cxx 
b/svx/source/sdr/contact/viewcontactofsdrrectobj.cxx
index a8f1c3aeb125..6d9ed7bed023 100644
--- a/svx/source/sdr/contact/viewcontactofsdrrectobj.cxx
+++ b/svx/source/sdr/contact/viewcontactofsdrrectobj.cxx
@@ -38,7 +38,7 @@ ViewContactOfSdrRectObj::~ViewContactOfSdrRectObj()
 {
 }
 
-drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfSdrRectObj::createViewIndependentPrimitive2DSequence() const
+void 
ViewContactOfSdrRectObj::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const
 {
     const SfxItemSet& rItemSet = GetRectObj().GetMergedItemSet();
     const drawinglayer::attribute::SdrLineFillEffectsTextAttribute aAttribute(
@@ -80,7 +80,7 @@ drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfSdrRectObj::createV
             // #i105856# use fill for HitTest when TextFrame and not 
PickThrough
             GetRectObj().IsTextFrame() && !bPickThroughTransparentTextFrames));
 
-    return drawinglayer::primitive2d::Primitive2DContainer{ xReference };
+    rVisitor.visit(xReference);
 }
 
 }
diff --git a/svx/source/sdr/contact/viewcontactofunocontrol.cxx 
b/svx/source/sdr/contact/viewcontactofunocontrol.cxx
index 899593be3b69..7db0d6afd14e 100644
--- a/svx/source/sdr/contact/viewcontactofunocontrol.cxx
+++ b/svx/source/sdr/contact/viewcontactofunocontrol.cxx
@@ -86,7 +86,7 @@ namespace sdr::contact {
     }
 
 
-    drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfUnoControl::createViewIndependentPrimitive2DSequence() const
+    void 
ViewContactOfUnoControl::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const
     {
         // create range. Use model data directly, not 
getBoundRect()/getSnapRect; these will use
         // the primitive data themselves in the long run. Use SdrUnoObj's 
(which is a SdrRectObj)
@@ -112,7 +112,7 @@ namespace sdr::contact {
                     aTransform,
                     xControlModel));
 
-            return drawinglayer::primitive2d::Primitive2DContainer { xRetval };
+            rVisitor.visit(xRetval);
         }
         else
         {
@@ -121,7 +121,7 @@ namespace sdr::contact {
                 drawinglayer::primitive2d::createHiddenGeometryPrimitives2D(
                     aTransform));
 
-            return drawinglayer::primitive2d::Primitive2DContainer { xRetval };
+            rVisitor.visit(xRetval);
         }
     }
 
diff --git a/svx/source/sdr/contact/viewcontactofvirtobj.cxx 
b/svx/source/sdr/contact/viewcontactofvirtobj.cxx
index dcf10bd1daed..f4087d036b5c 100644
--- a/svx/source/sdr/contact/viewcontactofvirtobj.cxx
+++ b/svx/source/sdr/contact/viewcontactofvirtobj.cxx
@@ -57,7 +57,7 @@ sal_uInt32 ViewContactOfVirtObj::GetObjectCount() const
     return 0;
 }
 
-drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfVirtObj::createViewIndependentPrimitive2DSequence() const
+void 
ViewContactOfVirtObj::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const
 {
     // create displacement transformation if we have content
     basegfx::B2DHomMatrix aObjectMatrix;
@@ -70,8 +70,8 @@ drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfVirtObj::createView
     }
 
     // use method from referenced object to get the Primitive2DContainer
-    const drawinglayer::primitive2d::Primitive2DContainer& xSequenceVirtual(
-        
GetVirtObj().GetReferencedObj().GetViewContact().getViewIndependentPrimitive2DContainer());
+    drawinglayer::primitive2d::Primitive2DContainer xSequenceVirtual;
+    
GetVirtObj().GetReferencedObj().GetViewContact().getViewIndependentPrimitive2DContainer(xSequenceVirtual);
 
     if(!xSequenceVirtual.empty())
     {
@@ -81,7 +81,7 @@ drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfVirtObj::createView
                 aObjectMatrix,
                 
drawinglayer::primitive2d::Primitive2DContainer(xSequenceVirtual)));
 
-        return drawinglayer::primitive2d::Primitive2DContainer { xReference };
+        rVisitor.visit(xReference);
     }
     else
     {
@@ -90,7 +90,7 @@ drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfVirtObj::createView
             drawinglayer::primitive2d::createHiddenGeometryPrimitives2D(
                 aObjectMatrix));
 
-        return drawinglayer::primitive2d::Primitive2DContainer { xReference };
+        rVisitor.visit(xReference);
     }
 }
 
diff --git a/svx/source/sdr/contact/viewobjectcontact.cxx 
b/svx/source/sdr/contact/viewobjectcontact.cxx
index 5b0644c0b6c9..d6dae7b3d119 100644
--- a/svx/source/sdr/contact/viewobjectcontact.cxx
+++ b/svx/source/sdr/contact/viewobjectcontact.cxx
@@ -292,7 +292,8 @@ void ViewObjectContact::checkForPrimitive2DAnimations(const 
drawinglayer::primit
 drawinglayer::primitive2d::Primitive2DContainer 
ViewObjectContact::createPrimitive2DSequence(const DisplayInfo& rDisplayInfo) 
const
 {
     // get the view-independent Primitive from the viewContact
-    drawinglayer::primitive2d::Primitive2DContainer 
xRetval(GetViewContact().getViewIndependentPrimitive2DContainer());
+    drawinglayer::primitive2d::Primitive2DContainer xRetval;
+    GetViewContact().getViewIndependentPrimitive2DContainer(xRetval);
 
     if(!xRetval.empty())
     {
@@ -415,7 +416,7 @@ void 
ViewObjectContact::getPrimitive2DSequenceHierarchy(DisplayInfo& rDisplayInf
     if(!bVisible)
         return;
 
-    rVisitor.visit(xRetval);
+    rVisitor.visit(std::move(xRetval));
 }
 
 void ViewObjectContact::getPrimitive2DSequenceSubHierarchy(DisplayInfo& 
rDisplayInfo, drawinglayer::primitive2d::Primitive2DDecompositionVisitor& 
rVisitor) const
diff --git a/svx/source/sdr/contact/viewobjectcontactofmasterpagedescriptor.cxx 
b/svx/source/sdr/contact/viewobjectcontactofmasterpagedescriptor.cxx
index 6b27a1ce8cf0..f96ed115df81 100644
--- a/svx/source/sdr/contact/viewobjectcontactofmasterpagedescriptor.cxx
+++ b/svx/source/sdr/contact/viewobjectcontactofmasterpagedescriptor.cxx
@@ -56,7 +56,6 @@ namespace sdr::contact
 
         void 
ViewObjectContactOfMasterPageDescriptor::getPrimitive2DSequenceHierarchy(DisplayInfo&
 rDisplayInfo, drawinglayer::primitive2d::Primitive2DDecompositionVisitor& 
rVisitor) const
         {
-            drawinglayer::primitive2d::Primitive2DContainer xRetval;
             drawinglayer::primitive2d::Primitive2DContainer 
xMasterPageSequence;
             const sdr::MasterPageDescriptor& rDescriptor = static_cast< 
ViewContactOfMasterPageDescriptor& 
>(GetViewContact()).GetMasterPageDescriptor();
 
@@ -86,7 +85,7 @@ namespace sdr::contact
                 if(!GetObjectContact().isDrawModeGray() && 
!GetObjectContact().isDrawModeHighContrast())
                 {
                     // if visible, create the default background primitive 
sequence
-                    xRetval = static_cast< ViewContactOfMasterPageDescriptor& 
>(GetViewContact()).getViewIndependentPrimitive2DContainer();
+                    static_cast< ViewContactOfMasterPageDescriptor& 
>(GetViewContact()).getViewIndependentPrimitive2DContainer(rVisitor);
                 }
             }
 
@@ -113,7 +112,7 @@ namespace sdr::contact
                 if (rPageFillRange.isInside(aSubHierarchyRange))
                 {
                     // completely inside, just render MasterPage content. Add 
to target
-                    xRetval.append(xMasterPageSequence);
+                    rVisitor.visit(xMasterPageSequence);
                 }
                 else if (rPageFillRange.overlaps(aSubHierarchyRange))
                 {
@@ -124,12 +123,9 @@ namespace sdr::contact
                     // need to create a clip primitive, add clipped list to 
target
                     const drawinglayer::primitive2d::Primitive2DReference 
xReference(new drawinglayer::primitive2d::MaskPrimitive2D(
                         
basegfx::B2DPolyPolygon(basegfx::utils::createPolygonFromRect(aCommonArea)), 
std::move(xMasterPageSequence)));
-                    xRetval.push_back(xReference);
+                    rVisitor.visit(xReference);
                 }
             }
-
-            // return grouped primitive
-            rVisitor.visit(xRetval);
         }
 } // end of namespace
 
diff --git a/svx/source/sdr/contact/viewobjectcontactofsdrole2obj.cxx 
b/svx/source/sdr/contact/viewobjectcontactofsdrole2obj.cxx
index 200548577514..d5a8fe4befc1 100644
--- a/svx/source/sdr/contact/viewobjectcontactofsdrole2obj.cxx
+++ b/svx/source/sdr/contact/viewobjectcontactofsdrole2obj.cxx
@@ -99,7 +99,7 @@ drawinglayer::primitive2d::Primitive2DContainer 
ViewObjectContactOfSdrOle2Obj::c
 
         // create OLE primitive stuff directly at VC with HC as parameter
         const ViewContactOfSdrOle2Obj& rVC = static_cast< const 
ViewContactOfSdrOle2Obj& >(GetViewContact());
-        xRetval = rVC.createPrimitive2DSequenceWithParameters();
+        rVC.createPrimitive2DSequenceWithParameters(xRetval);
 
         if(bIsOutplaceActive)
         {
diff --git a/svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx 
b/svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx
index 8814ab54a596..042d1f9516e3 100644
--- a/svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx
+++ b/svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx
@@ -1550,8 +1550,7 @@ namespace sdr::contact {
             // use the default mechanism. This will create a 
ControlPrimitive2D without
             // handing over a XControl. If not even a XControlModel exists, it 
will
             // create the SdrObject fallback visualisation
-            const drawinglayer::primitive2d::Primitive2DContainer& aTmp = 
rViewContactOfUnoControl.getViewIndependentPrimitive2DContainer();
-            rContainer.insert(rContainer.end(), aTmp.begin(), aTmp.end());
+            
rViewContactOfUnoControl.getViewIndependentPrimitive2DContainer(rContainer);
             return;
         }
 
diff --git a/svx/source/sdr/primitive2d/primitivefactory2d.cxx 
b/svx/source/sdr/primitive2d/primitivefactory2d.cxx
index fc33fa398b9d..a03a7c0a7dde 100644
--- a/svx/source/sdr/primitive2d/primitivefactory2d.cxx
+++ b/svx/source/sdr/primitive2d/primitivefactory2d.cxx
@@ -73,7 +73,9 @@ css::uno::Sequence< css::uno::Reference< 
css::graphic::XPrimitive2D > > SAL_CALL
         if(pSource)
         {
             const sdr::contact::ViewContact& 
rSource(pSource->GetViewContact());
-            aRetval = 
comphelper::containerToSequence(rSource.getViewIndependentPrimitive2DContainer());
+            drawinglayer::primitive2d::Primitive2DContainer aSourceVal;
+            rSource.getViewIndependentPrimitive2DContainer(aSourceVal);
+            aRetval = comphelper::containerToSequence(aSourceVal);
         }
     }
 
@@ -93,8 +95,9 @@ css::uno::Sequence< css::uno::Reference< 
css::graphic::XPrimitive2D > > SAL_CALL
         if(pSource)
         {
             const sdr::contact::ViewContact& 
rSource(pSource->GetViewContact());
-
-            aRetval = 
comphelper::containerToSequence(rSource.getViewIndependentPrimitive2DContainer());
+            drawinglayer::primitive2d::Primitive2DContainer aSourceRetval;
+            rSource.getViewIndependentPrimitive2DContainer(aSourceRetval);
+            aRetval = comphelper::containerToSequence(aSourceRetval);
         }
     }
 
diff --git a/svx/source/sdr/primitive2d/sdrole2primitive2d.cxx 
b/svx/source/sdr/primitive2d/sdrole2primitive2d.cxx
index 04b057a0b6f0..e7576b4983e8 100644
--- a/svx/source/sdr/primitive2d/sdrole2primitive2d.cxx
+++ b/svx/source/sdr/primitive2d/sdrole2primitive2d.cxx
@@ -162,7 +162,7 @@ namespace drawinglayer::primitive2d
                     getSdrLFSTAttribute().getShadow());
             }
 
-            rVisitor.visit(aRetval);
+            rVisitor.visit(std::move(aRetval));
         }
 
         // provide unique ID
diff --git a/svx/source/svdraw/svdcrtv.cxx b/svx/source/svdraw/svdcrtv.cxx
index 2aa9ad42a613..84443978a30a 100644
--- a/svx/source/svdraw/svdcrtv.cxx
+++ b/svx/source/svdraw/svdcrtv.cxx
@@ -143,8 +143,9 @@ void ImpSdrCreateViewExtraData::CreateAndShowOverlay(const 
SdrCreateView& rView,
             if(pObject)
             {
                 const sdr::contact::ViewContact& rVC = 
pObject->GetViewContact();
-                const drawinglayer::primitive2d::Primitive2DContainer& 
aSequence = rVC.getViewIndependentPrimitive2DContainer();
-                std::unique_ptr<sdr::overlay::OverlayObject> pNew(new 
sdr::overlay::OverlayPrimitive2DSequenceObject(drawinglayer::primitive2d::Primitive2DContainer(aSequence)));
+                drawinglayer::primitive2d::Primitive2DContainer aSequence;
+                rVC.getViewIndependentPrimitive2DContainer(aSequence);
+                std::unique_ptr<sdr::overlay::OverlayObject> pNew(new 
sdr::overlay::OverlayPrimitive2DSequenceObject(std::move(aSequence)));
 
                 xOverlayManager->add(*pNew);
                 maObjects.append(std::move(pNew));
diff --git a/svx/source/svdraw/svddrgmt.cxx b/svx/source/svdraw/svddrgmt.cxx
index 1bbd4cbd46d9..300ef234b5dc 100644
--- a/svx/source/svdraw/svddrgmt.cxx
+++ b/svx/source/svdraw/svddrgmt.cxx
@@ -173,7 +173,9 @@ drawinglayer::primitive2d::Primitive2DContainer 
SdrDragEntrySdrObject::createPri
 
     // use the view-independent primitive representation (without
     // evtl. GridOffset, that may be applied to the DragEntry individually)
-    return pSource->GetViewContact().getViewIndependentPrimitive2DContainer();
+    drawinglayer::primitive2d::Primitive2DContainer xRetval;
+    pSource->GetViewContact().getViewIndependentPrimitive2DContainer(xRetval);
+    return xRetval;
 }
 
 
@@ -1442,10 +1444,12 @@ void SdrDragMove::createSdrDragEntryForSdrObject(const 
SdrObject& rOriginal)
 {
     // use the view-independent primitive representation (without
     // evtl. GridOffset, that may be applied to the DragEntry individually)
+    drawinglayer::primitive2d::Primitive2DContainer xRetval;
+    rOriginal.GetViewContact().getViewIndependentPrimitive2DContainer(xRetval);
     addSdrDragEntry(
         std::unique_ptr<SdrDragEntry>(
             new SdrDragEntryPrimitive2DSequence(
-                
rOriginal.GetViewContact().getViewIndependentPrimitive2DContainer())));
+                std::move(xRetval))));
 
 }
 
diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx
index 51f65f76755f..fe43fa3ec5d4 100644
--- a/svx/source/svdraw/svdobj.cxx
+++ b/svx/source/svdraw/svdobj.cxx
@@ -985,7 +985,8 @@ void SdrObject::RecalcBoundRect()
 
     // Use view-independent data - we do not want any connections
     // to e.g. GridOffset in SdrObject-level
-    const drawinglayer::primitive2d::Primitive2DContainer& 
xPrimitives(GetViewContact().getViewIndependentPrimitive2DContainer());
+    drawinglayer::primitive2d::Primitive2DContainer xPrimitives;
+    GetViewContact().getViewIndependentPrimitive2DContainer(xPrimitives);
 
     if(xPrimitives.empty())
         return;
@@ -1186,7 +1187,8 @@ basegfx::B2DPolyPolygon SdrObject::TakeContour() const
 
         // get sequence from clone
         const sdr::contact::ViewContact& rVC(pClone->GetViewContact());
-        const drawinglayer::primitive2d::Primitive2DContainer& 
xSequence(rVC.getViewIndependentPrimitive2DContainer());
+        drawinglayer::primitive2d::Primitive2DContainer xSequence;
+        rVC.getViewIndependentPrimitive2DContainer(xSequence);
 
         if(!xSequence.empty())
         {
@@ -2389,7 +2391,8 @@ SdrObject* SdrObject::ImpConvertToContourObj(bool 
bForceLineDash)
     {
         basegfx::B2DPolyPolygon aMergedLineFillPolyPolygon;
         basegfx::B2DPolyPolygon aMergedHairlinePolyPolygon;
-        const drawinglayer::primitive2d::Primitive2DContainer & 
xSequence(GetViewContact().getViewIndependentPrimitive2DContainer());
+        drawinglayer::primitive2d::Primitive2DContainer xSequence;
+        GetViewContact().getViewIndependentPrimitive2DContainer(xSequence);
 
         if(!xSequence.empty())
         {
diff --git a/svx/source/svdraw/svdotxtr.cxx b/svx/source/svdraw/svdotxtr.cxx
index e499a332400c..e4cd3b9e9fcc 100644
--- a/svx/source/svdraw/svdotxtr.cxx
+++ b/svx/source/svdraw/svdotxtr.cxx
@@ -294,7 +294,8 @@ SdrObjectUniquePtr 
SdrTextObj::ImpConvertContainedTextToSdrPathObjs(bool bToPoly
     }
 
     // get primitives
-    const drawinglayer::primitive2d::Primitive2DContainer & 
xSequence(GetViewContact().getViewIndependentPrimitive2DContainer());
+    drawinglayer::primitive2d::Primitive2DContainer xSequence;
+    GetViewContact().getViewIndependentPrimitive2DContainer(xSequence);
 
     if(!xSequence.empty())
     {
diff --git a/svx/source/svdraw/svdxcgv.cxx b/svx/source/svdraw/svdxcgv.cxx
index bdbf568c753d..53c8778d9e98 100644
--- a/svx/source/svdraw/svdxcgv.cxx
+++ b/svx/source/svdraw/svdxcgv.cxx
@@ -480,8 +480,10 @@ BitmapEx SdrExchangeView::GetMarkedObjBitmapEx(bool 
bNoVDevIfOneBmpMarked, const
                         pSdrGrafObj->ForceSwapIn();
                     }
 
+                    drawinglayer::primitive2d::Primitive2DContainer xRetval;
+                    
pCandidate->GetViewContact().getViewIndependentPrimitive2DContainer(xRetval);
                     xPrimitives[a] = new 
drawinglayer::primitive2d::GroupPrimitive2D(
-                        
pCandidate->GetViewContact().getViewIndependentPrimitive2DContainer());
+                        std::move(xRetval));
                 }
 
                 // get logic range
diff --git a/svx/source/table/viewcontactoftableobj.cxx 
b/svx/source/table/viewcontactoftableobj.cxx
index a79882e03a52..6419c5057dab 100644
--- a/svx/source/table/viewcontactoftableobj.cxx
+++ b/svx/source/table/viewcontactoftableobj.cxx
@@ -201,7 +201,7 @@ namespace sdr::contact
             return svx::frame::Style();
         }
 
-        drawinglayer::primitive2d::Primitive2DContainer 
ViewContactOfTableObj::createViewIndependentPrimitive2DSequence() const
+        void 
ViewContactOfTableObj::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const
         {
             const sdr::table::SdrTableObj& rTableObj = static_cast<const 
sdr::table::SdrTableObj&>(GetSdrObject());
             const uno::Reference< css::table::XTable > xTable = 
rTableObj.getTable();
@@ -427,7 +427,7 @@ namespace sdr::contact
                     }
                 }
 
-                return aRetval;
+                rVisitor.visit(std::move(aRetval));
             }
             else
             {
@@ -447,7 +447,7 @@ namespace sdr::contact
                     
drawinglayer::primitive2d::createHiddenGeometryPrimitives2D(
                         aObjectMatrix));
 
-                return drawinglayer::primitive2d::Primitive2DContainer { 
xReference };
+                rVisitor.visit(xReference);
             }
         }
 
diff --git a/svx/source/table/viewcontactoftableobj.hxx 
b/svx/source/table/viewcontactoftableobj.hxx
index 91a3a26e4e7f..63f45ab4505d 100644
--- a/svx/source/table/viewcontactoftableobj.hxx
+++ b/svx/source/table/viewcontactoftableobj.hxx
@@ -30,7 +30,7 @@ namespace sdr::contact
         protected:
             // This method is responsible for creating the graphical 
visualisation data derived ONLY from
             // the model data
-            virtual drawinglayer::primitive2d::Primitive2DContainer 
createViewIndependentPrimitive2DSequence() const override;
+            virtual void 
createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const override;
 
         public:
             // basic constructor, used from SdrObject.
diff --git a/svx/source/unodraw/unoshape.cxx b/svx/source/unodraw/unoshape.cxx
index f55c4b179c6e..eed9f89f2116 100644
--- a/svx/source/unodraw/unoshape.cxx
+++ b/svx/source/unodraw/unoshape.cxx
@@ -709,8 +709,8 @@ uno::Any SvxShape::GetBitmap( bool bMetaFile /* = false */ 
) const
     }
     else
     {
-        drawinglayer::primitive2d::Primitive2DContainer xPrimitives(
-            
GetSdrObject()->GetViewContact().getViewIndependentPrimitive2DContainer());
+        drawinglayer::primitive2d::Primitive2DContainer xPrimitives;
+        
GetSdrObject()->GetViewContact().getViewIndependentPrimitive2DContainer(xPrimitives);
 
         if(!xPrimitives.empty())
         {
diff --git a/sw/source/core/draw/dcontact.cxx b/sw/source/core/draw/dcontact.cxx
index cb9618c44e8b..409287f7521d 100644
--- a/sw/source/core/draw/dcontact.cxx
+++ b/sw/source/core/draw/dcontact.cxx
@@ -2202,7 +2202,7 @@ namespace sdr::contact
             else
             {
                 // single object, use method from referenced object to get the 
Primitive2DSequence
-                xRetval = 
rReferencedObject.GetViewContact().getViewIndependentPrimitive2DContainer();
+                
rReferencedObject.GetViewContact().getViewIndependentPrimitive2DContainer(xRetval);
             }
 
             if(!xRetval.empty())
diff --git a/sw/source/core/draw/dflyobj.cxx b/sw/source/core/draw/dflyobj.cxx
index 5298f1a296ba..f5d8b88ca36d 100644
--- a/sw/source/core/draw/dflyobj.cxx
+++ b/sw/source/core/draw/dflyobj.cxx
@@ -90,7 +90,7 @@ namespace sdr::contact
              *
              * @note ONLY based on model data
              */
-            virtual drawinglayer::primitive2d::Primitive2DContainer 
createViewIndependentPrimitive2DSequence() const override;
+            virtual void 
createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const override;
 
         public:
             /// basic constructor, used from SdrObject.
@@ -102,10 +102,9 @@ namespace sdr::contact
 
         }
 
-        drawinglayer::primitive2d::Primitive2DContainer 
VCOfSwFlyDrawObj::createViewIndependentPrimitive2DSequence() const
+        void 
VCOfSwFlyDrawObj::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&)
 const
         {
             // currently gets not visualized, return empty sequence
-            return drawinglayer::primitive2d::Primitive2DContainer();
         }
 
 } // end of namespace sdr::contact
@@ -260,7 +259,7 @@ namespace sdr::contact
              *
              * @note ONLY based on model data
              */
-            virtual drawinglayer::primitive2d::Primitive2DContainer 
createViewIndependentPrimitive2DSequence() const override;
+            virtual void 
createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const override;
 
         public:
             /// basic constructor, used from SdrObject.
@@ -281,9 +280,8 @@ namespace sdr::contact
 
 namespace sdr::contact
 {
-        drawinglayer::primitive2d::Primitive2DContainer 
VCOfSwVirtFlyDrawObj::createViewIndependentPrimitive2DSequence() const
+        void 
VCOfSwVirtFlyDrawObj::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&
 rVisitor) const
         {
-            drawinglayer::primitive2d::Primitive2DContainer xRetval;
             const SdrObject& rReferencedObject = 
GetSwVirtFlyDrawObj().GetReferencedObj();
 
             if(dynamic_cast<const SwFlyDrawObj*>( &rReferencedObject) !=  
nullptr)
@@ -299,12 +297,10 @@ namespace sdr::contact
                             GetSwVirtFlyDrawObj(),
                             aOuterRange));
 
-                    xRetval = drawinglayer::primitive2d::Primitive2DContainer 
{ xPrimitive };
+                    rVisitor.visit(xPrimitive);
                 }
             }
-
-            return xRetval;
-        }
+       }
 
 } // end of namespace sdr::contact
 

Reply via email to