aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md1
-rw-r--r--alacritty/src/display/mod.rs20
2 files changed, 13 insertions, 8 deletions
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<E>(config: &Config, event_loop: &EventLoop<E>) -> Result<Display, Error> {
- // 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)))]