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

LibGUI: Add Widget::repaint() to force an immediate repaint

In most situations, Widget::update() is preferable, since that allows us
to coalesce repaints and avoid redundant work, reducing system load.

However, there are some cases where you really want a paint to happen
right away, to make sure that the user has a chance to see a short-lived
visual state.
This commit is contained in:
Andreas Kling 2021-10-23 17:53:11 +02:00
parent da86f4e384
commit 24651f854c
4 changed files with 33 additions and 0 deletions

View file

@ -616,6 +616,22 @@ void Widget::update(const Gfx::IntRect& rect)
window->update(bound_by_widget.translated(window_relative_rect().location()));
}
void Widget::repaint()
{
if (rect().is_empty())
return;
repaint(rect());
}
void Widget::repaint(Gfx::IntRect const& rect)
{
auto* window = this->window();
if (!window)
return;
update(rect);
window->flush_pending_paints_immediately();
}
Gfx::IntRect Widget::window_relative_rect() const
{
auto rect = relative_rect();