From ce6ede951caf84569563ffdf1ef5a98aeae484e1 Mon Sep 17 00:00:00 2001 From: Josh Groves Date: Mon, 29 Jul 2024 11:59:26 -0230 Subject: [PATCH] Move text area bounds outside run/glyph loops (#110) --- src/text_render.rs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/text_render.rs b/src/text_render.rs index f73da12..d89fd02 100644 --- a/src/text_render.rs +++ b/src/text_render.rs @@ -60,14 +60,21 @@ impl TextRenderer { let resolution = viewport.resolution(); for text_area in text_areas { + let bounds_min_x = text_area.bounds.left.max(0); + let bounds_min_y = text_area.bounds.top.max(0); + let bounds_max_x = text_area.bounds.right.min(resolution.width as i32); + let bounds_max_y = text_area.bounds.bottom.min(resolution.height as i32); + let is_run_visible = |run: &cosmic_text::LayoutRun| { let start_y = (text_area.top + run.line_top) as i32; let end_y = (text_area.top + run.line_top + run.line_height) as i32; - start_y <= text_area.bounds.bottom && text_area.bounds.top <= end_y + start_y <= bounds_max_y && bounds_min_y <= end_y }; - let layout_runs = text_area.buffer.layout_runs() + let layout_runs = text_area + .buffer + .layout_runs() .skip_while(|run| !is_run_visible(run)) .take_while(is_run_visible); @@ -198,11 +205,6 @@ impl TextRenderer { let mut width = details.width as i32; let mut height = details.height as i32; - let bounds_min_x = text_area.bounds.left.max(0); - let bounds_min_y = text_area.bounds.top.max(0); - let bounds_max_x = text_area.bounds.right.min(resolution.width as i32); - let bounds_max_y = text_area.bounds.bottom.min(resolution.height as i32); - // Starts beyond right edge or ends beyond left edge let max_x = x + width; if x > bounds_max_x || max_x < bounds_min_x {