Skip to content

Presenter View: resizable section rail with slide previews - #1564

Draft
MisterSolon wants to merge 10 commits into
storytold:mainfrom
MisterSolon:feat/presenter-section-rail
Draft

MisterSolon wants to merge 10 commits into
storytold:mainfrom
MisterSolon:feat/presenter-section-rail

Conversation

@MisterSolon

@MisterSolon MisterSolon commented Oct 30, 2026 •

Copy link
Copy Markdown

Dependency and scope

Draft, stacked on #1544. Keep this PR as a draft until A is merged, then rebase onto the resulting main so only the section rail and optional persistent grid remain in its diff.

Summary

Add a resizable, collapsible section rail beside the native presenter's current slide, next slide and notes. Opening or folding a section leaves the audience slide unchanged; picking a preview navigates to that slide. The rail supports one or two previews per row, highlights the current section, and truncates long names with a tooltip.

The divider resizes the rail up to a third of the window while preserving room for the slide and notes. Clicking the grip hides or restores it. Only visible previews remain cached, with bounded texture dimensions and per-frame rendering work; folding or hiding the rail frees its previews.

This PR introduces Keep All slides open, moved out of #1544. It defaults off: selecting a native thumbnail by click or Enter closes the grid. When enabled, selection preserves the grid. Disabling it closes the grid while preserving expanded rail sections. Escape, G and presenter-window close still dismiss the grid. The remote web presenter is unchanged.

The rail and persistence option are DeckCraft additions; they do not increase PowerPoint parity scores. No document-model or file-format change. A's startup GPU fix and upstream asynchronous next-slide previews are preserved.

Validation

  • All eight local CI stages passed: fmt, pdf-deps, Clippy, workspace tests, doctests, assets, layers and WASM.
  • UI suite: 527 passed, 4 ignored. Includes rail navigation/layout/resize, persistence on/off, input-state identity, Enter/Escape, checkbox disable behavior, invalid dimensions and more than 48 visible rail previews with release on fold.
  • Native Windows / DirectX 12 direct --show startup verified with 300 slides, Presenter View, G/Escape and normal shutdown.
  • Contributor visual testing of the previous published build reported no observed issues after the startup fix.
  • Restacked onto revised A e1bafbe and main 159ed07. All eight local CI gates ran on this final B source, including the bounded tab strip, removed-filter recovery and remote-popup keyboard regressions.
  • Rebuilt native binary verified with 61 long sections at 1000 x 700: the last section retains a visible preview; removing all sections restores the complete grid. Normal exit 0.

Validated source: 200a231. Local validation is separate from GitHub CI and maintainer review; GitHub checks need to run on the updated branch. B remains a dependent draft.

@coderabbitai

coderabbitai Bot commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Tip

🎯 Customize your risk assessments

Guide how CodeRabbit assesses merge risk and security architecture risk. Highlight sensitive changes and explain your security boundaries using Merge Risk Instructions and Security Risk Instructions in your review settings. Security architecture risk assessments require the Advanced plan or above.

✅ Automatic approvals, with your rules

Let CodeRabbit approve pull requests once required threads are resolved, pre-merge checks pass, and your risk limits are met. Enable Automatic approvals in review settings, with overrides for teams or file paths.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@aiongg aiongg added the missing feature The reference application has it and we do not, or only part of it label Nov 4, 2026
MisterSolon and others added 8 commits November 6, 2026 18:16
See All Slides stopped at 48 slides and ignored sections. The grid now lists
every slide, scrolls with fixed-size readable thumbnails, renders only the
cells in view and keeps a bounded texture cache. Section tabs filter it
(All slides / section / Other slides), with the current slide's section
selected when it opens; the same grid works in Presenter View. A "Keep All
slides open" checkbox leaves the presenter grid up after a pick, so the
presenter can jump again without reopening it; turning it off restores the
classic current/next/notes layout.

Keys: Page Up/Down, Home/End and the arrow keys scroll, Left/Right switch
tabs, Enter goes to the first slide of the selected tab.

Co-Authored-By: DeepSeek V4.1 Flash <noreply@deepseek.com>
- Presenter View Enter uses pick_presenter_slide, so Keep All slides open
  also works from the keyboard.
- grid_slide_hit ignores points outside the visible grid, so a click in the
  title or tab strip cannot pick a partly scrolled cell.
- Restore the slide-show reliance weight (8) and the 110 total in the parity
  table; only the checklist row was added, the weight did not change.
- Regression tests for the Enter path and the clipped hit test.

Co-Authored-By: DeepSeek V4.1 Flash <noreply@deepseek.com>
@MisterSolon
MisterSolon force-pushed the feat/presenter-section-rail branch from abb2ea5 to 8e66ad5 Compare November 6, 2026 17:24

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

missing feature The reference application has it and we do not, or only part of it

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants