[Libreoffice-commits] core.git: drawinglayer/Library_drawinglayer.mk drawinglayer/source include/drawinglayer svgio/qa svx/source

Tomaž Vajngerl (via logerrit) logerrit at kemper.freedesktop.org
Sat Jan 4 10:21:32 UTC 2020


 drawinglayer/Library_drawinglayer.mk                      |    2 
 drawinglayer/source/primitive2d/Primitive2DContainer.cxx  |  129 +++++
 drawinglayer/source/primitive2d/Tools.cxx                 |  238 ++++++++++
 drawinglayer/source/primitive2d/baseprimitive2d.cxx       |  307 --------------
 drawinglayer/source/processor2d/vclpixelprocessor2d.cxx   |    1 
 drawinglayer/source/tools/primitive2dxmldump.cxx          |    1 
 include/drawinglayer/primitive2d/CommonTypes.hxx          |   31 +
 include/drawinglayer/primitive2d/Primitive2DContainer.hxx |   92 ++++
 include/drawinglayer/primitive2d/Primitive2DVisitor.hxx   |   41 +
 include/drawinglayer/primitive2d/Tools.hxx                |   47 ++
 include/drawinglayer/primitive2d/baseprimitive2d.hxx      |   87 ---
 svgio/qa/cppunit/SvgImportTest.cxx                        |    2 
 svx/source/sdr/contact/viewcontactofsdrole2obj.cxx        |    1 
 13 files changed, 588 insertions(+), 391 deletions(-)

New commits:
commit cd47cf36ebb70a3d6897b0abbb0b3cd8b290e1af
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Wed Jan 1 21:00:44 2020 +0100
Commit:     Tomaž Vajngerl <quikee at gmail.com>
CommitDate: Sat Jan 4 11:21:03 2020 +0100

    drawinglayer: extract classes from baseprimitive2d.hxx to own files
    
    This extracts Primitive2DContainer class to its own file, common
    typedefs for PrimitiveReference, Primitive2DSequence to own file
    CommonTypes.hxx, some commonly used and independent functions to
    Tools.hxx.
    
    But for not BufferedDecompositionPrimitive2D class is left as
    it is.
    
    Change-Id: Ia55bafd32fb95eba945d091e2c2ae89b160140d3
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/86086
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>

diff --git a/drawinglayer/Library_drawinglayer.mk b/drawinglayer/Library_drawinglayer.mk
index 189959e51017..aba0ce9b6e08 100644
--- a/drawinglayer/Library_drawinglayer.mk
+++ b/drawinglayer/Library_drawinglayer.mk
@@ -102,6 +102,7 @@ $(eval $(call gb_Library_add_exception_objects,drawinglayer,\
     drawinglayer/source/primitive2d/polygonprimitive2d \
     drawinglayer/source/primitive2d/polypolygonprimitive2d \
     drawinglayer/source/primitive2d/primitivetools2d \
+    drawinglayer/source/primitive2d/Primitive2DContainer \
     drawinglayer/source/primitive2d/sceneprimitive2d \
     drawinglayer/source/primitive2d/sdrdecompositiontools2d \
     drawinglayer/source/primitive2d/shadowprimitive2d \
@@ -116,6 +117,7 @@ $(eval $(call gb_Library_add_exception_objects,drawinglayer,\
     drawinglayer/source/primitive2d/textlineprimitive2d \
     drawinglayer/source/primitive2d/textprimitive2d \
     drawinglayer/source/primitive2d/textstrikeoutprimitive2d \
+    drawinglayer/source/primitive2d/Tools \
     drawinglayer/source/primitive2d/transformprimitive2d \
     drawinglayer/source/primitive2d/transparenceprimitive2d \
     drawinglayer/source/primitive2d/unifiedtransparenceprimitive2d \
diff --git a/drawinglayer/source/primitive2d/Primitive2DContainer.cxx b/drawinglayer/source/primitive2d/Primitive2DContainer.cxx
new file mode 100644
index 000000000000..8f1e7d31e743
--- /dev/null
+++ b/drawinglayer/source/primitive2d/Primitive2DContainer.cxx
@@ -0,0 +1,129 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements. See the NOTICE file distributed
+ *   with this work for additional information regarding copyright
+ *   ownership. The ASF licenses this file to you under the Apache
+ *   License, Version 2.0 (the "License"); you may not use this file
+ *   except in compliance with the License. You may obtain a copy of
+ *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <drawinglayer/primitive2d/Primitive2DContainer.hxx>
+#include <drawinglayer/primitive2d/baseprimitive2d.hxx>
+#include <drawinglayer/primitive2d/Tools.hxx>
+#include <drawinglayer/geometry/viewinformation2d.hxx>
+#include <basegfx/utils/canvastools.hxx>
+
+using namespace css;
+
+namespace drawinglayer::primitive2d
+{
+Primitive2DContainer Primitive2DContainer::maybeInvert(bool bInvert) const
+{
+    const sal_uInt32 nSize(size());
+    Primitive2DContainer aRetval;
+
+    aRetval.resize(nSize);
+
+    for (sal_uInt32 a(0); a < nSize; a++)
+    {
+        aRetval[bInvert ? nSize - 1 - a : a] = (*this)[a];
+    }
+
+    // all entries taken over to Uno References as owners. To avoid
+    // errors with users of this mechanism to delete pointers to BasePrimitive2D
+    // itself, clear given vector
+    const_cast<Primitive2DContainer&>(*this).clear();
+
+    return aRetval;
+}
+
+// get B2DRange from a given Primitive2DSequence
+basegfx::B2DRange
+Primitive2DContainer::getB2DRange(const geometry::ViewInformation2D& aViewInformation) const
+{
+    basegfx::B2DRange aRetval;
+
+    if (!empty())
+    {
+        const sal_Int32 nCount(size());
+
+        for (sal_Int32 a(0); a < nCount; a++)
+        {
+            aRetval.expand(getB2DRangeFromPrimitive2DReference((*this)[a], aViewInformation));
+        }
+    }
+
+    return aRetval;
+}
+
+bool Primitive2DContainer::operator==(const Primitive2DContainer& rB) const
+{
+    const bool bAHasElements(!empty());
+
+    if (bAHasElements != !rB.empty())
+    {
+        return false;
+    }
+
+    if (!bAHasElements)
+    {
+        return true;
+    }
+
+    const size_t nCount(size());
+
+    if (nCount != rB.size())
+    {
+        return false;
+    }
+
+    for (size_t a(0); a < nCount; a++)
+    {
+        if (!arePrimitive2DReferencesEqual((*this)[a], rB[a]))
+        {
+            return false;
+        }
+    }
+
+    return true;
+}
+
+Primitive2DContainer::~Primitive2DContainer() {}
+
+void Primitive2DContainer::append(const Primitive2DReference& rSource) { push_back(rSource); }
+
+void Primitive2DContainer::append(const Primitive2DContainer& rSource)
+{
+    insert(end(), rSource.begin(), rSource.end());
+}
+
+void Primitive2DContainer::append(Primitive2DContainer&& rSource)
+{
+    size_t n = size();
+    resize(n + rSource.size());
+    for (size_t i = 0; i < rSource.size(); ++i)
+    {
+        (*this)[n + i] = std::move(rSource[i]);
+    }
+}
+
+void Primitive2DContainer::append(const Primitive2DSequence& rSource)
+{
+    std::copy(rSource.begin(), rSource.end(), std::back_inserter(*this));
+}
+
+} // end of namespace drawinglayer::primitive2d
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/Tools.cxx b/drawinglayer/source/primitive2d/Tools.cxx
new file mode 100644
index 000000000000..e9ff7a55394d
--- /dev/null
+++ b/drawinglayer/source/primitive2d/Tools.cxx
@@ -0,0 +1,238 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements. See the NOTICE file distributed
+ *   with this work for additional information regarding copyright
+ *   ownership. The ASF licenses this file to you under the Apache
+ *   License, Version 2.0 (the "License"); you may not use this file
+ *   except in compliance with the License. You may obtain a copy of
+ *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <drawinglayer/primitive2d/Tools.hxx>
+#include <drawinglayer/primitive2d/baseprimitive2d.hxx>
+#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
+#include <drawinglayer/geometry/viewinformation2d.hxx>
+#include <basegfx/utils/canvastools.hxx>
+
+using namespace css;
+
+namespace drawinglayer::primitive2d
+{
+// get B2DRange from a given Primitive2DReference
+basegfx::B2DRange
+getB2DRangeFromPrimitive2DReference(const Primitive2DReference& rCandidate,
+                                    const geometry::ViewInformation2D& aViewInformation)
+{
+    basegfx::B2DRange aRetval;
+
+    if (rCandidate.is())
+    {
+        // try to get C++ implementation base
+        const BasePrimitive2D* pCandidate(dynamic_cast<BasePrimitive2D*>(rCandidate.get()));
+
+        if (pCandidate)
+        {
+            // use it if possible
+            aRetval.expand(pCandidate->getB2DRange(aViewInformation));
+        }
+        else
+        {
+            // use UNO API call instead
+            const uno::Sequence<beans::PropertyValue>& rViewParameters(
+                aViewInformation.getViewInformationSequence());
+            aRetval.expand(basegfx::unotools::b2DRectangleFromRealRectangle2D(
+                rCandidate->getRange(rViewParameters)));
+        }
+    }
+
+    return aRetval;
+}
+
+bool arePrimitive2DReferencesEqual(const Primitive2DReference& rxA, const Primitive2DReference& rxB)
+{
+    const bool bAIs(rxA.is());
+
+    if (bAIs != rxB.is())
+    {
+        return false;
+    }
+
+    if (!bAIs)
+    {
+        return true;
+    }
+
+    const BasePrimitive2D* pA(dynamic_cast<const BasePrimitive2D*>(rxA.get()));
+    const BasePrimitive2D* pB(dynamic_cast<const BasePrimitive2D*>(rxB.get()));
+
+    if (!pA || !pB)
+    {
+        return false;
+    }
+
+    return pA->operator==(*pB);
+}
+
+OUString idToString(sal_uInt32 nId)
+{
+    switch (nId)
+    {
+        case PRIMITIVE2D_ID_TRANSPARENCEPRIMITIVE2D:
+            return "TRANSPARENCE";
+        case PRIMITIVE2D_ID_ANIMATEDSWITCHPRIMITIVE2D:
+            return "ANIMATEDSWITCH";
+        case PRIMITIVE2D_ID_ANIMATEDBLINKPRIMITIVE2D:
+            return "ANIMATEDBLINK";
+        case PRIMITIVE2D_ID_ANIMATEDINTERPOLATEPRIMITIVE2D:
+            return "ANIMATEDINTERPOLATE";
+        case PRIMITIVE2D_ID_BACKGROUNDCOLORPRIMITIVE2D:
+            return "BACKGROUNDCOLOR";
+        case PRIMITIVE2D_ID_BITMAPPRIMITIVE2D:
+            return "BITMAP";
+        case PRIMITIVE2D_ID_CONTROLPRIMITIVE2D:
+            return "CONTROL";
+        case PRIMITIVE2D_ID_EMBEDDED3DPRIMITIVE2D:
+            return "EMBEDDED3D";
+        case PRIMITIVE2D_ID_FILLGRAPHICPRIMITIVE2D:
+            return "FILLGRAPHIC";
+        case PRIMITIVE2D_ID_FILLGRADIENTPRIMITIVE2D:
+            return "FILLGRADIENT";
+        case PRIMITIVE2D_ID_FILLHATCHPRIMITIVE2D:
+            return "FILLHATCH";
+        case PRIMITIVE2D_ID_GRAPHICPRIMITIVE2D:
+            return "GRAPHIC";
+        case PRIMITIVE2D_ID_GRIDPRIMITIVE2D:
+            return "GRID";
+        case PRIMITIVE2D_ID_GROUPPRIMITIVE2D:
+            return "GROUP";
+        case PRIMITIVE2D_ID_HELPLINEPRIMITIVE2D:
+            return "HELPLINE";
+        case PRIMITIVE2D_ID_MARKERARRAYPRIMITIVE2D:
+            return "MARKERARRAY";
+        case PRIMITIVE2D_ID_MASKPRIMITIVE2D:
+            return "MASK";
+        case PRIMITIVE2D_ID_MEDIAPRIMITIVE2D:
+            return "MEDIA";
+        case PRIMITIVE2D_ID_METAFILEPRIMITIVE2D:
+            return "METAFILE";
+        case PRIMITIVE2D_ID_MODIFIEDCOLORPRIMITIVE2D:
+            return "MODIFIEDCOLOR";
+        case PRIMITIVE2D_ID_POLYGONHAIRLINEPRIMITIVE2D:
+            return "POLYGONHAIRLINE";
+        case PRIMITIVE2D_ID_POLYGONMARKERPRIMITIVE2D:
+            return "POLYGONMARKER";
+        case PRIMITIVE2D_ID_POLYGONSTROKEPRIMITIVE2D:
+            return "POLYGONSTROKE";
+        case PRIMITIVE2D_ID_POLYGONSTROKEARROWPRIMITIVE2D:
+            return "POLYGONSTROKEARROW";
+        case PRIMITIVE2D_ID_POLYPOLYGONSTROKEPRIMITIVE2D:
+            return "POLYPOLYGONSTROKE";
+        case PRIMITIVE2D_ID_POLYPOLYGONSTROKEARROWPRIMITIVE2D:
+            return "POLYPOLYGONSTROKEARROW";
+        case PRIMITIVE2D_ID_POLYPOLYGONCOLORPRIMITIVE2D:
+            return "POLYPOLYGONCOLOR";
+        case PRIMITIVE2D_ID_POLYPOLYGONGRADIENTPRIMITIVE2D:
+            return "POLYPOLYGONGRADIENT";
+        case PRIMITIVE2D_ID_POLYPOLYGONHATCHPRIMITIVE2D:
+            return "POLYPOLYGONHATCH";
+        case PRIMITIVE2D_ID_POLYPOLYGONGRAPHICPRIMITIVE2D:
+            return "POLYPOLYGONGRAPHIC";
+        case PRIMITIVE2D_ID_SCENEPRIMITIVE2D:
+            return "SCENE";
+        case PRIMITIVE2D_ID_SHADOWPRIMITIVE2D:
+            return "SHADOW";
+        case PRIMITIVE2D_ID_TEXTSIMPLEPORTIONPRIMITIVE2D:
+            return "TEXTSIMPLEPORTION";
+        case PRIMITIVE2D_ID_TEXTDECORATEDPORTIONPRIMITIVE2D:
+            return "TEXTDECORATEDPORTION";
+        case PRIMITIVE2D_ID_TRANSFORMPRIMITIVE2D:
+            return "TRANSFORM";
+        case PRIMITIVE2D_ID_UNIFIEDTRANSPARENCEPRIMITIVE2D:
+            return "UNIFIEDTRANSPARENCE";
+        case PRIMITIVE2D_ID_POINTARRAYPRIMITIVE2D:
+            return "POINTARRAY";
+        case PRIMITIVE2D_ID_TEXTHIERARCHYFIELDPRIMITIVE2D:
+            return "TEXTHIERARCHYFIELD";
+        case PRIMITIVE2D_ID_TEXTHIERARCHYLINEPRIMITIVE2D:
+            return "TEXTHIERARCHYLINE";
+        case PRIMITIVE2D_ID_TEXTHIERARCHYPARAGRAPHPRIMITIVE2D:
+            return "TEXTHIERARCHYPARAGRAPH";
+        case PRIMITIVE2D_ID_TEXTHIERARCHYBLOCKPRIMITIVE2D:
+            return "TEXTHIERARCHYBLOCK";
+        case PRIMITIVE2D_ID_TEXTHIERARCHYEDITPRIMITIVE2D:
+            return "TEXTHIERARCHYEDIT";
+        case PRIMITIVE2D_ID_POLYGONWAVEPRIMITIVE2D:
+            return "POLYGONWAVE";
+        case PRIMITIVE2D_ID_WRONGSPELLPRIMITIVE2D:
+            return "WRONGSPELL";
+        case PRIMITIVE2D_ID_TEXTEFFECTPRIMITIVE2D:
+            return "TEXTEFFECT";
+        case PRIMITIVE2D_ID_TEXTHIERARCHYBULLETPRIMITIVE2D:
+            return "TEXTHIERARCHYBULLET";
+        case PRIMITIVE2D_ID_POLYPOLYGONHAIRLINEPRIMITIVE2D:
+            return "POLYPOLYGONHAIRLINE";
+        case PRIMITIVE2D_ID_EXECUTEPRIMITIVE2D:
+            return "EXECUTE";
+        case PRIMITIVE2D_ID_PAGEPREVIEWPRIMITIVE2D:
+            return "PAGEPREVIEW";
+        case PRIMITIVE2D_ID_STRUCTURETAGPRIMITIVE2D:
+            return "STRUCTURETAG";
+        case PRIMITIVE2D_ID_BORDERLINEPRIMITIVE2D:
+            return "BORDERLINE";
+        case PRIMITIVE2D_ID_POLYPOLYGONMARKERPRIMITIVE2D:
+            return "POLYPOLYGONMARKER";
+        case PRIMITIVE2D_ID_HITTESTPRIMITIVE2D:
+            return "HITTEST";
+        case PRIMITIVE2D_ID_INVERTPRIMITIVE2D:
+            return "INVERT";
+        case PRIMITIVE2D_ID_DISCRETEBITMAPPRIMITIVE2D:
+            return "DISCRETEBITMAP";
+        case PRIMITIVE2D_ID_WALLPAPERBITMAPPRIMITIVE2D:
+            return "WALLPAPERBITMAP";
+        case PRIMITIVE2D_ID_TEXTLINEPRIMITIVE2D:
+            return "TEXTLINE";
+        case PRIMITIVE2D_ID_TEXTCHARACTERSTRIKEOUTPRIMITIVE2D:
+            return "TEXTCHARACTERSTRIKEOUT";
+        case PRIMITIVE2D_ID_TEXTGEOMETRYSTRIKEOUTPRIMITIVE2D:
+            return "TEXTGEOMETRYSTRIKEOUT";
+        case PRIMITIVE2D_ID_EPSPRIMITIVE2D:
+            return "EPS";
+        case PRIMITIVE2D_ID_DISCRETESHADOWPRIMITIVE2D:
+            return "DISCRETESHADOW";
+        case PRIMITIVE2D_ID_HIDDENGEOMETRYPRIMITIVE2D:
+            return "HIDDENGEOMETRY";
+        case PRIMITIVE2D_ID_SVGLINEARGRADIENTPRIMITIVE2D:
+            return "SVGLINEARGRADIENT";
+        case PRIMITIVE2D_ID_SVGRADIALGRADIENTPRIMITIVE2D:
+            return "SVGRADIALGRADIENT";
+        case PRIMITIVE2D_ID_SVGLINEARATOMPRIMITIVE2D:
+            return "SVGLINEARATOM";
+        case PRIMITIVE2D_ID_SVGRADIALATOMPRIMITIVE2D:
+            return "SVGRADIALATOM";
+        case PRIMITIVE2D_ID_CROPPRIMITIVE2D:
+            return "CROP";
+        case PRIMITIVE2D_ID_PATTERNFILLPRIMITIVE2D:
+            return "PATTERNFILL";
+        case PRIMITIVE2D_ID_OBJECTINFOPRIMITIVE2D:
+            return "OBJECTINFO";
+        case PRIMITIVE2D_ID_POLYPOLYGONSELECTIONPRIMITIVE2D:
+            return "POLYPOLYGONSELECTION";
+        case PRIMITIVE2D_ID_PAGEHIERARCHYPRIMITIVE2D:
+            return "PAGEHIERARCHY";
+        default:
+            return OUString::number((nId >> 16) & 0xFF) + "|" + OUString::number(nId & 0xFF);
+    }
+}
+
+} // end of namespace drawinglayer::primitive2d
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/baseprimitive2d.cxx b/drawinglayer/source/primitive2d/baseprimitive2d.cxx
index 1ee89de9e5bc..ef7055ebdaa4 100644
--- a/drawinglayer/source/primitive2d/baseprimitive2d.cxx
+++ b/drawinglayer/source/primitive2d/baseprimitive2d.cxx
@@ -23,7 +23,7 @@
 #include <utility>
 
 #include <drawinglayer/primitive2d/baseprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
+#include <drawinglayer/primitive2d/Tools.hxx>
 #include <drawinglayer/geometry/viewinformation2d.hxx>
 #include <basegfx/utils/canvastools.hxx>
 #include <comphelper/sequence.hxx>
@@ -32,8 +32,6 @@ using namespace css;
 
 namespace drawinglayer::primitive2d
 {
-Primitive2DDecompositionVisitor::~Primitive2DDecompositionVisitor() {}
-
 BasePrimitive2D::BasePrimitive2D()
     : BasePrimitive2DImplBase(m_aMutex)
 {
@@ -138,309 +136,6 @@ void BufferedDecompositionPrimitive2D::get2DDecomposition(
     rVisitor.append(getBuffered2DDecomposition());
 }
 
-// tooling
-
-Primitive2DContainer Primitive2DContainer::maybeInvert(bool bInvert) const
-{
-    const sal_uInt32 nSize(size());
-    Primitive2DContainer aRetval;
-
-    aRetval.resize(nSize);
-
-    for (sal_uInt32 a(0); a < nSize; a++)
-    {
-        aRetval[bInvert ? nSize - 1 - a : a] = (*this)[a];
-    }
-
-    // all entries taken over to Uno References as owners. To avoid
-    // errors with users of this mechanism to delete pointers to BasePrimitive2D
-    // itself, clear given vector
-    const_cast<Primitive2DContainer&>(*this).clear();
-
-    return aRetval;
-}
-
-// get B2DRange from a given Primitive2DReference
-basegfx::B2DRange
-getB2DRangeFromPrimitive2DReference(const Primitive2DReference& rCandidate,
-                                    const geometry::ViewInformation2D& aViewInformation)
-{
-    basegfx::B2DRange aRetval;
-
-    if (rCandidate.is())
-    {
-        // try to get C++ implementation base
-        const BasePrimitive2D* pCandidate(dynamic_cast<BasePrimitive2D*>(rCandidate.get()));
-
-        if (pCandidate)
-        {
-            // use it if possible
-            aRetval.expand(pCandidate->getB2DRange(aViewInformation));
-        }
-        else
-        {
-            // use UNO API call instead
-            const uno::Sequence<beans::PropertyValue>& rViewParameters(
-                aViewInformation.getViewInformationSequence());
-            aRetval.expand(basegfx::unotools::b2DRectangleFromRealRectangle2D(
-                rCandidate->getRange(rViewParameters)));
-        }
-    }
-
-    return aRetval;
-}
-
-// get B2DRange from a given Primitive2DSequence
-basegfx::B2DRange
-Primitive2DContainer::getB2DRange(const geometry::ViewInformation2D& aViewInformation) const
-{
-    basegfx::B2DRange aRetval;
-
-    if (!empty())
-    {
-        const sal_Int32 nCount(size());
-
-        for (sal_Int32 a(0); a < nCount; a++)
-        {
-            aRetval.expand(getB2DRangeFromPrimitive2DReference((*this)[a], aViewInformation));
-        }
-    }
-
-    return aRetval;
-}
-
-bool arePrimitive2DReferencesEqual(const Primitive2DReference& rxA, const Primitive2DReference& rxB)
-{
-    const bool bAIs(rxA.is());
-
-    if (bAIs != rxB.is())
-    {
-        return false;
-    }
-
-    if (!bAIs)
-    {
-        return true;
-    }
-
-    const BasePrimitive2D* pA(dynamic_cast<const BasePrimitive2D*>(rxA.get()));
-    const BasePrimitive2D* pB(dynamic_cast<const BasePrimitive2D*>(rxB.get()));
-
-    if (!pA || !pB)
-    {
-        return false;
-    }
-
-    return pA->operator==(*pB);
-}
-
-bool Primitive2DContainer::operator==(const Primitive2DContainer& rB) const
-{
-    const bool bAHasElements(!empty());
-
-    if (bAHasElements != !rB.empty())
-    {
-        return false;
-    }
-
-    if (!bAHasElements)
-    {
-        return true;
-    }
-
-    const size_t nCount(size());
-
-    if (nCount != rB.size())
-    {
-        return false;
-    }
-
-    for (size_t a(0); a < nCount; a++)
-    {
-        if (!arePrimitive2DReferencesEqual((*this)[a], rB[a]))
-        {
-            return false;
-        }
-    }
-
-    return true;
-}
-
-Primitive2DContainer::~Primitive2DContainer() {}
-
-void Primitive2DContainer::append(const Primitive2DReference& rSource) { push_back(rSource); }
-
-void Primitive2DContainer::append(const Primitive2DContainer& rSource)
-{
-    insert(end(), rSource.begin(), rSource.end());
-}
-
-void Primitive2DContainer::append(Primitive2DContainer&& rSource)
-{
-    size_t n = size();
-    resize(n + rSource.size());
-    for (size_t i = 0; i < rSource.size(); ++i)
-    {
-        (*this)[n + i] = std::move(rSource[i]);
-    }
-}
-
-void Primitive2DContainer::append(const Primitive2DSequence& rSource)
-{
-    std::copy(rSource.begin(), rSource.end(), std::back_inserter(*this));
-}
-
-OUString idToString(sal_uInt32 nId)
-{
-    switch (nId)
-    {
-        case PRIMITIVE2D_ID_TRANSPARENCEPRIMITIVE2D:
-            return "TRANSPARENCE";
-        case PRIMITIVE2D_ID_ANIMATEDSWITCHPRIMITIVE2D:
-            return "ANIMATEDSWITCH";
-        case PRIMITIVE2D_ID_ANIMATEDBLINKPRIMITIVE2D:
-            return "ANIMATEDBLINK";
-        case PRIMITIVE2D_ID_ANIMATEDINTERPOLATEPRIMITIVE2D:
-            return "ANIMATEDINTERPOLATE";
-        case PRIMITIVE2D_ID_BACKGROUNDCOLORPRIMITIVE2D:
-            return "BACKGROUNDCOLOR";
-        case PRIMITIVE2D_ID_BITMAPPRIMITIVE2D:
-            return "BITMAP";
-        case PRIMITIVE2D_ID_CONTROLPRIMITIVE2D:
-            return "CONTROL";
-        case PRIMITIVE2D_ID_EMBEDDED3DPRIMITIVE2D:
-            return "EMBEDDED3D";
-        case PRIMITIVE2D_ID_FILLGRAPHICPRIMITIVE2D:
-            return "FILLGRAPHIC";
-        case PRIMITIVE2D_ID_FILLGRADIENTPRIMITIVE2D:
-            return "FILLGRADIENT";
-        case PRIMITIVE2D_ID_FILLHATCHPRIMITIVE2D:
-            return "FILLHATCH";
-        case PRIMITIVE2D_ID_GRAPHICPRIMITIVE2D:
-            return "GRAPHIC";
-        case PRIMITIVE2D_ID_GRIDPRIMITIVE2D:
-            return "GRID";
-        case PRIMITIVE2D_ID_GROUPPRIMITIVE2D:
-            return "GROUP";
-        case PRIMITIVE2D_ID_HELPLINEPRIMITIVE2D:
-            return "HELPLINE";
-        case PRIMITIVE2D_ID_MARKERARRAYPRIMITIVE2D:
-            return "MARKERARRAY";
-        case PRIMITIVE2D_ID_MASKPRIMITIVE2D:
-            return "MASK";
-        case PRIMITIVE2D_ID_MEDIAPRIMITIVE2D:
-            return "MEDIA";
-        case PRIMITIVE2D_ID_METAFILEPRIMITIVE2D:
-            return "METAFILE";
-        case PRIMITIVE2D_ID_MODIFIEDCOLORPRIMITIVE2D:
-            return "MODIFIEDCOLOR";
-        case PRIMITIVE2D_ID_POLYGONHAIRLINEPRIMITIVE2D:
-            return "POLYGONHAIRLINE";
-        case PRIMITIVE2D_ID_POLYGONMARKERPRIMITIVE2D:
-            return "POLYGONMARKER";
-        case PRIMITIVE2D_ID_POLYGONSTROKEPRIMITIVE2D:
-            return "POLYGONSTROKE";
-        case PRIMITIVE2D_ID_POLYGONSTROKEARROWPRIMITIVE2D:
-            return "POLYGONSTROKEARROW";
-        case PRIMITIVE2D_ID_POLYPOLYGONSTROKEPRIMITIVE2D:
-            return "POLYPOLYGONSTROKE";
-        case PRIMITIVE2D_ID_POLYPOLYGONSTROKEARROWPRIMITIVE2D:
-            return "POLYPOLYGONSTROKEARROW";
-        case PRIMITIVE2D_ID_POLYPOLYGONCOLORPRIMITIVE2D:
-            return "POLYPOLYGONCOLOR";
-        case PRIMITIVE2D_ID_POLYPOLYGONGRADIENTPRIMITIVE2D:
-            return "POLYPOLYGONGRADIENT";
-        case PRIMITIVE2D_ID_POLYPOLYGONHATCHPRIMITIVE2D:
-            return "POLYPOLYGONHATCH";
-        case PRIMITIVE2D_ID_POLYPOLYGONGRAPHICPRIMITIVE2D:
-            return "POLYPOLYGONGRAPHIC";
-        case PRIMITIVE2D_ID_SCENEPRIMITIVE2D:
-            return "SCENE";
-        case PRIMITIVE2D_ID_SHADOWPRIMITIVE2D:
-            return "SHADOW";
-        case PRIMITIVE2D_ID_TEXTSIMPLEPORTIONPRIMITIVE2D:
-            return "TEXTSIMPLEPORTION";
-        case PRIMITIVE2D_ID_TEXTDECORATEDPORTIONPRIMITIVE2D:
-            return "TEXTDECORATEDPORTION";
-        case PRIMITIVE2D_ID_TRANSFORMPRIMITIVE2D:
-            return "TRANSFORM";
-        case PRIMITIVE2D_ID_UNIFIEDTRANSPARENCEPRIMITIVE2D:
-            return "UNIFIEDTRANSPARENCE";
-        case PRIMITIVE2D_ID_POINTARRAYPRIMITIVE2D:
-            return "POINTARRAY";
-        case PRIMITIVE2D_ID_TEXTHIERARCHYFIELDPRIMITIVE2D:
-            return "TEXTHIERARCHYFIELD";
-        case PRIMITIVE2D_ID_TEXTHIERARCHYLINEPRIMITIVE2D:
-            return "TEXTHIERARCHYLINE";
-        case PRIMITIVE2D_ID_TEXTHIERARCHYPARAGRAPHPRIMITIVE2D:
-            return "TEXTHIERARCHYPARAGRAPH";
-        case PRIMITIVE2D_ID_TEXTHIERARCHYBLOCKPRIMITIVE2D:
-            return "TEXTHIERARCHYBLOCK";
-        case PRIMITIVE2D_ID_TEXTHIERARCHYEDITPRIMITIVE2D:
-            return "TEXTHIERARCHYEDIT";
-        case PRIMITIVE2D_ID_POLYGONWAVEPRIMITIVE2D:
-            return "POLYGONWAVE";
-        case PRIMITIVE2D_ID_WRONGSPELLPRIMITIVE2D:
-            return "WRONGSPELL";
-        case PRIMITIVE2D_ID_TEXTEFFECTPRIMITIVE2D:
-            return "TEXTEFFECT";
-        case PRIMITIVE2D_ID_TEXTHIERARCHYBULLETPRIMITIVE2D:
-            return "TEXTHIERARCHYBULLET";
-        case PRIMITIVE2D_ID_POLYPOLYGONHAIRLINEPRIMITIVE2D:
-            return "POLYPOLYGONHAIRLINE";
-        case PRIMITIVE2D_ID_EXECUTEPRIMITIVE2D:
-            return "EXECUTE";
-        case PRIMITIVE2D_ID_PAGEPREVIEWPRIMITIVE2D:
-            return "PAGEPREVIEW";
-        case PRIMITIVE2D_ID_STRUCTURETAGPRIMITIVE2D:
-            return "STRUCTURETAG";
-        case PRIMITIVE2D_ID_BORDERLINEPRIMITIVE2D:
-            return "BORDERLINE";
-        case PRIMITIVE2D_ID_POLYPOLYGONMARKERPRIMITIVE2D:
-            return "POLYPOLYGONMARKER";
-        case PRIMITIVE2D_ID_HITTESTPRIMITIVE2D:
-            return "HITTEST";
-        case PRIMITIVE2D_ID_INVERTPRIMITIVE2D:
-            return "INVERT";
-        case PRIMITIVE2D_ID_DISCRETEBITMAPPRIMITIVE2D:
-            return "DISCRETEBITMAP";
-        case PRIMITIVE2D_ID_WALLPAPERBITMAPPRIMITIVE2D:
-            return "WALLPAPERBITMAP";
-        case PRIMITIVE2D_ID_TEXTLINEPRIMITIVE2D:
-            return "TEXTLINE";
-        case PRIMITIVE2D_ID_TEXTCHARACTERSTRIKEOUTPRIMITIVE2D:
-            return "TEXTCHARACTERSTRIKEOUT";
-        case PRIMITIVE2D_ID_TEXTGEOMETRYSTRIKEOUTPRIMITIVE2D:
-            return "TEXTGEOMETRYSTRIKEOUT";
-        case PRIMITIVE2D_ID_EPSPRIMITIVE2D:
-            return "EPS";
-        case PRIMITIVE2D_ID_DISCRETESHADOWPRIMITIVE2D:
-            return "DISCRETESHADOW";
-        case PRIMITIVE2D_ID_HIDDENGEOMETRYPRIMITIVE2D:
-            return "HIDDENGEOMETRY";
-        case PRIMITIVE2D_ID_SVGLINEARGRADIENTPRIMITIVE2D:
-            return "SVGLINEARGRADIENT";
-        case PRIMITIVE2D_ID_SVGRADIALGRADIENTPRIMITIVE2D:
-            return "SVGRADIALGRADIENT";
-        case PRIMITIVE2D_ID_SVGLINEARATOMPRIMITIVE2D:
-            return "SVGLINEARATOM";
-        case PRIMITIVE2D_ID_SVGRADIALATOMPRIMITIVE2D:
-            return "SVGRADIALATOM";
-        case PRIMITIVE2D_ID_CROPPRIMITIVE2D:
-            return "CROP";
-        case PRIMITIVE2D_ID_PATTERNFILLPRIMITIVE2D:
-            return "PATTERNFILL";
-        case PRIMITIVE2D_ID_OBJECTINFOPRIMITIVE2D:
-            return "OBJECTINFO";
-        case PRIMITIVE2D_ID_POLYPOLYGONSELECTIONPRIMITIVE2D:
-            return "POLYPOLYGONSELECTION";
-        case PRIMITIVE2D_ID_PAGEHIERARCHYPRIMITIVE2D:
-            return "PAGEHIERARCHY";
-        default:
-            return OUString::number((nId >> 16) & 0xFF) + "|" + OUString::number(nId & 0xFF);
-    }
-}
-
 } // end of namespace drawinglayer::primitive2d
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx
index 68e8f70c0269..199fb13e3c81 100644
--- a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx
+++ b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx
@@ -20,6 +20,7 @@
 #include "vclpixelprocessor2d.hxx"
 #include <vcl/outdev.hxx>
 #include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
+#include <drawinglayer/primitive2d/Tools.hxx>
 #include <drawinglayer/primitive2d/textprimitive2d.hxx>
 #include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx>
 #include <drawinglayer/primitive2d/polygonprimitive2d.hxx>
diff --git a/drawinglayer/source/tools/primitive2dxmldump.cxx b/drawinglayer/source/tools/primitive2dxmldump.cxx
index af4718ff9620..e4fadac945a3 100644
--- a/drawinglayer/source/tools/primitive2dxmldump.cxx
+++ b/drawinglayer/source/tools/primitive2dxmldump.cxx
@@ -16,6 +16,7 @@
 #include <memory>
 
 #include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
+#include <drawinglayer/primitive2d/Tools.hxx>
 #include <drawinglayer/primitive2d/transformprimitive2d.hxx>
 #include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx>
 #include <drawinglayer/primitive2d/hiddengeometryprimitive2d.hxx>
diff --git a/include/drawinglayer/primitive2d/CommonTypes.hxx b/include/drawinglayer/primitive2d/CommonTypes.hxx
new file mode 100644
index 000000000000..a7ef629fc98f
--- /dev/null
+++ b/include/drawinglayer/primitive2d/CommonTypes.hxx
@@ -0,0 +1,31 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements. See the NOTICE file distributed
+ *   with this work for additional information regarding copyright
+ *   ownership. The ASF licenses this file to you under the Apache
+ *   License, Version 2.0 (the "License"); you may not use this file
+ *   except in compliance with the License. You may obtain a copy of
+ *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <com/sun/star/graphic/XPrimitive2D.hpp>
+
+namespace drawinglayer::primitive2d
+{
+typedef css::uno::Reference<css::graphic::XPrimitive2D> Primitive2DReference;
+typedef css::uno::Sequence<Primitive2DReference> Primitive2DSequence;
+
+} // end of namespace drawinglayer::primitive2d
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/drawinglayer/primitive2d/Primitive2DContainer.hxx b/include/drawinglayer/primitive2d/Primitive2DContainer.hxx
new file mode 100644
index 000000000000..4b852f340a14
--- /dev/null
+++ b/include/drawinglayer/primitive2d/Primitive2DContainer.hxx
@@ -0,0 +1,92 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements. See the NOTICE file distributed
+ *   with this work for additional information regarding copyright
+ *   ownership. The ASF licenses this file to you under the Apache
+ *   License, Version 2.0 (the "License"); you may not use this file
+ *   except in compliance with the License. You may obtain a copy of
+ *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <drawinglayer/drawinglayerdllapi.h>
+
+#include <drawinglayer/primitive2d/CommonTypes.hxx>
+#include <drawinglayer/primitive2d/Primitive2DVisitor.hxx>
+
+#include <basegfx/range/b2drange.hxx>
+#include <deque>
+
+namespace drawinglayer::geometry
+{
+class ViewInformation2D;
+}
+
+namespace drawinglayer::primitive2d
+{
+class SAL_WARN_UNUSED DRAWINGLAYER_DLLPUBLIC Primitive2DContainer
+    : public std::deque<Primitive2DReference>,
+      public Primitive2DDecompositionVisitor
+{
+public:
+    explicit Primitive2DContainer() {}
+    explicit Primitive2DContainer(size_type count)
+        : deque(count)
+    {
+    }
+    virtual ~Primitive2DContainer() override;
+    Primitive2DContainer(const Primitive2DContainer& other)
+        : deque(other)
+    {
+    }
+    Primitive2DContainer(Primitive2DContainer&& other) noexcept
+        : deque(std::move(other))
+    {
+    }
+    Primitive2DContainer(const std::deque<Primitive2DReference>& other)
+        : deque(other)
+    {
+    }
+    Primitive2DContainer(std::initializer_list<Primitive2DReference> init)
+        : deque(init)
+    {
+    }
+    template <class Iter>
+    Primitive2DContainer(Iter first, Iter last)
+        : deque(first, last)
+    {
+    }
+
+    virtual void append(const Primitive2DReference&) override;
+    virtual void append(const Primitive2DContainer& rSource) override;
+    virtual void append(Primitive2DContainer&& rSource) override;
+    void append(const Primitive2DSequence& rSource);
+    Primitive2DContainer& operator=(const Primitive2DContainer& r)
+    {
+        deque::operator=(r);
+        return *this;
+    }
+    Primitive2DContainer& operator=(Primitive2DContainer&& r) noexcept
+    {
+        deque::operator=(std::move(r));
+        return *this;
+    }
+    bool operator==(const Primitive2DContainer& rB) const;
+    bool operator!=(const Primitive2DContainer& rB) const { return !operator==(rB); }
+    basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& aViewInformation) const;
+    Primitive2DContainer maybeInvert(bool bInvert = false) const;
+};
+
+} // end of namespace drawinglayer::primitive2d
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/drawinglayer/primitive2d/Primitive2DVisitor.hxx b/include/drawinglayer/primitive2d/Primitive2DVisitor.hxx
new file mode 100644
index 000000000000..dfe04b32a320
--- /dev/null
+++ b/include/drawinglayer/primitive2d/Primitive2DVisitor.hxx
@@ -0,0 +1,41 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements. See the NOTICE file distributed
+ *   with this work for additional information regarding copyright
+ *   ownership. The ASF licenses this file to you under the Apache
+ *   License, Version 2.0 (the "License"); you may not use this file
+ *   except in compliance with the License. You may obtain a copy of
+ *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <drawinglayer/drawinglayerdllapi.h>
+#include <drawinglayer/primitive2d/CommonTypes.hxx>
+
+namespace drawinglayer::primitive2d
+{
+class Primitive2DContainer;
+
+// Visitor class for walking a tree of Primitive2DReference
+class DRAWINGLAYER_DLLPUBLIC Primitive2DDecompositionVisitor
+{
+public:
+    virtual void append(const Primitive2DReference&) = 0;
+    virtual void append(const Primitive2DContainer&) = 0;
+    virtual void append(Primitive2DContainer&&) = 0;
+    virtual ~Primitive2DDecompositionVisitor() {}
+};
+
+} // end of namespace drawinglayer::primitive2d
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/drawinglayer/primitive2d/Tools.hxx b/include/drawinglayer/primitive2d/Tools.hxx
new file mode 100644
index 000000000000..fbb6f5717c01
--- /dev/null
+++ b/include/drawinglayer/primitive2d/Tools.hxx
@@ -0,0 +1,47 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements. See the NOTICE file distributed
+ *   with this work for additional information regarding copyright
+ *   ownership. The ASF licenses this file to you under the Apache
+ *   License, Version 2.0 (the "License"); you may not use this file
+ *   except in compliance with the License. You may obtain a copy of
+ *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <drawinglayer/drawinglayerdllapi.h>
+#include <drawinglayer/primitive2d/CommonTypes.hxx>
+#include <basegfx/range/b2drange.hxx>
+
+namespace drawinglayer::geometry
+{
+class ViewInformation2D;
+}
+
+namespace drawinglayer::primitive2d
+{
+/// get B2DRange from a given Primitive2DReference
+basegfx::B2DRange DRAWINGLAYER_DLLPUBLIC getB2DRangeFromPrimitive2DReference(
+    const Primitive2DReference& rCandidate, const geometry::ViewInformation2D& aViewInformation);
+
+/** compare two Primitive2DReferences for equality, including trying to get implementations (BasePrimitive2D)
+    and using compare operator
+ */
+bool DRAWINGLAYER_DLLPUBLIC arePrimitive2DReferencesEqual(const Primitive2DReference& rA,
+                                                          const Primitive2DReference& rB);
+
+OUString DRAWINGLAYER_DLLPUBLIC idToString(sal_uInt32 nId);
+
+} // end of namespace drawinglayer::primitive2d
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/drawinglayer/primitive2d/baseprimitive2d.hxx b/include/drawinglayer/primitive2d/baseprimitive2d.hxx
index dfe196e2e608..5ac8fc31e1f7 100644
--- a/include/drawinglayer/primitive2d/baseprimitive2d.hxx
+++ b/include/drawinglayer/primitive2d/baseprimitive2d.hxx
@@ -23,11 +23,11 @@
 #include <drawinglayer/drawinglayerdllapi.h>
 
 #include <cppuhelper/compbase.hxx>
-#include <com/sun/star/graphic/XPrimitive2D.hpp>
+#include <drawinglayer/primitive2d/CommonTypes.hxx>
+#include <drawinglayer/primitive2d/Primitive2DContainer.hxx>
 #include <com/sun/star/util/XAccounting.hpp>
 #include <cppuhelper/basemutex.hxx>
 #include <basegfx/range/b2drange.hxx>
-#include <deque>
 
 /** defines for DeclPrimitive2DIDBlock and ImplPrimitive2DIDBlock
     Added to be able to simply change identification stuff later, e.g. add
@@ -47,75 +47,8 @@ class ViewInformation2D;
 
 namespace drawinglayer::primitive2d
 {
-/// typedefs for basePrimitive2DImplBase, Primitive2DSequence and Primitive2DReference
 typedef cppu::WeakComponentImplHelper<css::graphic::XPrimitive2D, css::util::XAccounting>
     BasePrimitive2DImplBase;
-typedef css::uno::Reference<css::graphic::XPrimitive2D> Primitive2DReference;
-typedef css::uno::Sequence<Primitive2DReference> Primitive2DSequence;
-
-class Primitive2DContainer;
-// Visitor class for walking a tree of Primitive2DReference in BasePrimitive2D::get2DDecomposition
-class DRAWINGLAYER_DLLPUBLIC Primitive2DDecompositionVisitor
-{
-public:
-    virtual void append(const Primitive2DReference&) = 0;
-    virtual void append(const Primitive2DContainer&) = 0;
-    virtual void append(Primitive2DContainer&&) = 0;
-    virtual ~Primitive2DDecompositionVisitor();
-};
-
-class SAL_WARN_UNUSED DRAWINGLAYER_DLLPUBLIC Primitive2DContainer
-    : public std::deque<Primitive2DReference>,
-      public Primitive2DDecompositionVisitor
-{
-public:
-    explicit Primitive2DContainer() {}
-    explicit Primitive2DContainer(size_type count)
-        : deque(count)
-    {
-    }
-    virtual ~Primitive2DContainer() override;
-    Primitive2DContainer(const Primitive2DContainer& other)
-        : deque(other)
-    {
-    }
-    Primitive2DContainer(Primitive2DContainer&& other) noexcept
-        : deque(std::move(other))
-    {
-    }
-    Primitive2DContainer(const std::deque<Primitive2DReference>& other)
-        : deque(other)
-    {
-    }
-    Primitive2DContainer(std::initializer_list<Primitive2DReference> init)
-        : deque(init)
-    {
-    }
-    template <class Iter>
-    Primitive2DContainer(Iter first, Iter last)
-        : deque(first, last)
-    {
-    }
-
-    virtual void append(const Primitive2DReference&) override;
-    virtual void append(const Primitive2DContainer& rSource) override;
-    virtual void append(Primitive2DContainer&& rSource) override;
-    void append(const Primitive2DSequence& rSource);
-    Primitive2DContainer& operator=(const Primitive2DContainer& r)
-    {
-        deque::operator=(r);
-        return *this;
-    }
-    Primitive2DContainer& operator=(Primitive2DContainer&& r) noexcept
-    {
-        deque::operator=(std::move(r));
-        return *this;
-    }
-    bool operator==(const Primitive2DContainer& rB) const;
-    bool operator!=(const Primitive2DContainer& rB) const { return !operator==(rB); }
-    basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& aViewInformation) const;
-    Primitive2DContainer maybeInvert(bool bInvert = false) const;
-};
 
 /** BasePrimitive2D class
 
@@ -189,7 +122,7 @@ public:
     the parameter ViewInformation2D is the same as the last one. This is usually the case
     for view-independent primitives which are defined by not using ViewInformation2D
     in their get2DDecomposition/getB2DRange implementations.
- */
+*/
 class DRAWINGLAYER_DLLPUBLIC BasePrimitive2D : protected cppu::BaseMutex,
                                                public BasePrimitive2DImplBase
 {
@@ -311,20 +244,6 @@ public:
                        const geometry::ViewInformation2D& rViewInformation) const override;
 };
 
-// tooling
-
-/// get B2DRange from a given Primitive2DReference
-basegfx::B2DRange DRAWINGLAYER_DLLPUBLIC getB2DRangeFromPrimitive2DReference(
-    const Primitive2DReference& rCandidate, const geometry::ViewInformation2D& aViewInformation);
-
-/** compare two Primitive2DReferences for equality, including trying to get implementations (BasePrimitive2D)
-    and using compare operator
- */
-bool DRAWINGLAYER_DLLPUBLIC arePrimitive2DReferencesEqual(const Primitive2DReference& rA,
-                                                          const Primitive2DReference& rB);
-
-OUString DRAWINGLAYER_DLLPUBLIC idToString(sal_uInt32 nId);
-
 } // end of namespace drawinglayer::primitive2d
 
 #endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_BASEPRIMITIVE2D_HXX
diff --git a/svgio/qa/cppunit/SvgImportTest.cxx b/svgio/qa/cppunit/SvgImportTest.cxx
index 4f6c2a24a3e0..9f09f9bda6e9 100644
--- a/svgio/qa/cppunit/SvgImportTest.cxx
+++ b/svgio/qa/cppunit/SvgImportTest.cxx
@@ -18,7 +18,7 @@
 #include <com/sun/star/graphic/SvgTools.hpp>
 #include <com/sun/star/graphic/XPrimitive2D.hpp>
 
-#include <drawinglayer/primitive2d/baseprimitive2d.hxx>
+#include <drawinglayer/primitive2d/Tools.hxx>
 #include <drawinglayer/tools/primitive2dxmldump.hxx>
 
 #include <memory>
diff --git a/svx/source/sdr/contact/viewcontactofsdrole2obj.cxx b/svx/source/sdr/contact/viewcontactofsdrole2obj.cxx
index 7e28ff387010..a492585bebc1 100644
--- a/svx/source/sdr/contact/viewcontactofsdrole2obj.cxx
+++ b/svx/source/sdr/contact/viewcontactofsdrole2obj.cxx
@@ -17,6 +17,7 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <drawinglayer/primitive2d/Tools.hxx>
 #include <sdr/contact/viewcontactofsdrole2obj.hxx>
 #include <svx/svdoole2.hxx>
 #include <sdr/contact/viewobjectcontactofsdrole2obj.hxx>


More information about the Libreoffice-commits mailing list