diff --git a/Userland/Libraries/LibGUI/CMakeLists.txt b/Userland/Libraries/LibGUI/CMakeLists.txt index 82eab141e2..5ebed7250a 100644 --- a/Userland/Libraries/LibGUI/CMakeLists.txt +++ b/Userland/Libraries/LibGUI/CMakeLists.txt @@ -1,3 +1,4 @@ +compile_gml(EmojiInputDialog.gml EmojiInputDialogGML.h emoji_input_dialog_gml) compile_gml(FontPickerDialog.gml FontPickerDialogGML.h font_picker_dialog_gml) compile_gml(FilePickerDialog.gml FilePickerDialogGML.h file_picker_dialog_gml) compile_gml(PasswordInputDialog.gml PasswordInputDialogGML.h password_input_dialog_gml) @@ -36,6 +37,7 @@ set(SOURCES DragOperation.cpp EditingEngine.cpp EmojiInputDialog.cpp + EmojiInputDialogGML.h Event.cpp FileIconProvider.cpp FilePicker.cpp diff --git a/Userland/Libraries/LibGUI/EmojiInputDialog.cpp b/Userland/Libraries/LibGUI/EmojiInputDialog.cpp index d586ddd93e..145461fda1 100644 --- a/Userland/Libraries/LibGUI/EmojiInputDialog.cpp +++ b/Userland/Libraries/LibGUI/EmojiInputDialog.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -43,20 +44,17 @@ EmojiInputDialog::EmojiInputDialog(Window* parent_window) : Dialog(parent_window) { auto& main_widget = set_main_widget(); - main_widget.set_frame_shape(Gfx::FrameShape::Container); - main_widget.set_frame_shadow(Gfx::FrameShadow::Raised); - main_widget.set_fill_with_background_color(true); - auto& main_layout = main_widget.set_layout(); - main_layout.set_margins(1); - main_layout.set_spacing(0); + if (!main_widget.load_from_gml(emoji_input_dialog_gml)) + VERIFY_NOT_REACHED(); + auto& emojis_widget = *main_widget.find_descendant_of_type_named("emojis"sv); auto code_points = supported_emoji_code_points(); size_t index = 0; - size_t columns = 10; + size_t columns = 18; size_t rows = ceil_div(code_points.size(), columns); - constexpr int button_size = 18; + constexpr int button_size = 20; // FIXME: I have no idea why this is needed, you'd think that button width * number of buttons would make them fit, but the last one gets cut off. constexpr int magic_offset = 7; int dialog_width = button_size * columns + magic_offset; @@ -66,7 +64,7 @@ EmojiInputDialog::EmojiInputDialog(Window* parent_window) set_frameless(true); for (size_t row = 0; row < rows && index < code_points.size(); ++row) { - auto& horizontal_container = main_widget.add(); + auto& horizontal_container = emojis_widget.add(); auto& horizontal_layout = horizontal_container.set_layout(); horizontal_layout.set_spacing(0); for (size_t column = 0; column < columns; ++column) { diff --git a/Userland/Libraries/LibGUI/EmojiInputDialog.gml b/Userland/Libraries/LibGUI/EmojiInputDialog.gml new file mode 100644 index 0000000000..34a70b9068 --- /dev/null +++ b/Userland/Libraries/LibGUI/EmojiInputDialog.gml @@ -0,0 +1,13 @@ +@GUI::Frame { + shape: "Container" + shadow: "Raised" + fill_with_background_color: true + layout: @GUI::VerticalBoxLayout { + margins: [4] + } + + @GUI::Widget { + name: "emojis" + layout: @GUI::VerticalBoxLayout {} + } +}