summaryrefslogtreecommitdiff
path: root/Userland
diff options
context:
space:
mode:
Diffstat (limited to 'Userland')
-rw-r--r--Userland/Libraries/LibGUI/EmojiInputDialog.cpp34
1 files changed, 29 insertions, 5 deletions
diff --git a/Userland/Libraries/LibGUI/EmojiInputDialog.cpp b/Userland/Libraries/LibGUI/EmojiInputDialog.cpp
index 7b8e06ff52..2e1f5d06c0 100644
--- a/Userland/Libraries/LibGUI/EmojiInputDialog.cpp
+++ b/Userland/Libraries/LibGUI/EmojiInputDialog.cpp
@@ -59,6 +59,34 @@ static void resize_bitmap_if_needed(NonnullRefPtr<Gfx::Bitmap>& bitmap)
}
}
+class EmojiButton final : public Button {
+ C_OBJECT(EmojiButton);
+
+private:
+ explicit EmojiButton(String emoji_icon_path)
+ : Button()
+ , m_emoji_icon_path(move(emoji_icon_path))
+ {
+ }
+
+ virtual void paint_event(PaintEvent& event) override
+ {
+ if (m_first_paint_event) {
+ m_first_paint_event = false;
+
+ auto bitmap = Gfx::Bitmap::try_load_from_file(m_emoji_icon_path).release_value_but_fixme_should_propagate_errors();
+ resize_bitmap_if_needed(bitmap);
+
+ set_icon(move(bitmap));
+ }
+
+ Button::paint_event(event);
+ }
+
+ bool m_first_paint_event { true };
+ String m_emoji_icon_path;
+};
+
EmojiInputDialog::EmojiInputDialog(Window* parent_window)
: Dialog(parent_window)
, m_category_action_group(make<ActionGroup>())
@@ -158,11 +186,7 @@ auto EmojiInputDialog::supported_emoji() -> Vector<Emoji>
emoji->display_order = NumericLimits<u32>::max();
}
- auto bitmap = Gfx::Bitmap::try_load_from_file(filename).release_value_but_fixme_should_propagate_errors();
- resize_bitmap_if_needed(bitmap);
-
- auto button = Button::construct();
- button->set_icon(bitmap);
+ auto button = EmojiButton::construct(move(filename));
button->set_fixed_size(button_size, button_size);
button->set_button_style(Gfx::ButtonStyle::Coolbar);
button->on_click = [this, text = builder.to_string()](auto) {