pub struct ResolutionContext {
pub font_dpi: f32,
pub button_order: DialogButtonOrder,
pub icon_theme: Option<Cow<'static, str>>,
}Expand description
Resolution-time inputs captured once per theme-build.
Replaces the font_dpi: Option<f32> parameter on
ThemeMode::into_resolved and
the corresponding internal OverlaySource field.
Accessibility preferences live on
SystemTheme, NOT here — accessibility is a
render-time concern, not a resolve-time concern
(docs/archive/v0.5.7_gaps.md §G7).
§Examples
use native_theme::resolve::ResolutionContext;
// Production: auto-detect from OS.
let ctx = ResolutionContext::from_system();
assert!(ctx.font_dpi > 0.0);
// Tests: deterministic values.
let ctx = ResolutionContext::for_tests();
assert_eq!(ctx.font_dpi, 96.0);
assert!(ctx.icon_theme.is_none());Fields§
§font_dpi: f32Font DPI for pt-to-px conversion.
from_system detects it: 72.0 on macOS, 96.0 on
Windows, and on Linux KDE’s forceFontDPI (with the kde feature),
then Xft.dpi, then xrandr’s physical DPI (with kde or portal),
then 96.0; 96.0 elsewhere. When the OS theme is read
(SystemTheme::from_system), the
reader’s own DPI replaces it: KDE’s forceFontDPI → Xft.dpi →
xrandr → 96.0, GNOME’s Xft.dpi → xrandr → 96.0, macOS’s 72.0 and
Windows’ 96.0.
Dialog button ordering (PrimaryLeft on KDE and Windows,
PrimaryRight elsewhere).
icon_theme: Option<Cow<'static, str>>Runtime-detected icon theme name, used when the preset and
per-variant icon_theme fields are both None. Three-tier
precedence in the pipeline: per-variant → Theme-level shared →
this runtime detection.
from_system puts the detected system icon
theme here, or None where detection failed;
system_icon_theme() gives the
reason.
Implementations§
Source§impl ResolutionContext
impl ResolutionContext
Sourcepub fn from_system() -> Self
pub fn from_system() -> Self
Build the context by auto-detecting from the current OS.
Calls:
crate::detect::system_font_dpiforfont_dpi(private)crate::resolve::inheritance::platform_button_orderforbutton_ordercrate::model::icons::system_icon_themeforicon_theme, which isNonewhere detection fails