1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 05:57:45 +00:00

WindowServer: Improve screen invalidation on window state changes

Because window states and various flags can affect the windows'
rendered areas it's safer to use the last computed occlusion rectangles
to invalidate areas on the screen that may have to be re-rendered due
to e.g. a window size change.

Fixes #6723
This commit is contained in:
Tom 2021-07-04 15:47:17 -06:00 committed by Andreas Kling
parent 7fdf902e4a
commit fdf701ed96
6 changed files with 85 additions and 45 deletions

View file

@ -201,6 +201,9 @@ public:
void invalidate(const Gfx::IntRect&, bool with_frame = false);
void invalidate_menubar();
bool invalidate_no_notify(const Gfx::IntRect& rect, bool with_frame = false);
void invalidate_last_rendered_screen_rects();
void invalidate_last_rendered_screen_rects_now();
[[nodiscard]] bool should_invalidate_last_rendered_screen_rects() { return exchange(m_invalidate_last_render_rects, false); }
void refresh_client_size();
@ -409,6 +412,7 @@ private:
bool m_hit_testing_enabled { true };
bool m_modified { false };
bool m_moving_to_another_stack { false };
bool m_invalidate_last_render_rects { false };
WindowTileType m_tiled { WindowTileType::None };
Gfx::IntRect m_untiled_rect;
bool m_occluded { false };