Merge PR #1749: Preferences: always use my default zoom and page layout

Conflicts:
- ATTRIBUTION.toml: ours (sha256 lines only); hashes recomputed at the end of the track
This commit is contained in:
aiongg
2026-10-22 01:47:45 +00:00
27 changed files with 118 additions and 24 deletions
+1 -1
View File
@@ -7,7 +7,7 @@
//! `--page N --zoom 150 --layout single|continuous|two-up|two-page --continuous on|off --panel comments|bookmarks|pages|fields|layers|attachments|none
//! --theme light|dark|system --language auto|<code> --mode all|read|edit|convert|sign --tool <catalogue id> --left open|closed
//! --organize on --fields on --dialog properties|shortcuts|about --palette <query> --home on
//! --cover on|off --default-layout single|continuous|two-up|two-page --default-continuous on|off --default-zoom fit-width|fit-page|<percent>
//! --cover on|off --default-layout single|continuous|two-up|two-page --default-continuous on|off --default-zoom fit-width|fit-page|<percent> --always-default-view on|off
//! --combine-view grid|list --combine-zoom 60..200`
//!
//! `--new-window` opens a window of its own. Without it, on Windows, a launch that only names files
+1
View File
@@ -2332,6 +2332,7 @@ key Space مسافة
Printer paper and scaling may differ. Check driver settings. قد يختلف ورق الطابعة ومقياس الطباعة. تحقق من إعدادات برنامج التشغيل.
Drawing scale changes. Use Actual size for full-scale plans. يتغير مقياس الرسم. استخدم الحجم الفعلي لطباعة المخططات بمقياسها الأصلي.
Reload documents when their files change on disk إعادة تحميل المستندات عند تغيّر ملفاتها على القرص
Always use my default zoom and page layout استخدام التكبير وتخطيط الصفحة الافتراضيين دائمًا
This file changed on disk. Reload shows the new version and drops your unsaved changes; Save replaces it with this version. تغيّر هذا الملف على القرص. «إعادة التحميل» تعرض النسخة الجديدة وتُسقط تغييراتك غير المحفوظة؛ و«حفظ» يستبدلها بهذه النسخة.
Reload إعادة تحميل
Couldn't reload {name}: {e} تعذّرت إعادة تحميل {name}: {e}
Can't render this file because it contains an unexpected character in line 6 and column 47.
+1
View File
@@ -2274,6 +2274,7 @@ key Space Интервал
Printer paper and scaling may differ. Check driver settings. Хартията и мащабът на принтера може да се различават. Проверете настройките на драйвера.
Drawing scale changes. Use Actual size for full-scale plans. Мащабът на чертежа се променя. Използвайте Действителен размер за планове в оригинален мащаб.
Reload documents when their files change on disk Презареждай документите, когато файловете им се променят на диска
Always use my default zoom and page layout Винаги използвай моя мащаб и оформление на страниците по подразбиране
This file changed on disk. Reload shows the new version and drops your unsaved changes; Save replaces it with this version. Този файл беше променен на диска. „Презареждане“ показва новата версия и отхвърля незаписаните ви промени; „Запис“ я заменя с тази версия.
Reload Презареди
Couldn't reload {name}: {e} Неуспешно презареждане на {name}: {e}
Can't render this file because it contains an unexpected character in line 8 and column 16.
+1
View File
@@ -138,6 +138,7 @@
Used when a PDF doesn't ask for a layout or zoom. Continuous scrolling never snaps between pages. Používá se, když PDF nepožaduje rozložení ani zvětšení. Plynulé posouvání mezi stránkami neskáče.
Reopen the files that were open when PdfCraft last closed Znovu otevřít soubory, které byly otevřené při posledním zavření aplikace PdfCraft
Reload documents when their files change on disk Znovu načítat dokumenty při změně jejich souborů na disku
Always use my default zoom and page layout Vždy používat mé výchozí zvětšení a rozvržení stránky
This file changed on disk. Reload shows the new version and drops your unsaved changes; Save replaces it with this version. Tento soubor se na disku změnil. Znovu načíst zobrazí novou verzi a zahodí neuložené změny; Uložit ji nahradí touto verzí.
Reload Znovu načíst
Couldn't reload {name}: {e} Soubor {name} nelze znovu načíst: {e}
Can't render this file because it contains an unexpected character in line 6 and column 47.
+1
View File
@@ -2316,6 +2316,7 @@ key Space Leertaste
Printer paper and scaling may differ. Check driver settings. Druckerpapier und Skalierung können abweichen. Treibereinstellungen prüfen.
Drawing scale changes. Use Actual size for full-scale plans. Der Zeichnungsmaßstab ändert sich. Für maßstabsgetreue Pläne Tatsächliche Größe verwenden.
Reload documents when their files change on disk Dokumente neu laden, wenn sich ihre Dateien auf dem Datenträger ändern
Always use my default zoom and page layout Immer meinen Standardzoom und mein Standard-Seitenlayout verwenden
This file changed on disk. Reload shows the new version and drops your unsaved changes; Save replaces it with this version. Diese Datei wurde auf dem Datenträger geändert. „Neu laden“ zeigt die neue Version und verwirft Ihre ungespeicherten Änderungen; „Speichern“ ersetzt sie durch diese Version.
Reload Neu laden
Couldn't reload {name}: {e} {name} konnte nicht neu geladen werden: {e}
Can't render this file because it contains an unexpected character in line 6 and column 51.
+1
View File
@@ -2320,6 +2320,7 @@ comment menu Edit Επεξεργασία
Printer paper and scaling may differ. Check driver settings. Το χαρτί και η κλίμακα του εκτυπωτή μπορεί να διαφέρουν. Ελέγξτε τις ρυθμίσεις του προγράμματος οδήγησης.
Drawing scale changes. Use Actual size for full-scale plans. Η κλίμακα του σχεδίου αλλάζει. Για σχέδια σε πλήρη κλίμακα χρησιμοποιήστε το Πραγματικό μέγεθος.
Reload documents when their files change on disk Επαναφόρτωση εγγράφων όταν αλλάζουν τα αρχεία τους στον δίσκο
Always use my default zoom and page layout Να χρησιμοποιείται πάντα η προεπιλεγμένη μεγέθυνση και διάταξη σελίδας μου
This file changed on disk. Reload shows the new version and drops your unsaved changes; Save replaces it with this version. Αυτό το αρχείο άλλαξε στον δίσκο. Η επαναφόρτωση δείχνει τη νέα έκδοση και απορρίπτει τις μη αποθηκευμένες αλλαγές σας· η αποθήκευση την αντικαθιστά με αυτή την έκδοση.
Reload Επαναφόρτωση
Couldn't reload {name}: {e} Δεν ήταν δυνατή η επαναφόρτωση του {name}: {e}
Can't render this file because it contains an unexpected character in line 477 and column 9.
+1
View File
@@ -2185,6 +2185,7 @@ action wizard Start Iniciar
Home / End Inicio / Fin
H / Space (hold) H / Espacio (mantener)
Reload documents when their files change on disk Recargar los documentos cuando sus archivos cambien en el disco
Always use my default zoom and page layout Usar siempre mi zoom y presentación de página predeterminados
This file changed on disk. Reload shows the new version and drops your unsaved changes; Save replaces it with this version. Este archivo cambió en el disco. Recargar muestra la versión nueva y descarta los cambios sin guardar; Guardar la reemplaza por esta versión.
Reload Recargar
Couldn't reload {name}: {e} No se pudo recargar {name}: {e}
Can't render this file because it contains an unexpected character in line 6 and column 60.
+1
View File
@@ -2034,6 +2034,7 @@
Used when a PDF doesn't ask for a layout or zoom. Continuous scrolling never snaps between pages. Utilisé lorsqu'un PDF ne demande ni présentation ni zoom. Le défilement continu ne saute jamais d'une page à l'autre.
Reopen the files that were open when PdfCraft last closed Rouvrir les fichiers qui étaient ouverts lors de la dernière fermeture de PdfCraft
Reload documents when their files change on disk Recharger les documents lorsque leurs fichiers sont modifiés sur le disque
Always use my default zoom and page layout Toujours utiliser mon zoom et ma présentation de page par défaut
This file changed on disk. Reload shows the new version and drops your unsaved changes; Save replaces it with this version. Ce fichier a été modifié sur le disque. Recharger affiche la nouvelle version et abandonne vos modifications non enregistrées ; Enregistrer la remplace par cette version.
Reload Recharger
Couldn't reload {name}: {e} Impossible de recharger {name} : {e}
Can't render this file because it contains an unexpected character in line 6 and column 39.
+1
View File
@@ -2310,6 +2310,7 @@ key Space Szóköz
Printer paper and scaling may differ. Check driver settings. A nyomtató papírja és méretezése eltérhet. Ellenőrizze az illesztőprogram beállításait.
Drawing scale changes. Use Actual size for full-scale plans. A rajz méretaránya változik. Méretarányos tervekhez használja a Tényleges méret beállítást.
Reload documents when their files change on disk Dokumentumok újratöltése, ha a fájljuk megváltozik a lemezen
Always use my default zoom and page layout Mindig az alapértelmezett nagyításom és oldalelrendezésem használata
This file changed on disk. Reload shows the new version and drops your unsaved changes; Save replaces it with this version. Ez a fájl megváltozott a lemezen. Az Újratöltés az új változatot mutatja, és eldobja a nem mentett módosításokat; a Mentés erre a változatra cseréli le.
Reload Újratöltés
Couldn't reload {name}: {e} {name} újratöltése nem sikerült: {e}
Can't render this file because it contains an unexpected character in line 7 and column 44.
+1
View File
@@ -2320,6 +2320,7 @@ key Space Spazio
Printer paper and scaling may differ. Check driver settings. Carta e scala della stampante possono differire. Controlla le impostazioni del driver.
Drawing scale changes. Use Actual size for full-scale plans. La scala del disegno cambia. Usa Dimensioni effettive per le planimetrie in scala.
Reload documents when their files change on disk Ricarica i documenti quando i loro file cambiano sul disco
Always use my default zoom and page layout Usa sempre il mio ingrandimento e layout di pagina predefiniti
This file changed on disk. Reload shows the new version and drops your unsaved changes; Save replaces it with this version. Questo file è cambiato sul disco. Ricarica mostra la nuova versione e scarta le modifiche non salvate; Salva la sostituisce con questa versione.
Reload Ricarica
Couldn't reload {name}: {e} Impossibile ricaricare {name}: {e}
Can't render this file because it contains an unexpected character in line 6 and column 47.
+1
View File
@@ -2311,6 +2311,7 @@ key Space スペース
Printer paper and scaling may differ. Check driver settings. プリンターの用紙や倍率は異なる場合があります。ドライバーの設定を確認してください。
Drawing scale changes. Use Actual size for full-scale plans. 図面の縮尺が変わります。原寸で印刷するには「実際のサイズ」を使用してください。
Reload documents when their files change on disk ディスク上のファイルが変更されたら文書を再読み込みする
Always use my default zoom and page layout 常に既定のズームとページレイアウトを使用する
This file changed on disk. Reload shows the new version and drops your unsaved changes; Save replaces it with this version. このファイルはディスク上で変更されました。「再読み込み」は新しい版を表示して未保存の変更を破棄し、「保存」はこの版で置き換えます。
Reload 再読み込み
Couldn't reload {name}: {e} {name} を再読み込みできませんでした: {e}
Can't render this file because it contains an unexpected character in line 6 and column 47.
+1
View File
@@ -2310,6 +2310,7 @@ key Space Бос орын
Printer paper and scaling may differ. Check driver settings. Принтер қағазы мен масштабы өзгеше болуы мүмкін. Драйвер параметрлерін тексеріңіз.
Drawing scale changes. Use Actual size for full-scale plans. Сызба масштабы өзгереді. Толық масштабты жоспарлар үшін Нақты өлшемді пайдаланыңыз.
Reload documents when their files change on disk Дискідегі файлдары өзгергенде құжаттарды қайта жүктеу
Always use my default zoom and page layout Әрқашан әдепкі масштаб пен бет орналасуын пайдалану
This file changed on disk. Reload shows the new version and drops your unsaved changes; Save replaces it with this version. Бұл файл дискіде өзгертілді. «Қайта жүктеу» жаңа нұсқаны көрсетіп, сақталмаған өзгерістеріңізді тастайды; «Сақтау» оны осы нұсқамен алмастырады.
Reload Қайта жүктеу
Couldn't reload {name}: {e} {name} қайта жүктеу мүмкін болмады: {e}
Can't render this file because it contains an unexpected character in line 856 and column 9.
+1
View File
@@ -969,6 +969,7 @@
Redaction code: Šalinimo kodas:
Reload Įkelti iš naujo
Reload documents when their files change on disk Iš naujo įkelti dokumentus, kai pasikeičia jų failai diske
Always use my default zoom and page layout Visada naudoti mano numatytąjį mastelį ir puslapio išdėstymą
Remove checkmark Pašalinti varnelę
Remove invalid links and bookmarks Pašalinti netinkamus saitus ir žymeles
Remove page Pašalinti puslapį
Can't render this file because it contains an unexpected character in line 404 and column 9.
+1
View File
@@ -2291,6 +2291,7 @@ key Space Spacja
These objects could not be moved. Select them again and try a smaller move. Nie udało się przenieść tych obiektów. Zaznacz je ponownie i spróbuj mniejszego przesunięcia.
This page contains objects that cannot be selected together. Ta strona zawiera obiekty, których nie można zaznaczyć razem.
Reload documents when their files change on disk Wczytuj ponownie dokumenty, gdy ich pliki zmienią się na dysku
Always use my default zoom and page layout Zawsze używaj mojego domyślnego powiększenia i układu stron
This file changed on disk. Reload shows the new version and drops your unsaved changes; Save replaces it with this version. Ten plik zmienił się na dysku. Wczytaj ponownie pokazuje nową wersję i odrzuca niezapisane zmiany; Zapisz zastępuje ją tą wersją.
Reload Wczytaj ponownie
Couldn't reload {name}: {e} Nie można ponownie wczytać {name}: {e}
Can't render this file because it contains an unexpected character in line 6 and column 47.
+1
View File
@@ -2313,6 +2313,7 @@ key Space Espaço
Printer paper and scaling may differ. Check driver settings. O papel e a escala da impressora podem variar. Confira as configurações do driver.
Drawing scale changes. Use Actual size for full-scale plans. A escala do desenho muda. Use Tamanho real para plantas em escala.
Reload documents when their files change on disk Recarregar documentos quando os arquivos mudarem no disco
Always use my default zoom and page layout Sempre usar meu zoom e layout da página padrão
This file changed on disk. Reload shows the new version and drops your unsaved changes; Save replaces it with this version. Este arquivo foi alterado no disco. Recarregar mostra a nova versão e descarta suas alterações não salvas; Salvar a substitui por esta versão.
Reload Recarregar
Couldn't reload {name}: {e} Não foi possível recarregar {name}: {e}
Can't render this file because it contains an unexpected character in line 9 and column 16.
+1
View File
@@ -2101,6 +2101,7 @@
Used when a PDF doesn't ask for a layout or zoom. Continuous scrolling never snaps between pages. Используется, когда PDF не запрашивает макет или масштаб. Непрерывная прокрутка никогда не привязывается между страницами.
Reopen the files that were open when PdfCraft last closed Повторно открывать файлы, которые были открыты при последнем закрытии PdfCraft
Reload documents when their files change on disk Перезагружать документы при изменении их файлов на диске
Always use my default zoom and page layout Всегда использовать мой масштаб и макет страницы по умолчанию
This file changed on disk. Reload shows the new version and drops your unsaved changes; Save replaces it with this version. Этот файл был изменён на диске. «Перезагрузить» покажет новую версию и отбросит несохранённые изменения; «Сохранить» заменит её этой версией.
Reload Перезагрузить
Couldn't reload {name}: {e} Не удалось перезагрузить {name}: {e}
Can't render this file because it contains an unexpected character in line 9 and column 16.
+1
View File
@@ -2317,6 +2317,7 @@ key Space Preslednica
Printer paper and scaling may differ. Check driver settings. Papir in merilo tiskalnika se lahko razlikujeta. Preverite nastavitve gonilnika.
Drawing scale changes. Use Actual size for full-scale plans. Merilo risbe se spremeni. Za načrte v polnem merilu uporabite Dejansko velikost.
Reload documents when their files change on disk Znova naloži dokumente, ko se njihove datoteke na disku spremenijo
Always use my default zoom and page layout Vedno uporabi moje privzeto povečanje in postavitev strani
This file changed on disk. Reload shows the new version and drops your unsaved changes; Save replaces it with this version. Ta datoteka se je na disku spremenila. Ponovno naloži pokaže novo različico in zavrže neshranjene spremembe; Shrani jo zamenja s to različico.
Reload Znova naloži
Couldn't reload {name}: {e} Datoteke {name} ni bilo mogoče znova naložiti: {e}
Can't render this file because it contains an unexpected character in line 9 and column 16.
+1
View File
@@ -2020,6 +2020,7 @@ action wizard Start ప్రారంభించు
Used when a PDF doesn't ask for a layout or zoom. Continuous scrolling never snaps between pages. PDF ఏ లేఅవుట్‌ను గానీ జూమ్‌ను గానీ కోరనప్పుడు ఉపయోగించబడుతుంది. నిరంతర స్క్రోలింగ్ పేజీల మధ్య ఎప్పుడూ స్నాప్ అవ్వదు.
Reopen the files that were open when PdfCraft last closed PdfCraftను చివరిసారి మూసివేసినప్పుడు తెరిచి ఉన్న ఫైల్‌లను మళ్లీ తెరువు
Reload documents when their files change on disk డిస్క్‌లో వాటి ఫైల్‌లు మారినప్పుడు పత్రాలను మళ్లీ లోడ్ చేయి
Always use my default zoom and page layout ఎల్లప్పుడూ నా డిఫాల్ట్ జూమ్ మరియు పేజీ లేఅవుట్‌ను ఉపయోగించు
This file changed on disk. Reload shows the new version and drops your unsaved changes; Save replaces it with this version. ఈ ఫైల్ డిస్క్‌లో మారింది. రీలోడ్ కొత్త వెర్షన్‌ను చూపించి సేవ్ చేయని మార్పులను వదిలేస్తుంది; సేవ్ దాని స్థానంలో ఈ వెర్షన్‌ను ఉంచుతుంది.
Reload మళ్లీ లోడ్ చేయి
Couldn't reload {name}: {e} {name}ను మళ్లీ లోడ్ చేయడం సాధ్యం కాలేదు: {e}
Can't render this file because it contains an unexpected character in line 13 and column 16.
+1
View File
@@ -2308,6 +2308,7 @@ key Space Boşluk
Printer paper and scaling may differ. Check driver settings. Yazıcı kâğıdı ve ölçekleme farklı olabilir. Sürücü ayarlarını kontrol edin.
Drawing scale changes. Use Actual size for full-scale plans. Çizim ölçeği değişir. Tam ölçekli planlar için Gerçek boyutu kullanın.
Reload documents when their files change on disk Diskteki dosyaları değiştiğinde belgeleri yeniden yükle
Always use my default zoom and page layout Her zaman varsayılan yakınlaştırmamı ve sayfa düzenimi kullan
This file changed on disk. Reload shows the new version and drops your unsaved changes; Save replaces it with this version. Bu dosya diskte değişti. Yeniden yükle yeni sürümü gösterir ve kaydedilmemiş değişikliklerinizi atar; Kaydet onu bu sürümle değiştirir.
Reload Yeniden yükle
Couldn't reload {name}: {e} {name} yeniden yüklenemedi: {e}
Can't render this file because it contains an unexpected character in line 855 and column 9.
+1
View File
@@ -2333,6 +2333,7 @@ key Space Пробіл
Printer paper and scaling may differ. Check driver settings. Папір і масштаб принтера можуть відрізнятися. Перевірте налаштування драйвера.
Drawing scale changes. Use Actual size for full-scale plans. Масштаб креслення змінюється. Для друку в початковому масштабі виберіть Фактичний розмір.
Reload documents when their files change on disk Перезавантажувати документи, коли їхні файли змінюються на диску
Always use my default zoom and page layout Завжди використовувати мій типовий масштаб і макет сторінок
This file changed on disk. Reload shows the new version and drops your unsaved changes; Save replaces it with this version. Цей файл змінено на диску. «Перезавантажити» покаже нову версію й відкине незбережені зміни; «Зберегти» замінить її цією версією.
Reload Перезавантажити
Couldn't reload {name}: {e} Не вдалося перезавантажити {name}: {e}
Can't render this file because it contains an unexpected character in line 6 and column 47.
+1
View File
@@ -964,6 +964,7 @@ theme Appearance Giao diện
Redaction code: Mã xóa nội dung nhạy cảm:
Reload Tải lại
Reload documents when their files change on disk Tải lại tài liệu khi tệp của chúng thay đổi trên đĩa
Always use my default zoom and page layout Luôn dùng thu phóng và bố cục trang mặc định của tôi
Remove checkmark Bỏ dấu kiểm
Remove invalid links and bookmarks Gỡ các liên kết và dấu trang không hợp lệ
Remove page Gỡ trang
Can't render this file because it contains an unexpected character in line 491 and column 12.
+1
View File
@@ -2135,6 +2135,7 @@
Used when a PDF doesn't ask for a layout or zoom. Continuous scrolling never snaps between pages. PDF 未指定布局或缩放时使用。连续滚动时页面不会逐页吸附。
Reopen the files that were open when PdfCraft last closed 重新打开上次关闭 PdfCraft 时打开的文件
Reload documents when their files change on disk 文件在磁盘上更改时重新加载对应的文档
Always use my default zoom and page layout 始终使用我的默认缩放和页面布局
This file changed on disk. Reload shows the new version and drops your unsaved changes; Save replaces it with this version. 此文件已在磁盘上更改。“重新加载”显示新版本并放弃未保存的更改;“保存”则用此版本替换它。
Reload 重新加载
Couldn't reload {name}: {e} 无法重新加载{name}:{e}
Can't render this file because it contains an unexpected character in line 9 and column 16.
+1
View File
@@ -2185,6 +2185,7 @@ key Space 空格
Tools 工具
Inspector 檢查器
Reload documents when their files change on disk 檔案在磁碟上變更時重新載入對應的文件
Always use my default zoom and page layout 一律使用我的預設縮放與頁面佈局
This file changed on disk. Reload shows the new version and drops your unsaved changes; Save replaces it with this version. 此檔案已在磁碟上變更。「重新載入」會顯示新版本並捨棄未儲存的變更;「儲存」則會以此版本取代它。
Reload 重新載入
Couldn't reload {name}: {e} 無法重新載入{name}:{e}
Can't render this file because it contains an unexpected character in line 9 and column 16.
+1
View File
@@ -368,6 +368,7 @@ pub(crate) fn preferences_body(ui: &mut egui::Ui, app: &mut PdfCraftApp, t: &Tok
.small()
.color(t.text_muted),
);
ui.add(widgets::checkbox(&mut app.always_default_view, tl!("Always use my default zoom and page layout")));
ui.horizontal(|ui| {
ui.label(tl!("Units"));
for u in crate::units::Unit::ALL {
+41 -21
View File
@@ -6,6 +6,8 @@
//! `pdfcraft-engine`.
#![deny(clippy::unwrap_used, clippy::expect_used, clippy::panic, clippy::unimplemented, clippy::todo, clippy::unreachable)]
// The settings object in `persist` is one `json!` literal past the default limit of 128.
#![recursion_limit = "256"]
/// Whether `a` and `b` name the same file: equal, or equal once made absolute against the
/// current directory (links are not resolved, as in `last_session`).
@@ -582,6 +584,9 @@ pub struct PdfCraftApp {
quit_session: Option<last_session::LastSession>,
/// Preferences: reload a document when its file changes on disk (#431).
pub reload_changed_files: bool,
/// Preferences: open every document at Default zoom and Default page display, whatever
/// layout or zoom it asks for (#1618).
pub always_default_view: bool,
/// Open documents' files, watched for changes on disk.
#[cfg(not(target_arch = "wasm32"))]
pub(crate) watch: file_watch::FileWatch,
@@ -952,6 +957,7 @@ impl PdfCraftApp {
last_session: Default::default(),
quit_session: None,
reload_changed_files: true,
always_default_view: false,
#[cfg(not(target_arch = "wasm32"))]
watch: Default::default(),
#[cfg(not(target_arch = "wasm32"))]
@@ -1106,7 +1112,8 @@ impl PdfCraftApp {
}
/// Open a document the way it asks to be opened: navigation panel, layout, magnification,
/// page (Document Properties ▸ Initial View).
/// page (Document Properties ▸ Initial View). With Always use my default zoom and page
/// layout on, the layout and magnification stay at the defaults the view opened with.
fn apply_initial_view(&mut self, index: usize, v: &pdfcraft_engine::InitialView) {
use pdfcraft_engine::{InitialLayout as L, Magnification as M, Navigation as N};
let pages = self.session.get(self.views[index].id).map_or(0, |d| d.info.pages.len());
@@ -1120,29 +1127,31 @@ impl PdfCraftApp {
}
}
let view = &mut self.views[index];
match v.layout {
// The view opened in Default page display already.
L::Default => {}
L::SinglePage => (view.layout, view.continuous) = (canvas::PageLayout::Single, false),
L::SinglePageContinuous => (view.layout, view.continuous) = (canvas::PageLayout::Single, true),
L::TwoUp => (view.layout, view.continuous) = (canvas::PageLayout::TwoUp, false),
L::TwoUpContinuous => (view.layout, view.continuous) = (canvas::PageLayout::TwoUp, true),
L::TwoUpCoverPage => {
(view.layout, view.continuous, view.cover) = (canvas::PageLayout::TwoUp, false, true);
if !self.always_default_view {
match v.layout {
// The view opened in Default page display already.
L::Default => {}
L::SinglePage => (view.layout, view.continuous) = (canvas::PageLayout::Single, false),
L::SinglePageContinuous => (view.layout, view.continuous) = (canvas::PageLayout::Single, true),
L::TwoUp => (view.layout, view.continuous) = (canvas::PageLayout::TwoUp, false),
L::TwoUpContinuous => (view.layout, view.continuous) = (canvas::PageLayout::TwoUp, true),
L::TwoUpCoverPage => {
(view.layout, view.continuous, view.cover) = (canvas::PageLayout::TwoUp, false, true);
}
L::TwoUpContinuousCoverPage => {
(view.layout, view.continuous, view.cover) = (canvas::PageLayout::TwoUp, true, true);
}
}
L::TwoUpContinuousCoverPage => {
(view.layout, view.continuous, view.cover) = (canvas::PageLayout::TwoUp, true, true);
match v.magnification {
// The view opened at the default zoom already.
M::Default => {}
M::ActualSize => view.set_zoom(1.0),
M::Percent(p) => view.set_zoom((p / 100.0) as f32),
M::FitPage | M::FitVisible => view.fit = canvas::Fit::Page,
M::FitWidth => view.fit = canvas::Fit::Width,
M::FitHeight => view.fit = canvas::Fit::Height,
}
}
match v.magnification {
// The view opened at the default zoom already.
M::Default => {}
M::ActualSize => view.set_zoom(1.0),
M::Percent(p) => view.set_zoom((p / 100.0) as f32),
M::FitPage | M::FitVisible => view.fit = canvas::Fit::Page,
M::FitWidth => view.fit = canvas::Fit::Width,
M::FitHeight => view.fit = canvas::Fit::Height,
}
if v.page > 0 && v.page < pages {
view.go_to_page(v.page);
}
@@ -2307,6 +2316,7 @@ impl PdfCraftApp {
"default_mode": self.default_mode,
"default_layout": canvas::display_token(self.view_defaults.layout, self.view_defaults.continuous),
"default_zoom": self.view_defaults.zoom_name(),
"always_default_view": self.always_default_view,
"highlight_fields": self.view_defaults.highlight_fields,
"units": self.units,
"language": self.language,
@@ -2416,6 +2426,9 @@ impl PdfCraftApp {
if let Ok(units) = serde_json::from_value::<units::Unit>(v["units"].clone()) {
self.units = units;
}
if let Some(on) = v["always_default_view"].as_bool() {
self.always_default_view = on;
}
if let Some(on) = v["highlight_fields"].as_bool() {
self.view_defaults.highlight_fields = on;
}
@@ -2672,6 +2685,13 @@ impl PdfCraftApp {
self.view_defaults =
self.view_defaults.with_zoom(value).ok_or("default-zoom must be fit-width, fit-page or a percentage from 8 to 6400")?;
}
("always-default-view", _) => {
self.always_default_view = match value {
"on" => true,
"off" => false,
_ => return Err("always-default-view must be on or off".into()),
};
}
("tools-side", _) => self.docking.set_tools_on_right(match value {
"left" => false,
"right" => true,
+51
View File
@@ -762,6 +762,57 @@ fn the_rail_zoom_field_sets_a_typed_zoom() {
assert_eq!(h.get_by_role_and_label(Role::TextInput, "Zoom").value().as_deref(), Some("200%"));
}
#[test]
fn always_use_my_default_zoom_and_page_layout_ignores_what_the_pdf_asks_for() {
use pdfcraft_ui_egui::canvas::{Fit, PageLayout};
// Opens on page 2 at fit page, two pages side by side.
let asks = String::from_utf8_lossy(PAGES).replace("/Pages 2 0 R >>", "/Pages 2 0 R /OpenAction [4 0 R /Fit] /PageLayout /TwoPageLeft >>");
let open = |always: Option<&str>| {
let mut app = PdfCraftApp::new();
app.set_option("language", "en").unwrap();
if let Some(on) = always {
app.set_option("always-default-view", on).unwrap();
}
app.open_bytes("asks.pdf", None, asks.clone().into_bytes()).expect("opens");
let v = &app.views[0];
(v.fit, v.layout, v.continuous, v.current)
};
// Off by default: the document's view wins.
assert_eq!(open(None), (Fit::Page, PageLayout::TwoUp, false, 1));
assert_eq!(open(Some("off")), (Fit::Page, PageLayout::TwoUp, false, 1));
// On: Default zoom and Default page display; the page it opens at is still the document's.
assert_eq!(open(Some("on")), (Fit::Width, PageLayout::Single, true, 1));
assert!(PdfCraftApp::new().set_option("always-default-view", "yes").is_err());
}
#[test]
fn always_use_my_default_zoom_and_page_layout_survives_a_restart() {
let mut app = PdfCraftApp::new();
assert!(!app.always_default_view, "off by default");
app.always_default_view = true;
let mut restarted = PdfCraftApp::new();
restarted.restore(&app.persist());
assert!(restarted.always_default_view, "the choice is kept");
restarted.restore(r#"{"always_default_view":"bogus"}"#);
assert!(restarted.always_default_view, "garbage leaves it alone");
let mut legacy = PdfCraftApp::new();
legacy.restore("{}");
assert!(!legacy.always_default_view, "a legacy file without the key keeps it off");
}
#[test]
fn preferences_turn_on_always_use_my_default_zoom_and_page_layout() {
use egui_kittest::kittest::Queryable;
let mut h = harness(&[]);
assert!(h.state_mut().execute("app.preferences"));
h.run_steps(3);
h.get_by_label("Always use my default zoom and page layout").scroll_to_me();
h.run_steps(4);
h.get_by_label("Always use my default zoom and page layout").click();
h.run_steps(2);
assert!(h.state().always_default_view);
}
#[test]
fn preferences_set_the_default_zoom() {
use egui_kittest::kittest::Queryable;
+2 -2
View File
@@ -9816,8 +9816,8 @@ milestone = "M14"
status = "partial"
commands = []
tools = []
evidence = ["crates/ui-egui/tests/view.rs::default_page_display_is_used_for_new_documents", "crates/ui-egui/tests/view.rs::default_zoom_is_used_for_new_documents", "crates/ui-egui/tests/view.rs::preferences_set_the_default_zoom"]
notes = "Preferences ▸ Documents and view: Default page display and Default zoom (Fit to width, Zoom to page level or a percentage) for every new tab; a PDF that asks for a layout or zoom gets it. Missing: Acrobat's resolution, rendering and page-content options"
evidence = ["crates/ui-egui/tests/view.rs::default_page_display_is_used_for_new_documents", "crates/ui-egui/tests/view.rs::default_zoom_is_used_for_new_documents", "crates/ui-egui/tests/view.rs::preferences_set_the_default_zoom", "crates/ui-egui/tests/view.rs::always_use_my_default_zoom_and_page_layout_ignores_what_the_pdf_asks_for"]
notes = "Preferences ▸ Documents and view: Default page display and Default zoom (Fit to width, Zoom to page level or a percentage) for every new tab; a PDF that asks for a layout or zoom gets it, unless Always use my default zoom and page layout is on. Missing: Acrobat's resolution, rendering and page-content options"
[[feature]]
id = "misc.prefs-documents"