From dc3ee84acac1c5269c8caa15aee0fcdec0a53196 Mon Sep 17 00:00:00 2001 From: thankyouverycool <66646555+thankyouverycool@users.noreply.github.com> Date: Tue, 5 Jul 2022 05:32:22 -0400 Subject: [PATCH] FontEditor: Update GML for new layout system This patch removes deprecated GML properties and manual sizing calculations in favor of the new UIDimensions, and registers more widgets in the FontEditor namespace to simplify widget setup. --- .../Applications/FontEditor/FontEditor.cpp | 28 +-- Userland/Applications/FontEditor/FontEditor.h | 7 +- .../FontEditor/FontEditorWindow.gml | 25 +-- .../FontEditor/GlyphEditorWidget.cpp | 6 + .../FontEditor/GlyphEditorWidget.h | 4 + .../Applications/FontEditor/NewFontDialog.cpp | 37 ++- .../Applications/FontEditor/NewFontDialog.h | 1 - .../FontEditor/NewFontDialogPage2.gml | 212 +++++++++--------- Userland/Applications/FontEditor/main.cpp | 2 +- 9 files changed, 149 insertions(+), 173 deletions(-) diff --git a/Userland/Applications/FontEditor/FontEditor.cpp b/Userland/Applications/FontEditor/FontEditor.cpp index ffb7d4a7c61..d263299d3e1 100644 --- a/Userland/Applications/FontEditor/FontEditor.cpp +++ b/Userland/Applications/FontEditor/FontEditor.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -40,10 +41,11 @@ #include #include #include -#include #include #include +namespace FontEditor { + static constexpr Array pangrams = { "quick fox jumps nightly above wizard", "five quacking zephyrs jolt my wax bed", @@ -387,13 +389,9 @@ FontEditorWidget::FontEditorWidget() m_font_metadata_groupbox = find_descendant_of_type_named("font_metadata_groupbox"); m_unicode_block_container = find_descendant_of_type_named("unicode_block_container"); - m_glyph_editor_container = *find_descendant_of_type_named("glyph_editor_container"); - m_left_column_container = *find_descendant_of_type_named("left_column_container"); - - auto& glyph_map_container = *find_descendant_of_type_named("glyph_map_container"); - m_glyph_editor_widget = m_glyph_editor_container->add(); - m_glyph_map_widget = glyph_map_container.add(); + m_glyph_map_widget = find_descendant_of_type_named("glyph_map_widget"); + m_glyph_editor_widget = find_descendant_of_type_named("glyph_editor_widget"); m_glyph_editor_widget->on_glyph_altered = [this](int glyph) { m_glyph_map_widget->update_glyph(glyph); update_preview(); @@ -569,7 +567,7 @@ ErrorOr FontEditorWidget::initialize(String const& path, RefPtrset_font(*m_edited_font); m_glyph_editor_widget->initialize(*m_edited_font); - did_resize_glyph_editor(); + m_glyph_editor_widget->set_fixed_size(m_glyph_editor_widget->preferred_width(), m_glyph_editor_widget->preferred_height()); m_glyph_editor_width_spinbox->set_visible(!m_edited_font->is_fixed_width()); m_glyph_editor_width_spinbox->set_max(m_edited_font->max_glyph_width(), GUI::AllowCallback::No); @@ -899,16 +897,6 @@ void FontEditorWidget::drop_event(GUI::DropEvent& event) } } -void FontEditorWidget::did_resize_glyph_editor() -{ - constexpr int button_width = 22; - constexpr int buttons_per_bar = 4; - constexpr int spacing = (buttons_per_bar - 1) * 2 + 10; - constexpr int glyph_toolbars_width = button_width * buttons_per_bar + spacing; - m_glyph_editor_container->set_fixed_size(m_glyph_editor_widget->preferred_width(), m_glyph_editor_widget->preferred_height()); - m_left_column_container->set_fixed_width(max(m_glyph_editor_widget->preferred_width(), glyph_toolbars_width)); -} - void FontEditorWidget::set_scale(i32 scale) { m_glyph_editor_widget->set_scale(scale); @@ -918,7 +906,7 @@ void FontEditorWidget::set_scale_and_save(i32 scale) { set_scale(scale); Config::write_i32("FontEditor", "GlyphEditor", "Scale", scale); - did_resize_glyph_editor(); + m_glyph_editor_widget->set_fixed_size(m_glyph_editor_widget->preferred_width(), m_glyph_editor_widget->preferred_height()); } void FontEditorWidget::copy_selected_glyphs() @@ -1011,3 +999,5 @@ void FontEditorWidget::delete_selected_glyphs() m_glyph_map_widget->update(); update_statusbar(); } + +} diff --git a/Userland/Applications/FontEditor/FontEditor.h b/Userland/Applications/FontEditor/FontEditor.h index 50fa9b3b52f..3e3a0182f77 100644 --- a/Userland/Applications/FontEditor/FontEditor.h +++ b/Userland/Applications/FontEditor/FontEditor.h @@ -15,6 +15,8 @@ #include #include +namespace FontEditor { + class GlyphEditorWidget; class FontEditorWidget final : public GUI::Widget { @@ -63,7 +65,6 @@ private: void undo(); void redo(); void did_modify_font(); - void did_resize_glyph_editor(); void update_statusbar(); void update_preview(); void set_scale(i32); @@ -123,8 +124,6 @@ private: RefPtr m_rotate_counterclockwise_action; RefPtr m_statusbar; - RefPtr m_left_column_container; - RefPtr m_glyph_editor_container; RefPtr m_unicode_block_container; RefPtr m_weight_combobox; RefPtr m_slope_combobox; @@ -156,3 +155,5 @@ private: bool m_unicode_blocks { true }; Unicode::CodePointRange m_range { 0x0000, 0x10FFFF }; }; + +} diff --git a/Userland/Applications/FontEditor/FontEditorWindow.gml b/Userland/Applications/FontEditor/FontEditorWindow.gml index d34470486dc..21d84d580cb 100644 --- a/Userland/Applications/FontEditor/FontEditorWindow.gml +++ b/Userland/Applications/FontEditor/FontEditorWindow.gml @@ -17,23 +17,25 @@ @GUI::Widget { name: "left_column_container" + preferred_width: "shrink" layout: @GUI::VerticalBoxLayout {} - @GUI::Widget { - name: "glyph_editor_container" - layout: @GUI::VerticalBoxLayout {} + @FontEditor::GlyphEditorWidget { + name: "glyph_editor_widget" } @GUI::Widget { - shrink_to_fit: true + preferred_height: "shrink" layout: @GUI::VerticalBoxLayout {} @GUI::SpinBox { name: "glyph_editor_width_spinbox" + preferred_width: "fit" } @GUI::CheckBox { name: "glyph_editor_present_checkbox" + preferred_width: "fit" text: "Present" focus_policy: "TabFocus" } @@ -64,21 +66,19 @@ @GUI::Widget { layout: @GUI::VerticalBoxLayout {} - @GUI::Widget { - name: "glyph_map_container" - layout: @GUI::VerticalBoxLayout {} + @GUI::GlyphMapWidget { + name: "glyph_map_widget" } @GUI::GroupBox { name: "font_metadata_groupbox" title: "Metadata" - shrink_to_fit: true + preferred_height: "shrink" layout: @GUI::VerticalBoxLayout { margins: [6, 6, 6, 6] } @GUI::Widget { - fixed_height: 22 layout: @GUI::HorizontalBoxLayout {} @GUI::Label { @@ -94,7 +94,6 @@ } @GUI::Widget { - fixed_height: 22 layout: @GUI::HorizontalBoxLayout {} @GUI::Label { @@ -110,7 +109,6 @@ } @GUI::Widget { - fixed_height: 22 layout: @GUI::HorizontalBoxLayout {} @GUI::Label { @@ -127,7 +125,6 @@ } @GUI::Widget { - fixed_height: 22 layout: @GUI::HorizontalBoxLayout {} @GUI::Label { @@ -144,7 +141,6 @@ } @GUI::Widget { - fixed_height: 22 layout: @GUI::HorizontalBoxLayout {} @GUI::Label { @@ -162,7 +158,6 @@ } @GUI::Widget { - fixed_height: 22 layout: @GUI::HorizontalBoxLayout {} @GUI::Label { @@ -179,7 +174,6 @@ } @GUI::Widget { - fixed_height: 22 layout: @GUI::HorizontalBoxLayout {} @GUI::Label { @@ -196,7 +190,6 @@ } @GUI::Widget { - fixed_height: 22 layout: @GUI::HorizontalBoxLayout {} @GUI::Label { diff --git a/Userland/Applications/FontEditor/GlyphEditorWidget.cpp b/Userland/Applications/FontEditor/GlyphEditorWidget.cpp index 450fe0eb877..ef5cce9bd83 100644 --- a/Userland/Applications/FontEditor/GlyphEditorWidget.cpp +++ b/Userland/Applications/FontEditor/GlyphEditorWidget.cpp @@ -14,6 +14,10 @@ #include #include +REGISTER_WIDGET(FontEditor, GlyphEditorWidget); + +namespace FontEditor { + void GlyphEditorWidget::initialize(Gfx::BitmapFont& mutable_font) { if (m_font == mutable_font) @@ -271,3 +275,5 @@ void GlyphEditorWidget::set_scale(int scale) m_scale = clamp(scale, 1, 15); update(); } + +} diff --git a/Userland/Applications/FontEditor/GlyphEditorWidget.h b/Userland/Applications/FontEditor/GlyphEditorWidget.h index 130d69f024f..dab949cb365 100644 --- a/Userland/Applications/FontEditor/GlyphEditorWidget.h +++ b/Userland/Applications/FontEditor/GlyphEditorWidget.h @@ -11,6 +11,8 @@ #include #include +namespace FontEditor { + class GlyphEditorWidget final : public GUI::Frame { C_OBJECT(GlyphEditorWidget) public: @@ -71,3 +73,5 @@ private: Mode m_mode { Paint }; bool m_is_clicking_valid_cell { false }; }; + +} diff --git a/Userland/Applications/FontEditor/NewFontDialog.cpp b/Userland/Applications/FontEditor/NewFontDialog.cpp index 70ff30a79ba..30e2ea2c5d8 100644 --- a/Userland/Applications/FontEditor/NewFontDialog.cpp +++ b/Userland/Applications/FontEditor/NewFontDialog.cpp @@ -23,16 +23,15 @@ #include #include -namespace GUI { +namespace FontEditor { -class GlyphPreviewWidget final : public Frame { +class GlyphPreviewWidget final : public GUI::Frame { C_OBJECT(GlyphPreviewWidget) public: void set_preview_size(int width, int height) { m_width = width; m_height = height; - m_glyph_width = width; for (int i = 10; i > 0; i--) { if ((frame_thickness() * 2 + (m_width * i) - 1) <= 250 && (frame_thickness() * 2 + (m_height * i) - 1) <= 205) { @@ -53,10 +52,10 @@ private: { set_preview_size(m_width, m_height); } - virtual void paint_event(PaintEvent& event) override + virtual void paint_event(GUI::PaintEvent& event) override { - Frame::paint_event(event); - Painter painter(*this); + GUI::Frame::paint_event(event); + GUI::Painter painter(*this); painter.add_clip_rect(frame_inner_rect()); painter.add_clip_rect(event.rect()); painter.fill_rect(frame_inner_rect(), palette().base()); @@ -75,7 +74,7 @@ private: for (int y = 0; y < m_height; ++y) { for (int x = 0; x < m_width; ++x) { Gfx::IntRect rect { x * m_scale, y * m_scale, m_scale, m_scale }; - if (x >= m_glyph_width) { + if (x >= m_width) { painter.fill_rect(rect, palette().threed_shadow1()); } else { if (m_bits[x][y]) @@ -84,19 +83,19 @@ private: } } } - virtual void mousedown_event(MouseEvent& event) override + virtual void mousedown_event(GUI::MouseEvent& event) override { draw_at_mouse(event); } - virtual void mousemove_event(MouseEvent& event) override + virtual void mousemove_event(GUI::MouseEvent& event) override { if (event.buttons() & (GUI::MouseButton::Primary | GUI::MouseButton::Secondary)) draw_at_mouse(event); } - void draw_at_mouse(MouseEvent const& event) + void draw_at_mouse(GUI::MouseEvent const& event) { - bool set = event.buttons() & MouseButton::Primary; - bool unset = event.buttons() & MouseButton::Secondary; + bool set = event.buttons() & GUI::MouseButton::Primary; + bool unset = event.buttons() & GUI::MouseButton::Secondary; if (!(set ^ unset)) return; int x = (event.x() - 1) / m_scale; @@ -114,7 +113,6 @@ private: int m_scale { 10 }; int m_width { 20 }; int m_height { 20 }; - int m_glyph_width { 20 }; int m_mean_line { 2 }; int m_baseline { 16 }; u8 m_bits[Gfx::GlyphBitmap::max_width()][Gfx::GlyphBitmap::max_height()] {}; @@ -122,6 +120,8 @@ private: } +REGISTER_WIDGET(FontEditor, GlyphPreviewWidget); + NewFontDialog::NewFontDialog(GUI::Window* parent_window) : GUI::WizardDialog(parent_window) { @@ -159,7 +159,6 @@ NewFontDialog::NewFontDialog(GUI::Window* parent_window) m_glyph_properties_page->body_widget().load_from_gml(new_font_dialog_page_2_gml); m_glyph_properties_page->set_is_final_page(true); - m_glyph_editor_container = m_glyph_properties_page->body_widget().find_descendant_of_type_named("glyph_editor_container"); m_glyph_height_spinbox = m_glyph_properties_page->body_widget().find_descendant_of_type_named("height_spinbox"); m_glyph_width_spinbox = m_glyph_properties_page->body_widget().find_descendant_of_type_named("width_spinbox"); m_baseline_spinbox = m_glyph_properties_page->body_widget().find_descendant_of_type_named("baseline_spinbox"); @@ -178,23 +177,15 @@ NewFontDialog::NewFontDialog(GUI::Window* parent_window) m_spacing_spinbox->set_value(1); m_fixed_width_checkbox->set_checked(false); - auto& preview_editor = m_glyph_editor_container->add(); - preview_editor.set_preview_size(20, 20); - m_glyph_editor_container->set_fixed_height(20 * 20 + preview_editor.frame_thickness() * 4); + auto& preview_editor = *m_glyph_properties_page->body_widget().find_descendant_of_type_named("glyph_preview_widget"); m_glyph_width_spinbox->on_change = [&](int value) { preview_editor.set_preview_size(value, m_glyph_height_spinbox->value()); - deferred_invoke([&] { - m_glyph_editor_container->set_fixed_height(1 + preview_editor.height() + preview_editor.frame_thickness() * 2); - }); }; m_glyph_height_spinbox->on_change = [&](int value) { preview_editor.set_preview_size(m_glyph_width_spinbox->value(), value); m_mean_line_spinbox->set_max(max(value - 2, 0)); m_baseline_spinbox->set_max(max(value - 2, 0)); - deferred_invoke([&] { - m_glyph_editor_container->set_fixed_height(1 + preview_editor.height() + preview_editor.frame_thickness() * 2); - }); }; m_baseline_spinbox->on_change = [&](int value) { preview_editor.set_baseline(value); diff --git a/Userland/Applications/FontEditor/NewFontDialog.h b/Userland/Applications/FontEditor/NewFontDialog.h index ab1347f07b3..8299125733e 100644 --- a/Userland/Applications/FontEditor/NewFontDialog.h +++ b/Userland/Applications/FontEditor/NewFontDialog.h @@ -52,7 +52,6 @@ private: RefPtr m_presentation_spinbox; RefPtr m_glyph_properties_page; - RefPtr m_glyph_editor_container; RefPtr m_glyph_height_spinbox; RefPtr m_glyph_width_spinbox; RefPtr m_baseline_spinbox; diff --git a/Userland/Applications/FontEditor/NewFontDialogPage2.gml b/Userland/Applications/FontEditor/NewFontDialogPage2.gml index 50d79f540a4..d40d7ae6f5b 100644 --- a/Userland/Applications/FontEditor/NewFontDialogPage2.gml +++ b/Userland/Applications/FontEditor/NewFontDialogPage2.gml @@ -1,127 +1,119 @@ @GUI::Widget { - layout: @GUI::VerticalBoxLayout { + layout: @GUI::HorizontalBoxLayout { margins: [20] } - @GUI::Widget { - layout: @GUI::HorizontalBoxLayout {} + @GUI::GroupBox { + title: "Metadata" + fixed_width: 200 + layout: @GUI::VerticalBoxLayout { + margins: [6] + } - @GUI::GroupBox { - title: "Metadata" - fixed_width: 200 - layout: @GUI::VerticalBoxLayout { - margins: [6] + @GUI::Widget { + layout: @GUI::HorizontalBoxLayout {} + + @GUI::Label { + fixed_width: 80 + text_alignment: "CenterLeft" + text: "Height:" } - @GUI::Widget { - layout: @GUI::HorizontalBoxLayout {} - - @GUI::Label { - fixed_width: 80 - text_alignment: "CenterLeft" - text: "Height:" - } - - @GUI::SpinBox { - name: "height_spinbox" - min: 1 - } - } - - @GUI::Widget { - layout: @GUI::HorizontalBoxLayout {} - - @GUI::Label { - fixed_width: 80 - text_alignment: "CenterLeft" - text: "Width:" - } - - @GUI::SpinBox { - name: "width_spinbox" - min: 1 - } - } - - @GUI::Widget { - layout: @GUI::HorizontalBoxLayout {} - - @GUI::Label { - fixed_width: 80 - text_alignment: "CenterLeft" - text: "Mean line:" - } - - @GUI::SpinBox { - name: "mean_line_spinbox" - min: 0 - } - } - - @GUI::Widget { - layout: @GUI::HorizontalBoxLayout {} - - @GUI::Label { - fixed_width: 80 - text_alignment: "CenterLeft" - text: "Baseline:" - } - - @GUI::SpinBox { - name: "baseline_spinbox" - min: 0 - } - } - - @GUI::HorizontalSeparator { - fixed_height: 22 - } - - @GUI::Widget { - layout: @GUI::HorizontalBoxLayout {} - - @GUI::Label { - fixed_width: 80 - text_alignment: "CenterLeft" - text: "Spacing:" - } - - @GUI::SpinBox { - name: "spacing_spinbox" - min: 0 - max: 255 - } - } - - @GUI::Widget { - fixed_height: 22 - layout: @GUI::HorizontalBoxLayout {} - - @GUI::Widget { - fixed_width: 80 - } - - @GUI::CheckBox { - name: "fixed_width_checkbox" - text: "Fixed width" - autosize: true - } + @GUI::SpinBox { + name: "height_spinbox" + min: 1 } } @GUI::Widget { - layout: @GUI::VerticalBoxLayout {} + layout: @GUI::HorizontalBoxLayout {} - @GUI::Widget {} - - @GUI::Widget { - name: "glyph_editor_container" - layout: @GUI::VerticalBoxLayout { - margins: [5, 0, 0] - } + @GUI::Label { + fixed_width: 80 + text_alignment: "CenterLeft" + text: "Width:" } - @GUI::Widget {} + @GUI::SpinBox { + name: "width_spinbox" + min: 1 + } + } + + @GUI::Widget { + layout: @GUI::HorizontalBoxLayout {} + + @GUI::Label { + fixed_width: 80 + text_alignment: "CenterLeft" + text: "Mean line:" + } + + @GUI::SpinBox { + name: "mean_line_spinbox" + min: 0 + } + } + + @GUI::Widget { + layout: @GUI::HorizontalBoxLayout {} + + @GUI::Label { + fixed_width: 80 + text_alignment: "CenterLeft" + text: "Baseline:" + } + + @GUI::SpinBox { + name: "baseline_spinbox" + min: 0 + } + } + + @GUI::HorizontalSeparator { + fixed_height: 22 + } + + @GUI::Widget { + layout: @GUI::HorizontalBoxLayout {} + + @GUI::Label { + fixed_width: 80 + text_alignment: "CenterLeft" + text: "Spacing:" + } + + @GUI::SpinBox { + name: "spacing_spinbox" + min: 0 + max: 255 + } + } + + @GUI::Widget { + layout: @GUI::HorizontalBoxLayout {} + + @GUI::Widget { + fixed_width: 80 + } + + @GUI::CheckBox { + name: "fixed_width_checkbox" + text: "Fixed width" + } } } + + @GUI::Widget { + layout: @GUI::VerticalBoxLayout {} + + @GUI::Layout::Spacer {} + + @FontEditor::GlyphPreviewWidget { + name: "glyph_preview_widget" + layout: @GUI::VerticalBoxLayout {} + } + + @GUI::Layout::Spacer {} + } } diff --git a/Userland/Applications/FontEditor/main.cpp b/Userland/Applications/FontEditor/main.cpp index 07cfa314fa3..96d5388959d 100644 --- a/Userland/Applications/FontEditor/main.cpp +++ b/Userland/Applications/FontEditor/main.cpp @@ -42,7 +42,7 @@ ErrorOr serenity_main(Main::Arguments arguments) window->set_icon(app_icon.bitmap_for_size(16)); window->resize(640, 470); - auto font_editor = TRY(window->try_set_main_widget()); + auto font_editor = TRY(window->try_set_main_widget()); TRY(font_editor->initialize_menubar(*window)); if (path) {