Follow-up to #351: drag drafts without a window stay canvas-sized; de/es/ru hint

- With no window (a mask or point-colour overlay, Visualize Spots, soft
  proofing, a window refused for a far read) the loupe renders the whole
  frame at the size it is drawn. While a slider drags that meant the
  photo's every pixel each draft frame at 1:1 and beyond (24 MP per tick
  where 2.5 MP was rendered before #351; mask overlays are on by
  default). A drag now drafts at most the canvas size, as the windowed
  path does; at rest the zoomed frame is rendered as before.
- The Preview size hint in German, Spanish and Russian; the replaced
  'Largest long edge…' text removed from those catalogs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01912WaK6Rmew3wxZuPyX7E8
This commit is contained in:
Claude
2026-10-09 00:16:01 +00:00
parent 3e88a60dd6
commit eab88ea30c
4 changed files with 20 additions and 4 deletions
+1 -1
View File
@@ -129,6 +129,7 @@
"Auto-Tag from Tracklog: GPS locations for your photos from a GPX track log, matched by capture time.": "Automatisches Verorten anhand eines GPS-Tracks: GPS-Orte für deine Fotos aus einem GPX-Track, abgeglichen nach Aufnahmezeit.",
"Auto-Tag from Tracklog…": "Anhand eines GPS-Tracks automatisch verorten…",
"Automatic": "Automatisch",
"Automatic renders the Detail view at the size it is shown, up to the photo's own pixels. Choose a size to cap it: smaller is faster.": "Automatisch rendert die Detailansicht in der angezeigten Größe, bis zu den eigenen Pixeln des Fotos. Eine Größe wählen, um sie zu begrenzen: kleiner ist schneller.",
"Automatically Write Changes into XMP": "Änderungen automatisch in XMP schreiben",
"Automatically write changes into XMP sidecars": "Änderungen automatisch in XMP-Begleitdateien schreiben",
"Autumn Gold": "Herbstgold",
@@ -741,7 +742,6 @@
"Label": "Farbmarkierung",
"Landscape": "Landschaft",
"Language": "Sprache",
"Largest long edge the Detail view renders at; larger is sharper on big displays but slower.": "Längste Kante beim Rendern der Detailansicht; größere Werte sind auf großen Bildschirmen schärfer, aber langsamer.",
"Last": "Letzter",
"Last GPU fallback": "Letzter GPU-Fallback",
"Last commit": "Letzter Commit",
+1 -1
View File
@@ -112,6 +112,7 @@
"Auto-Tag from Tracklog": "Etiquetar automáticamente desde el registro de ruta",
"Auto-Tag from Tracklog…": "Etiquetar automáticamente desde el registro de ruta…",
"Automatic": "Automático",
"Automatic renders the Detail view at the size it is shown, up to the photo's own pixels. Choose a size to cap it: smaller is faster.": "Automático muestra la vista Detalle al tamaño en que se ve, hasta los píxeles propios de la foto. Elegir un tamaño para limitarla: cuanto más pequeño, más rápido.",
"Automatically Write Changes into XMP": "Escribir automáticamente los cambios en XMP",
"Automatically write changes into XMP sidecars": "Escribir automáticamente los cambios en los archivos XMP complementarios",
"Autumn Gold": "Oro otoñal",
@@ -704,7 +705,6 @@
"Label": "Etiqueta",
"Landscape": "Paisaje",
"Language": "Idioma",
"Largest long edge the Detail view renders at; larger is sharper on big displays but slower.": "Lado largo máximo con el que se renderiza la vista Detalle; un valor mayor es más nítido en pantallas grandes, pero más lento.",
"Last": "Último",
"Last GPU fallback": "Último recurso alternativo de GPU",
"Last commit": "Último commit",
+1 -1
View File
@@ -91,6 +91,7 @@
"Auto-Tag from Tracklog": "Автопривязка по треку",
"Auto-Tag from Tracklog…": "Автопривязка по треку…",
"Automatic": "Автоматически",
"Automatic renders the Detail view at the size it is shown, up to the photo's own pixels. Choose a size to cap it: smaller is faster.": "«Автоматически» отрисовывает детальный просмотр в показанном размере, но не больше собственных пикселей фото. Выберите размер, чтобы ограничить его: меньше — быстрее.",
"Automatically Write Changes into XMP": "Автоматически записывать изменения в XMP",
"Automatically write changes into XMP sidecars": "Автоматически записывать изменения в XMP-файлы",
"Autumn Gold": "Осеннее золото",
@@ -587,7 +588,6 @@
"Keywords you add appear here; ⌥1–⌥9 apply them.": "Добавленные вами ключевые слова появятся здесь; ⌥1–⌥9 применяют их.",
"Landscape": "Пейзаж",
"Language": "Язык",
"Largest long edge the Detail view renders at; larger is sharper on big displays but slower.": "Максимальная длинная сторона, с которой рисуется режим «Детализация»; больше — чётче на больших экранах, но медленнее.",
"Last": "Последний",
"Last view": "Последний вид",
"Lateral Chromatic Aberration": "Боковая хроматическая аберрация",
+17 -1
View File
@@ -97,7 +97,11 @@ pub fn plan(settings: &crate::state::AppSettings, v: ViewSizes) -> LoupePlan {
let drawn_long = if v.drawn_long.is_finite() { v.drawn_long.max(8.0) } else { canvas_long };
let scale = if v.draft_scale.is_finite() { v.draft_scale.clamp(0.1, 1.0) } else { 1.0 };
if !v.windows {
let main_edge = settings.loupe_edge(drawn_long * scale, v.native_long, v.texture_side);
// the whole frame at the size it is drawn (an overlay or soft proof has no window); while a
// slider drags, a canvas-sized draft as with windows: a drag at 1:1 must not render the
// photo's every pixel each frame
let long = if scale < 1.0 { drawn_long.min(canvas_long) } else { drawn_long };
let main_edge = settings.loupe_edge(long * scale, v.native_long, v.texture_side);
return LoupePlan { main_edge, window_edge: None };
}
// a user who chose a size above the preview source level (3840, 5120) means it; otherwise the
@@ -277,6 +281,18 @@ mod tests {
assert_eq!(drag.window_edge, still.window_edge);
}
// Given no window (an overlay, soft proofing), the view at rest renders the whole frame at the
// size it is drawn, but a slider drag drafts at the canvas size like the windowed path
#[test]
fn without_a_window_a_drag_drafts_at_the_canvas_size() {
let no_window = |draft_scale: f32| ViewSizes { windows: false, draft_scale, ..sizes(24000.0, 2800.0, 6000) };
let still = plan(&auto(), no_window(1.0));
let drag = plan(&auto(), no_window(0.6));
assert_eq!(still.window_edge, None);
assert!(still.main_edge > 2800, "at rest the zoomed frame: {still:?}");
assert!(drag.main_edge <= 2800, "a drag drafts at most the canvas: {drag:?}");
}
// Given the user capped the preview size, the whole-frame render obeys it, and a fit view
// stays on it (no original decoded); a zoomed view still gets its sharp window
#[test]