summaryrefslogtreecommitdiff
path: root/svx
diff options
context:
space:
mode:
authorNoel Grandin <noelgrandin@gmail.com>2021-12-07 18:53:11 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2021-12-23 11:45:33 +0100
commite3bd776e020723ad8caf0a02d8db0d19e0f0e650 (patch)
tree8ed999eb97278d2cb7954695f03d0bc3652ee6b0 /svx
parentbe596c0192f059324d06716b625be6a11079f8ea (diff)
Split BasePrimitive2D UNO interface into separate object
Rather than make all the BasePrimitive2D classes bear the cost of being an UNO object, we just wrap the top level BasePrimitive2D in this class when we need to pass them over UNO. This reduces the locking overhead when doing normal drawinglayer operations, and reduces the size of drawinglayer objects and the cost of initialising them, which shaves 5% off the load/display time of a large barchart. Add new drawinglayer::convertPrimitive2DContainerToBitmapEx utility method to avoid needing to convert to Sequence<XPrimitive2D> Change-Id: I553eaa4c16ba016b098cb21f6c55f5008f0d9b53 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/126487 Tested-by: Noel Grandin <noel.grandin@collabora.co.uk> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'svx')
-rw-r--r--svx/source/dialog/frmsel.cxx1
-rw-r--r--svx/source/sdr/primitive2d/primitivefactory2d.cxx4
-rw-r--r--svx/source/sdr/primitive2d/sdrdecompositiontools.cxx4
-rw-r--r--svx/source/svdraw/svdograf.cxx6
-rw-r--r--svx/source/svdraw/svdpntv.cxx3
-rw-r--r--svx/source/svdraw/svdview.cxx11
-rw-r--r--svx/source/svdraw/svdxcgv.cxx5
-rw-r--r--svx/source/unodraw/unoshape.cxx5
8 files changed, 20 insertions, 19 deletions
diff --git a/svx/source/dialog/frmsel.cxx b/svx/source/dialog/frmsel.cxx
index e2be7400f89c..117bec6f6784 100644
--- a/svx/source/dialog/frmsel.cxx
+++ b/svx/source/dialog/frmsel.cxx
@@ -38,6 +38,7 @@
#include <vcl/svapp.hxx>
#include <drawinglayer/processor2d/processor2dtools.hxx>
#include <drawinglayer/processor2d/baseprocessor2d.hxx>
+#include <drawinglayer/primitive2d/Primitive2DContainer.hxx>
#include <bitmaps.hlst>
diff --git a/svx/source/sdr/primitive2d/primitivefactory2d.cxx b/svx/source/sdr/primitive2d/primitivefactory2d.cxx
index 9625c8bcd41e..620bc0e4f5a9 100644
--- a/svx/source/sdr/primitive2d/primitivefactory2d.cxx
+++ b/svx/source/sdr/primitive2d/primitivefactory2d.cxx
@@ -36,7 +36,7 @@ css::uno::Sequence< css::uno::Reference< css::graphic::XPrimitive2D > > SAL_CALL
const sdr::contact::ViewContact& rSource(pSource->GetViewContact());
drawinglayer::primitive2d::Primitive2DContainer aSourceVal;
rSource.getViewIndependentPrimitive2DContainer(aSourceVal);
- aRetval = comphelper::containerToSequence(aSourceVal);
+ aRetval = aSourceVal.toSequence();
}
}
@@ -75,7 +75,7 @@ css::uno::Sequence< css::uno::Reference< css::graphic::XPrimitive2D > > SAL_CALL
const sdr::contact::ViewContact& rSource(pSource->GetViewContact());
drawinglayer::primitive2d::Primitive2DContainer aSourceRetval;
rSource.getViewIndependentPrimitive2DContainer(aSourceRetval);
- aRetval = comphelper::containerToSequence(aSourceRetval);
+ aRetval = aSourceRetval.toSequence();
}
}
diff --git a/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx b/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx
index 017be7b4f5bb..18f1a0918fed 100644
--- a/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx
+++ b/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx
@@ -212,7 +212,7 @@ basegfx::B2DRange getTextAnchorRange(const attribute::SdrTextAttribute& rText,
else
{
// add to decomposition
- return Primitive2DReference(pNewFillPrimitive);
+ return pNewFillPrimitive;
}
}
@@ -249,7 +249,7 @@ basegfx::B2DRange getTextAnchorRange(const attribute::SdrTextAttribute& rText,
else
{
// add to decomposition
- return Primitive2DReference(pNewLinePrimitive);
+ return pNewLinePrimitive;
}
}
diff --git a/svx/source/svdraw/svdograf.cxx b/svx/source/svdraw/svdograf.cxx
index 67bd14cc8622..2b95bb7207f3 100644
--- a/svx/source/svdraw/svdograf.cxx
+++ b/svx/source/svdraw/svdograf.cxx
@@ -145,15 +145,15 @@ void SdrGrafObj::onGraphicChanged()
if (rVectorGraphicDataPtr->getType() == VectorGraphicDataType::Pdf)
return;
- const drawinglayer::primitive2d::Primitive2DContainer aSequence(rVectorGraphicDataPtr->getPrimitive2DSequence());
+ const std::deque<css::uno::Reference<css::graphic::XPrimitive2D>>& rContainer(rVectorGraphicDataPtr->getPrimitive2DSequence());
- if (aSequence.empty())
+ if (rContainer.empty())
return;
drawinglayer::geometry::ViewInformation2D aViewInformation2D;
drawinglayer::processor2d::ObjectInfoPrimitiveExtractor2D aProcessor(aViewInformation2D);
- aProcessor.process(aSequence);
+ aProcessor.process(rContainer);
const drawinglayer::primitive2d::ObjectInfoPrimitive2D* pResult = aProcessor.getResult();
diff --git a/svx/source/svdraw/svdpntv.cxx b/svx/source/svdraw/svdpntv.cxx
index e8c42b4651d1..5ab5b150d175 100644
--- a/svx/source/svdraw/svdpntv.cxx
+++ b/svx/source/svdraw/svdpntv.cxx
@@ -41,6 +41,7 @@
#include <svx/sdr/contact/objectcontact.hxx>
#include <svx/sdr/animation/objectanimator.hxx>
#include <drawinglayer/primitive2d/metafileprimitive2d.hxx>
+#include <drawinglayer/converters.hxx>
#include <basegfx/matrix/b2dhommatrixtools.hxx>
#include <comphelper/lok.hxx>
#include <svx/svdviter.hxx>
@@ -118,7 +119,7 @@ BitmapEx convertMetafileToBitmapEx(
rTargetRange.getRange(),
rTargetRange.getMinimum()),
rMtf));
- aBitmapEx = convertPrimitive2DSequenceToBitmapEx(
+ aBitmapEx = drawinglayer::convertPrimitive2DContainerToBitmapEx(
drawinglayer::primitive2d::Primitive2DContainer { aMtf },
rTargetRange,
nMaximumQuadraticPixels);
diff --git a/svx/source/svdraw/svdview.cxx b/svx/source/svdraw/svdview.cxx
index 0dddaf873c3b..55731106abf8 100644
--- a/svx/source/svdraw/svdview.cxx
+++ b/svx/source/svdraw/svdview.cxx
@@ -456,14 +456,11 @@ SdrHitKind SdrView::PickAnything(const Point& rLogicPos, SdrViewEvent& rVEvt) co
for (const drawinglayer::primitive2d::Primitive2DReference& xReference : aHitContainer)
{
- if (xReference.is())
+ auto pBasePrimitive = xReference.get();
+ if (pBasePrimitive && pBasePrimitive->getPrimitive2DID() == PRIMITIVE2D_ID_TEXTHIERARCHYFIELDPRIMITIVE2D)
{
- auto pBasePrimitive = static_cast<const drawinglayer::primitive2d::BasePrimitive2D*>(xReference.get());
- if (pBasePrimitive->getPrimitive2DID() == PRIMITIVE2D_ID_TEXTHIERARCHYFIELDPRIMITIVE2D)
- {
- pTextHierarchyFieldPrimitive2D = static_cast<const drawinglayer::primitive2d::TextHierarchyFieldPrimitive2D*>(xReference.get());
- break;
- }
+ pTextHierarchyFieldPrimitive2D = static_cast<const drawinglayer::primitive2d::TextHierarchyFieldPrimitive2D*>(pBasePrimitive);
+ break;
}
}
diff --git a/svx/source/svdraw/svdxcgv.cxx b/svx/source/svdraw/svdxcgv.cxx
index 8e84ff133626..c4725d899566 100644
--- a/svx/source/svdraw/svdxcgv.cxx
+++ b/svx/source/svdraw/svdxcgv.cxx
@@ -43,6 +43,7 @@
#include <vcl/vectorgraphicdata.hxx>
#include <drawinglayer/primitive2d/groupprimitive2d.hxx>
#include <drawinglayer/geometry/viewinformation2d.hxx>
+#include <drawinglayer/converters.hxx>
#include <svx/sdr/contact/viewcontact.hxx>
#include <sdr/contact/objectcontactofobjlistpainter.hxx>
#include <svx/sdr/contact/displayinfo.hxx>
@@ -502,8 +503,8 @@ BitmapEx SdrExchangeView::GetMarkedObjBitmapEx(bool bNoVDevIfOneBmpMarked, const
// if we have geometry and it has a range, convert to BitmapEx using
// common tooling
- aBmp = convertPrimitive2DSequenceToBitmapEx(
- xPrimitives,
+ aBmp = drawinglayer::convertPrimitive2DContainerToBitmapEx(
+ std::move(xPrimitives),
aRange,
nMaximumQuadraticPixels,
eRangeUnit,
diff --git a/svx/source/unodraw/unoshape.cxx b/svx/source/unodraw/unoshape.cxx
index 86b3d875d64a..94a7b2540ec6 100644
--- a/svx/source/unodraw/unoshape.cxx
+++ b/svx/source/unodraw/unoshape.cxx
@@ -80,6 +80,7 @@
#include <svx/lathe3d.hxx>
#include <extrud3d.hxx>
#include <svx/sdr/contact/viewcontact.hxx>
+#include <drawinglayer/converters.hxx>
#include <drawinglayer/geometry/viewinformation2d.hxx>
#include <drawinglayer/primitive2d/transformprimitive2d.hxx>
@@ -748,8 +749,8 @@ uno::Any SvxShape::GetBitmap( bool bMetaFile /* = false */ ) const
}
const BitmapEx aBmp(
- convertPrimitive2DSequenceToBitmapEx(
- xPrimitives,
+ drawinglayer::convertPrimitive2DContainerToBitmapEx(
+ std::move(xPrimitives),
aRange));
Graphic aGraph(aBmp);