summaryrefslogtreecommitdiff
path: root/svx/source/svdraw/sdrpaintwindow.cxx
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2013-06-24 19:50:30 +0200
committerMichael Stahl <mstahl@redhat.com>2013-06-24 20:17:43 +0200
commit38dcfadda85058a0ee87292c8943aec82e34b81e (patch)
tree1157a8d80f7f8927f0010d850d6bd7ac5275fbbb /svx/source/svdraw/sdrpaintwindow.cxx
parentf022f39638fbe970f1b839c757dcccd3baa69445 (diff)
fdo#58029: replace quadratic child window loop with linear
... which should speed things up without introducing problems. (Window::GetChild(n) is inefficient because the children are a linked list) Change-Id: I343d51a6866c5014cbca4c256b0c15f938958c39
Diffstat (limited to 'svx/source/svdraw/sdrpaintwindow.cxx')
-rw-r--r--svx/source/svdraw/sdrpaintwindow.cxx27
1 files changed, 27 insertions, 0 deletions
diff --git a/svx/source/svdraw/sdrpaintwindow.cxx b/svx/source/svdraw/sdrpaintwindow.cxx
index a550c9e0bf68..6abacc5089ed 100644
--- a/svx/source/svdraw/sdrpaintwindow.cxx
+++ b/svx/source/svdraw/sdrpaintwindow.cxx
@@ -23,6 +23,33 @@
#include <vcl/gdimtf.hxx>
#include <vcl/svapp.hxx>
+
+void PaintTransparentChildren(Window & rWindow, Rectangle const& rPixelRect)
+{
+ if (rWindow.IsChildTransparentModeEnabled())
+ {
+ Window * pCandidate = rWindow.GetWindow( WINDOW_FIRSTCHILD );
+ while (pCandidate)
+ {
+ if (pCandidate->IsPaintTransparent())
+ {
+ const Rectangle aCandidatePosSizePixel(
+ pCandidate->GetPosPixel(),
+ pCandidate->GetSizePixel());
+
+ if (aCandidatePosSizePixel.IsOver(rPixelRect))
+ {
+ pCandidate->Invalidate(
+ INVALIDATE_NOTRANSPARENT|INVALIDATE_CHILDREN );
+ // important: actually paint the child here!
+ pCandidate->Update();
+ }
+ }
+ pCandidate = pCandidate->GetWindow( WINDOW_NEXT );
+ }
+ }
+}
+
////////////////////////////////////////////////////////////////////////////////////////////////////
SdrPreRenderDevice::SdrPreRenderDevice(OutputDevice& rOriginal)