ltk/widget/text_edit/
gutter.rsuse crate::render::Canvas;
use crate::types::Rect;
use super::metrics::MultilineMetrics;
use super::theme;
use super::TextFont;
pub( crate ) fn line_count( value: &str ) -> usize
{
value.bytes().filter( |&b| b == b'\n' ).count() + 1
}
pub( crate ) fn measure( canvas: &Canvas, label: &str, font_size: f32 ) -> f32
{
match crate::system_fonts::monospace()
{
Some( mono ) => canvas.measure_text_with_font( label, font_size, &mono ),
None => canvas.measure_text( label, font_size ),
}
}
pub( crate ) fn width( canvas: &Canvas, value: &str, font: &TextFont ) -> f32
{
let font_size = MultilineMetrics::resolve( canvas, font.size ).font_size;
let digits = "0".repeat( line_count( value ).to_string().len() );
measure( canvas, &digits, font_size ) + canvas.geom_px( theme::GUTTER_PAD )
}
pub( crate ) fn text_rect( canvas: &Canvas, rect: Rect, value: &str, font: &TextFont, line_numbers: bool ) -> Rect
{
if !line_numbers { return rect; }
let width = width( canvas, value, font ).min( rect.width );
Rect { x: rect.x + width, width: rect.width - width, ..rect }
}