MCPcopy Index your code
hub / github.com/ChrisFeldmeier/OpenCodeRust / render_main

Method render_main

crates/opencode-tui/src/components/session.rs:156–254  ·  view source on GitHub ↗
(&mut self, frame: &mut Frame, area: Rect, prompt: &Prompt)

Source from the content-addressed store, hash-verified

154 }
155
156 fn render_main(&mut self, frame: &mut Frame, area: Rect, prompt: &Prompt) {
157 // Apply breathing boundary padding
158 let area = Rect {
159 x: area.x + 2,
160 y: area.y + 1,
161 width: area.width.saturating_sub(4),
162 height: area.height.saturating_sub(2),
163 };
164 if area.width == 0 || area.height == 0 {
165 return;
166 }
167
168 let show_header = {
169 let user_pref = *self.context.show_header.read();
170 if !user_pref { false } else { true }
171 };
172 let header_height = if show_header {
173 if area.width < HEADER_NARROW_THRESHOLD {
174 3u16
175 } else {
176 2u16
177 }
178 } else {
179 0u16
180 };
181 let session_footer_height = 0u16;
182 let desired_prompt_height = prompt.desired_height(area.width).max(3);
183 let total_height = area.height;
184 let available_after_header = total_height.saturating_sub(header_height);
185 let available_after_header_footer =
186 available_after_header.saturating_sub(session_footer_height);
187 let prompt_empty = prompt.get_input().trim().is_empty();
188 let viewport_height = if self.messages_viewport_height == 0 {
189 usize::from(available_after_header_footer)
190 } else {
191 self.messages_viewport_height
192 };
193 let near_bottom =
194 self.scroll_offset.saturating_add(viewport_height) >= self.rendered_line_count;
195 let show_prompt = !prompt_empty || near_bottom;
196 let prompt_height = if show_prompt {
197 desired_prompt_height.min(available_after_header_footer)
198 } else {
199 0
200 };
201
202 let layout = if !show_prompt {
203 Layout::default()
204 .direction(Direction::Vertical)
205 .constraints([
206 Constraint::Length(header_height),
207 Constraint::Min(0),
208 Constraint::Length(session_footer_height.min(available_after_header)),
209 Constraint::Length(0),
210 Constraint::Length(0),
211 ])
212 .split(area)
213 } else if available_after_header_footer <= prompt_height {

Callers 1

renderMethod · 0.80

Calls 8

readMethod · 0.80
is_emptyMethod · 0.80
get_inputMethod · 0.80
render_headerMethod · 0.80
render_messagesMethod · 0.80
render_session_footerMethod · 0.80
desired_heightMethod · 0.45
renderMethod · 0.45

Tested by

no test coverage detected