From 5a86fcc1b2b9f3c05b5e23dc0af7a87523c7f8c1 Mon Sep 17 00:00:00 2001 From: Vinzenz Schroeter Date: Sun, 26 Jan 2025 13:27:18 +0100 Subject: [PATCH] split render function --- src/font_renderer.rs | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/font_renderer.rs b/src/font_renderer.rs index 7ec20bb..e277c3d 100644 --- a/src/font_renderer.rs +++ b/src/font_renderer.rs @@ -13,7 +13,7 @@ use pathfinder_geometry::{ vector::{vec2f, vec2i}, }; use servicepoint::{Bitmap, Grid, Origin, Pixels, TILE_SIZE}; -use std::sync::Mutex; +use std::sync::{Mutex, MutexGuard}; struct SendFont(Font); @@ -76,14 +76,9 @@ impl FontRenderer8x8 { bitmap: &mut Bitmap, offset: Origin, ) -> Result<(), RenderError> { - let mut canvas = self.canvas.lock().unwrap(); - let glyph_id = self - .font - .as_ref() - .glyph_for_char(char) - .or(self.fallback_char) - .ok_or_else(|| GlyphNotFound(char))?; + let glyph_id = self.get_glyph(char)?; + let mut canvas = self.canvas.lock().unwrap(); canvas.pixels.fill(0); self.font.as_ref().rasterize_glyph( &mut canvas, @@ -95,6 +90,14 @@ impl FontRenderer8x8 { RasterizationOptions::Bilevel, )?; + Self::copy_to_bitmap(canvas, bitmap, offset) + } + + fn copy_to_bitmap( + canvas: MutexGuard, + bitmap: &mut Bitmap, + offset: Origin, + ) -> Result<(), RenderError> { for y in 0..TILE_SIZE { for x in 0..TILE_SIZE { let canvas_val = canvas.pixels[x + y * TILE_SIZE] != 0; @@ -105,9 +108,16 @@ impl FontRenderer8x8 { } } } - Ok(()) } + + fn get_glyph(&self, char: char) -> Result { + self.font + .as_ref() + .glyph_for_char(char) + .or(self.fallback_char) + .ok_or_else(|| GlyphNotFound(char)) + } } impl Default for FontRenderer8x8 {