diff --git a/CHANGELOG.md b/CHANGELOG.md index 68b8a16c..80824961 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Crash due to assertion failure on 32-bit architectures - Segmentation fault on shutdown with Wayland +- Incorrect estimated DPR with Wayland ### Removed diff --git a/alacritty/src/display/mod.rs b/alacritty/src/display/mod.rs index 2a55402e..9c37bd0e 100644 --- a/alacritty/src/display/mod.rs +++ b/alacritty/src/display/mod.rs @@ -188,9 +188,18 @@ pub struct Display { impl Display { pub fn new(config: &Config, event_loop: &EventLoop) -> Result { - // Guess DPR based on first monitor. - let estimated_dpr = - event_loop.available_monitors().next().map(|m| m.scale_factor()).unwrap_or(1.); + #[cfg(any(not(feature = "x11"), target_os = "macos", windows))] + let is_x11 = false; + #[cfg(all(feature = "x11", not(any(target_os = "macos", windows))))] + let is_x11 = event_loop.is_x11(); + + // Guess DPR based on first monitor. On Wayland the initial frame always renders at a DPR + // of 1. + let estimated_dpr = if cfg!(any(target_os = "macos", windows)) || is_x11 { + event_loop.available_monitors().next().map(|m| m.scale_factor()).unwrap_or(1.) + } else { + 1. + }; // Guess the target window dimensions. let metrics = GlyphCache::static_metrics(config.ui_config.font.clone(), estimated_dpr)?; @@ -278,11 +287,6 @@ impl Display { #[cfg(target_os = "macos")] window.set_has_shadow(config.ui_config.background_opacity() >= 1.0); - #[cfg(all(feature = "x11", not(any(target_os = "macos", windows))))] - let is_x11 = event_loop.is_x11(); - #[cfg(not(any(feature = "x11", target_os = "macos", windows)))] - let is_x11 = false; - // On Wayland we can safely ignore this call, since the window isn't visible until you // actually draw something into it and commit those changes. #[cfg(not(any(target_os = "macos", windows)))]