From f68150ee10966d71f187869a1c2e40f06aa2f047 Mon Sep 17 00:00:00 2001 From: "Dylan M. Taylor" Date: Mon, 2 Nov 2026 19:02:14 -0500 Subject: [PATCH] Replace the Account page with About (#1697) * UI: replace Account backstage page with About * UI: stack About columns in narrow windows; keep PowerPoint's Account in parity doc * UI: About review fixes: stack columns below 860pt, Help icon, Credits task; doc headers --- ROADMAP.md | 3 ++ crates/ui-egui/src/backstage.rs | 22 ++++++----- crates/ui-egui/src/backstage/info.rs | 54 ++++++++++++--------------- crates/ui-egui/src/backstage/tests.rs | 43 ++++++++++++++++++++- crates/ui-egui/src/lib.rs | 2 +- docs/ui-parity.md | 9 +++-- 6 files changed, 87 insertions(+), 46 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index ecf27f31..2c8c6571 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -2,6 +2,7 @@ **Stage: alpha** · next: beta, ~20 points and ~120–210 h away +> **Last reviewed:** 2026-11-02 · **Last updated:** 2026-11-02 · **Change:** trivial (File › About replaces Account; product links, credits and appearance retained; parity scores unchanged) · **Target:** Microsoft PowerPoint for Mac 16.113 (Microsoft 365) > **Last reviewed:** 2026-10-14 · **Last updated:** 2026-11-01 · **Change:** trivial (locked No Fill and no-outline click-through regression coverage added; No Fill hit-testing follows resolved fill instead of the presence of a style (#1621); scores unchanged) · **Target:** Microsoft PowerPoint for Mac 16.113 (Microsoft 365) > **Last reviewed:** 2026-10-14 · **Last updated:** 2026-10-30 · **Change:** trivial (progress log: read-only `slide.actions` lists shape and table text actions; parity scores unchanged) · **Target:** Microsoft PowerPoint for Mac 16.113 (Microsoft 365) > **Last reviewed:** 2026-10-14 · **Last updated:** 2026-10-27 · **Change:** trivial (progress log: Set Up Slide Show ▸ Keep mouse cursor visible, #1445; stage and scores unchanged) · **Target:** Microsoft PowerPoint for Mac 16.113 (Microsoft 365) @@ -148,6 +149,7 @@ app's JSON control channel (`deckcraft --control PORT`). | Date | What landed | |---|---| +| 2026-11-02 | File › About replaces the unused Account page, with version, project links, contributor/model credits and appearance preferences | | 2026-10-31 | No Fill shape interiors allow selection and editing of underlying objects, even when a quick style remains; hit-testing uses the renderer’s fill resolution. Outlines, rotation, text targets and actual fills keep their hit behaviour (#1621) | | 2026-10-30 | Print-preview tests use the URL emitted by egui and its exact file path; previews are explicitly removed before the macOS process exits | | 2026-10-30 | `slide.actions` lists shape click and hover actions and text-run hyperlinks (including table cells and grouped shapes) for audit; listing never runs an action. The UI pane is a follow-up | @@ -319,6 +321,7 @@ app's JSON control channel (`deckcraft --control PORT`). | Date | Change | Summary | |---|---|---| +| 2026-11-02 | trivial | File › About replaces Account; product links, credits and appearance retained | | 2026-10-31 | trivial | No Fill hit-testing follows resolved fill instead of the presence of a style (#1621); scores unchanged | | 2026-10-30 | trivial | Progress log: read-only slide action inspection; parity scores unchanged | | 2026-10-29 | trivial | Progress log: going back in the slide show reverses the left slide's transition (#1531). Scores and milestone names unchanged | diff --git a/crates/ui-egui/src/backstage.rs b/crates/ui-egui/src/backstage.rs index 1278e7d8..0fec08a5 100644 --- a/crates/ui-egui/src/backstage.rs +++ b/crates/ui-egui/src/backstage.rs @@ -2,7 +2,7 @@ //! bar until Esc or the back arrow returns to the presentation. With nothing open it is the start //! screen: PowerPoint's start screen and File › Home are the same page. //! -//! A side menu on the left picks a page (Home, New, Open, Info, Save As, Print, Export, Account); +//! A side menu on the left picks a page (Home, New, Open, Info, Save As, Print, Export, About); //! Save, Close and Options act at once. Every action runs an existing command through //! [`SlideApp::run`] or one of the app's file helpers ([`SlideApp::export_as`], //! [`SlideApp::print_pdf`], [`SlideApp::save_as_dialog`]); the state here is UI-only and never @@ -24,7 +24,7 @@ mod print; pub use files::split_path; use files::{home, new_page, open_page}; -use info::{PROPERTIES, account, commit_props, info, save_as}; +use info::{PROPERTIES, about, commit_props, info, save_as}; pub use info::{SAVE_TYPES, format_bytes}; use print::{export, print}; pub use print::{print_page_size, print_params, print_slides}; @@ -47,11 +47,11 @@ pub enum Page { SaveAs, Print, Export, - Account, + About, } impl Page { - pub const ALL: [Page; 8] = [Page::Home, Page::New, Page::Open, Page::Info, Page::SaveAs, Page::Print, Page::Export, Page::Account]; + pub const ALL: [Page; 8] = [Page::Home, Page::New, Page::Open, Page::Info, Page::SaveAs, Page::Print, Page::Export, Page::About]; /// The id `app.backstage {page}` takes. pub fn id(self) -> &'static str { @@ -63,12 +63,16 @@ impl Page { Page::SaveAs => "saveAs", Page::Print => "print", Page::Export => "export", - Page::Account => "account", + Page::About => "about", } } pub fn parse(id: &str) -> Option { let id = id.trim(); + // Keep existing control-channel callers working after the visible page rename. + if id.eq_ignore_ascii_case("account") { + return Some(Page::About); + } Page::ALL.into_iter().find(|p| p.id().eq_ignore_ascii_case(id)) } @@ -82,7 +86,7 @@ impl Page { Page::SaveAs => "Save As", Page::Print => "Print", Page::Export => "Export", - Page::Account => "Account", + Page::About => "About", } } @@ -95,7 +99,7 @@ impl Page { Page::SaveAs => Icon::SaveAs, Page::Print => Icon::Print, Page::Export => Icon::Export, - Page::Account => Icon::Account, + Page::About => Icon::Help, } } @@ -140,7 +144,7 @@ pub fn entries(has_doc: bool) -> (Vec