summaryrefslogtreecommitdiff
path: root/svx/source/sdr
diff options
context:
space:
mode:
authorMichael Meeks <michael.meeks@suse.com>2012-12-12 11:29:37 +0000
committerMichael Meeks <michael.meeks@suse.com>2012-12-12 11:37:30 +0000
commit6c98ad71478cb72b51634b32d6e553ccaec30190 (patch)
tree12eeb072ace6e74aace3f1e53ac22e5a8fcab15a /svx/source/sdr
parentcfa0588e04ee3d132081212ac38fda7c83c45024 (diff)
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
Diffstat (limited to 'svx/source/sdr')
-rw-r--r--svx/source/sdr/overlay/overlaymanagerbuffered.cxx21
1 files changed, 4 insertions, 17 deletions
diff --git a/svx/source/sdr/overlay/overlaymanagerbuffered.cxx b/svx/source/sdr/overlay/overlaymanagerbuffered.cxx
index 64ac99d1f565..6b394bef5ebe 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);
}
}