Merge pull request #877 from storytold/fix/775-properties-paragraph

Fix #775: the Properties panel's Paragraph section justifies and hyphenates
This commit is contained in:
BFlat
2026-10-10 10:45:43 +07:00
committed by GitHub
11 changed files with 53 additions and 15 deletions
+1
View File
@@ -1498,6 +1498,7 @@
More Más More Más
More Pathfinder options Más opciones de Buscatrazos More Pathfinder options Más opciones de Buscatrazos
More Align options Más opciones de alineación More Align options Más opciones de alineación
More Paragraph options Más opciones de párrafo
More Settings Más ajustes More Settings Más ajustes
Move Mover Move Mover
Move All Objects Mover todos los objetos Move All Objects Mover todos los objetos
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -1497,6 +1497,7 @@
More Plus More Plus
More Pathfinder options Plus d’options Pathfinder More Pathfinder options Plus d’options Pathfinder
More Align options Plus d’options d’alignement More Align options Plus d’options d’alignement
More Paragraph options Plus d’options de paragraphe
More Settings Plus de réglages More Settings Plus de réglages
Move Déplacer Move Déplacer
Move All Objects Déplacer tous les objets Move All Objects Déplacer tous les objets
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -1498,6 +1498,7 @@
More Altro More Altro
More Pathfinder options Altre opzioni di Elaborazione tracciati More Pathfinder options Altre opzioni di Elaborazione tracciati
More Align options Altre opzioni di allineamento More Align options Altre opzioni di allineamento
More Paragraph options Altre opzioni di paragrafo
More Settings Altre impostazioni More Settings Altre impostazioni
Move Sposta Move Sposta
Move All Objects Sposta tutti gli oggetti Move All Objects Sposta tutti gli oggetti
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -1640,6 +1640,7 @@
More 多く More 多く
More Pathfinder options その他のパスファインダーオプション More Pathfinder options その他のパスファインダーオプション
More Align options その他の整列オプション More Align options その他の整列オプション
More Paragraph options その他の段落オプション
More Settings その他の設定 More Settings その他の設定
Move 移動 Move 移動
Move Anchors アンカーポイントを移動 Move Anchors アンカーポイントを移動
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -1314,6 +1314,7 @@
More Mais More Mais
More Pathfinder options Mais opções de Localizador de Caminhos More Pathfinder options Mais opções de Localizador de Caminhos
More Align options Mais opções de alinhamento More Align options Mais opções de alinhamento
More Paragraph options Mais opções de parágrafo
More Settings Mais Configurações More Settings Mais Configurações
Move Mover Move Mover
Move Anchors Mover Âncoras Move Anchors Mover Âncoras
Can't render this file because it contains an unexpected character in line 6 and column 47.
+1
View File
@@ -1496,6 +1496,7 @@
More Больше More Больше
More Pathfinder options Дополнительные параметры обработки контуров More Pathfinder options Дополнительные параметры обработки контуров
More Align options Дополнительные параметры выравнивания More Align options Дополнительные параметры выравнивания
More Paragraph options Дополнительные параметры абзаца
More Settings Дополнительные настройки More Settings Дополнительные настройки
Move Переместить Move Переместить
Move All Objects Переместить все объекты Move All Objects Переместить все объекты
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -1492,6 +1492,7 @@
More Більше More Більше
More Pathfinder options Додаткові параметри обробки контурів More Pathfinder options Додаткові параметри обробки контурів
More Align options Додаткові параметри вирівнювання More Align options Додаткові параметри вирівнювання
More Paragraph options Додаткові параметри абзацу
More Settings Додаткові налаштування More Settings Додаткові налаштування
Move Перемістити Move Перемістити
Move All Objects Перемістити всі об’єкти Move All Objects Перемістити всі об’єкти
Can't render this file because it contains an unexpected character in line 632 and column 40.
+1
View File
@@ -1456,6 +1456,7 @@
More 较多 More 较多
More Pathfinder options 更多路径查找器选项 More Pathfinder options 更多路径查找器选项
More Align options 更多对齐选项 More Align options 更多对齐选项
More Paragraph options 更多段落选项
More Settings 更多设置 More Settings 更多设置
Move 移动 Move 移动
Move All Objects 移动所有对象 Move All Objects 移动所有对象
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -1498,6 +1498,7 @@
More 更多 More 更多
More Pathfinder options 更多路徑管理員選項 More Pathfinder options 更多路徑管理員選項
More Align options 更多對齊選項 More Align options 更多對齊選項
More Paragraph options 更多段落選項
More Settings 更多設定 More Settings 更多設定
Move 移動 Move 移動
Move All Objects 移動所有物件 Move All Objects 移動所有物件
Can't render this file because it contains an unexpected character in line 6 and column 47.
+20 -9
View File
@@ -60,6 +60,24 @@ fn shown_alignment(justify: Justify, rtl: bool) -> Justify {
} }
} }
/// The seven alignment buttons, `size` points square, the one of `para`'s alignment on (the
/// Paragraph panel's and the Properties panel's).
pub fn alignment_buttons(app: &mut VectorcraftApp, ui: &mut Ui, para: &ParaStyle, size: f32) {
let shown = shown_alignment(para.justify, resolved_rtl(app, para));
for (j, icon, tip, id) in ALIGNMENTS {
if widgets::icon_button(ui, icon, tip, shown == j, size).clicked() {
para_cmd(app, "text.setStyle", json!({"justify": id}));
}
}
}
/// The Hyphenate checkbox of `para`'s paragraphs.
pub fn hyphenate_check(app: &mut VectorcraftApp, ui: &mut Ui, para: &ParaStyle) {
if widgets::check(ui, tl!("Hyphenate"), para.hyphenate, true) {
format(app, json!({"hyphenate": !para.hyphenate}));
}
}
pub fn show(app: &mut VectorcraftApp, ui: &mut Ui) { pub fn show(app: &mut VectorcraftApp, ui: &mut Ui) {
let t = Tokens::get(ui.ctx()); let t = Tokens::get(ui.ctx());
let Some((_, para)) = text_style(app) else { let Some((_, para)) = text_style(app) else {
@@ -67,14 +85,9 @@ pub fn show(app: &mut VectorcraftApp, ui: &mut Ui) {
return; return;
}; };
let rtl = resolved_rtl(app, &para); let rtl = resolved_rtl(app, &para);
let shown = shown_alignment(para.justify, rtl);
ui.horizontal(|ui| { ui.horizontal(|ui| {
ui.spacing_mut().item_spacing.x = 3.0; ui.spacing_mut().item_spacing.x = 3.0;
for (j, icon, tip, id) in ALIGNMENTS { alignment_buttons(app, ui, &para, 28.0);
if widgets::icon_button(ui, icon, tip, shown == j, 28.0).clicked() {
para_cmd(app, "text.setStyle", json!({"justify": id}));
}
}
// Paragraph direction, with the Middle Eastern (Indic) options. // Paragraph direction, with the Middle Eastern (Indic) options.
if app.session.prefs.show_indic_options { if app.session.prefs.show_indic_options {
ui.add_space(6.0); ui.add_space(6.0);
@@ -127,9 +140,7 @@ pub fn show(app: &mut VectorcraftApp, ui: &mut Ui) {
if pstate::<bool>(ui.ctx(), "pa-hide-options") { if pstate::<bool>(ui.ctx(), "pa-hide-options") {
return; return;
} }
if widgets::check(ui, tl!("Hyphenate"), para.hyphenate, true) { hyphenate_check(app, ui, &para);
format(app, json!({"hyphenate": !para.hyphenate}));
}
// Japanese composition: how punctuation is spaced (JLREQ 3.1), with the East Asian options. // Japanese composition: how punctuation is spaced (JLREQ 3.1), with the East Asian options.
if app.session.prefs.show_east_asian_options { if app.session.prefs.show_east_asian_options {
ui.horizontal(|ui| { ui.horizontal(|ui| {
+24 -6
View File
@@ -523,13 +523,17 @@ pub fn type_sections(app: &mut VectorcraftApp, ui: &mut Ui) {
super::character::font_pickers(app, ui, &s, ("font", "font-style"), (w - 4.0, w - 4.0)); super::character::font_pickers(app, ui, &s, ("font", "font-style"), (w - 4.0, w - 4.0));
super::character::metrics_grid(app, ui, "props-char", &s, w, false); super::character::metrics_grid(app, ui, "props-char", &s, w, false);
section_header(ui, tl!("Paragraph")); section_header(ui, tl!("Paragraph"));
ui.horizontal(|ui| { // As in the Paragraph panel: the seven alignments and Hyphenate (#775); the rest is there.
for (icon, j) in [("align-start-vertical", "left"), ("align-center-vertical", "center"), ("align-end-vertical", "right")] { if let Some((_, para)) = super::character::text_style(app) {
if widgets::icon_button(ui, icon, j, false, 24.0).clicked() { ui.horizontal(|ui| {
app.run("text.setStyle", json!({"justify": j})).ok(); ui.spacing_mut().item_spacing.x = 3.0;
super::paragraph::alignment_buttons(app, ui, &para, 24.0);
if widgets::icon_button(ui, "ellipsis", tl!("More Paragraph options"), false, 24.0).clicked() {
app.ui.open_panel = Some("paragraph".into());
} }
} });
}); super::paragraph::hyphenate_check(app, ui, &para);
}
} }
#[cfg(test)] #[cfg(test)]
@@ -592,6 +596,20 @@ mod tests {
} }
/// #530: Edit Artboards shows the active artboard, with New Artboard, Delete Artboard and Exit. /// #530: Edit Artboards shows the active artboard, with New Artboard, Delete Artboard and Exit.
/// #775: type's Paragraph section has Hyphenate, and its checkbox turns it on.
#[test]
fn type_paragraph_section_hyphenates() {
let mut app = VectorcraftApp::new(Session::new(), Default::default());
app.run("file.new", json!({"width": 200, "height": 100})).unwrap();
app.run("text.create", json!({"x": 10, "y": 50, "text": "Paragraph"})).unwrap();
let ctx = egui::Context::default();
frame(&mut app, &ctx, vec![]);
let texts = frame(&mut app, &ctx, vec![]);
click(&mut app, &ctx, &texts, "Hyphenate");
let hyphenate = |app: &VectorcraftApp| crate::panels::character::text_style(app).unwrap().1.hyphenate;
assert!(hyphenate(&app));
}
#[test] #[test]
fn edit_artboards_adds_artboards_and_exits() { fn edit_artboards_adds_artboards_and_exits() {
let mut app = VectorcraftApp::new(Session::new(), Default::default()); let mut app = VectorcraftApp::new(Session::new(), Default::default());