orinium_browser/engine/bridge/text/
fallback.rs1use super::{TextMeasureError, TextMeasureRequest, TextMeasurer};
4use crate::engine::{bridge::text::MeasuredFragment, layouter::types::TextStyle};
5
6#[derive(Debug, Default)]
12pub struct FallbackTextMeasurer;
13
14impl TextMeasurer<TextStyle> for FallbackTextMeasurer {
15 fn measure(
16 &self,
17 request: &TextMeasureRequest<TextStyle>,
18 ) -> Result<Vec<MeasuredFragment>, TextMeasureError> {
19 let font_size = request.style.font_size.max(1.0);
20
21 let char_width = font_size * 0.6;
23 let line_height = font_size * 1.2;
24
25 let fragments: Vec<MeasuredFragment> = request
26 .text
27 .split('\n')
28 .map(|line| {
29 let w = line.len() as f32 * char_width;
30 MeasuredFragment {
31 text: line.to_string(),
32 width: w,
33 height: line_height,
34 }
35 })
36 .collect();
37
38 Ok(fragments)
39 }
40}