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}