mirror of
https://github.com/RGBCube/serenity
synced 2025-07-23 20:17:42 +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 \
|
GJsonArrayModel.o \
|
||||||
GAboutDialog.o \
|
GAboutDialog.o \
|
||||||
GModelSelection.o \
|
GModelSelection.o \
|
||||||
|
GLazyWidget.o \
|
||||||
GWindow.o
|
GWindow.o
|
||||||
|
|
||||||
LIBRARY = libgui.a
|
LIBRARY = libgui.a
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue