[Libreoffice-commits] .: svx/source
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Wed Dec 12 03:37:59 PST 2012
svx/source/sdr/overlay/overlaymanagerbuffered.cxx | 21 ++++-----------------
1 file changed, 4 insertions(+), 17 deletions(-)
New commits:
commit 6c98ad71478cb72b51634b32d6e553ccaec30190
Author: Michael Meeks <michael.meeks at suse.com>
Date: Wed Dec 12 11:29:37 2012 +0000
fdo#58029 - substantially accelerate re-rendering of complex forms
Some writer VCL Windows appear to have thousands of children. Remove
an N^2 in handling them, and let VCL do the job instead. i#103611
continues to stay fixed for simpler code.
Change-Id: I63ddc0647f22c7e60feaaff6b795712c04693c05
diff --git a/svx/source/sdr/overlay/overlaymanagerbuffered.cxx b/svx/source/sdr/overlay/overlaymanagerbuffered.cxx
index 64ac99d..6b394be 100644
--- a/svx/source/sdr/overlay/overlaymanagerbuffered.cxx
+++ b/svx/source/sdr/overlay/overlaymanagerbuffered.cxx
@@ -348,28 +348,15 @@ namespace sdr
if(bTargetIsWindow)
{
Window& rWindow = static_cast< Window& >(rmOutputDevice);
-
- if(rWindow.IsChildTransparentModeEnabled() && rWindow.GetChildCount())
+ if(rWindow.IsChildTransparentModeEnabled())
{
+ // Get VCL to invalidate it's children - more efficiently. fdo#58029
const Rectangle aRegionRectanglePixel(
maBufferRememberedRangePixel.getMinX(), maBufferRememberedRangePixel.getMinY(),
maBufferRememberedRangePixel.getMaxX(), maBufferRememberedRangePixel.getMaxY());
- for(sal_uInt16 a(0); a < rWindow.GetChildCount(); a++)
- {
- Window* pCandidate = rWindow.GetChild(a);
-
- if(pCandidate && pCandidate->IsPaintTransparent())
- {
- const Rectangle aCandidatePosSizePixel(pCandidate->GetPosPixel(), pCandidate->GetSizePixel());
-
- if(aCandidatePosSizePixel.IsOver(aRegionRectanglePixel))
- {
- pCandidate->Invalidate(INVALIDATE_NOTRANSPARENT|INVALIDATE_CHILDREN);
- pCandidate->Update();
- }
- }
- }
+ rWindow.Invalidate(aRegionRectanglePixel,
+ INVALIDATE_NOTRANSPARENT|INVALIDATE_CHILDREN|INVALIDATE_UPDATE);
}
}
More information about the Libreoffice-commits
mailing list