diff --git a/crates/doc/src/text.rs b/crates/doc/src/text.rs index 8c1b9bfd0..a3aad9243 100644 --- a/crates/doc/src/text.rs +++ b/crates/doc/src/text.rs @@ -1402,6 +1402,36 @@ impl TextObject { Some(style) } + /// Bakes the object's scale ([`style_scale`]) into character attributes and removes that + /// scale from `xf`, so panels show document-point sizes without a separate transform factor. + /// Returns `false` when there is nothing to bake (identity scale or an unrepresentable + /// transform). + pub fn scale_text_attributes(&mut self) -> bool { + let Some(scale) = self.style_scale() else { return false }; + if (scale.points - 1.0).abs() <= 1e-12 && (scale.horizontal - 1.0).abs() <= 1e-12 { + return false; + } + let [a, b, c, d, _, _] = self.xf.as_coeffs(); + let (sx, sy) = (a.hypot(b), c.hypot(d)); + if sx <= 1e-12 || sy <= 1e-12 { + return false; + } + let mut baked = Vec::with_capacity(self.runs.len()); + for run in &self.runs { + let Some(eff) = self.effective_char_style(&run.style) else { return false }; + baked.push(eff); + } + for (run, style) in self.runs.iter_mut().zip(baked) { + run.style = style; + } + // Character strokes are drawn in text space: widen them by the vertical scale we remove. + self.scale_char_strokes(1.0 / sy); + self.xf *= Affine::scale_non_uniform(1.0 / sx, 1.0 / sy); + self.cached_bounds = None; + self.cached_baselines.clear(); + true + } + pub fn point(origin: Point, text: &str, style: CharStyle) -> Self { Self { vertical: false, diff --git a/crates/engine/src/cmd/typecmd.rs b/crates/engine/src/cmd/typecmd.rs index fe7b24205..a241bff3c 100644 --- a/crates/engine/src/cmd/typecmd.rs +++ b/crates/engine/src/cmd/typecmd.rs @@ -34,6 +34,15 @@ pub fn specs() -> Vec { has_selection, create_outlines ), + cmd!( + "type.scaleTextAttributes", + "Scale Text Attributes", + ["Type"], + None, + "{ids?|id?} bake each selected type object's transform scale into its character sizes (leading, baseline shift and horizontal scale included), leaving rotation and position in the affine → {ids, changed}", + scale_text_attributes_enabled, + scale_text_attributes + ), cmd!( "type.opticalMarginAlignment", "Optical Margin Alignment", @@ -386,6 +395,42 @@ fn text_ids(d: &Document, ids: &[NodeId]) -> Vec { out } +fn scale_text_attributes_enabled(s: &Session) -> std::result::Result<(), String> { + has_selection(s)?; + let st = s.active().ok_or("no document open")?; + let ids = text_ids(&st.doc, &st.selection.objects); + if ids.iter().any(|id| { + st.doc.node(*id).is_some_and(|n| { + let NodeKind::Text(t) = &n.kind else { return false }; + t.style_scale().is_some_and(|sc| (sc.points - 1.0).abs() > 1e-12 || (sc.horizontal - 1.0).abs() > 1e-12) + }) + }) { + Ok(()) + } else { + Err("Scale Text Attributes: selected type has no scale to bake".into()) + } +} + +fn scale_text_attributes(s: &mut Session, p: &Value) -> Result { + const C: &str = "type.scaleTextAttributes"; + let ids = text_targets(s, p, C)?; + let changed = s.edit("Scale Text Attributes", |d, _| { + let mut n = 0usize; + for id in &ids { + let Some(NodeKind::Text(t)) = d.node_mut(*id).map(|node| &mut node.kind) else { continue }; + if t.scale_text_attributes() { + refresh_bounds(t); + n += 1; + } + } + if n == 0 { + return Err(EngineError::Other("Scale Text Attributes: selected type has no scale to bake".into())); + } + Ok(n) + })?; + Ok(json!({ "ids": ids.iter().map(|i| i.0).collect::>(), "changed": changed })) +} + fn create_outlines(s: &mut Session, _: &Value) -> Result { let roots = selected_roots(s)?; let ids = s.edit("Create Outlines", |d, sel| { diff --git a/crates/engine/src/tests_typescale.rs b/crates/engine/src/tests_typescale.rs index 06b613271..c05326861 100644 --- a/crates/engine/src/tests_typescale.rs +++ b/crates/engine/src/tests_typescale.rs @@ -300,3 +300,24 @@ fn imported_type_with_sizes_outside_the_panels_range_opens_unchanged() { s.execute("document.open", &json!({"name": "sizes.vectorcraft", "dataBase64": saved})).unwrap(); assert_eq!(texts(&s), imported); } + +#[test] +fn scale_text_attributes_bakes_group_scale_and_undoes() { + let mut s = session(); + let id = create(&mut s, 12.0); + s.execute("object.group", &json!({})).unwrap(); + s.execute("object.scale", &json!({"sx": 200})).unwrap(); + near(em(&text(&s, id), 0).1, 24.0); + assert_eq!(text(&s, id).runs[0].style.size, 12.0); + s.execute("type.scaleTextAttributes", &json!({})).unwrap(); + near(em(&text(&s, id), 0).1, 24.0); + near(text(&s, id).runs[0].style.size, 24.0); + assert!(text(&s, id).style_scale().is_none_or(|sc| (sc.points - 1.0).abs() <= 1e-9 && (sc.horizontal - 1.0).abs() <= 1e-9)); + s.execute("text.setStyle", &json!({"size": 10})).unwrap(); + near(em(&text(&s, id), 0).1, 10.0); + s.execute("edit.undo", &json!({})).unwrap(); + near(em(&text(&s, id), 0).1, 24.0); + near(text(&s, id).runs[0].style.size, 24.0); + s.execute("edit.undo", &json!({})).unwrap(); + near(text(&s, id).runs[0].style.size, 12.0); +} diff --git a/crates/ui-egui/src/i18n/bg.tsv b/crates/ui-egui/src/i18n/bg.tsv index da83725ec..ea0df0e42 100644 --- a/crates/ui-egui/src/i18n/bg.tsv +++ b/crates/ui-egui/src/i18n/bg.tsv @@ -2736,6 +2736,7 @@ Scale Cursor Proportional to UI Мащабиране на показалеца пропорционално на потребителския интерфейс Scale Lineweights Мащабиране на дебелината на линиите Scale Strokes & Effects Мащабиране на щрихи и ефекти + Scale Text Attributes Мащабиране на текстови атрибути Scale to Fit Artboard Мащабиране за побиране в работната област Scale Tool Инструмент „Мащабиране“ Scale: Мащаб: @@ -5139,6 +5140,7 @@ theme Appearance Външен вид @msg Measured anchor no longer exists Измерената опорна точка вече не съществува @msg Measured segment no longer exists Измереният сегмент вече не съществува @msg Non-finite dimension Размерът не е крайно число +@msg Scale Text Attributes: selected type has no scale to bake Мащабиране на текстови атрибути: избраният текст няма мащаб за прилагане @msg Scale must be drawing:real, for example 1:10 Мащабът трябва да е чертеж:реалност, например 1:10 @msg Scale ratio must be between 1:1000000 and 1000000:1 Съотношението на мащаба трябва да е между 1:1000000 и 1000000:1 @msg Second measured segment no longer exists Вторият измерен сегмент вече не съществува diff --git a/crates/ui-egui/src/i18n/cs.tsv b/crates/ui-egui/src/i18n/cs.tsv index cff1140a4..ef3eb3188 100644 --- a/crates/ui-egui/src/i18n/cs.tsv +++ b/crates/ui-egui/src/i18n/cs.tsv @@ -3475,6 +3475,7 @@ theme Appearance Motiv Scale Corners Měnit velikost rohů Scale Cursor Proportional to UI Měnit velikost kurzoru úměrně rozhraní Scale Strokes & Effects Měnit velikost tahů a efektů + Scale Text Attributes Měnit velikost atributů textu Scratch Disks Odkládací disky Secondary Sekundární Select Same Tint % Vybírat stejné % tónu @@ -5207,6 +5208,7 @@ mark-style Japanese Japonské @msg Measured anchor no longer exists Měřený kotevní bod už neexistuje @msg Measured segment no longer exists Měřený segment už neexistuje @msg Non-finite dimension Kóta není konečné číslo +@msg Scale Text Attributes: selected type has no scale to bake Měnit velikost atributů textu: vybraný text nemá žádnou skalaci, kterou lze použít @msg Scale must be drawing:real, for example 1:10 Měřítko musí mít tvar výkres:skutečnost, například 1:10 @msg Scale ratio must be between 1:1000000 and 1000000:1 Poměr měřítka musí být mezi 1:1000000 a 1000000:1 @msg Second measured segment no longer exists Druhý měřený segment už neexistuje diff --git a/crates/ui-egui/src/i18n/da.tsv b/crates/ui-egui/src/i18n/da.tsv index c9b7a849a..349cd65f3 100644 --- a/crates/ui-egui/src/i18n/da.tsv +++ b/crates/ui-egui/src/i18n/da.tsv @@ -3226,6 +3226,7 @@ theme Appearance Udseende Scale Corners Skalér hjørner Scale Cursor Proportional to UI Skalér markør proportionalt med brugergrænsefladen Scale Strokes & Effects Skalér konturer & effekter + Scale Text Attributes Skalér tekstattributter Scratch Disks Midlertidige diske Secondary Sekundær Select Same Tint % Markér samme farvetone % @@ -4936,6 +4937,7 @@ mark-style Japanese Japansk @msg Measured anchor no longer exists Det målte ankerpunkt findes ikke længere @msg Measured segment no longer exists Det målte segment findes ikke længere @msg Non-finite dimension Ikke-endeligt mål +@msg Scale Text Attributes: selected type has no scale to bake Skalér tekstattributter: den valgte tekst har ingen skalering at anvende @msg Scale must be drawing:real, for example 1:10 Målestokken skal være tegning:virkelig, for eksempel 1:10 @msg Scale ratio must be between 1:1000000 and 1000000:1 Målestoksforholdet skal være mellem 1:1000000 og 1000000:1 @msg Second measured segment no longer exists Det andet målte segment findes ikke længere diff --git a/crates/ui-egui/src/i18n/de.tsv b/crates/ui-egui/src/i18n/de.tsv index 8930eee99..4857200c1 100644 --- a/crates/ui-egui/src/i18n/de.tsv +++ b/crates/ui-egui/src/i18n/de.tsv @@ -2765,6 +2765,7 @@ mark-style Japanese Japanisch Scale Cursor Proportional to UI Cursor proportional zur Benutzeroberfläche skalieren Scale Lineweights Linienstärken skalieren Scale Strokes & Effects Konturen und Effekte skalieren + Scale Text Attributes Textattribute skalieren Scale to Fit Artboard Auf Zeichenfläche skalieren Scale Tool Skalieren-Werkzeug Scale: Skalierung: @@ -4785,6 +4786,7 @@ effect Soft Weich @msg Measured anchor no longer exists Der gemessene Ankerpunkt existiert nicht mehr @msg Measured segment no longer exists Das gemessene Segment existiert nicht mehr @msg Non-finite dimension Die Bemaßung ist keine endliche Zahl +@msg Scale Text Attributes: selected type has no scale to bake Textattribute skalieren: Der ausgewählte Text weist keine zu übernehmende Skalierung auf @msg Scale must be drawing:real, for example 1:10 Der Maßstab muss Zeichnung:Realität sein, zum Beispiel 1:10 @msg Scale ratio must be between 1:1000000 and 1000000:1 Das Maßstabsverhältnis muss zwischen 1:1000000 und 1000000:1 liegen @msg Second measured segment no longer exists Das zweite gemessene Segment existiert nicht mehr diff --git a/crates/ui-egui/src/i18n/el.tsv b/crates/ui-egui/src/i18n/el.tsv index ebe501b81..f2e789c08 100644 --- a/crates/ui-egui/src/i18n/el.tsv +++ b/crates/ui-egui/src/i18n/el.tsv @@ -3231,6 +3231,7 @@ theme Appearance Εμφάνιση Scale Cursor Proportional to UI Αναλογική κλιμάκωση δείκτη ως προς το περιβάλλον Scale Lineweights Κλιμάκωση πάχους γραμμών Scale Strokes & Effects Κλιμάκωση περιγραμμάτων και εφέ + Scale Text Attributes Κλιμάκωση ιδιοτήτων κειμένου Scale to Fit Artboard Κλιμάκωση για προσαρμογή στον πίνακα σχεδίασης Scale Tool Κλιμάκωση (Scale Tool) Scallop Tool Κυματιστές άκρες (Scallop Tool) @@ -5158,6 +5159,7 @@ effect Points Σημεία @msg Measured anchor no longer exists Το μετρημένο σημείο αγκύρωσης δεν υπάρχει πλέον @msg Measured segment no longer exists Το μετρημένο τμήμα δεν υπάρχει πλέον @msg Non-finite dimension Η διάσταση δεν είναι πεπερασμένος αριθμός +@msg Scale Text Attributes: selected type has no scale to bake Κλιμάκωση ιδιοτήτων κειμένου: το επιλεγμένο κείμενο δεν έχει κλίμακα προς εφαρμογή @msg Scale must be drawing:real, for example 1:10 Η κλίμακα πρέπει να είναι σχέδιο:πραγματικό, για παράδειγμα 1:10 @msg Scale ratio must be between 1:1000000 and 1000000:1 Ο λόγος κλίμακας πρέπει να είναι μεταξύ 1:1000000 και 1000000:1 @msg Second measured segment no longer exists Το δεύτερο μετρημένο τμήμα δεν υπάρχει πλέον diff --git a/crates/ui-egui/src/i18n/es.tsv b/crates/ui-egui/src/i18n/es.tsv index 838c502b9..684185882 100644 --- a/crates/ui-egui/src/i18n/es.tsv +++ b/crates/ui-egui/src/i18n/es.tsv @@ -2789,6 +2789,7 @@ Scale Cursor Proportional to UI Escalar el cursor en proporción a la interfaz Scale Lineweights Escalar grosores de línea Scale Strokes & Effects Escalar trazos y efectos + Scale Text Attributes Escalar atributos de texto Scale to Fit Artboard Escalar para encajar en la mesa de trabajo Scale Tool Herramienta Escalar Scale: Escala: @@ -5148,6 +5149,7 @@ mark-style Japanese Japonesas @msg Measured anchor no longer exists El punto de ancla medido ya no existe @msg Measured segment no longer exists El segmento medido ya no existe @msg Non-finite dimension Cota no finita +@msg Scale Text Attributes: selected type has no scale to bake Escalar atributos de texto: el texto seleccionado no tiene escala que aplicar @msg Scale must be drawing:real, for example 1:10 La escala debe ser dibujo:real, por ejemplo 1:10 @msg Scale ratio must be between 1:1000000 and 1000000:1 La relación de escala debe estar entre 1:1000000 y 1000000:1 @msg Second measured segment no longer exists El segundo segmento medido ya no existe diff --git a/crates/ui-egui/src/i18n/fi.tsv b/crates/ui-egui/src/i18n/fi.tsv index 622cff83a..29673202e 100644 --- a/crates/ui-egui/src/i18n/fi.tsv +++ b/crates/ui-egui/src/i18n/fi.tsv @@ -3403,6 +3403,7 @@ theme Appearance Ulkoasu Scale Corners Skaalaa kulmat Scale Cursor Proportional to UI Skaalaa kohdistin suhteessa käyttöliittymään Scale Strokes & Effects Skaalaa viivat ja tehosteet + Scale Text Attributes Skaalaa tekstin attribuutit Scratch Disks Työlevyt Secondary Toissijainen Select Same Tint % Valitse sama sävyprosentti @@ -5170,6 +5171,7 @@ mark-style Japanese Japanilainen @msg Measured anchor no longer exists Mitattua ankkuripistettä ei ole enää @msg Measured segment no longer exists Mitattua segmenttiä ei ole enää @msg Non-finite dimension Mitta ei ole äärellinen luku +@msg Scale Text Attributes: selected type has no scale to bake Skaalaa tekstin attribuutit: valitulla tekstillä ei ole sovellettavaa skaalausta @msg Scale must be drawing:real, for example 1:10 Mittakaavan on oltava muotoa piirustus:todellinen, esimerkiksi 1:10 @msg Scale ratio must be between 1:1000000 and 1000000:1 Mittakaavan suhteen on oltava välillä 1:1000000–1000000:1 @msg Second measured segment no longer exists Toista mitattua segmenttiä ei ole enää diff --git a/crates/ui-egui/src/i18n/fr.tsv b/crates/ui-egui/src/i18n/fr.tsv index e711a5810..284e5274c 100644 --- a/crates/ui-egui/src/i18n/fr.tsv +++ b/crates/ui-egui/src/i18n/fr.tsv @@ -2786,6 +2786,7 @@ Scale Cursor Proportional to UI Mettre le curseur à l’échelle de l’interface Scale Lineweights Mettre à l’échelle les épaisseurs de trait Scale Strokes & Effects Mettre à l’échelle les contours et les effets + Scale Text Attributes Mettre à l’échelle les attributs de texte Scale to Fit Artboard Mettre à l’échelle pour ajuster au plan de travail Scale Tool Outil Mise à l’échelle Scale: Échelle : @@ -5206,6 +5207,7 @@ theme Appearance Apparence @msg Measured anchor no longer exists Le point d’ancrage mesuré n’existe plus @msg Measured segment no longer exists Le segment mesuré n’existe plus @msg Non-finite dimension Cote non finie +@msg Scale Text Attributes: selected type has no scale to bake Mettre à l’échelle les attributs de texte : le texte sélectionné n’a pas d’échelle à intégrer @msg Scale must be drawing:real, for example 1:10 L’échelle doit être dessin:réel, par exemple 1:10 @msg Scale ratio must be between 1:1000000 and 1000000:1 Le rapport d’échelle doit être compris entre 1:1000000 et 1000000:1 @msg Second measured segment no longer exists Le second segment mesuré n’existe plus diff --git a/crates/ui-egui/src/i18n/hu.tsv b/crates/ui-egui/src/i18n/hu.tsv index bcc584e8e..e858fd451 100644 --- a/crates/ui-egui/src/i18n/hu.tsv +++ b/crates/ui-egui/src/i18n/hu.tsv @@ -3364,6 +3364,7 @@ mark-style Japanese Japán Scale Lineweights Vonalvastagságok méretezése Scale Proportionately Arányos méretezés Scale Strokes & Effects Körvonalak és effektusok méretezése + Scale Text Attributes Szövegattribútumok méretezése Scale Tints Tónusok skálázása Scale to Fit Artboard Méretezés a rajztáblához Scale Tool Méretezés @@ -5192,6 +5193,7 @@ imageTrace Outline Körvonal @msg Measured anchor no longer exists A mért horgonypont már nem létezik @msg Measured segment no longer exists A mért szakasz már nem létezik @msg Non-finite dimension Nem véges méret +@msg Scale Text Attributes: selected type has no scale to bake Szövegattribútumok méretezése: a kijelölt szövegnek nincs alkalmazható méretezése @msg Scale must be drawing:real, for example 1:10 A léptéknek rajz:valós alakúnak kell lennie, például 1:10 @msg Scale ratio must be between 1:1000000 and 1000000:1 A lépték aránya 1:1000000 és 1000000:1 között lehet @msg Second measured segment no longer exists A második mért szakasz már nem létezik diff --git a/crates/ui-egui/src/i18n/id.tsv b/crates/ui-egui/src/i18n/id.tsv index 43f87bafd..823700764 100644 --- a/crates/ui-egui/src/i18n/id.tsv +++ b/crates/ui-egui/src/i18n/id.tsv @@ -3226,6 +3226,7 @@ theme Appearance Tampilan Scale Corners Skalakan sudut Scale Cursor Proportional to UI Skalakan kursor proporsional dengan UI Scale Strokes & Effects Skalakan guratan & efek + Scale Text Attributes Skalakan atribut teks Scratch Disks Disk scratch Secondary Sekunder Select Same Tint % Pilih tint yang sama % @@ -4936,6 +4937,7 @@ mark-style Japanese Jepang @msg Measured anchor no longer exists Titik jangkar yang diukur sudah tidak ada @msg Measured segment no longer exists Segmen yang diukur sudah tidak ada @msg Non-finite dimension Dimensi bukan bilangan berhingga +@msg Scale Text Attributes: selected type has no scale to bake Skalakan atribut teks: teks yang dipilih tidak memiliki skala untuk diterapkan @msg Scale must be drawing:real, for example 1:10 Skala harus dalam format gambar:sebenarnya, misalnya 1:10 @msg Scale ratio must be between 1:1000000 and 1000000:1 Rasio skala harus antara 1:1000000 dan 1000000:1 @msg Second measured segment no longer exists Segmen yang diukur kedua sudah tidak ada diff --git a/crates/ui-egui/src/i18n/it.tsv b/crates/ui-egui/src/i18n/it.tsv index 1185cb1f6..2b3f2c98a 100644 --- a/crates/ui-egui/src/i18n/it.tsv +++ b/crates/ui-egui/src/i18n/it.tsv @@ -2823,6 +2823,7 @@ mark-style Japanese Giapponese Scale Cursor Proportional to UI Scala il cursore in proporzione all'interfaccia Scale Lineweights Scala spessori linea Scale Strokes & Effects Scala tracce ed effetti + Scale Text Attributes Scala attributi di testo Scale to Fit Artboard Scala per adattare alla tavola da disegno Scale Tool Strumento Scala Scale: Scala: @@ -4819,6 +4820,7 @@ lighting Light Luce @msg Measured anchor no longer exists Il punto di ancoraggio misurato non esiste più @msg Measured segment no longer exists Il segmento misurato non esiste più @msg Non-finite dimension Quota non finita +@msg Scale Text Attributes: selected type has no scale to bake Scala attributi di testo: il testo selezionato non ha una scala da incorporare @msg Scale must be drawing:real, for example 1:10 La scala deve essere disegno:reale, ad esempio 1:10 @msg Scale ratio must be between 1:1000000 and 1000000:1 Il rapporto di scala deve essere compreso tra 1:1000000 e 1000000:1 @msg Second measured segment no longer exists Il secondo segmento misurato non esiste più diff --git a/crates/ui-egui/src/i18n/ja.tsv b/crates/ui-egui/src/i18n/ja.tsv index 7df3e91c5..ab86e069f 100644 --- a/crates/ui-egui/src/i18n/ja.tsv +++ b/crates/ui-egui/src/i18n/ja.tsv @@ -2693,6 +2693,7 @@ mark-style Japanese 日本式 Scale Cursor Proportional to UI カーソルを UI の拡大率に合わせる Scale Lineweights 線の太さを拡大・縮小 Scale Strokes & Effects 線幅と効果を拡大・縮小 + Scale Text Attributes テキスト属性を拡大・縮小 Scale Tool 拡大・縮小ツール Scale to Fit Artboard アートボードに合わせて拡大・縮小 Scale: 拡大・縮小: @@ -4859,6 +4860,7 @@ lighting Light ライト @msg Measured anchor no longer exists 測定したアンカーポイントはもう存在しません @msg Measured segment no longer exists 測定したセグメントはもう存在しません @msg Non-finite dimension 寸法が有限ではありません +@msg Scale Text Attributes: selected type has no scale to bake テキスト属性を拡大・縮小: 選択したテキストに取り込むスケールがありません @msg Scale must be drawing:real, for example 1:10 縮尺は 図面:実寸 の形式にしてください (例: 1:10) @msg Scale ratio must be between 1:1000000 and 1000000:1 縮尺の比率は 1:1000000 から 1000000:1 の間にしてください @msg Second measured segment no longer exists 2 番目の測定セグメントはもう存在しません diff --git a/crates/ui-egui/src/i18n/ka.tsv b/crates/ui-egui/src/i18n/ka.tsv index d61e5ddf4..5905dfd8e 100644 --- a/crates/ui-egui/src/i18n/ka.tsv +++ b/crates/ui-egui/src/i18n/ka.tsv @@ -3036,6 +3036,7 @@ theme Appearance იერსახე Scale Corners კუთხეების მასშტაბირება Scale Cursor Proportional to UI კურსორის მასშტაბირება ინტერფეისის პროპორციულად Scale Strokes & Effects კონტურებისა და ეფექტების მასშტაბირება + Scale Text Attributes ტექსტის ატრიბუტების მასშტაბირება Scratch Disks სამუშაო დისკები Secondary მეორადი Select Same Tint % იგივე ტონირების % მონიშვნა @@ -4846,6 +4847,7 @@ imageTrace Outline კონტური @msg Measured anchor no longer exists გაზომილი საყრდენი წერტილი აღარ არსებობს @msg Measured segment no longer exists გაზომილი სეგმენტი აღარ არსებობს @msg Non-finite dimension ზომა სასრული რიცხვი არ არის +@msg Scale Text Attributes: selected type has no scale to bake ტექსტის ატრიბუტების მასშტაბირება: არჩეულ ტექსტს არ აქვს გადასაყვანი მასშტაბი @msg Scale must be drawing:real, for example 1:10 მასშტაბი უნდა იყოს ნახაზი:რეალური, მაგალითად 1:10 @msg Scale ratio must be between 1:1000000 and 1000000:1 მასშტაბის შეფარდება 1:1000000-სა და 1000000:1-ს შორის უნდა იყოს @msg Second measured segment no longer exists მეორე გაზომილი სეგმენტი აღარ არსებობს diff --git a/crates/ui-egui/src/i18n/ko.tsv b/crates/ui-egui/src/i18n/ko.tsv index dc5249098..b9950bfe9 100644 --- a/crates/ui-egui/src/i18n/ko.tsv +++ b/crates/ui-egui/src/i18n/ko.tsv @@ -2687,6 +2687,7 @@ mark-style Japanese 일본식 Scale Cursor Proportional to UI UI에 비례해 커서 크기 조절 Scale Lineweights 선 두께 크기 조절 Scale Strokes & Effects 선 및 효과 크기 조절 + Scale Text Attributes 텍스트 속성 크기 조절 Scale Tool 크기 조절 도구 Scale to Fit Artboard 아트보드에 맞게 크기 조절 Scale: 크기 조절: @@ -4782,6 +4783,7 @@ lighting Light 광원 @msg Measured anchor no longer exists 측정한 고정점이 더 이상 없습니다 @msg Measured segment no longer exists 측정한 세그먼트가 더 이상 없습니다 @msg Non-finite dimension 유한하지 않은 치수 +@msg Scale Text Attributes: selected type has no scale to bake 텍스트 속성 크기 조절: 선택한 텍스트에 적용할 크기 조절이 없습니다 @msg Scale must be drawing:real, for example 1:10 축척은 도면:실제 형식이어야 합니다(예: 1:10) @msg Scale ratio must be between 1:1000000 and 1000000:1 축척 비율은 1:1000000에서 1000000:1 사이여야 합니다 @msg Second measured segment no longer exists 두 번째 측정 세그먼트가 더 이상 없습니다 diff --git a/crates/ui-egui/src/i18n/nl.tsv b/crates/ui-egui/src/i18n/nl.tsv index 5e538538b..102eaa407 100644 --- a/crates/ui-egui/src/i18n/nl.tsv +++ b/crates/ui-egui/src/i18n/nl.tsv @@ -3240,6 +3240,7 @@ theme Appearance Vormgeving Scale Corners Hoeken schalen Scale Cursor Proportional to UI Cursor proportioneel schalen met UI Scale Strokes & Effects Streken & effecten schalen + Scale Text Attributes Tekstkenmerken schalen Scratch Disks Scratchschijven Secondary Secundair Select Same Tint % Zelfde tint % selecteren @@ -4948,6 +4949,7 @@ mark-style Japanese Japans @msg Measured anchor no longer exists Gemeten ankerpunt bestaat niet meer @msg Measured segment no longer exists Gemeten segment bestaat niet meer @msg Non-finite dimension Niet-eindige maatlijn +@msg Scale Text Attributes: selected type has no scale to bake Tekstkenmerken schalen: de geselecteerde tekst heeft geen schaling om toe te passen @msg Scale must be drawing:real, for example 1:10 Schaal moet tekening:werkelijk zijn, bijvoorbeeld 1:10 @msg Scale ratio must be between 1:1000000 and 1000000:1 Schaalverhouding moet tussen 1:1000000 en 1000000:1 liggen @msg Second measured segment no longer exists Tweede gemeten segment bestaat niet meer diff --git a/crates/ui-egui/src/i18n/pl.tsv b/crates/ui-egui/src/i18n/pl.tsv index 616eac9b9..42ede0d8e 100644 --- a/crates/ui-egui/src/i18n/pl.tsv +++ b/crates/ui-egui/src/i18n/pl.tsv @@ -3337,6 +3337,7 @@ theme Appearance Wygląd Scale Corners Skaluj narożniki Scale Cursor Proportional to UI Skaluj kursor proporcjonalnie do interfejsu Scale Strokes & Effects Skaluj obrysy i efekty + Scale Text Attributes Skaluj atrybuty tekstu Scratch Disks Dyski robocze Secondary Dodatkowy Select Same Tint % Zaznaczaj ten sam % tinty @@ -5057,6 +5058,7 @@ mark-style Japanese Japońskie @msg Measured anchor no longer exists Mierzony punkt kontrolny już nie istnieje @msg Measured segment no longer exists Mierzony odcinek już nie istnieje @msg Non-finite dimension Wymiar nie jest liczbą skończoną +@msg Scale Text Attributes: selected type has no scale to bake Skaluj atrybuty tekstu: wybrany tekst nie ma skali do zastosowania @msg Scale must be drawing:real, for example 1:10 Skala musi mieć postać rysunek:rzeczywistość, na przykład 1:10 @msg Scale ratio must be between 1:1000000 and 1000000:1 Współczynnik skali musi mieścić się między 1:1000000 a 1000000:1 @msg Second measured segment no longer exists Drugi mierzony odcinek już nie istnieje diff --git a/crates/ui-egui/src/i18n/pt-br.tsv b/crates/ui-egui/src/i18n/pt-br.tsv index 6de4d62fa..4a1fd3939 100644 --- a/crates/ui-egui/src/i18n/pt-br.tsv +++ b/crates/ui-egui/src/i18n/pt-br.tsv @@ -2313,6 +2313,7 @@ Scale Cursor Proportional to UI Dimensionar Cursor Proporcionalmente à Interface Scale Lineweights Dimensionar Espessuras de Linha Scale Strokes & Effects Dimensionar Traçados e Efeitos + Scale Text Attributes Dimensionar Atributos de Texto Scale Tool Ferramenta Escala Scale to Fit Artboard Dimensionar para Ajustar à Mesa de Trabalho Scale: Escala: @@ -5130,6 +5131,7 @@ mark-style Japanese Japonesas @msg Measured anchor no longer exists O ponto de ancoragem medido não existe mais @msg Measured segment no longer exists O segmento medido não existe mais @msg Non-finite dimension Cota não finita +@msg Scale Text Attributes: selected type has no scale to bake Dimensionar Atributos de Texto: o texto selecionado não tem escala para aplicar @msg Scale must be drawing:real, for example 1:10 A escala deve ser desenho:real, por exemplo 1:10 @msg Scale ratio must be between 1:1000000 and 1000000:1 A proporção da escala deve estar entre 1:1000000 e 1000000:1 @msg Second measured segment no longer exists O segundo segmento medido não existe mais diff --git a/crates/ui-egui/src/i18n/ru.tsv b/crates/ui-egui/src/i18n/ru.tsv index be6378557..ca4ce58fa 100644 --- a/crates/ui-egui/src/i18n/ru.tsv +++ b/crates/ui-egui/src/i18n/ru.tsv @@ -2819,6 +2819,7 @@ mark-style Japanese Японский Scale Cursor Proportional to UI Масштабировать курсор пропорционально интерфейсу Scale Lineweights Масштабировать толщины линий Scale Strokes & Effects Масштабировать обводки и эффекты + Scale Text Attributes Масштабировать атрибуты текста Scale to Fit Artboard Масштабировать по монтажной области Scale Tool Инструмент «Масштаб» Scale: Масштаб: @@ -4815,6 +4816,7 @@ lighting Light Свет @msg Measured anchor no longer exists Измеряемая опорная точка больше не существует @msg Measured segment no longer exists Измеряемый сегмент больше не существует @msg Non-finite dimension Размер не является конечным числом +@msg Scale Text Attributes: selected type has no scale to bake Масштабировать атрибуты текста: у выбранного текста нет масштаба для применения @msg Scale must be drawing:real, for example 1:10 Масштаб должен быть в виде чертёж:реальность, например 1:10 @msg Scale ratio must be between 1:1000000 and 1000000:1 Соотношение масштаба должно быть от 1:1000000 до 1000000:1 @msg Second measured segment no longer exists Второй измеряемый сегмент больше не существует diff --git a/crates/ui-egui/src/i18n/sv.tsv b/crates/ui-egui/src/i18n/sv.tsv index 4550960ee..4b8e64289 100644 --- a/crates/ui-egui/src/i18n/sv.tsv +++ b/crates/ui-egui/src/i18n/sv.tsv @@ -2736,6 +2736,7 @@ Scale Cursor Proportional to UI Skala pekaren proportionellt mot gränssnittet Scale Lineweights Skala linjebredder Scale Strokes & Effects Skala konturer och effekter + Scale Text Attributes Skala textattribut Scale to Fit Artboard Skala för att passa ritytan Scale Tool Skalningsverktyg Scale: Skala: @@ -5162,6 +5163,7 @@ theme Appearance Utseende @msg Measured anchor no longer exists Den mätta ankarpunkten finns inte längre @msg Measured segment no longer exists Det mätta segmentet finns inte längre @msg Non-finite dimension Måttet är inte ett ändligt tal +@msg Scale Text Attributes: selected type has no scale to bake Skala textattribut: det valda texten har ingen skalning att tillämpa @msg Scale must be drawing:real, for example 1:10 Skalan måste anges som ritning:verklighet, till exempel 1:10 @msg Scale ratio must be between 1:1000000 and 1000000:1 Skalförhållandet måste ligga mellan 1:1000000 och 1000000:1 @msg Second measured segment no longer exists Det andra mätta segmentet finns inte längre diff --git a/crates/ui-egui/src/i18n/uk.tsv b/crates/ui-egui/src/i18n/uk.tsv index 71cd4d8de..73b9fc92b 100644 --- a/crates/ui-egui/src/i18n/uk.tsv +++ b/crates/ui-egui/src/i18n/uk.tsv @@ -2815,6 +2815,7 @@ mark-style Japanese Японський Scale Cursor Proportional to UI Масштабувати курсор пропорційно до інтерфейсу Scale Lineweights Масштабувати товщини ліній Scale Strokes & Effects Масштабувати обведення та ефекти + Scale Text Attributes Масштабувати атрибути тексту Scale to Fit Artboard Масштабувати по монтажній області Scale Tool Інструмент «Масштаб» Scale: Масштаб: @@ -4799,6 +4800,7 @@ lighting Light Світло @msg Measured anchor no longer exists Виміряна опорна точка більше не існує @msg Measured segment no longer exists Виміряний сегмент більше не існує @msg Non-finite dimension Розмір не є скінченним числом +@msg Scale Text Attributes: selected type has no scale to bake Масштабувати атрибути тексту: у вибраного тексту немає масштабу для застосування @msg Scale must be drawing:real, for example 1:10 Масштаб має бути у вигляді креслення:реальність, наприклад 1:10 @msg Scale ratio must be between 1:1000000 and 1000000:1 Співвідношення масштабу має бути від 1:1000000 до 1000000:1 @msg Second measured segment no longer exists Другий виміряний сегмент більше не існує diff --git a/crates/ui-egui/src/i18n/vi.tsv b/crates/ui-egui/src/i18n/vi.tsv index 81451af54..17740ca67 100644 --- a/crates/ui-egui/src/i18n/vi.tsv +++ b/crates/ui-egui/src/i18n/vi.tsv @@ -3119,6 +3119,7 @@ mark-style Japanese Kiểu Nhật Scale Lineweights Tỷ lệ độ dày nét Scale Proportionately Phóng to/thu nhỏ đều Scale Strokes & Effects Tỷ lệ nét & hiệu ứng + Scale Text Attributes Tỷ lệ thuộc tính văn bản Scale to Fit Artboard Tỷ lệ vừa bảng vẽ Scale Tool Công cụ Tỷ lệ Scale: Tỷ lệ: @@ -4799,6 +4800,7 @@ theme Appearance Giao diện @msg Measured anchor no longer exists Điểm neo được đo không còn tồn tại @msg Measured segment no longer exists Đoạn được đo không còn tồn tại @msg Non-finite dimension Kích thước không phải là số hữu hạn +@msg Scale Text Attributes: selected type has no scale to bake Tỷ lệ thuộc tính văn bản: văn bản được chọn không có tỷ lệ để áp dụng @msg Scale must be drawing:real, for example 1:10 Tỷ lệ phải có dạng bản vẽ:thực tế, ví dụ 1:10 @msg Scale ratio must be between 1:1000000 and 1000000:1 Tỷ lệ phải nằm trong khoảng 1:1000000 đến 1000000:1 @msg Second measured segment no longer exists Đoạn được đo thứ hai không còn tồn tại diff --git a/crates/ui-egui/src/i18n/zh-hans.tsv b/crates/ui-egui/src/i18n/zh-hans.tsv index 5bd8d1d06..5f01f2fe9 100644 --- a/crates/ui-egui/src/i18n/zh-hans.tsv +++ b/crates/ui-egui/src/i18n/zh-hans.tsv @@ -2671,6 +2671,7 @@ font-script Japanese 汉字 Scale Cursor Proportional to UI 光标随界面等比缩放 Scale Lineweights 缩放线宽 Scale Strokes & Effects 缩放描边和效果 + Scale Text Attributes 缩放文本属性 Scale to Fit Artboard 缩放以适合画板 Scale Tool 比例缩放工具 Scale: 缩放: @@ -4304,6 +4305,7 @@ imageTrace Outline 轮廓 @msg Measured anchor no longer exists 测量锚点已不存在 @msg Measured segment no longer exists 测量线段已不存在 @msg Non-finite dimension 尺寸标注不是有限值 +@msg Scale Text Attributes: selected type has no scale to bake 缩放文本属性:所选文本没有可应用的缩放 @msg Scale must be drawing:real, for example 1:10 比例必须为 图纸:实际,例如 1:10 @msg Scale ratio must be between 1:1000000 and 1000000:1 比例必须介于 1:1000000 和 1000000:1 之间 @msg Second measured segment no longer exists 第二条测量线段已不存在 diff --git a/crates/ui-egui/src/i18n/zh-hant.tsv b/crates/ui-egui/src/i18n/zh-hant.tsv index 4b6af3426..fb483e6ba 100644 --- a/crates/ui-egui/src/i18n/zh-hant.tsv +++ b/crates/ui-egui/src/i18n/zh-hant.tsv @@ -2293,6 +2293,7 @@ file-filter Templates 範本 @msg Measured anchor no longer exists 測量的錨點已不存在 @msg Measured segment no longer exists 測量的線段已不存在 @msg Non-finite dimension 尺寸標註不是有限值 +@msg Scale Text Attributes: selected type has no scale to bake 縮放文字屬性:所選文字沒有可套用的縮放 @msg Scale must be drawing:real, for example 1:10 比例必須為 圖紙:實際,例如 1:10 @msg Scale ratio must be between 1:1000000 and 1000000:1 比例必須介於 1:1000000 和 1000000:1 之間 @msg Second measured segment no longer exists 第二條測量線段已不存在 @@ -3570,6 +3571,7 @@ font-script Japanese 漢字 Scale Cursor Proportional to UI 游標依介面比例縮放 Scale Lineweights 縮放線條寬度 Scale Strokes & Effects 縮放筆畫與效果 + Scale Text Attributes 縮放文字屬性 Scale to Fit Artboard 縮放至符合工作區域 Scale Tool 縮放工具 Scale: 縮放比例: diff --git a/crates/ui-egui/src/menus.rs b/crates/ui-egui/src/menus.rs index 0c59b761f..9b2586a9f 100644 --- a/crates/ui-egui/src/menus.rs +++ b/crates/ui-egui/src/menus.rs @@ -2887,6 +2887,7 @@ pub fn menu_tree_named(english_names: bool) -> Vec<(&'static str, Vec)> { cp("Smart Punctuation…", "type.smartPunctuation", json!({"quotes": true, "dashes": true, "ellipsis": true, "scope": "selection"})), Sep, c("Create Outlines", "type.createOutlines"), + c("Scale Text Attributes", "type.scaleTextAttributes"), c("Optical Margin Alignment", "type.opticalMarginAlignment"), Sep, c("Fill with Placeholder Text", "type.fillPlaceholder"),