diff options
-rw-r--r-- | Userland/Applications/FontEditor/FontEditor.cpp | 83 | ||||
-rw-r--r-- | Userland/Applications/FontEditor/FontEditor.h | 3 | ||||
-rw-r--r-- | Userland/Applications/FontEditor/main.cpp | 2 |
3 files changed, 30 insertions, 58 deletions
diff --git a/Userland/Applications/FontEditor/FontEditor.cpp b/Userland/Applications/FontEditor/FontEditor.cpp index 5508c39dd4..2f1ee7eeb4 100644 --- a/Userland/Applications/FontEditor/FontEditor.cpp +++ b/Userland/Applications/FontEditor/FontEditor.cpp @@ -156,11 +156,11 @@ FontEditorWidget::FontEditorWidget(const String& path, RefPtr<Gfx::BitmapFont>&& }; m_new_action = GUI::Action::create("&New Font...", { Mod_Ctrl, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-font.png"), [&](auto&) { - if (m_font_modified) { + if (window()->is_modified()) { auto result = GUI::MessageBox::show(window(), "Save changes to the current font?", "Unsaved changes", GUI::MessageBox::Type::Warning, GUI::MessageBox::InputType::YesNoCancel); if (result == GUI::Dialog::ExecResult::ExecYes) { m_save_action->activate(); - if (m_font_modified) + if (window()->is_modified()) return; } if (result == GUI::Dialog::ExecResult::ExecCancel) @@ -170,22 +170,9 @@ FontEditorWidget::FontEditorWidget(const String& path, RefPtr<Gfx::BitmapFont>&& if (new_font_wizard->exec() == GUI::Dialog::ExecOK) { auto metadata = new_font_wizard->new_font_metadata(); - String name = metadata.name; - auto parts = name.split(' '); - if (parts.size() > 1) - name = parts[0]; - parts.clear(); - - String weight = GUI::weight_to_name(metadata.weight).to_string(); - parts = weight.split(' '); - if (parts.size() > 1) - weight = String::formatted("{}{}", parts[0], parts[1]); - RefPtr<Gfx::BitmapFont> new_font = Gfx::BitmapFont::create(metadata.glyph_height, metadata.glyph_width, metadata.is_fixed_width, metadata.type); - String path = String::formatted("{}{}{}.font", name, weight, metadata.presentation_size); if (!new_font) { - String message = String::formatted("Failed to create new font: {}\n", path); - GUI::MessageBox::show(window(), message, "Font Editor", GUI::MessageBox::Type::Error); + GUI::MessageBox::show(window(), "Failed to create new font.", "Font Editor", GUI::MessageBox::Type::Error); return; } @@ -195,17 +182,17 @@ FontEditorWidget::FontEditorWidget(const String& path, RefPtr<Gfx::BitmapFont>&& new_font->set_weight(metadata.weight); new_font->set_baseline(metadata.baseline); new_font->set_mean_line(metadata.mean_line); - m_font_modified = true; - initialize(path, move(new_font)); + window()->set_modified(true); + initialize({}, move(new_font)); } }); m_new_action->set_status_tip("Create a new font"); m_open_action = GUI::CommonActions::make_open_action([&](auto&) { - if (m_font_modified) { + if (window()->is_modified()) { auto result = GUI::MessageBox::show(window(), "Save changes to the current font?", "Unsaved changes", GUI::MessageBox::Type::Warning, GUI::MessageBox::InputType::YesNoCancel); if (result == GUI::Dialog::ExecResult::ExecYes) { m_save_action->activate(); - if (m_font_modified) + if (window()->is_modified()) return; } if (result == GUI::Dialog::ExecResult::ExecCancel) @@ -227,18 +214,17 @@ FontEditorWidget::FontEditorWidget(const String& path, RefPtr<Gfx::BitmapFont>&& GUI::MessageBox::show(window(), message, "Font Editor", GUI::MessageBox::Type::Error); return; } - m_font_newly_opened = true; + window()->set_modified(false); initialize(open_path.value(), move(new_font)); }); m_save_action = GUI::CommonActions::make_save_action([&](auto&) { - LexicalPath lexical_path(m_path); - if (!lexical_path.dirname().is_empty()) - save_as(m_path); - else + if (m_path.is_empty()) m_save_as_action->activate(); + else + save_as(m_path); }); m_save_as_action = GUI::CommonActions::make_save_as_action([&](auto&) { - LexicalPath lexical_path(m_path); + LexicalPath lexical_path(m_path.is_empty() ? "Untitled.font" : m_path); Optional<String> save_path = GUI::FilePicker::get_save_filepath(window(), lexical_path.title(), lexical_path.extension()); if (!save_path.has_value()) return; @@ -347,7 +333,6 @@ FontEditorWidget::FontEditorWidget(const String& path, RefPtr<Gfx::BitmapFont>&& m_glyph_editor_widget->on_undo_event = [this] { m_undo_stack->push(make<GlyphUndoCommand>(*m_undo_glyph)); - did_change_undo_stack(); }; m_glyph_map_widget->on_glyph_selected = [&, update_statusbar](int glyph) { @@ -518,15 +503,18 @@ void FontEditorWidget::initialize(const String& path, RefPtr<Gfx::BitmapFont>&& deferred_invoke([this](auto&) { m_glyph_map_widget->set_focus(true); m_glyph_map_widget->scroll_to_glyph(m_glyph_map_widget->selected_glyph()); - if (m_font_newly_opened) - m_font_modified = false; + window()->set_modified(false); update_title(); - m_font_newly_opened = false; }); m_undo_stack = make<GUI::UndoStack>(); m_undo_glyph = adopt_ref(*new UndoGlyph(m_glyph_map_widget->selected_glyph(), *m_edited_font)); - did_change_undo_stack(); + + m_undo_stack->on_state_change = [this] { + m_undo_action->set_enabled(m_undo_stack->can_undo()); + m_redo_action->set_enabled(m_undo_stack->can_redo()); + did_modify_font(); + }; if (on_initialize) on_initialize(); @@ -580,7 +568,7 @@ bool FontEditorWidget::save_as(const String& path) return false; } m_path = path; - m_font_modified = false; + window()->set_modified(false); update_title(); return true; } @@ -598,8 +586,6 @@ void FontEditorWidget::undo() if (!m_undo_stack->can_undo()) return; m_undo_stack->undo(); - did_change_undo_stack(); - m_glyph_editor_widget->update(); m_glyph_map_widget->update(); if (m_font_preview_window) @@ -611,29 +597,20 @@ void FontEditorWidget::redo() if (!m_undo_stack->can_redo()) return; m_undo_stack->redo(); - did_change_undo_stack(); - m_glyph_editor_widget->update(); m_glyph_map_widget->update(); if (m_font_preview_window) m_font_preview_window->update(); } -void FontEditorWidget::did_change_undo_stack() -{ - m_undo_action->set_enabled(m_undo_stack->can_undo()); - m_redo_action->set_enabled(m_undo_stack->can_redo()); - did_modify_font(); -} - bool FontEditorWidget::request_close() { - if (!m_font_modified) + if (!window()->is_modified()) return true; auto result = GUI::MessageBox::show(window(), "Save changes to the current font?", "Unsaved changes", GUI::MessageBox::Type::Warning, GUI::MessageBox::InputType::YesNoCancel); if (result == GUI::MessageBox::ExecYes) { m_save_action->activate(); - if (!m_font_modified) + if (!window()->is_modified()) return true; } if (result == GUI::MessageBox::ExecNo) @@ -644,18 +621,18 @@ bool FontEditorWidget::request_close() void FontEditorWidget::update_title() { StringBuilder title; - title.append(m_path); - if (m_font_modified && !m_font_newly_opened) - title.append(" (*)"); - title.append(" - Font Editor"); - if (window()) - window()->set_title(title.to_string()); + if (m_path.is_empty()) + title.append("Untitled"); + else + title.append(m_path); + title.append("[*] - Font Editor"); + window()->set_title(title.to_string()); } void FontEditorWidget::did_modify_font() { - if (m_font_modified) + if (!window() || window()->is_modified()) return; - m_font_modified = true; + window()->set_modified(true); update_title(); } diff --git a/Userland/Applications/FontEditor/FontEditor.h b/Userland/Applications/FontEditor/FontEditor.h index 4e598b3f7e..13e9da8bf2 100644 --- a/Userland/Applications/FontEditor/FontEditor.h +++ b/Userland/Applications/FontEditor/FontEditor.h @@ -39,7 +39,6 @@ private: void undo(); void redo(); - void did_change_undo_stack(); void did_modify_font(); RefPtr<Gfx::BitmapFont> m_edited_font; @@ -90,6 +89,4 @@ private: Vector<String> m_font_weight_list; Vector<String> m_font_type_list; bool m_font_metadata { true }; - bool m_font_modified { false }; - bool m_font_newly_opened { true }; }; diff --git a/Userland/Applications/FontEditor/main.cpp b/Userland/Applications/FontEditor/main.cpp index 45c0453457..4c87e48ee0 100644 --- a/Userland/Applications/FontEditor/main.cpp +++ b/Userland/Applications/FontEditor/main.cpp @@ -52,7 +52,6 @@ int main(int argc, char** argv) RefPtr<Gfx::BitmapFont> edited_font; if (path == nullptr) { - path = "Untitled.font"; edited_font = static_ptr_cast<Gfx::BitmapFont>(Gfx::FontDatabase::default_font().clone()); } else { auto bitmap_font = Gfx::BitmapFont::load_from_file(path); @@ -76,7 +75,6 @@ int main(int argc, char** argv) window->resize(440, 470); auto& font_editor = window->set_main_widget<FontEditorWidget>(path, move(edited_font)); - font_editor.update_title(); font_editor.initialize_menubar(*window); |