mirror of
https://github.com/RGBCube/serenity
synced 2025-05-20 11:55:08 +00:00
Port Terminal to LibGUI.
To facilitate listening for action on arbitrary file descriptors, I've added a GNotifier class. It's quite simple but very useful: GNotifier notifier(fd, GNotifier::Read); notifier.on_ready_to_read = [this] (GNotifier& fd) { // read from fd or whatever else you like :^) }; The callback will get invoked by GEventLoop when select() says we have something to read on the fd.
This commit is contained in:
parent
ae4811fbae
commit
53d34a0885
15 changed files with 268 additions and 151 deletions
|
@ -34,16 +34,11 @@ void GWidget::set_relative_rect(const Rect& rect)
|
|||
update();
|
||||
}
|
||||
|
||||
void GWidget::repaint(const Rect& rect)
|
||||
{
|
||||
// FIXME: Implement.
|
||||
}
|
||||
|
||||
void GWidget::event(GEvent& event)
|
||||
{
|
||||
switch (event.type()) {
|
||||
case GEvent::Paint:
|
||||
m_has_pending_paint_event = false;
|
||||
m_pending_paint_event_rects.clear();
|
||||
return handle_paint_event(static_cast<GPaintEvent&>(event));
|
||||
case GEvent::Resize:
|
||||
return handle_resize_event(static_cast<GResizeEvent&>(event));
|
||||
|
@ -171,14 +166,21 @@ void GWidget::focusout_event(GEvent&)
|
|||
}
|
||||
|
||||
void GWidget::update()
|
||||
{
|
||||
update(rect());
|
||||
}
|
||||
|
||||
void GWidget::update(const Rect& rect)
|
||||
{
|
||||
auto* w = window();
|
||||
if (!w)
|
||||
return;
|
||||
if (m_has_pending_paint_event)
|
||||
return;
|
||||
m_has_pending_paint_event = true;
|
||||
w->update(window_relative_rect());
|
||||
for (auto& pending_rect : m_pending_paint_event_rects) {
|
||||
if (pending_rect.contains(rect))
|
||||
return;
|
||||
}
|
||||
m_pending_paint_event_rects.append(rect);
|
||||
w->update(rect.translated(window_relative_rect().location()));
|
||||
}
|
||||
|
||||
Rect GWidget::window_relative_rect() const
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue