diff --git a/crates/tools/src/xform/eyedropper.rs b/crates/tools/src/xform/eyedropper.rs index fa85a8253..5356452ed 100644 --- a/crates/tools/src/xform/eyedropper.rs +++ b/crates/tools/src/xform/eyedropper.rs @@ -11,6 +11,9 @@ //! The Gradient panel's eyedropper sets the `stop` option (the tool to return to): the next click //! samples the colour under the cursor into the selected gradient stop (`paint.sampleColor //! {stop}`) and switches back to that tool. +//! +//! Brush Options' Key Color eyedropper sets `brushKeyColor` and `stop`: the next click samples into +//! the open dialog (`brushKeyColor` UI request) and switches back. use serde_json::{Value, json}; use vectorcraft_color::{Color, Paint}; @@ -26,6 +29,8 @@ use crate::{Action, Cursor, Mods, PointerEvent, PointerKind, Tool, ToolContext}; pub struct EyedropperTool { /// Sampling for the selected gradient stop: the tool to switch back to afterwards. stop: Option, + /// Brush Options › Key Color (Hue Shift): sample into the dialog, then [`Self::stop`]. + brush_key_color: bool, } /// The colour of `paint` at `p` (gradients are sampled along their vector, radial ones honouring @@ -83,6 +88,19 @@ impl Tool for EyedropperTool { // A click inside a fill or among characters samples it too, whatever Object and Type // Object Selection by Path Only say. let opts = vectorcraft_doc::hit::HitOptions { path_only: false, type_path_only: false, ..cx.hit_options() }; + if self.brush_key_color { + let h = hit_test_visible(cx.doc, ev.pos, opts); + let Some(h) = h else { return vec![] }; + let src = paint_owner(cx.doc, h.leaf); + let Some(n) = cx.doc.node(src) else { return vec![] }; + let image = matches!(n.kind, NodeKind::Image(_)); + let sampled = if image { image_color_at(cx, n, ev.pos) } else { paint_sample(n, h.kind == HitKind::Stroke, ev.pos) }; + let Some(c) = sampled else { return vec![] }; + let back = self.stop.clone().unwrap_or_else(|| "selection".to_string()); + self.brush_key_color = false; + self.stop = None; + return vec![Action::Dialog("brushKeyColor".into(), json!({ "color": color_json(&c) })), Action::SwitchTool(back)]; + } let stop = self.stop.as_ref().zip(cx.gradient_stop); // Reading a source is independent of its editability. Only Alt's reverse operation // writes to the clicked object; Shift+Alt appends its appearance to the selection. @@ -108,12 +126,14 @@ impl Tool for EyedropperTool { } fn options(&self) -> Value { - json!({ "stop": self.stop }) + json!({ "stop": self.stop, "brushKeyColor": self.brush_key_color }) } fn set_option(&mut self, key: &str, value: &Value) { - if key == "stop" { - self.stop = value.as_str().map(str::to_string); + match key { + "stop" => self.stop = value.as_str().map(str::to_string), + "brushKeyColor" => self.brush_key_color = value.as_bool().unwrap_or(false), + _ => {} } } @@ -175,7 +195,7 @@ mod tests { let mut cx = cx(&d, &s, &p); let mut t = EyedropperTool::default(); t.set_option("stop", &json!("gradient")); - assert_eq!(t.options(), json!({"stop": "gradient"})); + assert_eq!(t.options(), json!({"stop": "gradient", "brushKeyColor": false})); // Without a selected stop the click copies the appearance as usual. let a = t.pointer(&cx, &PointerEvent::new(PointerKind::Down, 150.0, 150.0)); assert!(matches!(&a[0], Action::Exec(c, _) if c == "appearance.copyFrom")); @@ -190,7 +210,24 @@ mod tests { Action::SwitchTool("gradient".into()) ] ); - assert_eq!(t.options(), json!({"stop": null}), "one sample only"); + assert_eq!(t.options(), json!({"stop": null, "brushKeyColor": false}), "one sample only"); + } + + #[test] + fn brush_key_color_samples_into_the_dialog_then_switches_back() { + let (d, _) = doc_with_rect(); + let s = Selection::default(); + let p = paint(); + let cx = cx(&d, &s, &p); + let mut t = EyedropperTool::default(); + t.set_option("brushKeyColor", &json!(true)); + t.set_option("stop", &json!("selection")); + let a = t.pointer(&cx, &PointerEvent::new(PointerKind::Down, 150.0, 150.0)); + assert_eq!( + a, + vec![Action::Dialog("brushKeyColor".into(), json!({ "color": color_json(&Color::WHITE) })), Action::SwitchTool("selection".into())] + ); + assert_eq!(t.options(), json!({ "stop": null, "brushKeyColor": false })); } /// The hex of the colour a `paint.sampleColor` action samples. diff --git a/crates/ui-egui/src/dialogs/brush_art_options.rs b/crates/ui-egui/src/dialogs/brush_art_options.rs index 922b8c2ee..29a664679 100644 --- a/crates/ui-egui/src/dialogs/brush_art_options.rs +++ b/crates/ui-egui/src/dialogs/brush_art_options.rs @@ -25,6 +25,7 @@ use vectorcraft_color::{Color, Paint}; use vectorcraft_doc::{Appearance, Document, Node, NodeId}; use super::brush_options::{clamped, mode_key, stroke_preview}; +use crate::VectorcraftApp; use crate::state::Dialog; use crate::theme::Tokens; use crate::widgets; @@ -199,14 +200,14 @@ pub(super) fn params(d: &Dialog) -> Value { // ---------- body ---------- -pub(super) fn body(ui: &mut egui::Ui, d: &mut Dialog) { +pub(super) fn body(app: &mut VectorcraftApp, ui: &mut egui::Ui, d: &mut Dialog) { match d.str("__type").as_str() { "scatter" => scatter_body(ui, d), "art" => art_body(ui, d), _ => pattern_body(ui, d), } ui.add_space(6.0); - colorization_body(ui, d); + colorization_body(app, ui, d); ui.add_space(10.0); // The brush as OK would make it, on a sample stroke. let ty = d.str("__type"); @@ -479,7 +480,15 @@ fn tile_doc(art: &Node, w: f64, h: f64) -> Option { Some(doc) } -fn colorization_body(ui: &mut egui::Ui, d: &mut Dialog) { +/// Key Color eyedropper: sample the next click on the art into this dialog's `keyColor`. +fn key_color_eyedropper(app: &mut VectorcraftApp) { + let back = app.session.tool_id(); + app.select_tool("eyedropper"); + app.session.set_tool_option("brushKeyColor", &json!(true)); + app.session.set_tool_option("stop", &json!(back)); +} + +fn colorization_body(app: &mut VectorcraftApp, ui: &mut egui::Ui, d: &mut Dialog) { widgets::section_header(ui, tl!("Colorization")); let methods = [tl!("None"), tl!("Tints"), tl!("Tints and Shades"), tl!("Hue Shift")]; let cur = d.str("colorization"); @@ -513,6 +522,19 @@ fn colorization_body(ui: &mut egui::Ui, d: &mut Dialog) { d.fields.insert("keyColor".into(), serde_json::to_value(c).unwrap_or_default()); } } + if widgets::icon_button(ui, "pipette", tl!("Eyedropper: click the art to sample the key color"), false, 22.0).clicked() { + key_color_eyedropper(app); + } }); }); } + +/// Apply a sampled colour to the open Brush Options dialog (`brushKeyColor` tool request). +pub(super) fn apply_key_color_sample(app: &mut VectorcraftApp, color: &Value) { + let Some(d) = app.ui.dialog.as_mut().filter(|d| d.kind == super::brush_options::KIND) else { return }; + if d.str("colorization") != "hueShift" { + return; + } + let Some(c) = vectorcraft_engine::cmd::color_value(color) else { return }; + d.fields.insert("keyColor".into(), serde_json::to_value(c).unwrap_or_default()); +} diff --git a/crates/ui-egui/src/dialogs/brush_options.rs b/crates/ui-egui/src/dialogs/brush_options.rs index d67583135..3d6dc863c 100644 --- a/crates/ui-egui/src/dialogs/brush_options.rs +++ b/crates/ui-egui/src/dialogs/brush_options.rs @@ -242,7 +242,7 @@ fn body(app: &mut VectorcraftApp, ui: &mut egui::Ui, d: &mut Dialog) -> bool { match d.str("__type").as_str() { "bristle" => bristle_body(app, ui, d), "calligraphic" => calligraphic_body(ui, d), - _ => brush_art_options::body(ui, d), + _ => brush_art_options::body(app, ui, d), } false } @@ -521,6 +521,25 @@ mod tests { assert_eq!((d.str("sizeMode"), d.str("spacingMode"), d.str("colorization")), ("fixed".into(), "pressure".into(), "hueShift".into())); } + #[test] + fn brush_key_color_eyedropper_updates_the_open_dialog() { + use vectorcraft_tools::{PointerEvent, PointerKind}; + let mut app = app(); + app.run("paint.setFill", json!({"color": "#336699"})).unwrap(); + app.run("shape.rectangle", json!({"x": 40, "y": 40, "width": 80, "height": 60})).unwrap(); + app.run("ui.brushOptions", json!({"name": "Confetti"})).unwrap(); + set(&mut app, json!({"colorization": "hueShift"})); + let back = app.session.tool_id(); + app.select_tool("eyedropper"); + app.session.set_tool_option("brushKeyColor", &json!(true)); + app.session.set_tool_option("stop", &json!(back)); + let view = app.view_info(); + crate::canvas::dispatch(&mut app, &PointerEvent::new(PointerKind::Down, 80.0, 70.0), view); + let key = app.ui.dialog.as_ref().unwrap().fields.get("keyColor").cloned().unwrap(); + assert_eq!(vectorcraft_engine::cmd::color_value(&key).unwrap().to_hex(), "#336699"); + assert_eq!(app.session.tool_id(), back); + } + #[test] fn art_options_set_width_scale_direction_flips_and_colorization() { let mut app = app(); diff --git a/crates/ui-egui/src/dialogs/tools.rs b/crates/ui-egui/src/dialogs/tools.rs index 1947742ac..acd76f3f4 100644 --- a/crates/ui-egui/src/dialogs/tools.rs +++ b/crates/ui-egui/src/dialogs/tools.rs @@ -68,6 +68,13 @@ pub fn open_tool_dialog(app: &mut VectorcraftApp, kind: &str, p: Value) { } // Double-clicking a stop on the gradient annotator: its popover, next to the stop's chip. "gradientStop" => Dialog::new(kind, json!({"index": p.get("index").cloned().unwrap_or(json!(0)), "x": x, "y": y, "tab": "color"})), + // Brush Options › Key Color eyedropper: update the open dialog, do not replace it. + "brushKeyColor" => { + if let Some(c) = p.get("color") { + super::brush_art_options::apply_key_color_sample(app, c); + } + return; + } // Double-clicking a width point with the Width tool: Width Point Edit. super::width_point::KIND => { if let Err(e) = super::width_point::open(app, &p) { diff --git a/crates/ui-egui/src/i18n/bg.tsv b/crates/ui-egui/src/i18n/bg.tsv index d33d4c3c2..da83725ec 100644 --- a/crates/ui-egui/src/i18n/bg.tsv +++ b/crates/ui-egui/src/i18n/bg.tsv @@ -1033,6 +1033,7 @@ Eyedropper Picks Up: Пипетата взема: Eyedropper Tool Инструмент „Пипета“ Eyedropper: click the art to sample the stop's colour Пипета: щракнете върху графиката, за да вземете мостра от цвета на стъпката + Eyedropper: click the art to sample the key color Пипета: щракнете върху графиката, за да вземете мостра от основния цвят Favorites Любими Feather… Раздробяване… Feet Футове diff --git a/crates/ui-egui/src/i18n/cs.tsv b/crates/ui-egui/src/i18n/cs.tsv index 38e940602..cff1140a4 100644 --- a/crates/ui-egui/src/i18n/cs.tsv +++ b/crates/ui-egui/src/i18n/cs.tsv @@ -1494,6 +1494,7 @@ lighting Light Světlo Edit the selected point's colour in the Color panel Upravit barvu vybraného bodu v panelu Barva Edit the stop Upravit zarážku Eyedropper: click the art to sample the stop's colour Kapátko: kliknutím na kresbu naberete barvu zarážky + Eyedropper: click the art to sample the key color Kapátko: kliknutím na kresbu naberete klíčovou barvu Gradient across stroke Přechod napříč tahem Gradient along stroke Přechod podél tahu Gradient Fill: click to apply, drag onto art Přechodová výplň: kliknutím použijete, přetáhněte na kresbu diff --git a/crates/ui-egui/src/i18n/da.tsv b/crates/ui-egui/src/i18n/da.tsv index c3ffbf418..c9b7a849a 100644 --- a/crates/ui-egui/src/i18n/da.tsv +++ b/crates/ui-egui/src/i18n/da.tsv @@ -1411,6 +1411,7 @@ lighting Light Lys Edit the selected point's colour in the Color panel Redigér det markerede punkts farve i farvepanelet Edit the stop Redigér stoppet Eyedropper: click the art to sample the stop's colour Pipette: klik på grafikken for at prøvetage stoppets farve + Eyedropper: click the art to sample the key color Pipette: klik på grafikken for at prøvetage nøglefarven Gradient across stroke Gradient på tværs af konturen Gradient along stroke Gradient langs konturen Gradient Fill: click to apply, drag onto art Gradientfyld: klik for at anvende, træk hen over grafikken diff --git a/crates/ui-egui/src/i18n/de.tsv b/crates/ui-egui/src/i18n/de.tsv index be5b88971..8930eee99 100644 --- a/crates/ui-egui/src/i18n/de.tsv +++ b/crates/ui-egui/src/i18n/de.tsv @@ -1037,6 +1037,7 @@ Eyedropper Picks Up: Pipette nimmt auf: Eyedropper Tool Pipette-Werkzeug Eyedropper: click the art to sample the stop's colour Pipette: Klicken Sie auf die Grafik, um die Farbe für den Farbstopp aufzunehmen + Eyedropper: click the art to sample the key color Pipette: Klicken Sie auf die Grafik, um die Hauptfarbe aufzunehmen Favorites Favoriten Feather… Weiche Kante… Feet Fuß diff --git a/crates/ui-egui/src/i18n/el.tsv b/crates/ui-egui/src/i18n/el.tsv index 6a62721bc..ebe501b81 100644 --- a/crates/ui-egui/src/i18n/el.tsv +++ b/crates/ui-egui/src/i18n/el.tsv @@ -999,6 +999,7 @@ Eyedropper Picks Up: Το σταγονόμετρο λαμβάνει: Eyedropper Tool Σταγονόμετρο (Eyedropper Tool) Eyedropper: click the art to sample the stop's colour Σταγονόμετρο: κλικ στα γραφικά για δειγματοληψία χρώματος σημείου διακοπής + Eyedropper: click the art to sample the key color Σταγονόμετρο: κλικ στα γραφικά για δειγματοληψία βασικού χρώματος Favorites Αγαπημένα Feather… Απαλό περίγραμμα… Feet Πόδια diff --git a/crates/ui-egui/src/i18n/es.tsv b/crates/ui-egui/src/i18n/es.tsv index ea6d88348..838c502b9 100644 --- a/crates/ui-egui/src/i18n/es.tsv +++ b/crates/ui-egui/src/i18n/es.tsv @@ -1053,6 +1053,7 @@ Eyedropper Picks Up: El cuentagotas toma: Eyedropper Tool Herramienta Cuentagotas Eyedropper: click the art to sample the stop's colour Cuentagotas: haz clic en la ilustración para tomar el color de la parada + Eyedropper: click the art to sample the key color Cuentagotas: haz clic en la ilustración para tomar el color clave Favorites Favoritos Feather… Desvanecer… Feet Pies diff --git a/crates/ui-egui/src/i18n/fi.tsv b/crates/ui-egui/src/i18n/fi.tsv index 2a4ba6ba0..622cff83a 100644 --- a/crates/ui-egui/src/i18n/fi.tsv +++ b/crates/ui-egui/src/i18n/fi.tsv @@ -1468,6 +1468,7 @@ lighting Light Valo Edit the selected point's colour in the Color panel Muokkaa valitun pisteen väriä Väri-paneelissa Edit the stop Muokkaa väripistettä Eyedropper: click the art to sample the stop's colour Pipetti: ota väripisteen väri näytteeksi napsauttamalla kuvitusta + Eyedropper: click the art to sample the key color Pipetti: ota avainväri näytteeksi napsauttamalla kuvitusta Gradient across stroke Liukuväri viivan poikki Gradient along stroke Liukuväri viivaa pitkin Gradient Fill: click to apply, drag onto art Liukuväritäyttö: käytä napsauttamalla, vedä kuvituksen päälle diff --git a/crates/ui-egui/src/i18n/fr.tsv b/crates/ui-egui/src/i18n/fr.tsv index e0c557dd4..e711a5810 100644 --- a/crates/ui-egui/src/i18n/fr.tsv +++ b/crates/ui-egui/src/i18n/fr.tsv @@ -1053,6 +1053,7 @@ Eyedropper Picks Up: La pipette prélève : Eyedropper Tool Outil Pipette Eyedropper: click the art to sample the stop's colour Pipette : cliquez sur l’illustration pour prélever la couleur de l’étape de dégradé + Eyedropper: click the art to sample the key color Pipette : cliquez sur l’illustration pour prélever la couleur clé Favorites Favoris Feather… Contour progressif… Feet Pieds diff --git a/crates/ui-egui/src/i18n/hu.tsv b/crates/ui-egui/src/i18n/hu.tsv index 654864d4e..bcc584e8e 100644 --- a/crates/ui-egui/src/i18n/hu.tsv +++ b/crates/ui-egui/src/i18n/hu.tsv @@ -1342,6 +1342,7 @@ Eyedropper Picks Up: A pipetta felveszi: Eyedropper Tool Pipetta Eyedropper: click the art to sample the stop's colour Pipetta: kattints a grafikára a pont színének mintavételéhez + Eyedropper: click the art to sample the key color Pipetta: kattints a grafikára a kulcsszín mintavételéhez Farsi Perzsa Favorites Kedvencek Feather Tollazat diff --git a/crates/ui-egui/src/i18n/id.tsv b/crates/ui-egui/src/i18n/id.tsv index e46790e49..43f87bafd 100644 --- a/crates/ui-egui/src/i18n/id.tsv +++ b/crates/ui-egui/src/i18n/id.tsv @@ -1411,6 +1411,7 @@ lighting Light Cahaya Edit the selected point's colour in the Color panel Edit warna titik terpilih di panel Warna Edit the stop Edit stop Eyedropper: click the art to sample the stop's colour Pipet: klik karya seni untuk mengambil sampel warna stop + Eyedropper: click the art to sample the key color Pipet: klik karya seni untuk mengambil sampel warna kunci Gradient across stroke Gradien melintasi stroke Gradient along stroke Gradien sepanjang stroke Gradient Fill: click to apply, drag onto art Isian gradien: klik untuk menerapkan, seret ke karya seni diff --git a/crates/ui-egui/src/i18n/it.tsv b/crates/ui-egui/src/i18n/it.tsv index d654dfab5..1185cb1f6 100644 --- a/crates/ui-egui/src/i18n/it.tsv +++ b/crates/ui-egui/src/i18n/it.tsv @@ -1053,6 +1053,7 @@ Eyedropper Picks Up: Il contagocce preleva: Eyedropper Tool Strumento Contagocce Eyedropper: click the art to sample the stop's colour Contagocce: fai clic sulla grafica per campionare il colore del cursore + Eyedropper: click the art to sample the key color Contagocce: fai clic sulla grafica per campionare il colore chiave Favorites Preferiti Feather… Sfuma bordi… Feet Piedi diff --git a/crates/ui-egui/src/i18n/ja.tsv b/crates/ui-egui/src/i18n/ja.tsv index 3a40ad331..7df3e91c5 100644 --- a/crates/ui-egui/src/i18n/ja.tsv +++ b/crates/ui-egui/src/i18n/ja.tsv @@ -1468,6 +1468,7 @@ Eyedropper Picks Up: スポイトの抽出: Eyedropper Tool スポイトツール Eyedropper: click the art to sample the stop's colour スポイト: アートをクリックして分岐点のカラーをサンプル + Eyedropper: click the art to sample the key color スポイト: アートをクリックしてキーカラーをサンプル Feet フィート Feet & Inches フィート・インチ Fewer Elements 要素を減らす diff --git a/crates/ui-egui/src/i18n/ka.tsv b/crates/ui-egui/src/i18n/ka.tsv index 41c86cb43..d61e5ddf4 100644 --- a/crates/ui-egui/src/i18n/ka.tsv +++ b/crates/ui-egui/src/i18n/ka.tsv @@ -1326,6 +1326,7 @@ lighting Light სინათლე Edit the selected point's colour in the Color panel მონიშნული წერტილის ფერის რედაქტირება ფერის პანელში Edit the stop გადასვლის წერტილის რედაქტირება Eyedropper: click the art to sample the stop's colour პიპეტი: დაწკაპეთ ნახატზე გადასვლის წერტილის ფერის ასაღებად + Eyedropper: click the art to sample the key color პიპეტი: დაწკაპეთ ნახატზე საკვანძო ფერის ასაღებად Gradient across stroke გრადიენტი კონტურის განივად Gradient along stroke გრადიენტი კონტურის სიგრძეზე Gradient Fill: click to apply, drag onto art გრადიენტული შევსება: დაწკაპეთ გამოსაყენებლად, ჩაავლეთ ნახატზე diff --git a/crates/ui-egui/src/i18n/ko.tsv b/crates/ui-egui/src/i18n/ko.tsv index cf336f39a..dc5249098 100644 --- a/crates/ui-egui/src/i18n/ko.tsv +++ b/crates/ui-egui/src/i18n/ko.tsv @@ -1463,6 +1463,7 @@ Eyedropper Picks Up: 스포이드 추출 대상: Eyedropper Tool 스포이드 도구 Eyedropper: click the art to sample the stop's colour 스포이드: 아트웍을 클릭해 정지점의 색상 추출 + Eyedropper: click the art to sample the key color 스포이드: 아트웍을 클릭해 키 색상 추출 Feet 피트 Feet & Inches 피트 및 인치 Fewer Elements 요소 줄이기 diff --git a/crates/ui-egui/src/i18n/nl.tsv b/crates/ui-egui/src/i18n/nl.tsv index e0d559649..5e538538b 100644 --- a/crates/ui-egui/src/i18n/nl.tsv +++ b/crates/ui-egui/src/i18n/nl.tsv @@ -1425,6 +1425,7 @@ lighting Light Licht Edit the selected point's colour in the Color panel Bewerk de kleur van het geselecteerde punt in het Kleur-paneel Edit the stop Stoppunt bewerken Eyedropper: click the art to sample the stop's colour Pipet: klik op de illustratie om de kleur van het stoppunt over te nemen + Eyedropper: click the art to sample the key color Pipet: klik op de illustratie om de sleutelkleur over te nemen Gradient across stroke Verloop over de lijn Gradient along stroke Verloop langs de lijn Gradient Fill: click to apply, drag onto art Verloopvulling: klik om toe te passen, sleep naar de illustratie diff --git a/crates/ui-egui/src/i18n/pl.tsv b/crates/ui-egui/src/i18n/pl.tsv index a6e5824b3..616eac9b9 100644 --- a/crates/ui-egui/src/i18n/pl.tsv +++ b/crates/ui-egui/src/i18n/pl.tsv @@ -1408,6 +1408,7 @@ lighting Light Światło Edit the selected point's colour in the Color panel Edytuj kolor zaznaczonego punktu w panelu Kolor Edit the stop Edytuj punkt koloru Eyedropper: click the art to sample the stop's colour Kroplomierz: kliknij kompozycję, aby pobrać kolor punktu + Eyedropper: click the art to sample the key color Kroplomierz: kliknij kompozycję, aby pobrać kolor kluczowy Gradient across stroke Gradient w poprzek obrysu Gradient along stroke Gradient wzdłuż obrysu Gradient Fill: click to apply, drag onto art Wypełnienie gradientem: kliknij, aby zastosować, przeciągnij na kompozycję diff --git a/crates/ui-egui/src/i18n/pt-br.tsv b/crates/ui-egui/src/i18n/pt-br.tsv index 117b541a1..6de4d62fa 100644 --- a/crates/ui-egui/src/i18n/pt-br.tsv +++ b/crates/ui-egui/src/i18n/pt-br.tsv @@ -938,6 +938,7 @@ Eyedropper Picks Up: O Conta-gotas Capta: Eyedropper Tool Ferramenta Conta-gotas Eyedropper: click the art to sample the stop's colour Conta-gotas: clique na arte para colher a cor da parada + Eyedropper: click the art to sample the key color Conta-gotas: clique na arte para colher a cor-chave Feather… Penugem… Feet Pés Feet & Inches Pés e Polegadas diff --git a/crates/ui-egui/src/i18n/ru.tsv b/crates/ui-egui/src/i18n/ru.tsv index 72ae9a1a4..be6378557 100644 --- a/crates/ui-egui/src/i18n/ru.tsv +++ b/crates/ui-egui/src/i18n/ru.tsv @@ -1051,6 +1051,7 @@ Eyedropper Picks Up: Пипетка берёт: Eyedropper Tool Инструмент «Пипетка» Eyedropper: click the art to sample the stop's colour Пипетка: щёлкните рисунок, чтобы взять цвет точки перехода + Eyedropper: click the art to sample the key color Пипетка: щёлкните рисунок, чтобы взять ключевой цвет Favorites Избранное Feather… Растушёвка… Feet Футы diff --git a/crates/ui-egui/src/i18n/sv.tsv b/crates/ui-egui/src/i18n/sv.tsv index 41feec1d6..4550960ee 100644 --- a/crates/ui-egui/src/i18n/sv.tsv +++ b/crates/ui-egui/src/i18n/sv.tsv @@ -1035,6 +1035,7 @@ Eyedropper Picks Up: Pipetten hämtar: Eyedropper Tool Pipettverktyg Eyedropper: click the art to sample the stop's colour Pipett: klicka på grafiken för att hämta stoppets färg + Eyedropper: click the art to sample the key color Pipett: klicka på grafiken för att hämta nyckelfärgen Favorites Favoriter Feather… Fjädring… Feet Fot diff --git a/crates/ui-egui/src/i18n/uk.tsv b/crates/ui-egui/src/i18n/uk.tsv index 8a2632faf..71cd4d8de 100644 --- a/crates/ui-egui/src/i18n/uk.tsv +++ b/crates/ui-egui/src/i18n/uk.tsv @@ -1047,6 +1047,7 @@ Eyedropper Picks Up: Піпетка бере: Eyedropper Tool Інструмент «Піпетка» Eyedropper: click the art to sample the stop's colour Піпетка: натисніть на малюнок, щоб взяти колір точки переходу + Eyedropper: click the art to sample the key color Піпетка: натисніть на малюнок, щоб взяти ключовий колір Favorites Вибране Feather… Розтушування… Feet Фути diff --git a/crates/ui-egui/src/i18n/vi.tsv b/crates/ui-egui/src/i18n/vi.tsv index 0b16b5910..81451af54 100644 --- a/crates/ui-egui/src/i18n/vi.tsv +++ b/crates/ui-egui/src/i18n/vi.tsv @@ -1220,6 +1220,7 @@ Eyedropper Picks Up: Ống hút màu lấy mẫu: Eyedropper Tool Công cụ Ống hút màu Eyedropper: click the art to sample the stop's colour Ống hút màu: bấm vào tác phẩm để lấy mẫu màu điểm dừng + Eyedropper: click the art to sample the key color Ống hút màu: bấm vào tác phẩm để lấy mẫu màu chủ Farsi Farsi Favorites Yêu thích Feather… Làm mờ dần… diff --git a/crates/ui-egui/src/i18n/zh-hans.tsv b/crates/ui-egui/src/i18n/zh-hans.tsv index 1cfe855d8..5bd8d1d06 100644 --- a/crates/ui-egui/src/i18n/zh-hans.tsv +++ b/crates/ui-egui/src/i18n/zh-hans.tsv @@ -1002,6 +1002,7 @@ Eyedropper Picks Up: 吸管拾取: Eyedropper Tool 吸管工具 Eyedropper: click the art to sample the stop's colour 吸管:点击图稿以取样色标的颜色 + Eyedropper: click the art to sample the key color 吸管:点击图稿以取样主色 Feather… 羽化… Feet 英尺 Feet & Inches 英尺和英寸 diff --git a/crates/ui-egui/src/i18n/zh-hant.tsv b/crates/ui-egui/src/i18n/zh-hant.tsv index 86b007de8..4b6af3426 100644 --- a/crates/ui-egui/src/i18n/zh-hant.tsv +++ b/crates/ui-egui/src/i18n/zh-hant.tsv @@ -1024,6 +1024,7 @@ Eyedropper Picks Up: 滴管擷取: Eyedropper Tool 滴管工具 Eyedropper: click the art to sample the stop's colour 滴管:點擊圖稿以取樣色標的顏色 + Eyedropper: click the art to sample the key color 滴管:點擊圖稿以取樣主要顏色 Favorites 我的最愛 Feather… 羽化… Feet 英呎 diff --git a/crates/ui-egui/src/panels/gradient.rs b/crates/ui-egui/src/panels/gradient.rs index e7c407c4b..909a292b2 100644 --- a/crates/ui-egui/src/panels/gradient.rs +++ b/crates/ui-egui/src/panels/gradient.rs @@ -1119,6 +1119,6 @@ mod tests { let texts = Panel::new().frame(&mut app, vec![], Modifiers::NONE); assert!(texts.iter().any(|(t, _)| t == "#FFFFFF"), "the stop's colour row: {texts:?}"); stop_eyedropper(&mut app); - assert_eq!((app.session.tool_id(), app.session.tool_options()), ("eyedropper", json!({"stop": "gradient"}))); + assert_eq!((app.session.tool_id(), app.session.tool_options()), ("eyedropper", json!({"stop": "gradient", "brushKeyColor": false}))); } } diff --git a/docs/gaps.md b/docs/gaps.md index 8cabe62bc..10204c2f4 100644 --- a/docs/gaps.md +++ b/docs/gaps.md @@ -275,9 +275,10 @@ from G14 and the budget run of G15: **~170–270 h** one agent, ~50–80 h wall Export Type (Graphic or Movie Clip; default Movie Clip; `symbol.new` / `symbol.options` / Symbols panel; canvas placement unchanged; Animate / Flash handoff metadata); Symbol Options › Enable Guides for 9-Slice Scaling (four guides as fractions of the symbol size, `nineSlice` / `nineSliceGuides` on `symbol.new` / - `symbol.options`, stored per symbol; handoff metadata, not drawn on the canvas, #2342). + `symbol.options`, stored per symbol; handoff metadata, not drawn on the canvas, #2342); Brush Options › Key + Color eyedropper for scatter, art and pattern brushes (Hue Shift colorization; samples canvas art). - **Missing:** the Art brush's Overlap, auto-generated Pattern brush corners, new tile art in Pattern Brush - Options, the Key Color eyedropper; original brush, symbol and graphic-style libraries generated in code (never + Options; original brush, symbol and graphic-style libraries generated in code (never Adobe's); dynamic symbols; Start Global Edit; drawing the 9-slice guides on the canvas in symbol edit mode and scaling by them. - **Estimate:** 15–26 h.