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.
This commit is contained in:
Joe Wilm 2017-10-08 18:10:29 -07:00 committed by Joe Wilm
parent b03ec0df37
commit 2ea20f4823
8 changed files with 11 additions and 72 deletions

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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<Rasterizer, Error> {
fn new(device_pixel_ratio: f32, use_thin_strokes: bool) -> Result<Rasterizer, Error> {
info!("device_pixel_ratio: {}", device_pixel_ratio);
Ok(Rasterizer {
fonts: HashMap::new(),

View File

@ -63,9 +63,7 @@ pub struct FreeTypeRasterizer {
faces: HashMap<FontKey, Face>,
library: Library,
keys: HashMap<PathBuf, FontKey>,
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<FreeTypeRasterizer, Error> {
fn new(device_pixel_ratio: f32, _: bool) -> Result<FreeTypeRasterizer, Error> {
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<Face, Error> {
// 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)?;

View File

@ -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<Self, Self::Err>
fn new(device_pixel_ratio: f32, use_thin_strokes: bool) -> Result<Self, Self::Err>
where Self: Sized;
/// Get `Metrics` for the given `FontKey`

View File

@ -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 {

View File

@ -134,7 +134,6 @@ impl Display {
) -> Result<Display, Error> {
// 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)?;