1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-28 16:45:09 +00:00

Add client-side double buffering of window backing stores.

This prevents flicker and looks rather good. The main downside is that
resizing gets even more sluggish. That's the price we pay for now.
This commit is contained in:
Andreas Kling 2019-03-17 04:23:54 +01:00
parent 2ac4f54724
commit 4e451c1e92
12 changed files with 95 additions and 39 deletions

View file

@ -916,8 +916,6 @@ void WSWindowManager::compose()
for_each_visible_window_from_back_to_front([&] (WSWindow& window) {
RetainPtr<GraphicsBitmap> backing_store = window.backing_store();
if (!backing_store)
return IterationDecision::Continue;
if (!any_dirty_rect_intersects_window(window))
return IterationDecision::Continue;
PainterStateSaver saver(*m_back_painter);
@ -928,6 +926,8 @@ void WSWindowManager::compose()
PainterStateSaver saver(*m_back_painter);
m_back_painter->set_clip_rect(dirty_rect);
paint_window_frame(window);
if (!backing_store)
continue;
Rect dirty_rect_in_window_coordinates = Rect::intersection(dirty_rect, window.rect());
if (dirty_rect_in_window_coordinates.is_empty())
continue;