mirror of
https://github.com/RGBCube/serenity
synced 2025-07-23 04:27: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:
parent
7e2b9c3c40
commit
183f7c9830
3 changed files with 40 additions and 0 deletions
20
Libraries/LibGUI/GLazyWidget.cpp
Normal file
20
Libraries/LibGUI/GLazyWidget.cpp
Normal 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);
|
||||
}
|
19
Libraries/LibGUI/GLazyWidget.h
Normal file
19
Libraries/LibGUI/GLazyWidget.h
Normal 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 };
|
||||
};
|
|
@ -55,6 +55,7 @@ OBJS = \
|
|||
GJsonArrayModel.o \
|
||||
GAboutDialog.o \
|
||||
GModelSelection.o \
|
||||
GLazyWidget.o \
|
||||
GWindow.o
|
||||
|
||||
LIBRARY = libgui.a
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue