Skip to content

Commit 52c31bb

Browse files
Lubrsiawesomekling
authored andcommitted
LibGfx+FontEditor+Fonts: Add "mean line" value to all fonts
The main inspiration behind this was to have a correct ex CSS unit. The mean line is based off what it shows in the CSS Values and Units Level 4 specification, section 6.1.1. https://www.w3.org/TR/css-values-4/#font-relative-lengths
1 parent 043b31a commit 52c31bb

19 files changed

+55
-13
lines changed

β€ŽApplications/FontEditor/FontEditor.cpp

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ FontEditorWidget::FontEditorWidget(const String& path, RefPtr<Gfx::Font>&& edite
121121
font_metadata_group_box.set_layout<GUI::VerticalBoxLayout>();
122122
font_metadata_group_box.layout()->set_margins({ 5, 15, 5, 5 });
123123
font_metadata_group_box.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed);
124-
font_metadata_group_box.set_preferred_size(0, 165);
124+
font_metadata_group_box.set_preferred_size(0, 195);
125125
font_metadata_group_box.set_title("Font metadata");
126126

127127
//// Name Row
@@ -212,12 +212,31 @@ FontEditorWidget::FontEditorWidget(const String& path, RefPtr<Gfx::Font>&& edite
212212
baseline_label.set_text("Baseline:");
213213

214214
auto& baseline_spinbox = baseline_container.add<GUI::SpinBox>();
215-
baseline_spinbox.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill);
215+
baseline_spinbox.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill);
216216
baseline_spinbox.set_preferred_size(100, 0);
217217
baseline_spinbox.set_min(0);
218218
baseline_spinbox.set_max(m_edited_font->glyph_height() - 1);
219219
baseline_spinbox.set_value(m_edited_font->baseline());
220220

221+
//// Mean line Row
222+
auto& mean_line_container = font_metadata_group_box.add<GUI::Widget>();
223+
mean_line_container.set_layout<GUI::HorizontalBoxLayout>();
224+
mean_line_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed);
225+
mean_line_container.set_preferred_size(0, 22);
226+
227+
auto& mean_line_label = mean_line_container.add<GUI::Label>();
228+
mean_line_label.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill);
229+
mean_line_label.set_preferred_size(100, 0);
230+
mean_line_label.set_text_alignment(Gfx::TextAlignment::CenterLeft);
231+
mean_line_label.set_text("Mean Line:");
232+
233+
auto& mean_line_spinbox = mean_line_container.add<GUI::SpinBox>();
234+
mean_line_spinbox.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill);
235+
mean_line_spinbox.set_preferred_size(100, 0);
236+
mean_line_spinbox.set_min(0);
237+
mean_line_spinbox.set_max(m_edited_font->glyph_height() - 1);
238+
mean_line_spinbox.set_value(m_edited_font->mean_line());
239+
221240
//// Fixed checkbox Row
222241
auto& fixed_width_checkbox = font_metadata_group_box.add<GUI::CheckBox>();
223242
fixed_width_checkbox.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed);
@@ -259,7 +278,7 @@ FontEditorWidget::FontEditorWidget(const String& path, RefPtr<Gfx::Font>&& edite
259278
right_site_width = max(right_site_width, m_glyph_map_widget->preferred_width());
260279

261280
m_preferred_width = m_glyph_editor_widget->width() + right_site_width + 20;
262-
m_preferred_height = m_glyph_map_widget->relative_rect().height() + 2 * m_edited_font->glyph_height() + 270;
281+
m_preferred_height = m_glyph_map_widget->relative_rect().height() + 2 * m_edited_font->glyph_height() + 300;
263282
};
264283

265284
m_glyph_editor_widget->on_glyph_altered = [this, update_demo](u8 glyph) {
@@ -308,6 +327,12 @@ FontEditorWidget::FontEditorWidget(const String& path, RefPtr<Gfx::Font>&& edite
308327
update_demo();
309328
};
310329

330+
mean_line_spinbox.on_change = [this, update_demo](int value) {
331+
m_edited_font->set_mean_line(value);
332+
m_glyph_editor_widget->update();
333+
update_demo();
334+
};
335+
311336
// init widget
312337
calculate_prefed_sizes();
313338
m_glyph_map_widget->set_selected_glyph('A');

β€ŽApplications/FontEditor/GlyphEditorWidget.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,8 @@ void GlyphEditorWidget::paint_event(GUI::PaintEvent& event)
5959

6060
painter.translate(-1, -1);
6161
for (int y = 1; y < font().glyph_height(); ++y) {
62-
bool bold_line = (y - 1) == font().baseline();
62+
int y_below = y - 1;
63+
bool bold_line = y_below == font().baseline() || y_below == font().mean_line();
6364
painter.draw_line({ 0, y * m_scale }, { font().max_glyph_width() * m_scale, y * m_scale }, palette().threed_shadow2(), bold_line ? 2 : 1);
6465
}
6566

β€ŽBase/res/fonts/CsillaBold7x10.font

0 Bytes
Binary file not shown.

β€ŽBase/res/fonts/CsillaThin7x10.font

0 Bytes
Binary file not shown.

β€ŽBase/res/fonts/Katica10.font

0 Bytes
Binary file not shown.

β€ŽBase/res/fonts/KaticaBold10.font

0 Bytes
Binary file not shown.

β€ŽBase/res/fonts/LizaBold18x24.font

0 Bytes
Binary file not shown.

β€ŽBase/res/fonts/LizaBold26x36.font

0 Bytes
Binary file not shown.

β€ŽBase/res/fonts/LizaBold8x10.font

0 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.

0 commit comments

Comments
Β (0)