Skip to content

#601: #595 Stage 2 — TuiShellApp::render_content paints for real through &mut dyn Backend - #610

Merged
JDonaghy merged 1 commit into
developfrom
issue-601-595-stage-2-tuishellapp-render-content-p
Jul 24, 2026
Merged

#601: #595 Stage 2 — TuiShellApp::render_content paints for real through &mut dyn Backend#610
JDonaghy merged 1 commit into
developfrom
issue-601-595-stage-2-tuishellapp-render-content-p

Conversation

@JDonaghy

Copy link
Copy Markdown
Owner

Closes #601

Automated merge from the coordinator for assignment fcc962b588fd on issue #601.

Worker branch: issue-601-595-stage-2-tuishellapp-render-content-pdevelop.

Wires render_content to the trait-portable subset of draw_frame, now that
#600 routes paint through Backend::draw_*. Confirmed the remaining gap is
structural, not just unwired: TuiBackend's frame pointer is a private field
with no public accessor, so render_content(&mut dyn Backend) can never get
a raw ratatui::Frame/Buffer in any future stage -- only Backend::draw_*
trait calls (which reach the smuggled pointer internally, since
render_content already runs inside quadraui's own enter_frame_scope) will
ever work from this signature.

- render_tab_bar/draw_breadcrumb_bar/render_window_status_line/
  render_editor_hover_popup widened from concrete &mut TuiBackend to
  &mut dyn quadraui::Backend (same technique Stage 0 used for
  register_panel_accelerators) -- zero behavior change on the live
  event_loop() path via Rust's implicit unsized coercion.
- render_window/render_all_windows's Frame param is now Option: skips
  cursor placement (existing gap, quadraui#466/#604) and render_separators'
  divider lines (new gap, #609) when None; live path keeps passing
  Some(frame), unchanged.
- Extracted paint_editor_popups (completion/hover/editor-hover/diff-peek/
  signature-help) out of draw_frame so render_content calls the exact same
  code -- these were already trait-only, nothing to widen.
- New build_screen_for_shell_content mirrors build_screen_for_tui's
  row-accounting tail (quickfix/terminal/debug-toolbar/wildmenu/status
  rows) without re-subtracting activity-bar/sidebar width, since
  AppShellLayout::main_content_bounds already excludes that chrome.
- 2 new driver_with_shell screen_contains assertions: single-window editor
  text, and a vertical split proving multi-window painting.

What's still unpainted -- and structurally can't be from render_content's
&mut dyn Backend-only signature without raw buffer access -- split into
three follow-on issues, all added to epic #595's Work order (after: 601)
and to #605's (cutover) dependencies: #607 sidebar panel content, #608
quickfix/bottom panel (terminal PTY content), #609 window/group dividers +
tab-drag overlay + tab-hover tooltip.

Refs GOALS.md / PLAN.md Stage 2.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

#595 Stage 2 — TuiShellApp::render_content paints for real through &mut dyn Backend

1 participant