terminal_layout_context.rs

 1use super::*;
 2
 3pub struct TerminalLayoutData<'a> {
 4    pub text_style: TextStyle,
 5    pub selection_color: Color,
 6    pub terminal_theme: &'a TerminalStyle,
 7    pub size: TerminalDimensions,
 8}
 9
10impl<'a> TerminalLayoutData<'a> {
11    pub fn new(settings: &'a Settings, font_cache: &FontCache, constraint: Vector2F) -> Self {
12        let text_style = Self::make_text_style(font_cache, &settings);
13        let selection_color = settings.theme.editor.selection.selection;
14        let terminal_theme = &settings.theme.terminal;
15
16        let line_height = font_cache.line_height(text_style.font_size);
17
18        let cell_width = font_cache.em_advance(text_style.font_id, text_style.font_size);
19        let dimensions = TerminalDimensions::new(line_height, cell_width, constraint);
20
21        TerminalLayoutData {
22            size: dimensions,
23            text_style,
24            selection_color,
25            terminal_theme,
26        }
27    }
28
29    ///Configures a text style from the current settings.
30    pub fn make_text_style(font_cache: &FontCache, settings: &Settings) -> TextStyle {
31        // Pull the font family from settings properly overriding
32        let family_id = settings
33            .terminal_overrides
34            .font_family
35            .as_ref()
36            .or_else(|| settings.terminal_defaults.font_family.as_ref())
37            .and_then(|family_name| font_cache.load_family(&[family_name]).log_err())
38            .unwrap_or(settings.buffer_font_family);
39
40        let font_size = settings
41            .terminal_overrides
42            .font_size
43            .or(settings.terminal_defaults.font_size)
44            .unwrap_or(settings.buffer_font_size);
45
46        let font_id = font_cache
47            .select_font(family_id, &Default::default())
48            .unwrap();
49
50        TextStyle {
51            color: settings.theme.editor.text_color,
52            font_family_id: family_id,
53            font_family_name: font_cache.family_name(family_id).unwrap(),
54            font_id,
55            font_size,
56            font_properties: Default::default(),
57            underline: Default::default(),
58        }
59    }
60}