vtcode_tui/core_tui/session/
impl_layout.rs1use super::*;
2use crate::ui::tui::widgets::LayoutMode;
3
4impl Session {
5 pub(crate) fn resolved_layout_mode(&self, area: Rect) -> LayoutMode {
6 match self.appearance.layout_mode {
7 config::LayoutModeOverride::Auto => LayoutMode::from_area(area),
8 config::LayoutModeOverride::Compact => LayoutMode::Compact,
9 config::LayoutModeOverride::Standard => LayoutMode::Standard,
10 config::LayoutModeOverride::Wide => LayoutMode::Wide,
11 }
12 }
13
14 pub fn apply_view_rows(&mut self, rows: u16) {
15 let resolved = rows.max(2);
16 if self.view_rows != resolved {
17 self.view_rows = resolved;
18 self.invalidate_scroll_metrics();
19 }
20 self.recalculate_transcript_rows();
21 self.enforce_scroll_bounds();
22 }
23
24 #[allow(dead_code)]
25 pub(crate) fn force_view_rows(&mut self, rows: u16) {
26 self.apply_view_rows(rows);
27 }
28
29 pub(super) fn recalculate_transcript_rows(&mut self) {
30 let header_rows = self.header_rows.max(ui::INLINE_HEADER_HEIGHT);
32 let reserved = (header_rows + self.input_height).saturating_add(2);
33 let available = self.view_rows.saturating_sub(reserved).max(1);
34
35 if self.transcript_rows != available {
36 self.transcript_rows = available;
37 self.invalidate_scroll_metrics();
38 }
39 }
40}