use crate::event::Rect as QRect;
use crate::primitives::text_display::{TextDisplay, TextDisplayLayout, TextDisplayLineMeasure};
const SCROLLBAR_GUTTER_PT: f32 = 12.0;
const SCROLLBAR_MIN_THUMB_PT: f32 = 8.0;
pub fn mac_text_display_layout(
display: &TextDisplay,
rect: QRect,
line_height: f64,
char_width: f64,
) -> TextDisplayLayout {
let body_h = if display.title.is_some() {
(rect.height as f64 - line_height).max(0.0)
} else {
rect.height as f64
};
if body_h <= 0.0 {
return display.layout(0.0, 0.0, |_| {
TextDisplayLineMeasure::new(line_height as f32)
});
}
let body_width_px = if display.show_scrollbar {
(rect.width - SCROLLBAR_GUTTER_PT).max(0.0)
} else {
rect.width
};
let col_budget = crate::primitives::text_display::px_to_cols(body_width_px, char_width as f32);
let measure = |i: usize| {
let rows = crate::primitives::text_display::wrap_row_count(&display.lines[i], col_budget);
TextDisplayLineMeasure::new(rows as f32 * line_height as f32)
};
if display.show_scrollbar {
display.layout_with_scrollbar(
rect.width,
body_h as f32,
SCROLLBAR_GUTTER_PT,
SCROLLBAR_MIN_THUMB_PT,
measure,
)
} else {
display.layout(rect.width, body_h as f32, measure)
}
}