M5: Make Properties Default in Comment Properties (#2031)

* M5: Make Properties Default in Comment Properties

Acrobat's Comment Properties dialog has a Make Properties Default box
beside Locked. Ticking it and pressing OK makes the edited colour,
opacity, line width (and, for shapes, fill) the default for new comments
of that kind, e.g. new strikethroughs take the chosen colour.

The dialog applies the edited look, so the box also works when only the
default changes. Opacity and width go through the clamping setters: the
dialog allows 0% opacity, which would make an invisible default.

The box is translated in all 21 catalogues and the comment.default-properties
parity entry names the new test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Refresh catalog hashes after merging main

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Brandon Thomas <echelon@gmail.com>
This commit is contained in:
DCM4711
2026-10-15 02:59:01 -04:00
committed by GitHub
co-authored by Claude Opus 5.5 Brandon Thomas
parent 0d864e2e31
commit e08f87f138
27 changed files with 128 additions and 31 deletions
+22 -22
View File
@@ -7,7 +7,7 @@ licence = "MIT OR Apache-2.0"
licence_file = "LICENSE-MIT"
kind = "translation"
usage = "Greek UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs"
sha256 = "119708b98e105edcd2889739099ea3517d7bbee83c481f41f92274b32c005614"
sha256 = "393902c1a2e21346b5a328a1a8792bfc361cb0872a465901209e36d78ca45b79"
# ATTRIBUTION.toml: one entry per asset (AGENTS.md §1). The source of truth for provenance and licences.
# ATTRIBUTION.md is generated from this file: `cargo xtask assets --write`. Checked by `cargo xtask assets` (part of `xtask ci`).
@@ -30,7 +30,7 @@ licence = "MIT OR Apache-2.0"
licence_file = "LICENSE-MIT"
kind = "translation"
usage = "Simplified Chinese UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs"
sha256 = "ae66a6f5a12265e3721dc72b9463f7508191e3a38bd2580079e26c9909adab54"
sha256 = "d90200f734b322b9987cae89a1e6e7d98c10fd7071047d9d6538d3e58e0312db"
[[asset]]
path = "crates/ui-egui/src/i18n/zh-hant.tsv"
@@ -41,7 +41,7 @@ licence = "MIT OR Apache-2.0"
licence_file = "LICENSE-MIT"
kind = "translation"
usage = "Traditional Chinese UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs"
sha256 = "003d784c749c1134d31ff287c107818e8676ee6317531d513580249c4f22f6a6"
sha256 = "3b24582f96c26d91afb592a787c20115e5adeacf5672cf2d3fe265ec25e012bf"
[[asset]]
path = "crates/ui-egui/src/i18n/cs.tsv"
@@ -52,7 +52,7 @@ licence = "MIT OR Apache-2.0"
licence_file = "LICENSE-MIT"
kind = "translation"
usage = "Czech UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs"
sha256 = "d864ced685fb6796af01ba286b8ef8987a763c811e18a6cdc6b056c7aeef90dc"
sha256 = "d3cd4e5358351adb254f4969a3c2d579c43a9b1c140ee2501a28bf09bd63b677"
[[asset]]
path = "crates/ui-egui/src/i18n/pt-br.tsv"
@@ -63,7 +63,7 @@ licence = "MIT OR Apache-2.0"
licence_file = "LICENSE-MIT"
kind = "translation"
usage = "Brazilian Portuguese UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs"
sha256 = "fe2cb9a64b0a484015919a7dd792367157df813451ad6d0a94cd958f1e020855"
sha256 = "74c82a97934c5423d1fe6c56a4cc23ed821bb1abacfff258c2a64414aa13fb29"
[[asset]]
path = "crates/ui-egui/src/i18n/es.tsv"
@@ -74,7 +74,7 @@ licence = "MIT OR Apache-2.0"
licence_file = "LICENSE-MIT"
kind = "translation"
usage = "Spanish UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs"
sha256 = "249bc15bf1dc579a6f90dcd895b0f6b50f44af4fc46ea99e5b00bfff08434269"
sha256 = "46e7ca20f0a6851c77fa73f3d9401ea9e9141f592d03be906328342924907310"
[[asset]]
path = "crates/ui-egui/src/i18n/fr.tsv"
@@ -85,7 +85,7 @@ licence = "MIT OR Apache-2.0"
licence_file = "LICENSE-MIT"
kind = "translation"
usage = "French UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs"
sha256 = "d94c9effca419f721ab2c6c40018e5f0d6b51f744cc915c924b97442b17eb6e9"
sha256 = "5f51fd699f88c01828ce6386ac92814a16c32a1815ad3b2fb745e231376a6db2"
[[asset]]
path = "crates/ui-egui/src/i18n/de.tsv"
@@ -96,7 +96,7 @@ licence = "MIT OR Apache-2.0"
licence_file = "LICENSE-MIT"
kind = "translation"
usage = "German UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs"
sha256 = "63d36be7c0df64eeb7dc0ff62923d41fa7fa337fc5e442e67b1ee141a1c5e382"
sha256 = "3a840c78fcf5ea19d0e683c78874ebc4ed46025595c84eb12cea4713f7d986d3"
[[asset]]
path = "crates/ui-egui/src/i18n/te.tsv"
@@ -107,7 +107,7 @@ licence = "MIT OR Apache-2.0"
licence_file = "LICENSE-MIT"
kind = "translation"
usage = "Telugu UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs"
sha256 = "ec20cf580a10a1c8d6d5a70fd94a364cc4d2bacfc5230555967db272ccd9b22d"
sha256 = "9e7866f38b811211b5b145052c11018c26d0e0d6b3e5edad93a9c2d7fba008a7"
[[asset]]
path = "crates/ui-egui/src/i18n/it.tsv"
@@ -118,7 +118,7 @@ licence = "MIT OR Apache-2.0"
licence_file = "LICENSE-MIT"
kind = "translation"
usage = "Italian UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs"
sha256 = "8c8486b06c8e77497ff1589c42566b9350c7a0a0f378c6762a65b80f34b81841"
sha256 = "0d46bc90f3fd0faef2542b5958ddb931cfae56bca5b9ce6e69e805dfee50505a"
[[asset]]
path = "crates/ui-egui/src/i18n/pl.tsv"
@@ -129,7 +129,7 @@ licence = "MIT OR Apache-2.0"
licence_file = "LICENSE-MIT"
kind = "translation"
usage = "Polish UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs"
sha256 = "6aee8779c09c9b5b24a001d4a8f14d181a62a868db81920aa4614a15ca3f21ed"
sha256 = "bfa4d801835202166874f717d9bda7c14731570bdc63b3e4c58f5dc93be02998"
[[asset]]
path = "crates/ui-egui/src/i18n/ru.tsv"
@@ -140,7 +140,7 @@ licence = "MIT OR Apache-2.0"
licence_file = "LICENSE-MIT"
kind = "translation"
usage = "Russian UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs"
sha256 = "35ad5905515e25b7dd4b31320f58bf54481e2c6b868e3e0a3ad1090558675ce3"
sha256 = "24092581310895dca1f6ed2d88f582749cc776aedb13ae7d5d4dafd67efc1bad"
[[asset]]
path = "crates/ui-egui/src/i18n/hu.tsv"
@@ -151,7 +151,7 @@ licence = "MIT OR Apache-2.0"
licence_file = "LICENSE-MIT"
kind = "translation"
usage = "Hungarian UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs"
sha256 = "369603fb7ff64bd576de6dad7077b41794f933bf2633fcd313674e2aa9dbf989"
sha256 = "6fb3b98133d9af06d27dce35a1c0f370c6d16702b82598ffaa2909b05e9e9be4"
[[asset]]
path = "crates/ui-egui/src/i18n/bg.tsv"
@@ -162,7 +162,7 @@ licence = "MIT OR Apache-2.0"
licence_file = "LICENSE-MIT"
kind = "translation"
usage = "Bulgarian UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs"
sha256 = "6031098e20e488163969e4f403105a095581fd71b53dd16f063ecb71f93aba00"
sha256 = "784f6dd4534dc842fd18e0c0af790af92e5caf32732d0ef85f88a094f0591a48"
[[asset]]
path = "crates/ui-egui/src/i18n/kk.tsv"
@@ -173,7 +173,7 @@ licence = "MIT OR Apache-2.0"
licence_file = "LICENSE-MIT"
kind = "translation"
usage = "Kazakh UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs"
sha256 = "61d6bde7f2e3aac19449fe8b980d42d4b8a65536cac23ebae1553f81a1bb0372"
sha256 = "2fd1b542c391537423a5b36a0617886fc4ca8abc8aa595cc4bd700eb5600760f"
[[asset]]
path = "crates/ui-egui/src/i18n/ja.tsv"
@@ -184,7 +184,7 @@ licence = "MIT OR Apache-2.0"
licence_file = "LICENSE-MIT"
kind = "translation"
usage = "Japanese UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs"
sha256 = "12003f40f6ce0bda46c7ead8de8e9c054e4ea605ce93d7fe0833e9e99d293bf9"
sha256 = "9c3ae4e8692e9715f6a1cfb5eb0e7ef02d03d222833ca9cf11e286f222e8f024"
[[asset]]
path = "crates/ui-egui/src/i18n/uk.tsv"
@@ -195,7 +195,7 @@ licence = "MIT OR Apache-2.0"
licence_file = "LICENSE-MIT"
kind = "translation"
usage = "Ukrainian UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs"
sha256 = "f52e62e7bf4a2c78a21919bed90c81c9feb65feac1a615142f9f6d9f429fde54"
sha256 = "6a44916924fd9fed55e97e9e9aed10299bd1c2cdd3213530afc328fcc3382b8a"
[[asset]]
path = "crates/ui-egui/src/i18n/ar.tsv"
@@ -206,7 +206,7 @@ licence = "MIT OR Apache-2.0"
licence_file = "LICENSE-MIT"
kind = "translation"
usage = "Arabic UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs"
sha256 = "5292e88884e380090d191597e254f1f135e1a569d4336432ae5bb2a0b5233d11"
sha256 = "623bf25e7f0dc783e497d2744ac7fa17437ef3cc9c65a25b91c82321700ae037"
[[asset]]
path = "crates/ui-egui/src/i18n/tr.tsv"
@@ -217,7 +217,7 @@ licence = "MIT OR Apache-2.0"
licence_file = "LICENSE-MIT"
kind = "translation"
usage = "Turkish UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs"
sha256 = "138d6e18c5581205b61ca647eedca8ddc65f6eaed9ed8f6cad6e4fa788f31ddf"
sha256 = "73b8af9831358bc6ea9124fd7a05b725cf80c89709348ac07680646bf11378d7"
[[asset]]
path = "crates/ui-egui/src/i18n/lt.tsv"
@@ -228,7 +228,7 @@ licence = "MIT OR Apache-2.0"
licence_file = "LICENSE-MIT"
kind = "translation"
usage = "Lithuanian UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs"
sha256 = "fdc8591ecf8e4805c8bafef88810185676177a85bced0a47d4cc7c065e634267"
sha256 = "b9edcc284143606785999408fb3c2e6ed61bd9d973225b6a37fdbbfbd226093f"
[[asset]]
@@ -240,7 +240,7 @@ licence = "MIT OR Apache-2.0"
licence_file = "LICENSE-MIT"
kind = "translation"
usage = "Vietnamese UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs"
sha256 = "f9b0694f684bea95e20bd33bef33fedfd92e28c62f2c140193c89e0ed7a18b97"
sha256 = "8f4d695f2a20a0a8470181c343b2a832d7cd05a7645aa07fe5e4a94299a84b82"
[[asset]]
path = "assets/icons/accessibility.svg"
@@ -3363,7 +3363,7 @@ licence = "MIT OR Apache-2.0"
licence_file = "LICENSE-MIT"
kind = "translation"
usage = "Slovene UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs"
sha256 = "af96cf439b9ea1c7e1d9177f909a14d2c0513572b6a579a5350d272fb70c53b2"
sha256 = "d5b66bf35341a9ce1d66204a99cfc5679c66c26f7afb0bb394d87335783d229d"
[[asset]]
path = "vendor/vello_common/assets/probe.png"
+30 -7
View File
@@ -23,6 +23,9 @@ pub struct PropsDraft {
pub tab: PropsTab,
pub original: CommentProps,
pub edited: CommentProps,
/// Acrobat's Make Properties Default box: on OK, new comments of this kind take the edited
/// colour, opacity and line width too.
pub make_default: bool,
}
const ICONS: [NoteIcon; 7] =
@@ -87,23 +90,31 @@ impl PdfCraftApp {
/// Make Current Properties Default: new comments of this kind take this one's colour,
/// opacity and line width.
pub fn make_comment_default(&mut self, page: usize, index: usize) {
let Some(p) = self.active_ids().and_then(|(_, id)| self.session.get(id)).and_then(|doc| doc.comment_props(page, index)) else { return };
self.make_props_default(page, index, &p);
}
/// New comments of the kind at `(page, index)` take the look in `p`: its colour, opacity,
/// line width and (for shapes) fill. `p` may be a Comment Properties draft not applied yet.
pub fn make_props_default(&mut self, page: usize, index: usize, p: &CommentProps) {
let Some((_, id)) = self.active_ids() else { return };
let Some(doc) = self.session.get(id) else { return };
let Some(a) = doc.info.annotations.iter().find(|a| a.page == page && a.index == index && a.in_reply_to.is_none()) else { return };
let Some(p) = doc.comment_props(page, index) else { return };
let Some(tool) = crate::comments::tool_for_default(a, p.endings.as_deref()) else { return };
let mut style = self.comment_prefs.style(tool);
if let Some(c) = p.color {
style.color = c;
}
style.opacity = p.opacity;
if let Some(w) = p.width {
style.width = w;
}
if p.fillable && tool.has_fill() {
style.fill = p.fill;
}
self.comment_prefs.set_style(tool, style);
// Opacity and width go through the clamping setters: the dialog allows 0% opacity, and a
// default that draws invisible comments can't be found again.
self.comment_prefs.set_opacity(tool, p.opacity);
if let Some(w) = p.width {
self.comment_prefs.set_width(tool, w);
}
self.notify_fmt("New {tool} comments will look like this one", &[("tool", &crate::i18n::in_sentence(tl!(tool.label())))]);
}
@@ -111,7 +122,7 @@ impl PdfCraftApp {
pub fn open_comment_props(&mut self, page: usize, index: usize) {
let Some((_, id)) = self.active_ids() else { return };
let Some(p) = self.session.get(id).and_then(|d| d.comment_props(page, index)) else { return };
self.comment_props = Some(PropsDraft { page, index, tab: PropsTab::Appearance, original: p.clone(), edited: p });
self.comment_props = Some(PropsDraft { page, index, tab: PropsTab::Appearance, original: p.clone(), edited: p, make_default: false });
self.dialog = Some(crate::Dialog::CommentProps);
}
}
@@ -168,6 +179,12 @@ pub(crate) fn body(ui: &mut egui::Ui, app: &mut PdfCraftApp, t: &Tokens) -> (boo
.collect()
})
.unwrap_or_default();
let default_tool = app.comment_props.as_ref().and_then(|d| {
let (_, id) = app.active_ids()?;
let doc = app.session.get(id)?;
let a = doc.info.annotations.iter().find(|a| a.page == d.page && a.index == d.index && a.in_reply_to.is_none())?;
crate::comments::tool_for_default(a, d.edited.endings.as_deref())
});
let Some(d) = app.comment_props.as_mut() else { return (false, true) };
let kind = tl!(crate::comments_panel::subtype_label(&d.edited.subtype)).to_string();
ui.label(egui::RichText::new(crate::i18n::fmt(tl!("{kind} Properties"), &[("kind", &kind)])).font(theme::semibold(18.0)));
@@ -270,7 +287,13 @@ pub(crate) fn body(ui: &mut egui::Ui, app: &mut PdfCraftApp, t: &Tokens) -> (boo
}
}
ui.add_space(12.0);
ui.add(widgets::checkbox(&mut d.edited.locked, tl!("Locked")));
ui.horizontal(|ui| {
ui.add(widgets::checkbox(&mut d.edited.locked, tl!("Locked")));
ui.add_space(16.0);
// Acrobat's box beside Locked. Only a comment whose look can change, made by a tool.
let defaultable = d.edited.restylable && default_tool.is_some();
ui.add_enabled(defaultable, widgets::checkbox(&mut d.make_default, tl!("Make Properties Default")));
});
let (mut apply, mut cancel) = (false, false);
ui.with_layout(Layout::right_to_left(Align::Center), |ui| {
if widgets::pill_button(ui, tl!("OK"), true).clicked() {
+4
View File
@@ -1339,6 +1339,10 @@ fn dialogs(app: &mut PdfCraftApp, ctx: &egui::Context) {
app.apply_edit(Edit::Batch { label: "Change comment properties".into(), edits });
}
}
// Make Properties Default: the look chosen here, even when it was already the comment's.
if d.make_default && d.edited.restylable {
app.make_props_default(d.page, d.index, &d.edited);
}
}
if export_now && let Dialog::Export(kind) = dialog {
app.start_export(kind);
+1
View File
@@ -1295,6 +1295,7 @@
Copy text نسخ النص
Properties… خصائص…
Make Current Properties Default جعل الخصائص الحالية افتراضية
Make Properties Default جعل الخصائص افتراضية
More options خيارات أخرى
Sort by فرز حسب
Author المؤلف
Can't render this file because it contains an unexpected character in line 6 and column 47.
+1
View File
@@ -1236,6 +1236,7 @@
Copy text Копирай текста
Properties… Свойства…
Make Current Properties Default Направи текущите свойства подразбиращи се
Make Properties Default Направи свойствата подразбиращи се
More options Още опции
Sort by Сортиране по
Author Автор
Can't render this file because it contains an unexpected character in line 8 and column 16.
+1
View File
@@ -1363,6 +1363,7 @@ key Space Mezerník
Copy text Kopírovat text
Properties… Vlastnosti…
Make Current Properties Default Nastavit aktuální vlastnosti jako výchozí
Make Properties Default Nastavit vlastnosti jako výchozí
More options Další možnosti
Sort by Seřadit podle
Author Autor
Can't render this file because it contains an unexpected character in line 6 and column 47.
+1
View File
@@ -1281,6 +1281,7 @@
Copy text Text kopieren
Properties… Eigenschaften…
Make Current Properties Default Als Standard festlegen
Make Properties Default Eigenschaften als Standard festlegen
More options Weitere Optionen
Sort by Sortieren nach
Author Verfasser
Can't render this file because it contains an unexpected character in line 6 and column 51.
+1
View File
@@ -852,6 +852,7 @@
Set status Ορισμός κατάστασης
Properties… Ιδιότητες…
Make Current Properties Default Ορισμός τρεχουσών ιδιοτήτων ως προεπιλογών
Make Properties Default Ορισμός ιδιοτήτων ως προεπιλογών
Colour Χρώμα
Show all comments Εμφάνιση όλων των σχολίων
Create PDF comment summary… Δημιουργία σύνοψης σχολίων σε PDF…
Can't render this file because it contains an unexpected character in line 475 and column 9.
+1
View File
@@ -1290,6 +1290,7 @@
Copy text Copiar texto
Properties… Propiedades…
Make Current Properties Default Usar las propiedades actuales como predeterminadas
Make Properties Default Usar las propiedades como predeterminadas
More options Más opciones
Sort by Ordenar por
Author Autor
Can't render this file because it contains an unexpected character in line 6 and column 60.
+1
View File
@@ -1276,6 +1276,7 @@
Copy text Copier le texte
Properties… Propriétés…
Make Current Properties Default Utiliser les propriétés actuelles par défaut
Make Properties Default Utiliser ces propriétés par défaut
More options Plus d'options
Sort by Trier par
Author Auteur
Can't render this file because it contains an unexpected character in line 6 and column 39.
+1
View File
@@ -1266,6 +1266,7 @@
Copy text Szöveg másolása
Properties… Tulajdonságok…
Make Current Properties Default A jelenlegi tulajdonságok legyenek az alapértelmezettek
Make Properties Default A tulajdonságok legyenek az alapértelmezettek
More options További beállítások
Sort by Rendezés szempontja
Author Szerző
Can't render this file because it contains an unexpected character in line 7 and column 44.
+1
View File
@@ -1291,6 +1291,7 @@
Copy text Copia testo
Properties… Proprietà…
Make Current Properties Default Imposta le proprietà correnti come predefinite
Make Properties Default Imposta le proprietà come predefinite
More options Altre opzioni
Sort by Ordina per
Author Autore
Can't render this file because it contains an unexpected character in line 6 and column 47.
+1
View File
@@ -1296,6 +1296,7 @@
Copy text テキストをコピー
Properties… プロパティ…
Make Current Properties Default 現在のプロパティを既定にする
Make Properties Default プロパティを既定にする
More options 詳細オプション
Sort by 並べ替え
Author 作成者
Can't render this file because it contains an unexpected character in line 6 and column 47.
+1
View File
@@ -1239,6 +1239,7 @@
Copy text Мәтінді көшіру
Properties… Сипаттар…
Make Current Properties Default Ағымдағы сипаттарды әдепкі етіп орнату
Make Properties Default Сипаттарды әдепкі етіп орнату
More options Қосымша параметрлер
Sort by Бойынша сұрыптау
Author Автор
Can't render this file because it contains an unexpected character in line 824 and column 9.
+1
View File
@@ -710,6 +710,7 @@
Low resolution Maža raiška
Magnification Didinimas
Make Current Properties Default Dabartines savybes nustatyti kaip numatytąsias
Make Properties Default Savybes nustatyti kaip numatytąsias
Margins Paraštės
Mark Page Range Pažymėti puslapių intervalą
Mark as comments Pažymėti kaip komentarus
Can't render this file because it contains an unexpected character in line 401 and column 9.
+1
View File
@@ -1279,6 +1279,7 @@
Copy text Kopiuj tekst
Properties… Właściwości…
Make Current Properties Default Ustaw bieżące właściwości jako domyślne
Make Properties Default Ustaw właściwości jako domyślne
More options Więcej opcji
Sort by Sortuj według
Author Autor
Can't render this file because it contains an unexpected character in line 6 and column 47.
+1
View File
@@ -1180,6 +1180,7 @@
Copy text Copiar texto
Properties… Propriedades…
Make Current Properties Default Tornar as propriedades atuais padrão
Make Properties Default Tornar as propriedades padrão
More options Mais opções
Sort by Classificar por
Author Autor
Can't render this file because it contains an unexpected character in line 9 and column 16.
+1
View File
@@ -1296,6 +1296,7 @@
Copy text Копировать текст
Properties… Свойства…
Make Current Properties Default Сделать текущие свойства по умолчанию
Make Properties Default Сделать свойства по умолчанию
More options Ещё
Sort by Сортировать по
Author Автор
Can't render this file because it contains an unexpected character in line 9 and column 16.
+1
View File
@@ -1051,6 +1051,7 @@
Low resolution Nizka ločljivost
Magnification Povečava
Make Current Properties Default Nastavi kot privzeto
Make Properties Default Lastnosti nastavi kot privzete
Make accessible Naredi dostopno
Make scans searchable, then make them smaller. Skenirane dokumente naredite iskalne, nato pa jih zmanjšajte.
Manage embedded index Upravljaj vdelani indeks
Can't render this file because it contains an unexpected character in line 9 and column 16.
+1
View File
@@ -1265,6 +1265,7 @@ comment menu Edit సవరించు
Copy text టెక్స్ట్‌ను కాపీ చేయి
Properties… లక్షణాలు…
Make Current Properties Default ప్రస్తుత లక్షణాలను డిఫాల్ట్‌గా చేయి
Make Properties Default లక్షణాలను డిఫాల్ట్‌గా చేయి
More options మరిన్ని ఎంపికలు
Sort by క్రమపరిచే విధానం
Author రచయిత
Can't render this file because it contains an unexpected character in line 13 and column 16.
+1
View File
@@ -1253,6 +1253,7 @@
Copy text Metni kopyala
Properties… Özellikler…
Make Current Properties Default Geçerli Özellikleri Varsayılan Yap
Make Properties Default Özellikleri Varsayılan Yap
More options Diğer seçenekler
Sort by Sırala
Author Yazar
Can't render this file because it contains an unexpected character in line 823 and column 9.
+1
View File
@@ -1293,6 +1293,7 @@
Copy text Копіювати текст
Properties… Властивості…
Make Current Properties Default Зробити поточні властивості типовими
Make Properties Default Зробити властивості типовими
More options Додаткові параметри
Sort by Сортувати за
Author Автор
Can't render this file because it contains an unexpected character in line 6 and column 47.
+1
View File
@@ -705,6 +705,7 @@ theme Appearance Giao diện
Low resolution Độ phân giải thấp
Magnification Độ phóng đại
Make Current Properties Default Đặt thuộc tính hiện tại làm mặc định
Make Properties Default Đặt thuộc tính làm mặc định
Margins Lề
Mark Page Range Đánh dấu phạm vi trang
Mark as comments Đánh dấu là bình luận
Can't render this file because it contains an unexpected character in line 487 and column 12.
+1
View File
@@ -1243,6 +1243,7 @@
Copy text 复制文本
Properties… 属性…
Make Current Properties Default 将当前属性设为默认
Make Properties Default 将属性设为默认
More options 更多选项
Sort by 排序方式
Author 作者
Can't render this file because it contains an unexpected character in line 9 and column 16.
+1
View File
@@ -1188,6 +1188,7 @@
Copy text 複製文字
Properties… 屬性…
Make Current Properties Default 將目前屬性設為預設
Make Properties Default 將屬性設為預設
More options 更多選項
Sort by 排序方式
Author 作者
Can't render this file because it contains an unexpected character in line 9 and column 16.
+48
View File
@@ -962,6 +962,54 @@ fn make_current_properties_default() {
assert_eq!(last.color, Some([0.0, 0.47, 0.84]));
}
/// Acrobat's Properties ▸ Make Properties Default: OK with the box ticked makes the edited look
/// the tool's default (here a strikethrough's colour); without it, only the comment changes.
#[test]
fn properties_dialog_makes_the_strikethrough_colour_default() {
use pdfcraft_ui_egui::comments::CommentTool;
let mut h = harness(|app| app.set_option("quick", "strikeout").unwrap());
let green = [0.18, 0.62, 0.36];
let blue = [0.0, 0.47, 0.84];
assert_ne!(h.state().comment_prefs.style(CommentTool::StrikeOut).color, green);
drag_pt(&mut h, (18.0, 155.0), (150.0, 155.0));
assert_eq!(comments(&h).iter().filter(|a| a.subtype == "StrikeOut").count(), 1);
// Without the box: the comment turns blue, the tool keeps its colour.
let before = h.state().comment_prefs.style(CommentTool::StrikeOut);
h.state_mut().open_comment_props(0, 0);
h.run_steps(2);
h.state_mut().comment_props.as_mut().expect("open").edited.color = Some(blue);
h.get_by_label("OK").click();
h.run_steps(3);
assert_eq!(h.state().comment_prefs.style(CommentTool::StrikeOut).color, before.color);
// With it: green, and a 0% opacity is clamped so the next strikethrough stays visible.
h.state_mut().open_comment_props(0, 0);
h.run_steps(2);
{
let d = h.state_mut().comment_props.as_mut().expect("open");
d.edited.color = Some(green);
d.edited.opacity = 0.0;
}
h.get_by_label("Make Properties Default").click();
h.run_steps(1);
assert!(h.state().comment_props.as_ref().is_some_and(|d| d.make_default));
h.get_by_label("OK").click();
h.run_steps(3);
let st = h.state().comment_prefs.style(CommentTool::StrikeOut);
assert_eq!((st.color, st.opacity), (green, 0.1));
let fresh = {
let mut fresh = PdfCraftApp::new();
fresh.restore(&h.state().persist());
fresh.comment_prefs.style(CommentTool::StrikeOut).color
};
assert_eq!(fresh, green, "the default persisted");
drag_pt(&mut h, (18.0, 155.0), (150.0, 155.0));
let c = comments(&h);
let made = c.iter().rfind(|a| a.subtype == "StrikeOut").and_then(|a| a.color).expect("a colougreen strikethrough");
assert!(made.iter().zip(green).all(|(m, r)| (f64::from(*m) - r).abs() < 0.01), "the next strikethrough is green: {made:?}");
}
/// #1302: making an arrow's properties the default updates the Arrow tool, not later plain lines.
#[test]
fn an_arrows_default_does_not_restyle_lines() {
+2 -2
View File
@@ -3901,8 +3901,8 @@ milestone = "M5"
status = "shipped"
commands = ["comment.list"]
tools = []
evidence = ["crates/ui-egui/tests/comments.rs::make_current_properties_default"]
notes = "colour, opacity and line width become the tool's defaults (canvas and Comments panel menus) and survive a restart: the per-tool styles are persisted with the settings and restored through their clamping setters (#340)"
evidence = ["crates/ui-egui/tests/comments.rs::make_current_properties_default", "crates/ui-egui/tests/comments.rs::properties_dialog_makes_the_strikethrough_colour_default"]
notes = "colour, opacity and line width become the tool's defaults (canvas and Comments panel menus, and Acrobat's Make Properties Default box in Comment Properties, applied on OK with the edited look) and survive a restart: the per-tool styles are persisted with the settings and restored through their clamping setters (#340)"
[[feature]]
id = "comment.author-identity"