mirror of
https://github.com/fergalmoran/ladybird.git
synced 2026-02-05 07:15:46 +00:00
Refactor GUI rendering model to be two-phased.
Instead of clients painting whenever they feel like it, we now ask that they paint in response to a paint message. After finishing painting, clients notify the WindowServer about the rect(s) they painted into and then flush eventually happens, etc. This stuff leaves us with a lot of badly named things. Need to fix that.
This commit is contained in:
@@ -94,6 +94,21 @@ void WSEventLoop::post_event(WSEventReceiver* receiver, OwnPtr<WSEvent>&& event)
|
||||
}
|
||||
}
|
||||
|
||||
if (event->type() == WSEvent::Paint) {
|
||||
auto& invalidation_event = static_cast<WSPaintEvent&>(*event);
|
||||
for (auto& queued_event : m_queued_events) {
|
||||
if (receiver == queued_event.receiver && queued_event.event->type() == WSEvent::Paint) {
|
||||
auto& queued_invalidation_event = static_cast<WSPaintEvent&>(*queued_event.event);
|
||||
if (queued_invalidation_event.rect().is_empty() || queued_invalidation_event.rect().contains(invalidation_event.rect())) {
|
||||
#ifdef WSEVENTLOOP_DEBUG
|
||||
dbgprintf("Swallow WM_Paint\n");
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_queued_events.append({ receiver, move(event) });
|
||||
|
||||
if (current != m_server_process)
|
||||
|
||||
Reference in New Issue
Block a user