From 37ac3de2b8598d484e1a98ee40670c25651eac5b Mon Sep 17 00:00:00 2001 From: Sophie Herold Date: Sat, 6 Apr 2024 17:21:19 +0200 Subject: [PATCH] metadata: Properly display exposure times > 0.5s Closes #349 --- NEWS | 1 + src/metadata/mod.rs | 17 ++++++++++++++--- src/widgets/drag_overlay.rs | 3 ++- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 8205093..0e491f1 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,7 @@ ==== - Fix fractional scaling beeing blury by setting GDK_DEBUG=gl-no-fractional as default +- Fix exposure times above 0.5 seconds not being displayed correctly in properties 46.1 ==== diff --git a/src/metadata/mod.rs b/src/metadata/mod.rs index 40ec44f..8e48f54 100644 --- a/src/metadata/mod.rs +++ b/src/metadata/mod.rs @@ -254,10 +254,21 @@ impl Metadata { if let Some(exif) = &self.exif { let field = exif.get_field(exif::Tag::ExposureTime, exif::In::PRIMARY)?; if let exif::Value::Rational(rational) = &field.value { - let exposure = format!("{:.0}", 1. / rational.first()?.to_f32()); + let speed = rational.first()?.to_f32(); - // Translators: Unit for exposure time in seconds - return Some(gettext_f("1\u{2215}{}\u{202F}s", [exposure])); + if speed <= 0.5 { + let exposure = format!("{:.0}", 1. / speed); + // Translators: Fractional exposure time (photography) in seconds + return Some(gettext_f("1\u{2215}{}\u{202F}s", [exposure])); + } else { + let exposure = if speed < 5. { + format!("{:.1}", speed) + } else { + format!("{:.0}", speed) + }; + // Translators: Exposure time (photography) in seconds + return Some(gettext_f("{}\u{202F}s", [exposure])); + } } } diff --git a/src/widgets/drag_overlay.rs b/src/widgets/drag_overlay.rs index acdfa90..30dd57b 100644 --- a/src/widgets/drag_overlay.rs +++ b/src/widgets/drag_overlay.rs @@ -25,9 +25,10 @@ use adw::prelude::*; use crate::deps::*; mod imp { + use std::cell::OnceCell; + use adw::subclass::prelude::*; use glib::{ParamSpec, Properties, Value}; - use std::cell::OnceCell; use super::*;