mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 02:17:34 +00:00
FontEditor: Move new font creation to NewFontDialog and handle errors
Fixes potential OOM crashes when creating a new font and an oversight in which glyph spacing was not being set.
This commit is contained in:
parent
807bd6da6c
commit
407231f11c
3 changed files with 27 additions and 18 deletions
|
@ -96,19 +96,14 @@ ErrorOr<void> MainWidget::create_actions()
|
||||||
if (!request_close())
|
if (!request_close())
|
||||||
return;
|
return;
|
||||||
auto new_font_wizard = NewFontDialog::construct(window());
|
auto new_font_wizard = NewFontDialog::construct(window());
|
||||||
if (new_font_wizard->exec() == GUI::Dialog::ExecResult::OK) {
|
if (new_font_wizard->exec() != GUI::Dialog::ExecResult::OK)
|
||||||
auto metadata = new_font_wizard->new_font_metadata();
|
return;
|
||||||
auto new_font = Gfx::BitmapFont::create(metadata.glyph_height, metadata.glyph_width, metadata.is_fixed_width, 0x110000);
|
new_font_wizard->hide();
|
||||||
new_font->set_name(metadata.name);
|
auto maybe_font = new_font_wizard->create_font();
|
||||||
new_font->set_family(metadata.family);
|
if (maybe_font.is_error())
|
||||||
new_font->set_presentation_size(metadata.presentation_size);
|
return show_error("Failed to create new font"sv, maybe_font.error());
|
||||||
new_font->set_weight(metadata.weight);
|
if (auto result = initialize({}, move(maybe_font.value())); result.is_error())
|
||||||
new_font->set_slope(metadata.slope);
|
show_error("Failed to initialize font"sv, result.error());
|
||||||
new_font->set_baseline(metadata.baseline);
|
|
||||||
new_font->set_mean_line(metadata.mean_line);
|
|
||||||
window()->set_modified(true);
|
|
||||||
MUST(initialize({}, move(new_font)));
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
m_new_action->set_status_tip("Create a new font");
|
m_new_action->set_status_tip("Create a new font");
|
||||||
|
|
||||||
|
|
|
@ -214,3 +214,20 @@ void NewFontDialog::save_metadata()
|
||||||
m_new_font_metadata.glyph_spacing = m_spacing_spinbox->value();
|
m_new_font_metadata.glyph_spacing = m_spacing_spinbox->value();
|
||||||
m_new_font_metadata.is_fixed_width = m_fixed_width_checkbox->is_checked();
|
m_new_font_metadata.is_fixed_width = m_fixed_width_checkbox->is_checked();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ErrorOr<NonnullRefPtr<Gfx::BitmapFont>> NewFontDialog::create_font()
|
||||||
|
{
|
||||||
|
save_metadata();
|
||||||
|
|
||||||
|
auto font = TRY(Gfx::BitmapFont::try_create(m_new_font_metadata.glyph_height, m_new_font_metadata.glyph_width, m_new_font_metadata.is_fixed_width, 0x110000));
|
||||||
|
font->set_name(m_new_font_metadata.name);
|
||||||
|
font->set_family(m_new_font_metadata.family);
|
||||||
|
font->set_presentation_size(m_new_font_metadata.presentation_size);
|
||||||
|
font->set_weight(m_new_font_metadata.weight);
|
||||||
|
font->set_slope(m_new_font_metadata.slope);
|
||||||
|
font->set_baseline(m_new_font_metadata.baseline);
|
||||||
|
font->set_mean_line(m_new_font_metadata.mean_line);
|
||||||
|
font->set_glyph_spacing(m_new_font_metadata.glyph_spacing);
|
||||||
|
|
||||||
|
return font;
|
||||||
|
}
|
||||||
|
|
|
@ -9,16 +9,13 @@
|
||||||
#include <LibGUI/Window.h>
|
#include <LibGUI/Window.h>
|
||||||
#include <LibGUI/Wizards/WizardDialog.h>
|
#include <LibGUI/Wizards/WizardDialog.h>
|
||||||
#include <LibGUI/Wizards/WizardPage.h>
|
#include <LibGUI/Wizards/WizardPage.h>
|
||||||
|
#include <LibGfx/Font/BitmapFont.h>
|
||||||
|
|
||||||
class NewFontDialog final : public GUI::WizardDialog {
|
class NewFontDialog final : public GUI::WizardDialog {
|
||||||
C_OBJECT(NewFontDialog);
|
C_OBJECT(NewFontDialog);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
auto new_font_metadata()
|
ErrorOr<NonnullRefPtr<Gfx::BitmapFont>> create_font();
|
||||||
{
|
|
||||||
save_metadata();
|
|
||||||
return m_new_font_metadata;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
NewFontDialog(GUI::Window* parent_window);
|
NewFontDialog(GUI::Window* parent_window);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue