1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 14:27:35 +00:00

WindowServer: Retain window backing stores while blitting them.

This commit is contained in:
Andreas Kling 2019-01-25 03:07:55 +01:00
parent 8a3af99416
commit a915dd7b27

View file

@ -336,7 +336,8 @@ void WSWindowManager::compose()
} }
for (auto* window = m_windows_in_order.head(); window; window = window->next()) { for (auto* window = m_windows_in_order.head(); window; window = window->next()) {
WSWindowLocker locker(*window); WSWindowLocker locker(*window);
if (!window->backing()) RetainPtr<GraphicsBitmap> backing = window->backing();
if (!backing)
continue; continue;
if (!any_dirty_rect_intersects_window(*window)) if (!any_dirty_rect_intersects_window(*window))
continue; continue;
@ -350,7 +351,7 @@ void WSWindowManager::compose()
dirty_rect_in_window_coordinates.set_y(dirty_rect_in_window_coordinates.y() - window->y()); dirty_rect_in_window_coordinates.set_y(dirty_rect_in_window_coordinates.y() - window->y());
auto dst = window->position(); auto dst = window->position();
dst.move_by(dirty_rect_in_window_coordinates.location()); dst.move_by(dirty_rect_in_window_coordinates.location());
m_back_painter->blit(dst, *window->backing(), dirty_rect_in_window_coordinates); m_back_painter->blit(dst, *backing, dirty_rect_in_window_coordinates);
m_back_painter->clear_clip_rect(); m_back_painter->clear_clip_rect();
} }
m_back_painter->clear_clip_rect(); m_back_painter->clear_clip_rect();