summaryrefslogtreecommitdiff
path: root/svx
diff options
context:
space:
mode:
authorNoel Grandin <noelgrandin@gmail.com>2021-12-23 21:45:19 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2021-12-24 08:21:18 +0100
commit5e6d6be86bf29896e030af5c0f770f2b389d7e8a (patch)
treeb856314cca469c65ed5c30d20aafd4dcc44239f2 /svx
parent252dd254b5b29298457b889623783152e9bed534 (diff)
regression from commit fe6a140a537eda1b6703c44ff5ee49d2ba875b81 Author: Noel Grandin <noel.grandin@collabora.co.uk> Date: Tue Dec 7 14:55:13 2021 +0200 used cache value in ViewObjectContact::getPrimitive2DSequence Unfortunately various things like scrolling/zooming/moving item to new page do not seem to invalidate the VOC, and I can't track down the right place to do that, so just revert. Change-Id: I8009c99417f634b26adc770b6d6d2eb6969d9629 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127389 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'svx')
-rw-r--r--svx/source/sdr/contact/viewobjectcontact.cxx27
1 files changed, 6 insertions, 21 deletions
diff --git a/svx/source/sdr/contact/viewobjectcontact.cxx b/svx/source/sdr/contact/viewobjectcontact.cxx
index 79b2d03e625c..1dd8fef29415 100644
--- a/svx/source/sdr/contact/viewobjectcontact.cxx
+++ b/svx/source/sdr/contact/viewobjectcontact.cxx
@@ -147,7 +147,6 @@ ViewObjectContact::ViewObjectContact(ObjectContact& rObjectContact, ViewContact&
: mrObjectContact(rObjectContact),
mrViewContact(rViewContact),
maGridOffset(0.0, 0.0),
- mnActionChangedCount(0),
mbLazyInvalidate(false)
{
// make the ViewContact remember me
@@ -194,7 +193,7 @@ const basegfx::B2DRange& ViewObjectContact::getObjectRange() const
{
// if range is not computed (new or LazyInvalidate objects), force it
const DisplayInfo aDisplayInfo;
- const drawinglayer::primitive2d::Primitive2DContainer& xSequence(getPrimitive2DSequence(aDisplayInfo));
+ const drawinglayer::primitive2d::Primitive2DContainer xSequence(getPrimitive2DSequence(aDisplayInfo));
if(!xSequence.empty())
{
@@ -209,10 +208,6 @@ const basegfx::B2DRange& ViewObjectContact::getObjectRange() const
void ViewObjectContact::ActionChanged()
{
- // clear cached primitives
- mxPrimitive2DSequence.clear();
- ++mnActionChangedCount;
-
if(mbLazyInvalidate)
return;
@@ -335,9 +330,6 @@ void ViewObjectContact::createPrimitive2DSequence(const DisplayInfo& rDisplayInf
drawinglayer::primitive2d::Primitive2DContainer const & ViewObjectContact::getPrimitive2DSequence(const DisplayInfo& rDisplayInfo) const
{
- if (!mxPrimitive2DSequence.empty())
- return mxPrimitive2DSequence;
-
/**
This method is weird because
(1) we have to re-walk the primitive tree because the flushing is unreliable
@@ -423,28 +415,21 @@ void ViewObjectContact::getPrimitive2DSequenceHierarchy(DisplayInfo& rDisplayInf
if(!isPrimitiveVisible(rDisplayInfo))
return;
- getPrimitive2DSequence(rDisplayInfo);
- if(mxPrimitive2DSequence.empty())
+ drawinglayer::primitive2d::Primitive2DContainer xRetval = getPrimitive2DSequence(rDisplayInfo);
+ if(xRetval.empty())
return;
// get ranges
const drawinglayer::geometry::ViewInformation2D& rViewInformation2D(GetObjectContact().getViewInformation2D());
+ const basegfx::B2DRange aObjectRange(xRetval.getB2DRange(rViewInformation2D));
const basegfx::B2DRange& aViewRange(rViewInformation2D.getViewport());
// check geometrical visibility
- bool bVisible = aViewRange.isEmpty() || aViewRange.overlaps(maObjectRange);
+ bool bVisible = aViewRange.isEmpty() || aViewRange.overlaps(aObjectRange);
if(!bVisible)
return;
- // temporarily take over the mxPrimitive2DSequence, in case it gets invalidated while we want to iterate over it
- auto tmp = std::move(const_cast<ViewObjectContact*>(this)->mxPrimitive2DSequence);
- int nPrevCount = mnActionChangedCount;
-
- rVisitor.visit(tmp);
-
- // if we received ActionChanged() calls while walking the primitives, then leave it empty, otherwise move it back
- if (mnActionChangedCount == nPrevCount)
- const_cast<ViewObjectContact*>(this)->mxPrimitive2DSequence = std::move(tmp);
+ rVisitor.visit(std::move(xRetval));
}
void ViewObjectContact::getPrimitive2DSequenceSubHierarchy(DisplayInfo& rDisplayInfo, drawinglayer::primitive2d::Primitive2DDecompositionVisitor& rVisitor) const