1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-23 06:47:40 +00:00

LibGUI: Add GLazyWidget, a convenience widget for lazily-built UI's

Here's how you can use this to speed up startup time:

    auto widget = GLazyWidget::construct();
    widget->on_first_show = [](auto& self) {
        self.set_layout(...);
        ...
    };

Basically, it allows you to delay building the widget subtree until
it's shown for the first time.
This commit is contained in:
Andreas Kling 2019-10-02 20:24:29 +02:00
parent 7e2b9c3c40
commit 183f7c9830
3 changed files with 40 additions and 0 deletions

View file

@ -0,0 +1,20 @@
#include <LibGUI/GLazyWidget.h>
GLazyWidget::GLazyWidget(GWidget* parent)
: GWidget(parent)
{
}
GLazyWidget::~GLazyWidget()
{
}
void GLazyWidget::show_event(GShowEvent&)
{
if (m_has_been_shown)
return;
m_has_been_shown = true;
ASSERT(on_first_show);
on_first_show(*this);
}

View file

@ -0,0 +1,19 @@
#pragma once
#include <LibGUI/GWidget.h>
class GLazyWidget : public GWidget {
C_OBJECT(GLazyWidget)
public:
virtual ~GLazyWidget() override;
Function<void(GLazyWidget&)> on_first_show;
protected:
explicit GLazyWidget(GWidget* parent = nullptr);
private:
virtual void show_event(GShowEvent&) override;
bool m_has_been_shown { false };
};

View file

@ -55,6 +55,7 @@ OBJS = \
GJsonArrayModel.o \
GAboutDialog.o \
GModelSelection.o \
GLazyWidget.o \
GWindow.o
LIBRARY = libgui.a