From 2ea20f4823ae96f92f47a1984a6dd118a9632fdb Mon Sep 17 00:00:00 2001 From: Joe Wilm Date: Sun, 8 Oct 2017 18:10:29 -0700 Subject: [PATCH] Scale all fonts based on device-pixel-ratio Rather than use DPI from config, use device-pixel-ratio from winit. This is computed using the display DPI anyhow, so it should have the same effect. --- README.md | 6 +++--- alacritty.yml | 6 ------ alacritty_macos.yml | 6 ------ font/src/darwin/mod.rs | 2 +- font/src/ft/mod.rs | 15 +++++---------- font/src/lib.rs | 2 +- src/config.rs | 43 ------------------------------------------ src/display.rs | 3 +-- 8 files changed, 11 insertions(+), 72 deletions(-) diff --git a/README.md b/README.md index a84a97d..e2b81e2 100644 --- a/README.md +++ b/README.md @@ -246,9 +246,9 @@ run. On most systems this often defaults to `$HOME/.config/alacritty/alacritty.yml`. Many configuration options will take effect immediately upon saving changes to -the config file. The only exception is the `font`, `dimensions` and `dpi` -sections which requires Alacritty to be restarted. For further explanation of -the config file, please consult the comments in the default config file. +the config file. The only exception is the `font` and `dimensions` sections +which requires Alacritty to be restarted. For further explanation of the config +file, please consult the comments in the default config file. ## Issues (known, unknown, feature requests, etc) diff --git a/alacritty.yml b/alacritty.yml index e4080a8..fb498fd 100644 --- a/alacritty.yml +++ b/alacritty.yml @@ -27,12 +27,6 @@ padding: x: 2 y: 2 -# The FreeType rasterizer needs to know the device DPI for best results -# (changes require restart) -dpi: - x: 96.0 - y: 96.0 - # Display tabs using this many cells (changes require restart) tabspaces: 8 diff --git a/alacritty_macos.yml b/alacritty_macos.yml index 78bbfb9..1a16a8c 100644 --- a/alacritty_macos.yml +++ b/alacritty_macos.yml @@ -26,12 +26,6 @@ padding: x: 2 y: 2 -# The FreeType rasterizer needs to know the device DPI for best results -# (changes require restart) -dpi: - x: 96.0 - y: 96.0 - # Display tabs using this many cells (changes require restart) tabspaces: 8 diff --git a/font/src/darwin/mod.rs b/font/src/darwin/mod.rs index 4542312..70b9e1f 100644 --- a/font/src/darwin/mod.rs +++ b/font/src/darwin/mod.rs @@ -130,7 +130,7 @@ impl ::std::fmt::Display for Error { impl ::Rasterize for Rasterizer { type Err = Error; - fn new(_dpi_x: f32, _dpi_y: f32, device_pixel_ratio: f32, use_thin_strokes: bool) -> Result { + fn new(device_pixel_ratio: f32, use_thin_strokes: bool) -> Result { info!("device_pixel_ratio: {}", device_pixel_ratio); Ok(Rasterizer { fonts: HashMap::new(), diff --git a/font/src/ft/mod.rs b/font/src/ft/mod.rs index f37a500..42134a8 100644 --- a/font/src/ft/mod.rs +++ b/font/src/ft/mod.rs @@ -63,9 +63,7 @@ pub struct FreeTypeRasterizer { faces: HashMap, library: Library, keys: HashMap, - dpi_x: u32, - dpi_y: u32, - dpr: f32, + device_pixel_ratio: f32, } #[inline] @@ -76,16 +74,14 @@ fn to_freetype_26_6(f: f32) -> isize { impl ::Rasterize for FreeTypeRasterizer { type Err = Error; - fn new(dpi_x: f32, dpi_y: f32, device_pixel_ratio: f32, _: bool) -> Result { + fn new(device_pixel_ratio: f32, _: bool) -> Result { let library = Library::init()?; Ok(FreeTypeRasterizer { faces: HashMap::new(), keys: HashMap::new(), library: library, - dpi_x: dpi_x as u32, - dpi_y: dpi_y as u32, - dpr: device_pixel_ratio, + device_pixel_ratio: device_pixel_ratio, }) } @@ -152,8 +148,7 @@ impl FreeTypeRasterizer { /// Load a font face accoring to `FontDesc` fn get_face(&mut self, desc: &FontDesc, size: Size) -> Result { // Adjust for DPI - let scale = self.dpi_x as f32 / 72.; - let size = Size::new(size.as_f32_pts() * scale); + let size = Size::new(size.as_f32_pts() * self.device_pixel_ratio * 96. / 72.); match desc.style { Style::Description { slant, weight } => { @@ -278,7 +273,7 @@ impl FreeTypeRasterizer { let size = face.non_scalable.as_ref() .map(|v| v.pixelsize as f32) - .unwrap_or_else(|| glyph_key.size.as_f32_pts() * self.dpi_x as f32 / 72.); + .unwrap_or_else(|| glyph_key.size.as_f32_pts() * self.device_pixel_ratio * 96. / 72.); face.ft_face.set_char_size(to_freetype_26_6(size), 0, 0, 0)?; diff --git a/font/src/lib.rs b/font/src/lib.rs index f02df43..181fd88 100644 --- a/font/src/lib.rs +++ b/font/src/lib.rs @@ -229,7 +229,7 @@ pub trait Rasterize { type Err: ::std::error::Error + Send + Sync + 'static; /// Create a new Rasterize - fn new(dpi_x: f32, dpi_y: f32, device_pixel_ratio: f32, use_thin_strokes: bool) -> Result + fn new(device_pixel_ratio: f32, use_thin_strokes: bool) -> Result where Self: Sized; /// Get `Metrics` for the given `FontKey` diff --git a/src/config.rs b/src/config.rs index cef4d22..d49caae 100644 --- a/src/config.rs +++ b/src/config.rs @@ -222,10 +222,6 @@ pub struct Config { #[serde(default="default_padding")] padding: Delta, - /// Pixels per inch - #[serde(default)] - dpi: Dpi, - /// Font configuration #[serde(default)] font: Font, @@ -318,7 +314,6 @@ impl Default for Config { Config { draw_bold_text_with_bright_colors: true, dimensions: Default::default(), - dpi: Default::default(), font: Default::default(), render_timer: Default::default(), custom_cursor_colors: false, @@ -1133,12 +1128,6 @@ impl Config { self.dimensions } - /// Get dpi config - #[inline] - pub fn dpi(&self) -> &Dpi { - &self.dpi - } - /// Get visual bell config #[inline] pub fn visual_bell(&self) -> &VisualBellConfig { @@ -1248,38 +1237,6 @@ impl Dimensions { } } -/// Pixels per inch -/// -/// This is only used on `FreeType` systems -#[derive(Debug, Deserialize)] -pub struct Dpi { - /// Horizontal dpi - x: f32, - - /// Vertical dpi - y: f32, -} - -impl Default for Dpi { - fn default() -> Dpi { - Dpi { x: 96.0, y: 96.0 } - } -} - -impl Dpi { - /// Get horizontal dpi - #[inline] - pub fn x(&self) -> f32 { - self.x - } - - /// Get vertical dpi - #[inline] - pub fn y(&self) -> f32 { - self.y - } -} - /// A delta for a point in a 2 dimensional plane #[derive(Clone, Copy, Debug, Deserialize)] pub struct Delta { diff --git a/src/display.rs b/src/display.rs index 012d803..cb5cf8c 100644 --- a/src/display.rs +++ b/src/display.rs @@ -134,7 +134,6 @@ impl Display { ) -> Result { // Extract some properties from config let font = config.font(); - let dpi = config.dpi(); let render_timer = config.render_timer(); // Create the window where Alacritty will be displayed @@ -147,7 +146,7 @@ impl Display { info!("device_pixel_ratio: {}", dpr); - let rasterizer = font::Rasterizer::new(dpi.x(), dpi.y(), dpr, config.use_thin_strokes())?; + let rasterizer = font::Rasterizer::new(dpr, config.use_thin_strokes())?; // Create renderer let mut renderer = QuadRenderer::new(&config, size)?;