Преглед изворни кода

WindowServer: Retain window backing stores while blitting them.

Andreas Kling пре 6 година
родитељ
комит
a915dd7b27
1 измењених фајлова са 3 додато и 2 уклоњено
  1. 3 2
      WindowServer/WSWindowManager.cpp

+ 3 - 2
WindowServer/WSWindowManager.cpp

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