aboutsummaryrefslogtreecommitdiff
path: root/alacritty/src/renderer/mod.rs
diff options
context:
space:
mode:
authorKirill Chibisov <contact@kchibisov.com>2022-02-18 01:27:10 +0300
committerGitHub <noreply@github.com>2022-02-18 01:27:10 +0300
commit4734b2b85073c775145bce1dd7deefd064003bda (patch)
tree88513eb653d223b77f869a323399d9a933dbc00b /alacritty/src/renderer/mod.rs
parentaaab88c5c5c94e11ffa3704407a3547cfabe4567 (diff)
downloadr-alacritty-4734b2b85073c775145bce1dd7deefd064003bda.tar.gz
r-alacritty-4734b2b85073c775145bce1dd7deefd064003bda.tar.bz2
r-alacritty-4734b2b85073c775145bce1dd7deefd064003bda.zip
Don't load font twice during display creation
This commit finishes the effort from a64553b to avoid reloading font twice during startup, since the original issue is with getting font metrics without building the glyph cache.
Diffstat (limited to 'alacritty/src/renderer/mod.rs')
-rw-r--r--alacritty/src/renderer/mod.rs37
1 files changed, 7 insertions, 30 deletions
diff --git a/alacritty/src/renderer/mod.rs b/alacritty/src/renderer/mod.rs
index e7878b6d..4aa562ad 100644
--- a/alacritty/src/renderer/mod.rs
+++ b/alacritty/src/renderer/mod.rs
@@ -156,14 +156,7 @@ pub struct GlyphCache {
}
impl GlyphCache {
- pub fn new<L>(
- mut rasterizer: Rasterizer,
- font: &Font,
- loader: &mut L,
- ) -> Result<GlyphCache, crossfont::Error>
- where
- L: LoadGlyph,
- {
+ pub fn new(mut rasterizer: Rasterizer, font: &Font) -> Result<GlyphCache, crossfont::Error> {
let (regular, bold, italic, bold_italic) = Self::compute_font_keys(font, &mut rasterizer)?;
// Need to load at least one glyph for the face before calling metrics.
@@ -173,7 +166,7 @@ impl GlyphCache {
let metrics = rasterizer.metrics(regular, font.size())?;
- let mut cache = Self {
+ Ok(Self {
cache: HashMap::default(),
rasterizer,
font_size: font.size(),
@@ -185,11 +178,7 @@ impl GlyphCache {
glyph_offset: font.glyph_offset,
metrics,
builtin_box_drawing: font.builtin_box_drawing,
- };
-
- cache.load_common_glyphs(loader);
-
- Ok(cache)
+ })
}
fn load_glyphs_for_font<L: LoadGlyph>(&mut self, font: FontKey, loader: &mut L) {
@@ -358,11 +347,11 @@ impl GlyphCache {
pub fn update_font_size<L: LoadGlyph>(
&mut self,
font: &Font,
- dpr: f64,
+ scale_factor: f64,
loader: &mut L,
) -> Result<(), crossfont::Error> {
// Update dpi scaling.
- self.rasterizer.update_dpr(dpr as f32);
+ self.rasterizer.update_dpr(scale_factor as f32);
self.font_offset = font.offset;
// Recompute font keys.
@@ -376,7 +365,7 @@ impl GlyphCache {
})?;
let metrics = self.rasterizer.metrics(regular, font.size())?;
- info!("Font size changed to {:?} with DPR of {}", font.size(), dpr);
+ info!("Font size changed to {:?} with scale factor of {}", font.size(), scale_factor);
self.font_size = font.size();
self.font_key = regular;
@@ -396,24 +385,12 @@ impl GlyphCache {
}
/// Prefetch glyphs that are almost guaranteed to be loaded anyways.
- fn load_common_glyphs<L: LoadGlyph>(&mut self, loader: &mut L) {
+ pub fn load_common_glyphs<L: LoadGlyph>(&mut self, loader: &mut L) {
self.load_glyphs_for_font(self.font_key, loader);
self.load_glyphs_for_font(self.bold_key, loader);
self.load_glyphs_for_font(self.italic_key, loader);
self.load_glyphs_for_font(self.bold_italic_key, loader);
}
-
- /// Calculate font metrics without access to a glyph cache.
- 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(rasterizer, &regular_desc, font.size())?;
- rasterizer.get_glyph(GlyphKey { font_key: regular, character: 'm', size: font.size() })?;
-
- rasterizer.metrics(regular, font.size())
- }
}
// NOTE: These flags must be in sync with their usage in the text.*.glsl shaders.