Kaydet (Commit) c9175a1b authored tarafından Miklos Vajna's avatar Miklos Vajna

SwViewShell::ImplEndAction: avoid direct PaintDesktop()

With double-buffering enabled and typing quickly, one saw blinks in the
text sometimes. The reason was that PaintDesktop() painted directly
outside SwViewShell::Paint().

The problem is more visible with VCL_DOUBLEBUFFERING_AVOID_PAINT=1,
loading a simple document + pressing a key draw an unexpected white
rectangle.

Given that InvalidateWindows() already calls PaintDesktop() inside
Paint() implicitly (via SwViewShell::Paint()), fix the problem by just
avoiding the DLPrePaint2() + PaintDesktop() + DLPostPaint2() calls.

Change-Id: Ib8ce26a0bdd526bf85d362f0e865dd61d29f6d11
üst abbe4f9d
......@@ -405,20 +405,7 @@ void SwViewShell::ImplEndAction( const bool bIdleEnd )
}
if ( bPaint )
{
// #i75172# begin DrawingLayer paint
// need to do begin/end DrawingLayer preparation for each single rectangle of the
// repaint region. I already tried to prepare only once for the whole Region. This
// seems to work (and does technically) but fails with transparent objects. Since the
// region given to BeginDarwLayers() defines the clip region for DrawingLayer paint,
// transparent objects in the single rectangles will indeed be painted multiple times.
DLPrePaint2(vcl::Region(aRect.SVRect()));
if ( bPaintsFromSystem )
PaintDesktop(*GetOut(), aRect);
pCurrentLayout->GetCurrShell()->InvalidateWindows(aRect.SVRect());
// #i75172# end DrawingLayer paint
DLPostPaint2(true);
InvalidateWindows(aRect.SVRect());
}
lcl_PaintTransparentFormControls(*this, aRect); // i#107365
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment