[Libreoffice-commits] .: Branch 'libreoffice-4-0' - svx/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Wed Dec 12 05:53:50 PST 2012


 svx/source/sdr/overlay/overlaymanagerbuffered.cxx |   21 ++++-----------------
 1 file changed, 4 insertions(+), 17 deletions(-)

New commits:
commit b69b6eff232ac7e4897a28cc3422aa61171f4329
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