Fix up merged PRs: one Editing group on Home, fmt, docs after the format/canvas/dialog merges

- Home: #556's Find and Replace join main's Replace Fonts… in one Editing group with the
  Selection Pane, as PowerPoint lays it out; the separate group pushed Replace Fonts… out of
  reach at 1400 px. The Replace Fonts test picks the dialog's Replace button, not the ribbon's.
- cargo fmt.
- docs: parity summary regenerated with `cargo xtask parity`; ui-parity's ruler row says tab
  stops are set on the ruler (#567/#569) as well as in the Tabs dialog.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Brandon Thomas
2026-10-14 15:04:16 -04:00
co-authored by Claude Opus 5.5
parent 3af36720fd
commit 320e3a971a
7 changed files with 15 additions and 39 deletions
-1
View File
@@ -398,7 +398,6 @@ fn replace_word(s: &mut Session, p: &Value) -> Result<Value> {
s.execute("text.insert", &json!({"text": with}))
}
fn comparing(s: &Session) -> std::result::Result<(), String> {
if s.active().is_some_and(|d| d.compare.is_some()) { Ok(()) } else { Err("not comparing".into()) }
}
-1
View File
@@ -1154,7 +1154,6 @@ fn grid_fits(span: f32, step: f32) -> bool {
span.is_finite() && span > 0.0 && step >= 1.0 && span / step <= 800.0
}
#[cfg(test)]
mod tests {
#![allow(clippy::unwrap_used, clippy::expect_used)]
+2 -2
View File
@@ -1401,12 +1401,12 @@ mod animpane_tests;
#[cfg(test)]
mod browsetheme_tests;
#[cfg(test)]
mod compare_tests;
#[cfg(test)]
mod eyedropper_tests;
#[cfg(test)]
mod huge_deck_tests;
#[cfg(test)]
mod compare_tests;
#[cfg(test)]
mod ime_tests;
#[cfg(test)]
mod replacefonts_tests;
+2 -1
View File
@@ -50,7 +50,8 @@ fn ribbon_button_opens_the_dialog_and_replaces() {
d.fields.insert("to".into(), "Lato".into());
}
h.run_steps(2);
h.get_by_label("Replace").click();
// The ribbon has a Replace button too (Find and Replace); the dialog's is drawn last.
h.query_all_by_label("Replace").last().expect("the dialog's Replace button").click();
h.run_steps(3);
assert_eq!(run_font(&h).as_deref(), Some("Lato"));
// The dialog stays open with a confirmation, like PowerPoint's.
+4 -5
View File
@@ -1160,18 +1160,17 @@ fn home(app: &mut SlideApp, ui: &mut Ui) {
big(app, ui, Icon::Picture, "Picture", "app.insertPictureDialog", json!({}));
});
drawing_group(app, ui);
// Editing, as in PowerPoint: Find, Replace and Replace Fonts, then the Selection Pane.
group(ui, |ui| {
ui.vertical(|ui| {
small(app, ui, Icon::Search, "Find", "app.find", json!({}));
small(app, ui, Icon::Spelling, "Replace", "app.replace", json!({}));
if small_button(ui, Icon::Fonts, "Replace Fonts…", enabled(app, "font.replace"), false).clicked() {
app.dialog = Some(crate::dialogs::Dialog::new("replaceFonts"));
}
});
});
group(ui, |ui| {
// Also under Arrange, but that is disabled until something is selected (#132).
big(app, ui, Icon::SelectionPane, "Selection\nPane", "view.pane", json!({"pane": "selection"}));
if small_button(ui, Icon::Fonts, "Replace Fonts…", enabled(app, "font.replace"), false).clicked() {
app.dialog = Some(crate::dialogs::Dialog::new("replaceFonts"));
}
});
group(ui, |ui| {
big(app, ui, Icon::DesignIdeas, "Design\nIdeas", "view.pane", json!({"pane": "designer"}));
+6 -28
View File
@@ -3,55 +3,33 @@
> **Generated:** 2026-10-10 (summary by `cargo xtask parity`; rows re-scored 2026-10-10 against PowerPoint for Mac 16.113.4) · **Target:** Microsoft PowerPoint for Mac 16.113 (Microsoft 365)
The summary between `<!-- SUMMARY -->
**Weighted breadth parity: 80%** over 191 features.
**Weighted breadth parity: 82%** over 193 features.
| Priority | Features | Done | Partial | Missing | Parity |
|---|---|---|---|---|---|
| P0 | 72 | 61 | 11 | 0 | 92% |
| P1 | 65 | 39 | 20 | 6 | 75% |
| P2 | 54 | 13 | 15 | 26 | 38% |
| P1 | 65 | 38 | 21 | 6 | 75% |
| P2 | 54 | 13 | 16 | 25 | 39% |
| P1 | 65 | 38 | 21 | 6 | 75% |
| P2 | 54 | 14 | 15 | 25 | 40% |
| P1 | 65 | 39 | 21 | 5 | 76% |
| P2 | 54 | 14 | 17 | 23 | 42% |
| P2 | 54 | 14 | 14 | 26 | 39% |
| P1 | 65 | 38 | 21 | 6 | 75% |
| P2 | 54 | 13 | 16 | 25 | 39% |
| P1 | 65 | 38 | 21 | 6 | 75% |
| P2 | 54 | 13 | 16 | 25 | 39% |
| P1 | 66 | 43 | 18 | 5 | 79% |
| P2 | 55 | 16 | 20 | 19 | 47% |
| Area | Parity |
|---|---|
| Application shell | 81% |
| Files | 71% |
| Slides | 90% |
| Views | 93% |
| Views | 95% |
| Masters & themes | 85% |
| Views | 90% |
| Views | 98% |
| Masters & themes | 88% |
| Shapes | 88% |
| Shapes | 91% |
| Format | 83% |
| Arrange | 100% |
| Text | 80% |
| Text | 82% |
| Tables | 95% |
| Text | 81% |
| Text | 81% |
| Tables | 89% |
| Charts | 65% |
| SmartArt | 33% |
| Pictures | 52% |
| SmartArt | 50% |
| Pictures | 48% |
| Pictures | 52% |
| Media | 67% |
| Transitions | 100% |
| Animations | 79% |
| Slide show | 68% |
| Review | 60% |
| Slide show | 66% |
| Review | 70% |
| Draw | 33% |
| Undo & clipboard | 100% |
+1 -1
View File
@@ -139,7 +139,7 @@ menu colours taken from the theme tokens (menu `chrome`, page `card`).
| Context menus on shapes, slides, text, thumbnails | yes | yes, shorter; a right click selects the shape under the pointer first |
| WordArt transform | Transform gallery | Shape Format ▸ Text Effects ▸ Transform (`format.textWarp`): No Transform, Follow Path and the other 36 presets. No adjust handles |
| Exact size/position, lock aspect | yes | yes |
| Rulers with indent markers and tab stops | yes | rulers yes; tab stops are set in the Tabs dialog, not on the ruler |
| Rulers with indent markers and tab stops | yes | yes: indent markers and tab stops drag on the ruler (a click adds a tab, the corner selector picks its kind); Tabs dialog from Home › Paragraph and the Paragraph dialog |
| Context menus on shapes, slides, text, thumbnails | yes | yes, shorter |
| Drag and drop of files and between thumbnails | yes | yes |
| Slide Sorter sections: a bar per section, add, rename in place, collapse, drag the whole section (its slides move with it) | yes | yes |