diff options
author | Michael Meeks <michael.meeks@suse.com> | 2012-12-12 11:29:37 +0000 |
---|---|---|
committer | Michael Meeks <michael.meeks@suse.com> | 2012-12-12 11:37:30 +0000 |
commit | 6c98ad71478cb72b51634b32d6e553ccaec30190 (patch) | |
tree | 12eeb072ace6e74aace3f1e53ac22e5a8fcab15a /svx/source/sdr | |
parent | cfa0588e04ee3d132081212ac38fda7c83c45024 (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.cxx | 21 |
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); } } |