mirror of
https://github.com/alacritty/alacritty.git
synced 2024-11-18 13:55:23 -05:00
parent
8681e2e8a0
commit
bfb67ed8f2
2 changed files with 29 additions and 39 deletions
10
CHANGELOG.md
10
CHANGELOG.md
|
@ -4,6 +4,16 @@ All notable changes to this project will be documented in this file.
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [Unreleased]
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Accept fonts which are smaller in width or height than a single pixel
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Incorrect font spacing after moving Alacritty between displays
|
||||||
|
|
||||||
## Version 0.2.8
|
## Version 0.2.8
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
|
@ -43,9 +43,6 @@ pub enum Error {
|
||||||
|
|
||||||
/// Error in renderer
|
/// Error in renderer
|
||||||
Render(renderer::Error),
|
Render(renderer::Error),
|
||||||
|
|
||||||
/// Computed cell size is invalid
|
|
||||||
InvalidCellSize,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ::std::error::Error for Error {
|
impl ::std::error::Error for Error {
|
||||||
|
@ -54,7 +51,6 @@ impl ::std::error::Error for Error {
|
||||||
Error::Window(ref err) => Some(err),
|
Error::Window(ref err) => Some(err),
|
||||||
Error::Font(ref err) => Some(err),
|
Error::Font(ref err) => Some(err),
|
||||||
Error::Render(ref err) => Some(err),
|
Error::Render(ref err) => Some(err),
|
||||||
Error::InvalidCellSize => None,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,19 +59,16 @@ impl ::std::error::Error for Error {
|
||||||
Error::Window(ref err) => err.description(),
|
Error::Window(ref err) => err.description(),
|
||||||
Error::Font(ref err) => err.description(),
|
Error::Font(ref err) => err.description(),
|
||||||
Error::Render(ref err) => err.description(),
|
Error::Render(ref err) => err.description(),
|
||||||
Error::InvalidCellSize => "cell size is invalid",
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ::std::fmt::Display for Error {
|
impl ::std::fmt::Display for Error {
|
||||||
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
|
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
|
||||||
use std::error::Error as StdError;
|
|
||||||
match *self {
|
match *self {
|
||||||
Error::Window(ref err) => err.fmt(f),
|
Error::Window(ref err) => err.fmt(f),
|
||||||
Error::Font(ref err) => err.fmt(f),
|
Error::Font(ref err) => err.fmt(f),
|
||||||
Error::Render(ref err) => err.fmt(f),
|
Error::Render(ref err) => err.fmt(f),
|
||||||
Error::InvalidCellSize => write!(f, "{}", self.description()),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -262,45 +255,32 @@ impl Display {
|
||||||
// Need font metrics to resize the window properly. This suggests to me the
|
// Need font metrics to resize the window properly. This suggests to me the
|
||||||
// font metrics should be computed before creating the window in the first
|
// font metrics should be computed before creating the window in the first
|
||||||
// place so that a resize is not needed.
|
// place so that a resize is not needed.
|
||||||
let (cell_width, cell_height) =
|
let (cw, ch) = Self::compute_cell_size(config, &glyph_cache.font_metrics());
|
||||||
Self::compute_cell_size(&config, &glyph_cache.font_metrics())?;
|
|
||||||
|
|
||||||
Ok((glyph_cache, cell_width, cell_height))
|
Ok((glyph_cache, cw, ch))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn compute_cell_size(config: &Config, metrics: &font::Metrics) -> Result<(f32, f32), Error> {
|
pub fn update_glyph_cache(&mut self, config: &Config) {
|
||||||
let cell_width =
|
|
||||||
((metrics.average_advance + f64::from(config.font().offset().x)) as f32).floor();
|
|
||||||
let cell_height =
|
|
||||||
((metrics.line_height + f64::from(config.font().offset().y)) as f32).floor();
|
|
||||||
|
|
||||||
if cell_width < 1. || cell_height < 1. {
|
|
||||||
return Err(Error::InvalidCellSize)
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok((cell_width, cell_height))
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn update_glyph_cache(
|
|
||||||
&mut self,
|
|
||||||
config: &Config,
|
|
||||||
size: font::Size
|
|
||||||
) -> Result<(), Error> {
|
|
||||||
let dpr = self.size_info.dpr;
|
|
||||||
let cache = &mut self.glyph_cache;
|
let cache = &mut self.glyph_cache;
|
||||||
|
let dpr = self.size_info.dpr;
|
||||||
let (cell_width, cell_height) = Self::compute_cell_size(config, &cache.font_metrics())?;
|
let size = self.font_size;
|
||||||
|
|
||||||
self.font_size = size;
|
|
||||||
|
|
||||||
self.renderer.with_loader(|mut api| {
|
self.renderer.with_loader(|mut api| {
|
||||||
let _ = cache.update_font_size(config.font(), size, dpr, &mut api);
|
let _ = cache.update_font_size(config.font(), size, dpr, &mut api);
|
||||||
});
|
});
|
||||||
|
|
||||||
self.size_info.cell_width = cell_width;
|
let (cw, ch) = Self::compute_cell_size(config, &cache.font_metrics());
|
||||||
self.size_info.cell_height = cell_height;
|
self.size_info.cell_width = cw;
|
||||||
|
self.size_info.cell_height = ch;
|
||||||
|
}
|
||||||
|
|
||||||
Ok(())
|
fn compute_cell_size(config: &Config, metrics: &font::Metrics) -> (f32, f32) {
|
||||||
|
let offset_x = f64::from(config.font().offset().x);
|
||||||
|
let offset_y = f64::from(config.font().offset().y);
|
||||||
|
(
|
||||||
|
f32::max(1., ((metrics.average_advance + offset_x) as f32).floor()),
|
||||||
|
f32::max(1., ((metrics.line_height + offset_y) as f32).floor()),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
|
@ -346,13 +326,13 @@ impl Display {
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.font_size = terminal.font_size;
|
||||||
self.last_message = terminal.message_buffer_mut().message();
|
self.last_message = terminal.message_buffer_mut().message();
|
||||||
self.size_info.dpr = dpr;
|
self.size_info.dpr = dpr;
|
||||||
}
|
}
|
||||||
|
|
||||||
if font_changed && self.update_glyph_cache(config, terminal.font_size).is_err() {
|
if font_changed {
|
||||||
// Revert the terminal font size back to last known good state
|
self.update_glyph_cache(config);
|
||||||
terminal.font_size = self.font_size;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(psize) = new_size.take() {
|
if let Some(psize) = new_size.take() {
|
||||||
|
|
Loading…
Reference in a new issue