summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Depoire--Ferrer <56923875+greg904@users.noreply.github.com>2022-02-16 20:57:46 +0000
committerGitHub <noreply@github.com>2022-02-16 20:57:46 +0000
commita64553bbaf9e058f02d278dfa7104ea96fc58dd8 (patch)
treed332bd65a6ead6a6f3f0b368db994b1dd50fccac
parented5dbc11183030367c9a510a9706f6791b54430f (diff)
downloadalacritty-a64553bbaf9e058f02d278dfa7104ea96fc58dd8.tar.gz
alacritty-a64553bbaf9e058f02d278dfa7104ea96fc58dd8.zip
Reuse Rasterizer in Display::new
Instead of creating a `Rasterizer` to guess the window dimensions, dropping it and then creating a new one for the glyph cache, reuse the same `Rasterizer`. This prevents the font from being loaded twice during startup.
-rw-r--r--alacritty/src/display/mod.rs9
-rw-r--r--alacritty/src/renderer/mod.rs8
2 files changed, 10 insertions, 7 deletions
diff --git a/alacritty/src/display/mod.rs b/alacritty/src/display/mod.rs
index ef4cfc10..c58ded5d 100644
--- a/alacritty/src/display/mod.rs
+++ b/alacritty/src/display/mod.rs
@@ -232,7 +232,8 @@ impl Display {
};
// Guess the target window dimensions.
- let metrics = GlyphCache::static_metrics(config.font.clone(), estimated_dpr)?;
+ let mut rasterizer = Rasterizer::new(estimated_dpr as f32, config.font.use_thin_strokes)?;
+ let metrics = GlyphCache::static_metrics(&mut rasterizer, config.font.clone())?;
let (cell_width, cell_height) = compute_cell_size(config, &metrics);
// Guess the target window size if the user has specified the number of lines/columns.
@@ -256,12 +257,13 @@ impl Display {
)?;
info!("Device pixel ratio: {}", window.dpr);
+ rasterizer.update_dpr(window.dpr as f32);
// Create renderer.
let mut renderer = QuadRenderer::new()?;
let (glyph_cache, cell_width, cell_height) =
- Self::new_glyph_cache(window.dpr, &mut renderer, config)?;
+ Self::new_glyph_cache(rasterizer, &mut renderer, config)?;
if let Some(dimensions) = dimensions {
if (estimated_dpr - window.dpr).abs() < f64::EPSILON {
@@ -361,12 +363,11 @@ impl Display {
}
fn new_glyph_cache(
- dpr: f64,
+ rasterizer: Rasterizer,
renderer: &mut QuadRenderer,
config: &UiConfig,
) -> Result<(GlyphCache, f32, f32), Error> {
let font = config.font.clone();
- let rasterizer = Rasterizer::new(dpr as f32, config.font.use_thin_strokes)?;
// Initialize glyph cache.
let glyph_cache = {
diff --git a/alacritty/src/renderer/mod.rs b/alacritty/src/renderer/mod.rs
index ad59a4e1..e7878b6d 100644
--- a/alacritty/src/renderer/mod.rs
+++ b/alacritty/src/renderer/mod.rs
@@ -404,10 +404,12 @@ impl GlyphCache {
}
/// Calculate font metrics without access to a glyph cache.
- pub fn static_metrics(font: Font, dpr: f64) -> Result<crossfont::Metrics, crossfont::Error> {
- let mut rasterizer = crossfont::Rasterizer::new(dpr as f32, font.use_thin_strokes)?;
+ pub fn static_metrics(
+ rasterizer: &mut crossfont::Rasterizer,
+ font: Font,
+ ) -> Result<crossfont::Metrics, crossfont::Error> {
let regular_desc = GlyphCache::make_desc(font.normal(), Slant::Normal, Weight::Normal);
- let regular = Self::load_regular_font(&mut rasterizer, &regular_desc, font.size())?;
+ let regular = Self::load_regular_font(rasterizer, &regular_desc, font.size())?;
rasterizer.get_glyph(GlyphKey { font_key: regular, character: 'm', size: font.size() })?;
rasterizer.metrics(regular, font.size())