1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-08 22:47:34 +00:00

LibGUI: Make GUI::Label auto-sizing declarative

You can now set the "autosize" property on a GUI::Label and it will
automatically update its width preference to fit the text.
This commit is contained in:
Andreas Kling 2020-12-20 12:35:10 +01:00
parent de08e7b8c9
commit 64ba41ea13
4 changed files with 18 additions and 5 deletions

View file

@ -13,8 +13,8 @@
visible: false visible: false
@GUI::Label { @GUI::Label {
name: "location_label"
text: "Location: " text: "Location: "
autosize: true
} }
@GUI::TextBox { @GUI::TextBox {

View file

@ -300,9 +300,6 @@ int run_in_windowed_mode(RefPtr<Core::ConfigFile> config, String initial_locatio
auto& location_toolbar = (GUI::ToolBar&)*widget.find_descendant_by_name("location_toolbar"); auto& location_toolbar = (GUI::ToolBar&)*widget.find_descendant_by_name("location_toolbar");
location_toolbar.layout()->set_margins({ 6, 3, 6, 3 }); location_toolbar.layout()->set_margins({ 6, 3, 6, 3 });
auto& location_label = (GUI::Label&)*widget.find_descendant_by_name("location_label");
location_label.size_to_fit();
auto& location_textbox = (GUI::TextBox&)*widget.find_descendant_by_name("location_textbox"); auto& location_textbox = (GUI::TextBox&)*widget.find_descendant_by_name("location_textbox");
auto& breadcrumb_toolbar = (GUI::ToolBar&)*widget.find_descendant_by_name("breadcrumb_toolbar"); auto& breadcrumb_toolbar = (GUI::ToolBar&)*widget.find_descendant_by_name("breadcrumb_toolbar");

View file

@ -42,12 +42,22 @@ Label::Label(const StringView& text)
set_foreground_role(Gfx::ColorRole::WindowText); set_foreground_role(Gfx::ColorRole::WindowText);
REGISTER_STRING_PROPERTY("text", text, set_text); REGISTER_STRING_PROPERTY("text", text, set_text);
REGISTER_BOOL_PROPERTY("autosize", is_autosize, set_autosize);
} }
Label::~Label() Label::~Label()
{ {
} }
void Label::set_autosize(bool autosize)
{
if (m_autosize == autosize)
return;
m_autosize = autosize;
if (m_autosize)
size_to_fit();
}
void Label::set_icon(const Gfx::Bitmap* icon) void Label::set_icon(const Gfx::Bitmap* icon)
{ {
if (m_icon == icon) if (m_icon == icon)
@ -61,6 +71,8 @@ void Label::set_text(const StringView& text)
if (text == m_text) if (text == m_text)
return; return;
m_text = text; m_text = text;
if (m_autosize)
size_to_fit();
update(); update();
} }

View file

@ -49,7 +49,8 @@ public:
bool should_stretch_icon() const { return m_should_stretch_icon; } bool should_stretch_icon() const { return m_should_stretch_icon; }
void set_should_stretch_icon(bool b) { m_should_stretch_icon = b; } void set_should_stretch_icon(bool b) { m_should_stretch_icon = b; }
void size_to_fit(); bool is_autosize() const { return m_autosize; }
void set_autosize(bool);
protected: protected:
explicit Label(const StringView& text = {}); explicit Label(const StringView& text = {});
@ -57,10 +58,13 @@ protected:
virtual void paint_event(PaintEvent&) override; virtual void paint_event(PaintEvent&) override;
private: private:
void size_to_fit();
String m_text; String m_text;
RefPtr<Gfx::Bitmap> m_icon; RefPtr<Gfx::Bitmap> m_icon;
Gfx::TextAlignment m_text_alignment { Gfx::TextAlignment::Center }; Gfx::TextAlignment m_text_alignment { Gfx::TextAlignment::Center };
bool m_should_stretch_icon { false }; bool m_should_stretch_icon { false };
bool m_autosize { false };
}; };
} }