diff --git a/crates/ui-egui/src/i18n/es.tsv b/crates/ui-egui/src/i18n/es.tsv index 20999294..5e550b49 100644 --- a/crates/ui-egui/src/i18n/es.tsv +++ b/crates/ui-egui/src/i18n/es.tsv @@ -1498,6 +1498,7 @@ More Más More Pathfinder options Más opciones de Buscatrazos More Align options Más opciones de alineación + More Paragraph options Más opciones de párrafo More Settings Más ajustes Move Mover Move All Objects Mover todos los objetos diff --git a/crates/ui-egui/src/i18n/fr.tsv b/crates/ui-egui/src/i18n/fr.tsv index ab47b7f4..58d52e35 100644 --- a/crates/ui-egui/src/i18n/fr.tsv +++ b/crates/ui-egui/src/i18n/fr.tsv @@ -1497,6 +1497,7 @@ More Plus More Pathfinder options Plus d’options Pathfinder More Align options Plus d’options d’alignement + More Paragraph options Plus d’options de paragraphe More Settings Plus de réglages Move Déplacer Move All Objects Déplacer tous les objets diff --git a/crates/ui-egui/src/i18n/it.tsv b/crates/ui-egui/src/i18n/it.tsv index e23a10f5..7ee24bd8 100644 --- a/crates/ui-egui/src/i18n/it.tsv +++ b/crates/ui-egui/src/i18n/it.tsv @@ -1498,6 +1498,7 @@ More Altro More Pathfinder options Altre opzioni di Elaborazione tracciati More Align options Altre opzioni di allineamento + More Paragraph options Altre opzioni di paragrafo More Settings Altre impostazioni Move Sposta Move All Objects Sposta tutti gli oggetti diff --git a/crates/ui-egui/src/i18n/ja.tsv b/crates/ui-egui/src/i18n/ja.tsv index 75df7057..1dc6a340 100644 --- a/crates/ui-egui/src/i18n/ja.tsv +++ b/crates/ui-egui/src/i18n/ja.tsv @@ -1640,6 +1640,7 @@ More 多く More Pathfinder options その他のパスファインダーオプション More Align options その他の整列オプション + More Paragraph options その他の段落オプション More Settings その他の設定 Move 移動 Move Anchors アンカーポイントを移動 diff --git a/crates/ui-egui/src/i18n/pt-br.tsv b/crates/ui-egui/src/i18n/pt-br.tsv index 09b12d79..64c7b2af 100644 --- a/crates/ui-egui/src/i18n/pt-br.tsv +++ b/crates/ui-egui/src/i18n/pt-br.tsv @@ -1314,6 +1314,7 @@ More Mais More Pathfinder options Mais opções de Localizador de Caminhos More Align options Mais opções de alinhamento + More Paragraph options Mais opções de parágrafo More Settings Mais Configurações Move Mover Move Anchors Mover Âncoras diff --git a/crates/ui-egui/src/i18n/ru.tsv b/crates/ui-egui/src/i18n/ru.tsv index 504b52a9..68dd631b 100644 --- a/crates/ui-egui/src/i18n/ru.tsv +++ b/crates/ui-egui/src/i18n/ru.tsv @@ -1496,6 +1496,7 @@ More Больше More Pathfinder options Дополнительные параметры обработки контуров More Align options Дополнительные параметры выравнивания + More Paragraph options Дополнительные параметры абзаца More Settings Дополнительные настройки Move Переместить Move All Objects Переместить все объекты diff --git a/crates/ui-egui/src/i18n/uk.tsv b/crates/ui-egui/src/i18n/uk.tsv index 0f19a210..de22dc22 100644 --- a/crates/ui-egui/src/i18n/uk.tsv +++ b/crates/ui-egui/src/i18n/uk.tsv @@ -1492,6 +1492,7 @@ More Більше More Pathfinder options Додаткові параметри обробки контурів More Align options Додаткові параметри вирівнювання + More Paragraph options Додаткові параметри абзацу More Settings Додаткові налаштування Move Перемістити Move All Objects Перемістити всі об’єкти diff --git a/crates/ui-egui/src/i18n/zh-hans.tsv b/crates/ui-egui/src/i18n/zh-hans.tsv index 03119810..b1021820 100644 --- a/crates/ui-egui/src/i18n/zh-hans.tsv +++ b/crates/ui-egui/src/i18n/zh-hans.tsv @@ -1456,6 +1456,7 @@ More 较多 More Pathfinder options 更多路径查找器选项 More Align options 更多对齐选项 + More Paragraph options 更多段落选项 More Settings 更多设置 Move 移动 Move All Objects 移动所有对象 diff --git a/crates/ui-egui/src/i18n/zh-hant.tsv b/crates/ui-egui/src/i18n/zh-hant.tsv index 7aabf141..177b1869 100644 --- a/crates/ui-egui/src/i18n/zh-hant.tsv +++ b/crates/ui-egui/src/i18n/zh-hant.tsv @@ -1498,6 +1498,7 @@ More 更多 More Pathfinder options 更多路徑管理員選項 More Align options 更多對齊選項 + More Paragraph options 更多段落選項 More Settings 更多設定 Move 移動 Move All Objects 移動所有物件 diff --git a/crates/ui-egui/src/panels/paragraph.rs b/crates/ui-egui/src/panels/paragraph.rs index 101072bd..ed9f2a62 100644 --- a/crates/ui-egui/src/panels/paragraph.rs +++ b/crates/ui-egui/src/panels/paragraph.rs @@ -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) { let t = Tokens::get(ui.ctx()); let Some((_, para)) = text_style(app) else { @@ -67,14 +85,9 @@ pub fn show(app: &mut VectorcraftApp, ui: &mut Ui) { return; }; let rtl = resolved_rtl(app, ¶); - let shown = shown_alignment(para.justify, rtl); ui.horizontal(|ui| { ui.spacing_mut().item_spacing.x = 3.0; - for (j, icon, tip, id) in ALIGNMENTS { - if widgets::icon_button(ui, icon, tip, shown == j, 28.0).clicked() { - para_cmd(app, "text.setStyle", json!({"justify": id})); - } - } + alignment_buttons(app, ui, ¶, 28.0); // Paragraph direction, with the Middle Eastern (Indic) options. if app.session.prefs.show_indic_options { ui.add_space(6.0); @@ -127,9 +140,7 @@ pub fn show(app: &mut VectorcraftApp, ui: &mut Ui) { if pstate::(ui.ctx(), "pa-hide-options") { return; } - if widgets::check(ui, tl!("Hyphenate"), para.hyphenate, true) { - format(app, json!({"hyphenate": !para.hyphenate})); - } + hyphenate_check(app, ui, ¶); // Japanese composition: how punctuation is spaced (JLREQ 3.1), with the East Asian options. if app.session.prefs.show_east_asian_options { ui.horizontal(|ui| { diff --git a/crates/ui-egui/src/panels/properties.rs b/crates/ui-egui/src/panels/properties.rs index 88a636ae..e69a1d82 100644 --- a/crates/ui-egui/src/panels/properties.rs +++ b/crates/ui-egui/src/panels/properties.rs @@ -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::metrics_grid(app, ui, "props-char", &s, w, false); section_header(ui, tl!("Paragraph")); - ui.horizontal(|ui| { - for (icon, j) in [("align-start-vertical", "left"), ("align-center-vertical", "center"), ("align-end-vertical", "right")] { - if widgets::icon_button(ui, icon, j, false, 24.0).clicked() { - app.run("text.setStyle", json!({"justify": j})).ok(); + // As in the Paragraph panel: the seven alignments and Hyphenate (#775); the rest is there. + if let Some((_, para)) = super::character::text_style(app) { + ui.horizontal(|ui| { + ui.spacing_mut().item_spacing.x = 3.0; + super::paragraph::alignment_buttons(app, ui, ¶, 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, ¶); + } } #[cfg(test)] @@ -592,6 +596,20 @@ mod tests { } /// #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] fn edit_artboards_adds_artboards_and_exits() { let mut app = VectorcraftApp::new(Session::new(), Default::default());