From 39f84b287da78fa820a3611dcaa4e71573d09d89 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Tue, 14 Apr 2020 15:21:01 -0700 Subject: [PATCH] Make the paragraph color and line height in the NanoVG demo match the original more --- examples/canvas_nanovg/src/main.rs | 31 ++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/examples/canvas_nanovg/src/main.rs b/examples/canvas_nanovg/src/main.rs index 2f6c4934..a7a8a711 100644 --- a/examples/canvas_nanovg/src/main.rs +++ b/examples/canvas_nanovg/src/main.rs @@ -240,11 +240,21 @@ fn draw_paragraph(context: &mut CanvasRenderingContext2D, let main_text = MultilineTextBox::new(context, PARAGRAPH_TEXT, origin + vec2f(0.0, 24.0), - line_width, - MAIN_LINE_HEIGHT); - main_text.draw(context, rgbau(255, 255, 255, 16), ColorU::white()); + line_width); + let main_text_hit_location = main_text.hit_test(context, mouse_position); - if let Some(text_location) = main_text.hit_test(context, mouse_position) { + for (main_text_line_index, main_text_line) in main_text.lines.iter().enumerate() { + let bg_alpha = match main_text_hit_location { + Some(ref main_text_hit_location) if + main_text_hit_location.line_index == main_text_line_index as u32 => { + 64 + } + _ => 16, + }; + main_text_line.draw(context, rgbau(255, 255, 255, bg_alpha), ColorU::white()); + } + + if let Some(text_location) = main_text_hit_location { let caret_position = main_text.char_position(context, text_location); context.set_fill_style(rgbau(255, 192, 0, 255)); context.fill_rect(RectF::new(caret_position, vec2f(1.0, MAIN_LINE_HEIGHT))); @@ -275,7 +285,7 @@ fn draw_paragraph(context: &mut CanvasRenderingContext2D, context.set_text_align(TextAlign::Left); context.set_text_baseline(TextBaseline::Alphabetic); let tooltip_origin = main_text.bounds.lower_left() + vec2f(0.0, 38.0); - let tooltip = MultilineTextBox::new(context, HOVER_TEXT, tooltip_origin, 150.0, 18.0); + let tooltip = MultilineTextBox::new(context, HOVER_TEXT, tooltip_origin, 150.0); let mouse_vector = mouse_position.clamp(tooltip.bounds.origin(), tooltip.bounds.lower_right()) - mouse_position; context.set_global_alpha(util::clamp(mouse_vector.length() / 30.0, 0.0, 1.0)); @@ -333,10 +343,15 @@ impl MultilineTextBox { fn new(context: &mut CanvasRenderingContext2D, text: &str, mut origin: Vector2F, - max_width: f32, - line_height: f32) + max_width: f32) -> MultilineTextBox { - let space_width = context.measure_text("A B").width - context.measure_text("AB").width; + const LINE_SPACING: f32 = 3.0; + + let a_b_measure = context.measure_text("A B"); + let space_width = a_b_measure.width - context.measure_text("AB").width; + let line_height = a_b_measure.em_height_ascent - a_b_measure.em_height_descent + + LINE_SPACING; + let mut text: VecDeque> = text.split('\n').map(|paragraph| { paragraph.split(' ').map(|word| word.to_owned()).collect() }).collect();