svx/inc/sdr/primitive2d/primitivefactory2d.hxx    |   76 ++++++++++++++++++++++
 svx/source/sdr/primitive2d/primitivefactory2d.cxx |   60 +++++------------
 svx/source/svdraw/charthelper.cxx                 |   16 +---
 3 files changed, 100 insertions(+), 52 deletions(-)

New commits:
commit 8fe1a3c479d4aeaeb3a378aaceb77f72edcfb7c8
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Mon Dec 6 10:05:27 2021 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Mon Dec 6 13:19:33 2021 +0100

    skip some intermediate results in tryToGetChartContentAsPrimitive2DSequence
    
    Change-Id: Idf3179c97fe40da1ff41100fc7e7a0b80ee1ca73
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/126403
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/svx/inc/sdr/primitive2d/primitivefactory2d.hxx 
b/svx/inc/sdr/primitive2d/primitivefactory2d.hxx
new file mode 100644
index 000000000000..fd6ded05ab18
--- /dev/null
+++ b/svx/inc/sdr/primitive2d/primitivefactory2d.hxx
@@ -0,0 +1,76 @@
+/* -*- 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/XPrimitiveFactory2D.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <cppuhelper/basemutex.hxx>
+#include <cppuhelper/compbase.hxx>
+#include <cppuhelper/supportsservice.hxx>
+#include <svx/svdobj.hxx>
+#include <svx/svdpage.hxx>
+#include <svx/unoapi.hxx>
+#include <svx/sdr/contact/viewcontact.hxx>
+#include <comphelper/sequence.hxx>
+
+typedef cppu::WeakComponentImplHelper<css::graphic::XPrimitiveFactory2D, 
css::lang::XServiceInfo>
+    PrimitiveFactory2DImplBase;
+
+// base class for C++ implementation of css::graphic::XPrimitiveFactory2D
+class PrimitiveFactory2D : protected cppu::BaseMutex, public 
PrimitiveFactory2DImplBase
+{
+public:
+    PrimitiveFactory2D()
+        : PrimitiveFactory2DImplBase(m_aMutex)
+    {
+    }
+
+    // Methods from XPrimitiveFactory2D
+    virtual css::uno::Sequence<css::uno::Reference<css::graphic::XPrimitive2D>>
+        SAL_CALL createPrimitivesFromXShape(
+            const css::uno::Reference<css::drawing::XShape>& xShape,
+            const css::uno::Sequence<css::beans::PropertyValue>& aParms) 
override;
+    virtual css::uno::Sequence<css::uno::Reference<css::graphic::XPrimitive2D>>
+        SAL_CALL createPrimitivesFromXDrawPage(
+            const css::uno::Reference<css::drawing::XDrawPage>& xDrawPage,
+            const css::uno::Sequence<css::beans::PropertyValue>& aParms) 
override;
+
+    static void createPrimitivesFromXShape(
+        const css::uno::Reference<css::drawing::XShape>& xShape,
+        const css::uno::Sequence<css::beans::PropertyValue>& /*aParms*/,
+        drawinglayer::primitive2d::Primitive2DDecompositionVisitor& rVisitor);
+
+    OUString SAL_CALL getImplementationName() override
+    {
+        return "com.sun.star.comp.graphic.PrimitiveFactory2D";
+    }
+
+    sal_Bool SAL_CALL supportsService(OUString const& ServiceName) override
+    {
+        return cppu::supportsService(this, ServiceName);
+    }
+
+    css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override
+    {
+        return css::uno::Sequence<OUString>{ 
"com.sun.star.graphic.PrimitiveFactory2D" };
+    }
+};
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/sdr/primitive2d/primitivefactory2d.cxx 
b/svx/source/sdr/primitive2d/primitivefactory2d.cxx
index a03a7c0a7dde..9625c8bcd41e 100644
--- a/svx/source/sdr/primitive2d/primitivefactory2d.cxx
+++ b/svx/source/sdr/primitive2d/primitivefactory2d.cxx
@@ -17,49 +17,10 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
-#include <com/sun/star/graphic/XPrimitiveFactory2D.hpp>
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/uno/XComponentContext.hpp>
-#include <cppuhelper/basemutex.hxx>
-#include <cppuhelper/compbase.hxx>
-#include <cppuhelper/supportsservice.hxx>
-#include <svx/svdobj.hxx>
-#include <svx/svdpage.hxx>
-#include <svx/unoapi.hxx>
-#include <svx/sdr/contact/viewcontact.hxx>
-#include <comphelper/sequence.hxx>
+#include <sdr/primitive2d/primitivefactory2d.hxx>
 
 using namespace com::sun::star;
 
-namespace {
-
-typedef cppu::WeakComponentImplHelper< css::graphic::XPrimitiveFactory2D, 
css::lang::XServiceInfo > PrimitiveFactory2DImplBase;
-
-// base class for C++ implementation of css::graphic::XPrimitiveFactory2D
-class PrimitiveFactory2D
-    :   protected cppu::BaseMutex,
-        public PrimitiveFactory2DImplBase
-{
-public:
-    PrimitiveFactory2D(): PrimitiveFactory2DImplBase(m_aMutex) {}
-
-            // Methods from XPrimitiveFactory2D
-    virtual css::uno::Sequence< css::uno::Reference< 
css::graphic::XPrimitive2D > > SAL_CALL createPrimitivesFromXShape( const 
css::uno::Reference< css::drawing::XShape >& xShape, const css::uno::Sequence< 
css::beans::PropertyValue >& aParms ) override;
-    virtual css::uno::Sequence< css::uno::Reference< 
css::graphic::XPrimitive2D > > SAL_CALL createPrimitivesFromXDrawPage( const 
css::uno::Reference< css::drawing::XDrawPage >& xDrawPage, const 
css::uno::Sequence< css::beans::PropertyValue >& aParms ) override;
-
-    OUString SAL_CALL getImplementationName() override
-    { return "com.sun.star.comp.graphic.PrimitiveFactory2D"; }
-
-    sal_Bool SAL_CALL supportsService(OUString const & ServiceName) override
-    { return cppu::supportsService(this, ServiceName); }
-
-    css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override
-    {
-        return css::uno::Sequence<OUString>{
-            "com.sun.star.graphic.PrimitiveFactory2D"};
-    }
-};
-
 css::uno::Sequence< css::uno::Reference< css::graphic::XPrimitive2D > > 
SAL_CALL PrimitiveFactory2D::createPrimitivesFromXShape(
     const uno::Reference< drawing::XShape >& xShape,
     const uno::Sequence< beans::PropertyValue >& /*aParms*/ )
@@ -82,6 +43,23 @@ css::uno::Sequence< css::uno::Reference< 
css::graphic::XPrimitive2D > > SAL_CALL
     return aRetval;
 }
 
+void PrimitiveFactory2D::createPrimitivesFromXShape(
+    const uno::Reference< drawing::XShape >& xShape,
+    const uno::Sequence< beans::PropertyValue >& /*aParms*/,
+    drawinglayer::primitive2d::Primitive2DDecompositionVisitor& rVisitor)
+{
+    if(xShape.is())
+    {
+        SdrObject* pSource = SdrObject::getSdrObjectFromXShape(xShape);
+
+        if(pSource)
+        {
+            const sdr::contact::ViewContact& 
rSource(pSource->GetViewContact());
+            rSource.getViewIndependentPrimitive2DContainer(rVisitor);
+        }
+    }
+}
+
 css::uno::Sequence< css::uno::Reference< css::graphic::XPrimitive2D > > 
SAL_CALL PrimitiveFactory2D::createPrimitivesFromXDrawPage(
     const uno::Reference< drawing::XDrawPage >& xDrawPage,
     const uno::Sequence< beans::PropertyValue >& /*aParms*/ )
@@ -104,8 +82,6 @@ css::uno::Sequence< css::uno::Reference< 
css::graphic::XPrimitive2D > > SAL_CALL
     return aRetval;
 }
 
-}
-
 extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface *
 com_sun_star_comp_graphic_PrimitiveFactory2D_get_implementation(
     css::uno::XComponentContext *,
diff --git a/svx/source/svdraw/charthelper.cxx 
b/svx/source/svdraw/charthelper.cxx
index 764abf0d3ec9..737bf792e320 100644
--- a/svx/source/svdraw/charthelper.cxx
+++ b/svx/source/svdraw/charthelper.cxx
@@ -30,6 +30,8 @@
 #include <com/sun/star/chart2/XChartDocument.hpp>
 #include <com/sun/star/drawing/FillStyle.hpp>
 #include <com/sun/star/drawing/LineStyle.hpp>
+#include <rtl/ref.hxx>
+#include <sdr/primitive2d/primitivefactory2d.hxx>
 
 using namespace ::com::sun::star;
 
@@ -71,10 +73,6 @@ drawinglayer::primitive2d::Primitive2DContainer 
ChartHelper::tryToGetChartConten
         if(xShapeAccess->getCount())
         {
             const sal_Int32 nShapeCount(xShapeAccess->getCount());
-            const uno::Reference< uno::XComponentContext > 
xContext(::comphelper::getProcessComponentContext());
-            const uno::Reference< graphic::XPrimitiveFactory2D > 
xPrimitiveFactory =
-                graphic::PrimitiveFactory2D::create( xContext );
-
             const uno::Sequence< beans::PropertyValue > aParams;
             uno::Reference< drawing::XShape > xShape;
 
@@ -84,12 +82,10 @@ drawinglayer::primitive2d::Primitive2DContainer 
ChartHelper::tryToGetChartConten
 
                 if(xShape.is())
                 {
-                    const drawinglayer::primitive2d::Primitive2DSequence aNew(
-                            xPrimitiveFactory->createPrimitivesFromXShape(
-                                xShape,
-                                aParams));
-
-                    aRetval.append(aNew);
+                    PrimitiveFactory2D::createPrimitivesFromXShape(
+                        xShape,
+                        aParams,
+                        aRetval);
                 }
             }
         }

Reply via email to