diff --git a/crates/engine/src/cmd/docmenu.rs b/crates/engine/src/cmd/docmenu.rs index dc6d2a655..3d77bde15 100644 --- a/crates/engine/src/cmd/docmenu.rs +++ b/crates/engine/src/cmd/docmenu.rs @@ -66,6 +66,15 @@ pub fn specs() -> Vec { "select.same.textStrokeColor", |a, b| a.stroke == b.stroke )), + cmd!( + "select.same.textFillAndStrokeColor", + "Text Fill & Stroke Color", + ["Select", "Same"], + None, + "{} select the type objects with characters whose fill and stroke both match the first character of the first selected type → {count}", + has_selection, + |s, _| same_text(s, "select.same.textFillAndStrokeColor", |a, b| a.fill == b.fill && a.stroke == b.stroke) + ), cmd!( "select.object.directionHandles", "Direction Handles", diff --git a/crates/engine/src/tests/menucmds.rs b/crates/engine/src/tests/menucmds.rs index 7bac52cc9..f37855456 100644 --- a/crates/engine/src/tests/menucmds.rs +++ b/crates/engine/src/tests/menucmds.rs @@ -1948,6 +1948,49 @@ fn select_same_font_size_and_fill() { assert!(s.execute("select.same.fontSize", &json!({})).is_err()); } +/// Select › Same › Text Fill & Stroke Color selects the type with characters whose fill and stroke +/// both match the first character of the selected type: the same fill with another stroke, or the +/// same stroke with another fill, is left out, and in type with several runs one run has to match +/// both. +#[test] +fn select_same_text_fill_and_stroke_color_needs_both_to_match() { + let mut s = session(); + let typed = |s: &mut Session, y: f64, fill: &str, stroke: &str| { + let id = id_of(&s.execute("text.create", &json!({"x": 0, "y": y, "text": "type"})).unwrap()); + s.execute("text.setRangeStyle", &json!({"id": id.0, "start": 0, "end": 4, "fill": fill, "stroke": stroke})).unwrap(); + id + }; + let (red, blue, green) = ("#ff0000", "#0000ff", "#00ff00"); + let a = typed(&mut s, 20.0, red, blue); + let both = typed(&mut s, 60.0, red, blue); + let same_fill = typed(&mut s, 100.0, red, green); + let same_stroke = typed(&mut s, 140.0, green, blue); + // Mixed runs: "ty" matches both; the other runs do not. + let mixed = typed(&mut s, 180.0, green, green); + s.execute("text.setRangeStyle", &json!({"id": mixed.0, "start": 0, "end": 2, "fill": red, "stroke": blue})).unwrap(); + // Mixed runs where one run has the fill and another the stroke: no run matches both. + let split = typed(&mut s, 220.0, green, green); + s.execute("text.setRangeStyle", &json!({"id": split.0, "start": 0, "end": 2, "fill": red})).unwrap(); + s.execute("text.setRangeStyle", &json!({"id": split.0, "start": 2, "end": 4, "stroke": blue})).unwrap(); + let r = rect(&mut s, 300.0, 0.0, 5.0, 5.0); + s.execute("paint.setFill", &json!({"ids": [r.0], "color": red})).unwrap(); + let undo = s.doc().unwrap().history.undo.len(); + sel(&mut s, &[a]); + assert_eq!(s.execute("select.same.textFillAndStrokeColor", &json!({})).unwrap()["count"], 3); + assert_eq!(selected(&s), vec![a, both, mixed]); + assert_eq!(s.doc().unwrap().history.undo.len(), undo, "selecting adds no undo step"); + // The single-attribute commands take the type that matches one of the two. + sel(&mut s, &[a]); + assert_eq!(s.execute("select.same.textFillColor", &json!({})).unwrap()["count"], 5); + assert_eq!(selected(&s), vec![a, both, same_fill, mixed, split]); + sel(&mut s, &[a]); + assert_eq!(s.execute("select.same.textStrokeColor", &json!({})).unwrap()["count"], 5); + assert_eq!(selected(&s), vec![a, both, same_stroke, mixed, split]); + // With no type selected the command reports it. + sel(&mut s, &[r]); + assert!(s.execute("select.same.textFillAndStrokeColor", &json!({})).is_err()); +} + #[test] fn select_same_link_block_series_selects_the_frames_of_a_thread() { let mut s = session(); diff --git a/crates/ui-egui/src/i18n/bg.tsv b/crates/ui-egui/src/i18n/bg.tsv index 073f57715..dd5f4c07d 100644 --- a/crates/ui-egui/src/i18n/bg.tsv +++ b/crates/ui-egui/src/i18n/bg.tsv @@ -3306,6 +3306,7 @@ digits Malayalam Малаялам Templates… Шаблони… Text Displayed in Cell: Текст, показван в клетката: Text Export Options Опции за експортиране на текст + Text Fill & Stroke Color Цвят на запълване и щрих на текста Text Fill Color Цвят на запълване на текста Text Import Options Опции за импортиране на текст Text Stroke Color Цвят на щриха на текста diff --git a/crates/ui-egui/src/i18n/bs.tsv b/crates/ui-egui/src/i18n/bs.tsv index 80e02fbe4..a8763ad74 100644 --- a/crates/ui-egui/src/i18n/bs.tsv +++ b/crates/ui-egui/src/i18n/bs.tsv @@ -426,6 +426,7 @@ Variable Font Varijabilni font Text Fill Color Boja ispune teksta Text Stroke Color Boja poteza teksta + Text Fill & Stroke Color Boja ispune i poteza teksta All on Same Layers Sve na istim slojevima Direction Handles Ručke smjera Brush Strokes Potezi četkicom diff --git a/crates/ui-egui/src/i18n/ca.tsv b/crates/ui-egui/src/i18n/ca.tsv index b6985fb13..f85398a17 100644 --- a/crates/ui-egui/src/i18n/ca.tsv +++ b/crates/ui-egui/src/i18n/ca.tsv @@ -4225,6 +4225,7 @@ digits Malayalam Malaiàlam Text Displayed in Cell Text mostrat a la cel·la Text Displayed in Cell: Text mostrat a la cel·la: Text Export Options Opcions d’exportació de text + Text Fill & Stroke Color Color de farciment i traç del text Text Fill Color Color de farciment del text Text Import Options Opcions d’importació de text Text Orientation Orientació del text diff --git a/crates/ui-egui/src/i18n/cs.tsv b/crates/ui-egui/src/i18n/cs.tsv index 367be32b2..a84716c78 100644 --- a/crates/ui-egui/src/i18n/cs.tsv +++ b/crates/ui-egui/src/i18n/cs.tsv @@ -434,6 +434,7 @@ Variable Font Variabilní písmo Text Fill Color Barva výplně textu Text Stroke Color Barva tahu textu + Text Fill & Stroke Color Barva výplně a tahu textu All on Same Layers Vše ve stejných vrstvách Direction Handles Směrové úchyty Brush Strokes Tahy štětcem diff --git a/crates/ui-egui/src/i18n/da.tsv b/crates/ui-egui/src/i18n/da.tsv index 7b077a50a..535034c21 100644 --- a/crates/ui-egui/src/i18n/da.tsv +++ b/crates/ui-egui/src/i18n/da.tsv @@ -393,6 +393,7 @@ Variable Font Variabel skrifttype Text Fill Color Tekstfyldfarve Text Stroke Color Tekststregfarve + Text Fill & Stroke Color Tekstfyld- og stregfarve All on Same Layers Alt på samme lag Direction Handles Retningshåndtag Brush Strokes Penselstrøg diff --git a/crates/ui-egui/src/i18n/de.tsv b/crates/ui-egui/src/i18n/de.tsv index c87b45d22..7ca638c7d 100644 --- a/crates/ui-egui/src/i18n/de.tsv +++ b/crates/ui-egui/src/i18n/de.tsv @@ -3334,6 +3334,7 @@ effect Points Punkte Templates… Vorlagen… Text Displayed in Cell: In der Zelle angezeigter Text: Text Export Options Textexportoptionen + Text Fill & Stroke Color Flächen- und Konturfarbe des Texts Text Fill Color Flächenfarbe des Texts Text Import Options Textimportoptionen Text Stroke Color Konturfarbe des Texts diff --git a/crates/ui-egui/src/i18n/el.tsv b/crates/ui-egui/src/i18n/el.tsv index 615e0e6ee..5af81bbb0 100644 --- a/crates/ui-egui/src/i18n/el.tsv +++ b/crates/ui-egui/src/i18n/el.tsv @@ -3727,6 +3727,7 @@ digits Malayalam Μαλαγιάλαμ Templates Folder Φάκελος προτύπων Text Displayed in Cell: Κείμενο που εμφανίζεται στο κελί: Text Export Options Επιλογές εξαγωγής κειμένου + Text Fill & Stroke Color Χρώμα γεμίσματος και περιγράμματος κειμένου Text Fill Color Χρώμα γεμίσματος κειμένου Text Import Options Επιλογές εισαγωγής κειμένου Text Stroke Color Χρώμα περιγράμματος κειμένου diff --git a/crates/ui-egui/src/i18n/es.tsv b/crates/ui-egui/src/i18n/es.tsv index c4d4a196b..0d65000e2 100644 --- a/crates/ui-egui/src/i18n/es.tsv +++ b/crates/ui-egui/src/i18n/es.tsv @@ -3390,6 +3390,7 @@ digits Malayalam Malayálam Templates… Plantillas… Text Displayed in Cell: Texto mostrado en la celda: Text Export Options Opciones de exportación de texto + Text Fill & Stroke Color Color de relleno y trazo del texto Text Fill Color Color de relleno del texto Text Import Options Opciones de importación de texto Text Stroke Color Color de trazo del texto diff --git a/crates/ui-egui/src/i18n/fi.tsv b/crates/ui-egui/src/i18n/fi.tsv index 7d571168f..9dacd5899 100644 --- a/crates/ui-egui/src/i18n/fi.tsv +++ b/crates/ui-egui/src/i18n/fi.tsv @@ -431,6 +431,7 @@ Variable Font Muuttuva fontti Text Fill Color Tekstin täyttöväri Text Stroke Color Tekstin viivan väri + Text Fill & Stroke Color Tekstin täytön ja viivan väri All on Same Layers Kaikki samoilla tasoilla Direction Handles Suuntakahvat Brush Strokes Sivellinviivat diff --git a/crates/ui-egui/src/i18n/fr.tsv b/crates/ui-egui/src/i18n/fr.tsv index 4372280db..9d2263a90 100644 --- a/crates/ui-egui/src/i18n/fr.tsv +++ b/crates/ui-egui/src/i18n/fr.tsv @@ -3382,6 +3382,7 @@ digits Malayalam Malayalam Templates… Modèles… Text Displayed in Cell: Texte affiché dans la cellule : Text Export Options Options d’exportation du texte + Text Fill & Stroke Color Couleur de fond et de contour du texte Text Fill Color Couleur de fond du texte Text Import Options Options d’importation du texte Text Stroke Color Couleur de contour du texte diff --git a/crates/ui-egui/src/i18n/hu.tsv b/crates/ui-egui/src/i18n/hu.tsv index 9890ecf5a..7658ebb64 100644 --- a/crates/ui-egui/src/i18n/hu.tsv +++ b/crates/ui-egui/src/i18n/hu.tsv @@ -4043,6 +4043,7 @@ mark-style Japanese Japán Text Displayed in Cell A cellában megjelenő szöveg Text Displayed in Cell: A cellában megjelenő szöveg: Text Export Options Szövegexportálási beállítások + Text Fill & Stroke Color Szöveg kitöltő- és körvonalszíne Text Fill Color Szöveg kitöltőszíne Text Import Options Szövegimportálási beállítások Text Stroke Color Szöveg körvonalszíne diff --git a/crates/ui-egui/src/i18n/id.tsv b/crates/ui-egui/src/i18n/id.tsv index d8ceeacad..8ebc69622 100644 --- a/crates/ui-egui/src/i18n/id.tsv +++ b/crates/ui-egui/src/i18n/id.tsv @@ -393,6 +393,7 @@ Variable Font Font variabel Text Fill Color Warna isian teks Text Stroke Color Warna stroke teks + Text Fill & Stroke Color Warna isian & stroke teks All on Same Layers Semua di lapisan yang sama Direction Handles Gagang arah Brush Strokes Sapuan kuas diff --git a/crates/ui-egui/src/i18n/it.tsv b/crates/ui-egui/src/i18n/it.tsv index 1f6ffb4cf..39f1632e5 100644 --- a/crates/ui-egui/src/i18n/it.tsv +++ b/crates/ui-egui/src/i18n/it.tsv @@ -3426,6 +3426,7 @@ digits Malayalam Malayalam Templates… Modelli… Text Displayed in Cell: Testo visualizzato nella cella: Text Export Options Opzioni di esportazione testo + Text Fill & Stroke Color Colore riempimento e traccia testo Text Fill Color Colore riempimento testo Text Import Options Opzioni di importazione testo Text Stroke Color Colore traccia testo diff --git a/crates/ui-egui/src/i18n/ja.tsv b/crates/ui-egui/src/i18n/ja.tsv index 3d6849e46..ddf2f044b 100644 --- a/crates/ui-egui/src/i18n/ja.tsv +++ b/crates/ui-egui/src/i18n/ja.tsv @@ -463,6 +463,7 @@ digits Malayalam マラヤーラム数字 Variable Font バリアブルフォント Text Fill Color テキストカラー (塗り) Text Stroke Color テキストカラー (線) + Text Fill & Stroke Color テキストカラー (塗りと線) All on Same Layers 同じレイヤー上のすべて Direction Handles 方向線ハンドル Brush Strokes ブラシストローク diff --git a/crates/ui-egui/src/i18n/ka.tsv b/crates/ui-egui/src/i18n/ka.tsv index 1a01580e2..80b0a7476 100644 --- a/crates/ui-egui/src/i18n/ka.tsv +++ b/crates/ui-egui/src/i18n/ka.tsv @@ -350,6 +350,7 @@ Font Size შრიფტის ზომა Text Fill Color ტექსტის შევსების ფერი Text Stroke Color ტექსტის კონტურის ფერი + Text Fill & Stroke Color ტექსტის შევსებისა და კონტურის ფერი All on Same Layers ყველა იმავე შრეებზე Direction Handles მიმართულების სახელურები Brush Strokes ფუნჯის შტრიხები diff --git a/crates/ui-egui/src/i18n/ko.tsv b/crates/ui-egui/src/i18n/ko.tsv index 5f2441972..8e12b5f26 100644 --- a/crates/ui-egui/src/i18n/ko.tsv +++ b/crates/ui-egui/src/i18n/ko.tsv @@ -456,6 +456,7 @@ digits Malayalam 말라얄람어 Variable Font 가변 글꼴 Text Fill Color 문자 칠 색상 Text Stroke Color 문자 선 색상 + Text Fill & Stroke Color 문자 칠 및 선 색상 All on Same Layers 같은 레이어의 모두 Direction Handles 방향 핸들 Brush Strokes 브러시 선 diff --git a/crates/ui-egui/src/i18n/nl.tsv b/crates/ui-egui/src/i18n/nl.tsv index d7ccca211..f2a970cbd 100644 --- a/crates/ui-egui/src/i18n/nl.tsv +++ b/crates/ui-egui/src/i18n/nl.tsv @@ -407,6 +407,7 @@ Variable Font Variabel lettertype Text Fill Color Tekstvulkleur Text Stroke Color Tekstcontourkleur + Text Fill & Stroke Color Tekstvul- en contourkleur All on Same Layers Alles op dezelfde lagen Direction Handles Richtingsgrepen Brush Strokes Penseelstreken diff --git a/crates/ui-egui/src/i18n/pl.tsv b/crates/ui-egui/src/i18n/pl.tsv index be0a2a24b..30ec4f06e 100644 --- a/crates/ui-egui/src/i18n/pl.tsv +++ b/crates/ui-egui/src/i18n/pl.tsv @@ -394,6 +394,7 @@ Variable Font Czcionka zmienna Text Fill Color Kolor wypełnienia tekstu Text Stroke Color Kolor obrysu tekstu + Text Fill & Stroke Color Kolor wypełnienia i obrysu tekstu All on Same Layers Wszystko na tych samych warstwach Direction Handles Uchwyty kierunkowe Brush Strokes Pociągnięcia pędzla diff --git a/crates/ui-egui/src/i18n/pt-br.tsv b/crates/ui-egui/src/i18n/pt-br.tsv index 2f07e5309..82104e63e 100644 --- a/crates/ui-egui/src/i18n/pt-br.tsv +++ b/crates/ui-egui/src/i18n/pt-br.tsv @@ -2781,6 +2781,7 @@ digits Malayalam Malaiala Templates… Modelos… Text Displayed in Cell: Texto Exibido na Célula: Text Export Options Opções de Exportação de Texto + Text Fill & Stroke Color Cor de Preenchimento e Traçado do Texto Text Fill Color Cor de Preenchimento do Texto Text Import Options Opções de Importação de Texto Text Stroke Color Cor do Traçado do Texto diff --git a/crates/ui-egui/src/i18n/ru.tsv b/crates/ui-egui/src/i18n/ru.tsv index cb6cbd10b..a52c48603 100644 --- a/crates/ui-egui/src/i18n/ru.tsv +++ b/crates/ui-egui/src/i18n/ru.tsv @@ -3421,6 +3421,7 @@ digits Malayalam Малаялам Templates… Шаблоны… Text Displayed in Cell: Текст, отображаемый в ячейке: Text Export Options Параметры экспорта текста + Text Fill & Stroke Color Цвет заливки и обводки текста Text Fill Color Цвет заливки текста Text Import Options Параметры импорта текста Text Stroke Color Цвет обводки текста diff --git a/crates/ui-egui/src/i18n/sv.tsv b/crates/ui-egui/src/i18n/sv.tsv index b8cc54933..3f8be38fd 100644 --- a/crates/ui-egui/src/i18n/sv.tsv +++ b/crates/ui-egui/src/i18n/sv.tsv @@ -3312,6 +3312,7 @@ digits Malayalam Malayalam Templates… Mallar… Text Displayed in Cell: Text som visas i cellen: Text Export Options Alternativ för textexport + Text Fill & Stroke Color Textens fyllnads- och konturfärg Text Fill Color Textens fyllnadsfärg Text Import Options Alternativ för textimport Text Stroke Color Textens konturfärg diff --git a/crates/ui-egui/src/i18n/tr.tsv b/crates/ui-egui/src/i18n/tr.tsv index 9009af8ae..808e55ad9 100644 --- a/crates/ui-egui/src/i18n/tr.tsv +++ b/crates/ui-egui/src/i18n/tr.tsv @@ -3205,6 +3205,7 @@ digits Malayalam Malayalam Templates… Şablonlar… Text Displayed in Cell: Hücrede Görüntülenen Metin: Text Export Options Metin Dışa Aktarma Seçenekleri + Text Fill & Stroke Color Metin Dolgu ve Kontur Rengi Text Fill Color Metin Dolgu Rengi Text Import Options Metin İçe Aktarma Seçenekleri Text Stroke Color Metin Kontur Rengi diff --git a/crates/ui-egui/src/i18n/uk.tsv b/crates/ui-egui/src/i18n/uk.tsv index 7535b5357..bda2cd278 100644 --- a/crates/ui-egui/src/i18n/uk.tsv +++ b/crates/ui-egui/src/i18n/uk.tsv @@ -3419,6 +3419,7 @@ effect Points Точки Templates… Шаблони… Text Displayed in Cell: Текст, що відображається в комірці: Text Export Options Параметри експорту тексту + Text Fill & Stroke Color Колір заливки та обведення тексту Text Fill Color Колір заливки тексту Text Import Options Параметри імпорту тексту Text Stroke Color Колір обведення тексту diff --git a/crates/ui-egui/src/i18n/vi.tsv b/crates/ui-egui/src/i18n/vi.tsv index 07852ac9f..4957824ea 100644 --- a/crates/ui-egui/src/i18n/vi.tsv +++ b/crates/ui-egui/src/i18n/vi.tsv @@ -3748,6 +3748,7 @@ mark-style Japanese Kiểu Nhật Text Văn bản Text Displayed in Cell: Văn bản hiển thị trong ô: Text Export Options Tùy chọn xuất văn bản + Text Fill & Stroke Color Màu tô & nét văn bản Text Fill Color Màu tô văn bản Text Import Options Tùy chọn nhập văn bản Text Stroke Color Màu nét văn bản diff --git a/crates/ui-egui/src/i18n/zh-hans.tsv b/crates/ui-egui/src/i18n/zh-hans.tsv index d609725c4..b8123733f 100644 --- a/crates/ui-egui/src/i18n/zh-hans.tsv +++ b/crates/ui-egui/src/i18n/zh-hans.tsv @@ -3258,6 +3258,7 @@ digits Malayalam 马拉雅拉姆数字 Templates… 模板… Text Displayed in Cell: 单元格中显示的文字: Text Export Options 文本导出选项 + Text Fill & Stroke Color 文字填色和描边颜色 Text Fill Color 文字填色 Text Import Options 文本导入选项 Text Stroke Color 文字描边颜色 diff --git a/crates/ui-egui/src/i18n/zh-hant.tsv b/crates/ui-egui/src/i18n/zh-hant.tsv index 32dbb3ba2..a8b514b8a 100644 --- a/crates/ui-egui/src/i18n/zh-hant.tsv +++ b/crates/ui-egui/src/i18n/zh-hant.tsv @@ -4276,6 +4276,7 @@ digits Malayalam 馬來亞拉姆數字 Templates… 範本… Text Displayed in Cell: 儲存格中顯示的文字: Text Export Options 文字匯出選項 + Text Fill & Stroke Color 文字填色與筆畫顏色 Text Fill Color 文字填色 Text Import Options 文字匯入選項 Text Stroke Color 文字筆畫顏色 diff --git a/crates/ui-egui/src/menus/tests.rs b/crates/ui-egui/src/menus/tests.rs index 04769b2c6..4b46453ca 100644 --- a/crates/ui-egui/src/menus/tests.rs +++ b/crates/ui-egui/src/menus/tests.rs @@ -527,6 +527,28 @@ fn select_same_link_block_series_selects_a_thread_from_the_menu() { assert_eq!(json!(ids), json!([a, b])); } +#[test] +fn select_same_text_fill_and_stroke_color_follows_text_stroke_color_in_the_menu() { + let mut app = app_with_a_rectangle(); + let entries = menu_entries(&app); + let at = |id: &str| entries.iter().position(|e| e.command.as_deref() == Some(id)); + let entry = at("select.same.textFillAndStrokeColor").map(|i| &entries[i]).expect("menu entry"); + assert_eq!((entry.path.clone(), entry.label.as_str()), (vec!["Select".to_string(), "Same".to_string()], "Text Fill & Stroke Color")); + assert_eq!(at("select.same.textStrokeColor").map(|i| i + 1), at("select.same.textFillAndStrokeColor")); + let text = |app: &mut VectorcraftApp, y: i32, fill: &str, stroke: &str| { + let id = app.run("text.create", json!({"x": 0, "y": y, "text": "type"})).unwrap()["id"].clone(); + app.run("text.setRangeStyle", json!({"id": id.clone(), "start": 0, "end": 4, "fill": fill, "stroke": stroke})).unwrap(); + id + }; + let a = text(&mut app, 40, "#ff0000", "#0000ff"); + let b = text(&mut app, 80, "#ff0000", "#0000ff"); + let _ = text(&mut app, 120, "#ff0000", "#00ff00"); + app.run("select.set", json!({"ids": [a.clone()]})).unwrap(); + invoke(&mut app, "select.same.textFillAndStrokeColor", json!({})); + let ids: Vec = app.session.active().unwrap().selection.objects.iter().map(|i| i.0).collect(); + assert_eq!(json!(ids), json!([a, b])); +} + #[test] fn edit_selection_opens_its_dialog_on_the_saved_selections() { let mut app = app_with_a_rectangle(); diff --git a/crates/ui-egui/src/menus/tree.rs b/crates/ui-egui/src/menus/tree.rs index 9eabfc681..d197ee906 100644 --- a/crates/ui-egui/src/menus/tree.rs +++ b/crates/ui-egui/src/menus/tree.rs @@ -470,6 +470,7 @@ pub fn menu_tree_named(english_names: bool) -> Vec<(&'static str, Vec)> { c("Font Size", "select.same.fontSize"), c("Text Fill Color", "select.same.textFillColor"), c("Text Stroke Color", "select.same.textStrokeColor"), + c("Text Fill & Stroke Color", "select.same.textFillAndStrokeColor"), ], ), sub( diff --git a/docs/mcp.md b/docs/mcp.md index 9f9e13bc0..aecbae6a7 100644 --- a/docs/mcp.md +++ b/docs/mcp.md @@ -1438,6 +1438,13 @@ everything in it, and `select.all`, `select.allOnArtboard` and `select.inverse` among the objects beside it in its group or layer, passing over hidden and locked objects and sublayers. When there is no such object, the selection stays as it is. +`select.same.textFillAndStrokeColor` (Select › Same › Text Fill & Stroke Color) selects the type objects that have +characters whose fill and stroke both match the first character of the first selected type, and returns `{count}`. +`select.same.textFillColor` and `select.same.textStrokeColor` compare the fill or the stroke alone. In type with +several runs, one run has to match both: type with the fill in one run and the stroke in another is left out. The fill +and stroke of other objects are not compared. Without type among the selected objects it returns the error "select a +text object", and it records no undo step. + ## Shaper Groups `shaper.releaseSource {source, group?}` takes the original shape `source` out of its Shaper Group: the shape becomes a diff --git a/docs/target-app-parity.md b/docs/target-app-parity.md index 45f21f051..440e75832 100644 --- a/docs/target-app-parity.md +++ b/docs/target-app-parity.md @@ -892,6 +892,7 @@ Moved from the ROADMAP's "Shipped so far" on 2026-10-10. Update it when a featur Object › Rasterize on a frame of threaded text takes it out of the thread with the text it shows, which the image draws, and the other frames keep the text they hold. When the last frame is rasterized, the text it has no room for goes after the text of the last frame that stays. Type › Create Outlines, Object › Expand and Object › Expand Appearance on a frame of threaded text take it out of the thread with the text it shows, which the outlines draw, and the other frames keep the text they hold. When the last frame is outlined, the text it has no room for goes after the text of the last frame that stays. When Expand Appearance keeps the frame as type in a group with its shadow, outer glow or Crop Marks, the type stays in the thread. The public help on threads ([Create text threads between objects](https://helpx.adobe.com/illustrator/desktop/design-with-text/add-manage-text/create-text-threads-between-objects.html), [Remove or break text threads between objects](https://helpx.adobe.com/illustrator/desktop/design-with-text/add-manage-text/remove-or-break-text-threads-between-objects.html)) does not describe outlining a threaded frame; this handling is VectorCraft's own behavior. Select › Same › Link Block Series selects every frame of the threads of the selected type; type in no thread selects itself (`select.same.linkBlockSeries`). The menu entry is listed in [Select objects by characteristics](https://helpx.adobe.com/illustrator/desktop/manage-objects/select-objects/select-objects-by-characteristics.html); selecting several threads at once and type in no thread selecting itself are VectorCraft's own behavior. + Select › Same › Text Fill & Stroke Color selects the type whose characters match both the fill and the stroke of the selected type (`select.same.textFillAndStrokeColor`). The menu entry is listed in [Select objects by characteristics](https://helpx.adobe.com/illustrator/desktop/manage-objects/select-objects/select-objects-by-characteristics.html); requiring one run of characters to match both is VectorCraft's own behavior. Object › Flatten Transparency takes a frame of threaded text out of the thread in the same way when Convert All Text to Outlines outlines it or when the frame becomes flat regions or an image, and the other frames keep the text they hold. New Symbol and Redefine Symbol on a frame of threaded text take it out of the thread with the text it shows, which the symbol's art holds, and the other frames keep the text they hold. When the last frame goes into the symbol, the text it has no room for goes after the text of the last frame that stays. When every frame of a thread goes into the symbol, the copy of the last frame keeps all its text. With Optical Margin Alignment on, or Roman Hanging Punctuation on in the first paragraph, the glyphs at the ends of left-to-right type on a path hang outside its brackets, measured along the path. The type hangs at the start bracket when its line is placed there, hangs at the end bracket when the line is placed there, and hangs at both when it is centered. Glyphs that hang past the end bracket do not make the type overflow, and a hang stops at an open path's end. SVG export writes such type as outlines.