mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-11-08 16:30:41 +00:00
Fix #3759: vertical alignment buttons for area type in the Properties and Control panels
Squashed from #5100 onto main.
This commit is contained in:
@@ -263,6 +263,11 @@ pub fn control_bar(app: &mut VectorcraftApp, ui: &mut Ui) {
|
||||
}
|
||||
ui.separator();
|
||||
crate::panels::character::control_bar(app, ui);
|
||||
// Area type: its vertical alignment in the frame (#3759).
|
||||
if crate::panels::properties::vertical_align::buttons(app, ui, 24.0) {
|
||||
ui.add_space(4.0);
|
||||
ui.separator();
|
||||
}
|
||||
if sel.is_empty() {
|
||||
if widgets::flat_button(ui, tl!("Document Setup"), 112.0).clicked() {
|
||||
app.run("file.documentSetup", json!({})).ok();
|
||||
|
||||
@@ -1597,6 +1597,10 @@ font-technology Variable Променливи
|
||||
Join Tool Инструмент „Свързване“
|
||||
Justification… Подравняване…
|
||||
Justify all lines Двустранно подравняване на всички редове
|
||||
Align Top Подравняване горе
|
||||
Align Center Подравняване в средата
|
||||
Align Bottom Подравняване долу
|
||||
Justify Vertically Двустранно вертикално подравняване
|
||||
Justify with last line aligned center Двустранно подравняване с центриран последен ред
|
||||
Justify with last line aligned left Двустранно подравняване с ляво подравнен последен ред
|
||||
Justify with last line aligned right Двустранно подравняване с дясно подравнен последен ред
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -950,6 +950,10 @@ lighting Light Svjetlo
|
||||
Home Početna
|
||||
Import Keyboard Shortcuts… Uvezi prečice na tastaturi…
|
||||
Justify all lines Obostrano poravnaj sve redove
|
||||
Align Top Poravnaj gore
|
||||
Align Center Poravnaj u sredinu
|
||||
Align Bottom Poravnaj dolje
|
||||
Justify Vertically Obostrano poravnaj okomito
|
||||
Justify with last line aligned left Obostrano s posljednjim redom lijevo
|
||||
Keyboard Shortcut Conflicts Konflikti prečica na tastaturi
|
||||
Keyboard Shortcut Set Skup prečica na tastaturi
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -2053,6 +2053,10 @@ digits Malayalam Malaiàlam
|
||||
Justification… Justificació…
|
||||
Justify Justifica
|
||||
Justify all lines Justifica totes les línies
|
||||
Align Top Alinea a dalt
|
||||
Align Center Alinea al mig
|
||||
Align Bottom Alinea a baix
|
||||
Justify Vertically Justifica verticalment
|
||||
Justify with last line aligned center Justifica amb l’última línia centrada
|
||||
Justify with last line aligned left Justifica amb l’última línia alineada a l’esquerra
|
||||
Justify with last line aligned right Justifica amb l’última línia alineada a la dreta
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -969,6 +969,10 @@ lighting Light Světlo
|
||||
Home Domů
|
||||
Import Keyboard Shortcuts… Importovat klávesové zkratky…
|
||||
Justify all lines Do bloku včetně posledního řádku
|
||||
Align Top Zarovnat nahoru
|
||||
Align Center Zarovnat svisle na střed
|
||||
Align Bottom Zarovnat dolů
|
||||
Justify Vertically Zarovnat svisle do bloku
|
||||
Justify with last line aligned left Do bloku, poslední řádek vlevo
|
||||
Keyboard Shortcut Conflicts Konflikty klávesových zkratek
|
||||
Keyboard Shortcut Set Sada klávesových zkratek
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -886,6 +886,10 @@ lighting Light Lys
|
||||
Home Home
|
||||
Import Keyboard Shortcuts… Importér tastaturgenveje…
|
||||
Justify all lines Justér alle linjer
|
||||
Align Top Justér mod toppen
|
||||
Align Center Justér lodret mod midten
|
||||
Align Bottom Justér mod bunden
|
||||
Justify Vertically Justér lodret
|
||||
Justify with last line aligned left Justér med sidste linje venstrejusteret
|
||||
Keyboard Shortcut Conflicts Konflikter mellem tastaturgenveje
|
||||
Keyboard Shortcut Set Tastaturgenvejssæt
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -1642,6 +1642,10 @@ file-filter Templates Vorlagen
|
||||
Join Tool Zusammenfügen-Werkzeug
|
||||
Justification… Abstände…
|
||||
Justify all lines Blocksatz, alle Zeilen
|
||||
Align Top Oben ausrichten
|
||||
Align Center Mittig ausrichten
|
||||
Align Bottom Unten ausrichten
|
||||
Justify Vertically Vertikaler Blocksatz
|
||||
Justify with last line aligned center Blocksatz, letzte Zeile zentriert
|
||||
Justify with last line aligned left Blocksatz, letzte Zeile linksbündig
|
||||
Justify with last line aligned right Blocksatz, letzte Zeile rechtsbündig
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -1561,6 +1561,10 @@ font-technology Variable Μεταβλητές
|
||||
Join Tool Ένωση (Join Tool)
|
||||
Justification… Πλήρης στοίχιση…
|
||||
Justify all lines Πλήρης στοίχιση όλων των γραμμών
|
||||
Align Top Στοίχιση επάνω
|
||||
Align Center Στοίχιση στη μέση
|
||||
Align Bottom Στοίχιση κάτω
|
||||
Justify Vertically Κατακόρυφη πλήρης στοίχιση
|
||||
Justify with last line aligned center Πλήρης στοίχιση με τελευταία γραμμή στο κέντρο
|
||||
Justify with last line aligned left Πλήρης στοίχιση με τελευταία γραμμή αριστερά
|
||||
Justify with last line aligned right Πλήρης στοίχιση με τελευταία γραμμή δεξιά
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 163 and column 5.
|
@@ -1647,6 +1647,10 @@ font-technology Variable Variables
|
||||
Join Tool Herramienta Unir
|
||||
Justification… Justificación…
|
||||
Justify all lines Justificar todas las líneas
|
||||
Align Top Alinear arriba
|
||||
Align Center Alinear en el medio
|
||||
Align Bottom Alinear abajo
|
||||
Justify Vertically Justificar verticalmente
|
||||
Justify with last line aligned center Justificar con la última línea centrada
|
||||
Justify with last line aligned left Justificar con la última línea alineada a la izquierda
|
||||
Justify with last line aligned right Justificar con la última línea alineada a la derecha
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -948,6 +948,10 @@ lighting Light Valo
|
||||
Home Aloitus
|
||||
Import Keyboard Shortcuts… Tuo pikanäppäimet…
|
||||
Justify all lines Tasaa kaikki rivit
|
||||
Align Top Tasaa ylös
|
||||
Align Center Tasaa pystysuunnassa keskelle
|
||||
Align Bottom Tasaa alas
|
||||
Justify Vertically Tasaa pystysuunnassa
|
||||
Justify with last line aligned left Tasaa, viimeinen rivi vasemmalle
|
||||
Keyboard Shortcut Conflicts Pikanäppäinristiriidat
|
||||
Keyboard Shortcut Set Pikanäppäinjoukko
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -1641,6 +1641,10 @@ font-technology Variable Variables
|
||||
Join Tool Outil Jonction
|
||||
Justification… Justification…
|
||||
Justify all lines Justifier toutes les lignes
|
||||
Align Top Aligner en haut
|
||||
Align Center Aligner au milieu
|
||||
Align Bottom Aligner en bas
|
||||
Justify Vertically Justifier verticalement
|
||||
Justify with last line aligned center Justifier, dernière ligne centrée
|
||||
Justify with last line aligned left Justifier, dernière ligne alignée à gauche
|
||||
Justify with last line aligned right Justifier, dernière ligne alignée à droite
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -2074,6 +2074,10 @@ file-filter Templates Sablonok
|
||||
Justification… Sorkizárás…
|
||||
Justify Sorkizárt
|
||||
Justify all lines Sorkizárás minden sorra
|
||||
Align Top Igazítás felülre
|
||||
Align Center Igazítás függőlegesen középre
|
||||
Align Bottom Igazítás alulra
|
||||
Justify Vertically Függőleges sorkizárás
|
||||
Justify with last line aligned center Sorkizárás, utolsó sor középre
|
||||
Justify with last line aligned left Sorkizárás, utolsó sor balra
|
||||
Justify with last line aligned right Sorkizárás, utolsó sor jobbra
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -886,6 +886,10 @@ lighting Light Cahaya
|
||||
Home Home
|
||||
Import Keyboard Shortcuts… Impor pintasan papan ketik…
|
||||
Justify all lines Ratakan semua baris
|
||||
Align Top Sejajarkan ke atas
|
||||
Align Center Sejajarkan ke tengah vertikal
|
||||
Align Bottom Sejajarkan ke bawah
|
||||
Justify Vertically Ratakan vertikal
|
||||
Justify with last line aligned left Ratakan dengan baris terakhir rata kiri
|
||||
Keyboard Shortcut Conflicts Konflik pintasan papan ketik
|
||||
Keyboard Shortcut Set Set pintasan papan ketik
|
||||
|
||||
|
@@ -1674,6 +1674,10 @@ file-filter Templates Modelli
|
||||
Join Tool Strumento Unisci
|
||||
Justification… Giustificazione…
|
||||
Justify all lines Giustifica tutte le righe
|
||||
Align Top Allinea in alto
|
||||
Align Center Allinea al centro verticalmente
|
||||
Align Bottom Allinea in basso
|
||||
Justify Vertically Giustifica verticalmente
|
||||
Justify with last line aligned center Giustifica con l'ultima riga centrata
|
||||
Justify with last line aligned left Giustifica con l'ultima riga allineata a sinistra
|
||||
Justify with last line aligned right Giustifica con l'ultima riga allineata a destra
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -3598,6 +3598,10 @@ file-filter Templates テンプレート
|
||||
Installed plug-in {} プラグイン {} をインストールしました
|
||||
Internal CSS 内部 CSS
|
||||
Justify all lines 両端揃え (最終行も均等配置)
|
||||
Align Top 上揃え
|
||||
Align Center 上下中央揃え
|
||||
Align Bottom 下揃え
|
||||
Justify Vertically 縦方向に均等配置
|
||||
Justify with last line aligned center 両端揃え (最終行中央揃え)
|
||||
Justify with last line aligned left 両端揃え (最終行左揃え)
|
||||
Justify with last line aligned right 両端揃え (最終行右揃え)
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -836,6 +836,10 @@ lighting Light სინათლე
|
||||
Home საწყისი ეკრანი
|
||||
Import Keyboard Shortcuts… კლავიატურის მალსახმობების იმპორტირება…
|
||||
Justify all lines ყველა სტრიქონის ორმხრივი სწორება
|
||||
Align Top ზემოთ სწორება
|
||||
Align Center შუაში სწორება
|
||||
Align Bottom ქვემოთ სწორება
|
||||
Justify Vertically ვერტიკალური ორმხრივი სწორება
|
||||
Justify with last line aligned left ორმხრივი სწორება, ბოლო სტრიქონი მარცხნივ
|
||||
Keyboard Shortcut Conflicts კლავიატურის მალსახმობების კონფლიქტები
|
||||
Keyboard Shortcut Set კლავიატურის მალსახმობების ნაკრები
|
||||
|
||||
|
Can't render this file because it is too large.
|
@@ -3586,6 +3586,10 @@ file-filter Templates 템플릿
|
||||
Installed plug-in {} 플러그인 {}을(를) 설치했습니다
|
||||
Internal CSS 내부 CSS
|
||||
Justify all lines 모든 줄 양끝 맞춤
|
||||
Align Top 위쪽 정렬
|
||||
Align Center 세로 가운데 정렬
|
||||
Align Bottom 아래쪽 정렬
|
||||
Justify Vertically 세로 양끝 맞춤
|
||||
Justify with last line aligned center 마지막 줄 가운데 정렬 양끝 맞춤
|
||||
Justify with last line aligned left 마지막 줄 왼쪽 정렬 양끝 맞춤
|
||||
Justify with last line aligned right 마지막 줄 오른쪽 정렬 양끝 맞춤
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -900,6 +900,10 @@ lighting Light Licht
|
||||
Home Home
|
||||
Import Keyboard Shortcuts… Sneltoetsen importeren…
|
||||
Justify all lines Alle regels uitvullen
|
||||
Align Top Boven uitlijnen
|
||||
Align Center Midden uitlijnen
|
||||
Align Bottom Onder uitlijnen
|
||||
Justify Vertically Verticaal uitvullen
|
||||
Justify with last line aligned left Uitvullen met laatste regel links uitgelijnd
|
||||
Keyboard Shortcut Conflicts Sneltoetsconflicten
|
||||
Keyboard Shortcut Set Sneltoetsset
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -906,6 +906,10 @@ lighting Light Światło
|
||||
Home Strona startowa
|
||||
Import Keyboard Shortcuts… Importuj skróty klawiaturowe…
|
||||
Justify all lines Justuj wszystkie wiersze
|
||||
Align Top Wyrównaj do góry
|
||||
Align Center Wyrównaj pionowo do środka
|
||||
Align Bottom Wyrównaj do dołu
|
||||
Justify Vertically Justuj w pionie
|
||||
Justify with last line aligned left Justuj z ostatnim wierszem do lewej
|
||||
Keyboard Shortcut Conflicts Konflikty skrótów klawiaturowych
|
||||
Keyboard Shortcut Set Zestaw skrótów klawiaturowych
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -4590,6 +4590,10 @@ axis Both Ambos
|
||||
Installed plug-in {} Plug-in {} instalado
|
||||
Internal CSS CSS Interno
|
||||
Justify all lines Justificar Todas as Linhas
|
||||
Align Top Alinhar em Cima
|
||||
Align Center Alinhar ao Meio
|
||||
Align Bottom Alinhar em Baixo
|
||||
Justify Vertically Justificar Verticalmente
|
||||
Justify with last line aligned center Justificar com Última Linha Centralizada
|
||||
Justify with last line aligned left Justificar com Última Linha à Esquerda
|
||||
Justify with last line aligned right Justificar com Última Linha à Direita
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -1671,6 +1671,10 @@ file-filter Templates Шаблоны
|
||||
Join Tool Инструмент «Соединение»
|
||||
Justification… Выключка…
|
||||
Justify all lines Выключить все строки
|
||||
Align Top Выровнять по верху
|
||||
Align Center Выровнять по середине
|
||||
Align Bottom Выровнять по низу
|
||||
Justify Vertically Выключка по вертикали
|
||||
Justify with last line aligned center Выключить с последней строкой по центру
|
||||
Justify with last line aligned left Выключить с последней строкой по левому краю
|
||||
Justify with last line aligned right Выключить с последней строкой по правому краю
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -1603,6 +1603,10 @@ font-technology Variable Variabla
|
||||
Join Tool Sammanfogningsverktyg
|
||||
Justification… Justering…
|
||||
Justify all lines Marginaljustera alla rader
|
||||
Align Top Justera överkant
|
||||
Align Center Centrera vertikalt
|
||||
Align Bottom Justera nederkant
|
||||
Justify Vertically Marginaljustera vertikalt
|
||||
Justify with last line aligned center Marginaljustera med sista raden centrerad
|
||||
Justify with last line aligned left Marginaljustera med sista raden vänsterjusterad
|
||||
Justify with last line aligned right Marginaljustera med sista raden högerjusterad
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 5 and column 25.
|
@@ -1485,6 +1485,10 @@ font-technology Variable Değişken
|
||||
Join Tool Birleştirme Aracı
|
||||
Justification… İki Yana Yaslama…
|
||||
Justify all lines Tüm satırları iki yana yasla
|
||||
Align Top Üste hizala
|
||||
Align Center Dikey ortala
|
||||
Align Bottom Alta hizala
|
||||
Justify Vertically Dikey olarak iki yana yasla
|
||||
Justify with last line aligned center Son satıra hizalanmış merkeze yasla
|
||||
Justify with last line aligned left Son satırı sola hizalanmış şekilde iki yana yasla
|
||||
Justify with last line aligned right Son satırı sağa hizalayarak yasla
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 5 and column 25.
|
@@ -1668,6 +1668,10 @@ file-filter Templates Шаблони
|
||||
Join Tool Інструмент «З’єднання»
|
||||
Justification… Вирівнювання за шириною…
|
||||
Justify all lines Вирівняти всі рядки за шириною
|
||||
Align Top Вирівняти по верху
|
||||
Align Center Вирівняти по середині
|
||||
Align Bottom Вирівняти по низу
|
||||
Justify Vertically Вирівняти по вертикалі за висотою
|
||||
Justify with last line aligned center Вирівняти за шириною, останній рядок — по центру
|
||||
Justify with last line aligned left Вирівняти за шириною, останній рядок — ліворуч
|
||||
Justify with last line aligned right Вирівняти за шириною, останній рядок — праворуч
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 177 and column 5.
|
@@ -1955,6 +1955,10 @@ digits Hindi Hindi
|
||||
Joins Kiểu nối
|
||||
Justification… Căn đều…
|
||||
Justify all lines Căn đều tất cả dòng
|
||||
Align Top Căn trên
|
||||
Align Center Căn giữa theo chiều dọc
|
||||
Align Bottom Căn dưới
|
||||
Justify Vertically Căn đều theo chiều dọc
|
||||
Justify with last line aligned center Căn đều, dòng cuối giữa
|
||||
Justify with last line aligned left Căn đều, dòng cuối trái
|
||||
Justify with last line aligned right Căn đều, dòng cuối phải
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 199 and column 5.
|
@@ -1599,6 +1599,10 @@ file-filter Templates 模板
|
||||
Join Tool 连接工具
|
||||
Justification… 对齐设置…
|
||||
Justify all lines 全部两端对齐
|
||||
Align Top 顶对齐
|
||||
Align Center 垂直居中对齐
|
||||
Align Bottom 底对齐
|
||||
Justify Vertically 垂直两端对齐
|
||||
Justify with last line aligned center 两端对齐,末行居中
|
||||
Justify with last line aligned left 两端对齐,末行左对齐
|
||||
Justify with last line aligned right 两端对齐,末行右对齐
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -1638,6 +1638,10 @@ file-filter Templates 範本
|
||||
Join Tool 連接工具
|
||||
Justification… 對齊設定…
|
||||
Justify all lines 兩端對齊所有行
|
||||
Align Top 靠上對齊
|
||||
Align Center 垂直置中對齊
|
||||
Align Bottom 靠下對齊
|
||||
Justify Vertically 垂直齊行
|
||||
Justify with last line aligned center 兩端對齊,最後一行置中
|
||||
Justify with last line aligned left 兩端對齊,最後一行靠左
|
||||
Justify with last line aligned right 兩端對齊,最後一行靠右
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -1004,7 +1004,8 @@ pub fn type_sections(app: &mut VectorcraftApp, ui: &mut Ui) {
|
||||
super::character::variable_font(app, ui, &s, w - 4.0);
|
||||
super::character::metrics_grid(app, ui, "props-char", &s, w, false);
|
||||
section_header(ui, tl!("Paragraph"));
|
||||
// As in the Paragraph panel: the seven alignments and Hyphenate (#775); the rest is there.
|
||||
// As in the Paragraph panel: the seven alignments and Hyphenate (#775), and area type's
|
||||
// vertical alignment (#3759); the rest is there.
|
||||
if let Some((_, para)) = super::character::text_style(app) {
|
||||
ui.horizontal(|ui| {
|
||||
ui.spacing_mut().item_spacing.x = 3.0;
|
||||
@@ -1013,9 +1014,18 @@ pub fn type_sections(app: &mut VectorcraftApp, ui: &mut Ui) {
|
||||
app.ui.open_panel = Some("paragraph".into());
|
||||
}
|
||||
});
|
||||
// Area type: its vertical alignment in the frame (#3759).
|
||||
if vertical_align::shown(app).is_some() {
|
||||
ui.horizontal(|ui| {
|
||||
ui.spacing_mut().item_spacing.x = 3.0;
|
||||
vertical_align::buttons(app, ui, 24.0);
|
||||
});
|
||||
}
|
||||
super::paragraph::hyphenate_check(app, ui, ¶);
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) mod vertical_align;
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests;
|
||||
|
||||
@@ -1792,3 +1792,71 @@ fn objects_on_path_options_set_pivot_and_rotate_in_one_undo_step() {
|
||||
assert_eq!((pivot_rotate(&app, &group), pivot_rotate(&app, &other)), ((8, 30.0), (8, 45.0)), "both groups' Pivot");
|
||||
assert_eq!(undo_depth(&app), depth + 1, "one undo step for both groups");
|
||||
}
|
||||
|
||||
/// #3759: with area type selected, the Properties panel's Paragraph section shows Align Top, Align
|
||||
/// Center, Align Bottom and Justify Vertically; a click sets the alignment on every selected frame
|
||||
/// in one undo step. Point type shows none; frames with rows or columns and threaded frames turn
|
||||
/// the buttons off, as the public documentation limits vertical alignment to them.
|
||||
#[test]
|
||||
fn vertical_alignment_buttons_align_the_selected_area_type() {
|
||||
use vectorcraft_doc::{NodeId, VerticalAlign};
|
||||
let mut app = VectorcraftApp::new(Session::new(), Default::default());
|
||||
app.run("file.new", json!({"width": 500, "height": 400})).unwrap();
|
||||
let make = |app: &mut VectorcraftApp, x: f64, y: f64| {
|
||||
app.run("text.create", json!({"x": x, "y": y, "text": "Panel", "area": {"width": 100, "height": 120}})).unwrap()["id"].as_u64().unwrap()
|
||||
};
|
||||
let (a, b) = (make(&mut app, 10.0, 10.0), make(&mut app, 200.0, 10.0));
|
||||
let point = app.run("text.create", json!({"x": 10, "y": 350, "text": "Point"})).unwrap()["id"].as_u64().unwrap();
|
||||
let align = |app: &VectorcraftApp, id: u64| match &app.session.active().unwrap().doc.node(NodeId(id)).unwrap().kind {
|
||||
NodeKind::Text(t) => t.area.vertical_align,
|
||||
k => panic!("{k:?}"),
|
||||
};
|
||||
app.run("select.set", json!({"ids": [point]})).unwrap();
|
||||
assert_eq!(vertical_align::shown(&app), None, "point type: no buttons");
|
||||
app.run("select.set", json!({"ids": [a, b]})).unwrap();
|
||||
assert_eq!(vertical_align::shown(&app), Some(vertical_align::Shown { shared: Some(VerticalAlign::Top), enabled: true }));
|
||||
// The buttons sit in the panel's Paragraph section: click Align Center (the second).
|
||||
let ctx = egui::Context::default();
|
||||
let mut row = Rect::NOTHING;
|
||||
let draw = |app: &mut VectorcraftApp, ui: &mut Ui, row: &mut Rect| {
|
||||
*row = ui
|
||||
.horizontal(|ui| {
|
||||
ui.spacing_mut().item_spacing.x = 3.0;
|
||||
vertical_align::buttons(app, ui, 24.0);
|
||||
})
|
||||
.response
|
||||
.rect;
|
||||
};
|
||||
let mut out = ctx.run_ui(egui::RawInput::default(), |ui| draw(&mut app, ui, &mut row));
|
||||
out.textures_delta.clear();
|
||||
let texts = panel_frame(&mut app, &ctx, vec![], type_sections);
|
||||
assert!(texts.iter().any(|(t, _)| t == "Paragraph"), "{texts:?}");
|
||||
let undo = app.session.active().unwrap().history.undo.len();
|
||||
let center = row.min + vec2(12.0 + 27.0, 12.0);
|
||||
super::super::tests_appearance::click(&ctx, &mut app, center, |app, ui| {
|
||||
let mut r = Rect::NOTHING;
|
||||
draw(app, ui, &mut r);
|
||||
});
|
||||
assert_eq!((align(&app, a), align(&app, b)), (VerticalAlign::Center, VerticalAlign::Center));
|
||||
assert_eq!(app.session.active().unwrap().history.undo.len(), undo + 1, "one undo step for both frames");
|
||||
// Differing alignments show none selected.
|
||||
app.run("text.areaOptions", json!({"ids": [b], "verticalAlign": "bottom"})).unwrap();
|
||||
assert_eq!(vertical_align::shown(&app).map(|s| s.shared), Some(None));
|
||||
// Columns turn the buttons off, and a click does nothing.
|
||||
app.run("text.areaOptions", json!({"ids": [b], "columns": 2})).unwrap();
|
||||
assert_eq!(vertical_align::shown(&app).map(|s| s.enabled), Some(false));
|
||||
let undo = app.session.active().unwrap().history.undo.len();
|
||||
super::super::tests_appearance::click(&ctx, &mut app, center, |app, ui| {
|
||||
let mut r = Rect::NOTHING;
|
||||
draw(app, ui, &mut r);
|
||||
});
|
||||
assert_eq!(app.session.active().unwrap().history.undo.len(), undo, "turned off: no change");
|
||||
assert_eq!(align(&app, a), VerticalAlign::Center);
|
||||
// So does threading: a and c threaded, b left out of the selection.
|
||||
let c = make(&mut app, 10.0, 200.0);
|
||||
app.run("select.set", json!({"ids": [a, c]})).unwrap();
|
||||
assert_eq!(vertical_align::shown(&app).map(|s| s.enabled), Some(true));
|
||||
app.run("text.thread.create", json!({})).unwrap();
|
||||
app.run("select.set", json!({"ids": [a]})).unwrap();
|
||||
assert_eq!(vertical_align::shown(&app).map(|s| s.enabled), Some(false));
|
||||
}
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
//! Area type's vertical alignment in its frame (#3759): the Align Top, Align Center, Align Bottom
|
||||
//! and Justify Vertically buttons of the Properties panel's Paragraph section and of the Control
|
||||
//! panel. Per the public documentation they align area type with one row and one column that isn't
|
||||
//! threaded ([Align text](https://helpx.adobe.com/illustrator/desktop/design-with-text/edit-format-text/align-text.html)),
|
||||
//! so they are turned off when a selected frame has rows or columns or is threaded.
|
||||
|
||||
use egui::Ui;
|
||||
use serde_json::json;
|
||||
use vectorcraft_doc::{NodeKind, TextKind, VerticalAlign};
|
||||
|
||||
use crate::VectorcraftApp;
|
||||
use crate::widgets;
|
||||
|
||||
/// The vertical alignment the selected area type shows, and whether the buttons can change it.
|
||||
#[derive(Clone, Copy, Debug, PartialEq)]
|
||||
pub(crate) struct Shown {
|
||||
/// The alignment every selected frame shares; `None` when they differ.
|
||||
pub(crate) shared: Option<VerticalAlign>,
|
||||
/// Every selected frame has one row and one column and isn't threaded.
|
||||
pub(crate) enabled: bool,
|
||||
}
|
||||
|
||||
/// The vertical alignment of the selected area type (and area type in selected groups, the frames
|
||||
/// `text.areaOptions` changes); `None` when no area type is selected.
|
||||
pub(crate) fn shown(app: &VectorcraftApp) -> Option<Shown> {
|
||||
let st = app.session.active()?;
|
||||
let threaded = |id| st.doc.text_threads.iter().any(|t| t.len() > 1 && t.contains(&id));
|
||||
let mut out: Option<Shown> = None;
|
||||
for n in st.selection.objects.iter().filter_map(|id| st.doc.node(*id)) {
|
||||
n.walk(&mut |c| {
|
||||
let NodeKind::Text(t) = &c.kind else { return };
|
||||
if !matches!(t.kind, TextKind::Area { .. }) {
|
||||
return;
|
||||
}
|
||||
let a = t.area.vertical_align;
|
||||
let plain = t.area.rows <= 1 && t.area.columns <= 1 && !threaded(c.id);
|
||||
out = Some(match out {
|
||||
None => Shown { shared: Some(a), enabled: plain },
|
||||
Some(s) => Shown { shared: s.shared.filter(|b| *b == a), enabled: s.enabled && plain },
|
||||
});
|
||||
});
|
||||
}
|
||||
out
|
||||
}
|
||||
|
||||
/// The four buttons for the selected area type: the shared alignment shows selected; a click sets
|
||||
/// it on every selected frame in one undo step (`text.areaOptions {verticalAlign}`, as Area Type
|
||||
/// Options does, each frame keeping its other options). Turned off for frames with rows or columns
|
||||
/// and threaded ones; nothing shows without area type. Returns whether the buttons were drawn.
|
||||
pub(crate) fn buttons(app: &mut VectorcraftApp, ui: &mut Ui, size: f32) -> bool {
|
||||
let Some(s) = shown(app) else { return false };
|
||||
for (a, icon, tip, id) in [
|
||||
(VerticalAlign::Top, "dc-al-top", tl!("Align Top"), "top"),
|
||||
(VerticalAlign::Center, "dc-al-vcenter", tl!("Align Center"), "center"),
|
||||
(VerticalAlign::Bottom, "dc-al-bottom", tl!("Align Bottom"), "bottom"),
|
||||
(VerticalAlign::Justify, "dc-dist-vcenter", tl!("Justify Vertically"), "justify"),
|
||||
] {
|
||||
if widgets::icon_button_enabled(ui, icon, tip, s.enabled && s.shared == Some(a), s.enabled, size).clicked()
|
||||
&& let Err(e) = app.run("text.areaOptions", json!({ "verticalAlign": id }))
|
||||
{
|
||||
app.status(e);
|
||||
}
|
||||
}
|
||||
true
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
# Parity with Adobe Illustrator
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-11-03 · **Change:** minor (Object › Expand turns symbol instances into their art; scores and estimates unchanged) · **Target:** Adobe Illustrator 2026 (30.x; public release notes through 30.7, August 2026)
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-11-04 · **Change:** minor (area type vertical alignment in the Properties and Control panels, #3759; scores and estimates unchanged) · **Target:** Adobe Illustrator 2026 (30.x; public release notes through 30.7, August 2026)
|
||||
|
||||
## Feature submission evidence
|
||||
|
||||
@@ -1589,10 +1589,15 @@ While a corner widget is pressed or dragged with the Selection or Direct Selecti
|
||||
|
||||
A double-click on a Repeat (Radial, Grid or Mirror) with the Selection tool enters isolation mode on it ([isolate objects](https://helpx.adobe.com/illustrator/desktop/manage-objects/select-objects/isolate-objects.html): a double-click with the Selection tool isolates an object; [repeat patterns overview](https://helpx.adobe.com/illustrator/desktop/paint-and-fill/create-and-edit-patterns/repeat-patterns-overview.html): every instance follows edits to the original object); there the source art is selected and edited as usual (a double-click on type in it switches to the Type tool on that text) and every copy follows, with the repeat's settings kept (#5054). Test: `tests::repeat_edit::a_double_click_on_a_repeat_isolates_it_to_edit_its_text`.
|
||||
|
||||
## Area type: vertical alignment in the Properties and Control panels (2026-11-04)
|
||||
|
||||
With area type selected, the Properties panel's Paragraph section and the Control panel show Align Top, Align Center, Align Bottom and Justify Vertically buttons, as the public documentation places them ([Align text](https://helpx.adobe.com/illustrator/desktop/design-with-text/edit-format-text/align-text.html)). They set the type's vertical alignment in its frame (`text.areaOptions {verticalAlign}`, as Area Type Options does) on every selected frame in one undo step, each frame keeping its other options; the shared alignment shows selected, none when the frames differ (#3759). As that page limits vertical alignment to area type without rows, columns or threads, the buttons are turned off while a selected frame has rows or columns or is threaded; Area Type Options and `text.areaOptions` still align each row/column cell (a VectorCraft extension, unchanged here). Tests: `panels::properties::tests::vertical_alignment_buttons_align_the_selected_area_type`.
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-11-04 | minor | Area type vertical alignment buttons in the Properties panel's Paragraph section and the Control panel, off for columns, rows and threaded frames (#3759); evidence added; scores unchanged. |
|
||||
| 2026-11-03 | minor | Enclosing Lasso is an add-on with no default shortcut or Basic toolbar slot. Scores and estimates remain unchanged. |
|
||||
| 2026-11-02 | minor | Wheel input over closed font-family fields changes selected text (#5253); public documentation and application choices distinguished; scores and estimates unchanged. |
|
||||
| 2026-11-03 | minor | Find Font's replacement-source chooser offers Document, Recent and System (#5217); scores and estimates unchanged. |
|
||||
|
||||
+2
-1
@@ -1,6 +1,6 @@
|
||||
# UI and interaction parity
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-11-03 · **Change:** minor (Type on a Path Options has a Preview checkbox, #5360; the Action Options row cites the public Actions panel page; scores and estimates unchanged) · **Target:** Adobe Illustrator 2026 (30.x; Units › East Asian Type acts, with Q and Ha units; scores unchanged) · **Target:** Adobe Illustrator 2026 (30.x)
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-11-04 · **Change:** minor (area type vertical alignment buttons in the Properties and Control panels, turned off for rows, columns and threads, #3759; scores and estimates unchanged) · **Target:** Adobe Illustrator 2026 (30.x; Units › East Asian Type acts, with Q and Ha units; scores unchanged) · **Target:** Adobe Illustrator 2026 (30.x)
|
||||
|
||||
## Feature submission evidence
|
||||
|
||||
@@ -420,6 +420,7 @@ separate. Scores and hours unchanged. [Behavior and command details](development
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-11-04 | minor | Area type: Align Top / Center / Bottom / Justify Vertically buttons in the Properties panel (Paragraph section) and the Control panel set its vertical alignment in the frame, as Area Type Options does; turned off for frames with rows or columns and threaded frames (#3759); scores and estimates unchanged |
|
||||
| 2026-11-03 | minor | Enclosing Lasso selects fully enclosed objects with a freehand loop under Object › Plug-ins; scores and estimates unchanged. |
|
||||
| 2026-11-03 | minor | Type on a Path Options has a Preview checkbox (#5360, as public tutorials of the dialog show); scores and estimates unchanged |
|
||||
| 2026-11-02 | minor | Font-family fields in Character, Properties and Control accept the wheel without opening the menu (#5253); scores and estimates unchanged. |
|
||||
|
||||
Reference in New Issue
Block a user