mirror of
https://github.com/storytold/designcraft.git
synced 2026-10-29 12:46:53 -06:00
fix(ui): View items in the View menu, laid out like InDesign's
Rotate Spread, Proof Setup, Proof Colors, Flattener Preview, Show Tag Markers, Separations Preview and Show/Hide Tagged Frames were at the end of the Type menu. They are in View now, which follows InDesign's order: Overprint Preview and proofing, zoom, Rotate Spread, Screen Mode, Display Performance, rulers, Extras (frame edges, text threads), Grids & Guides and Structure (tagged frames, tag markers). Show Hidden Characters stays in Type, as in InDesign; W still toggles Preview. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
ca343e8985
commit
e1e5c35eeb
@@ -129,6 +129,7 @@ list) · [roadmap.md](docs/roadmap.md) (milestones, plan) · [parity-checklist.m
|
||||
|
||||
Newest first.
|
||||
|
||||
- **2026-10-11** · The View menu follows InDesign's: proofing first, then zoom, Rotate Spread, Screen Mode, Display Performance, rulers, Extras, Grids & Guides and Structure; the view items that sat at the end of the Type menu moved there. No readiness percentage change.
|
||||
- **2026-10-10 (UI.4–UI.5):** Panel tabs can move into other groups, split the dock, float, resize and return to their saved locations through shared docking transactions. Layouts persist in custom workspaces; UI and control commands share the same validated action path. Shared pane geometry and widget-state theme application retain all five palettes and local fonts. Split panes send keyboard input only to the focused canvas and scope contextual toolbar IDs per pane. No readiness percentage change.
|
||||
- **2026-10-10** · Version 0.6.0; releases add a Linux riscv64 tar.gz (cross-compiled, CLI
|
||||
smoke-tested under QEMU).
|
||||
|
||||
@@ -2810,6 +2810,9 @@ const TABLE: &[(&str, [&str; 5])] = &[
|
||||
("Paragraph Rules", ["Absatzlinien", "Filets de paragraphe", "Filetes de párrafo", "段落境界線", "段落线"]),
|
||||
("Rule Below", ["Linie unterhalb", "Filet après", "Filete después", "後境界線", "下方横线"]),
|
||||
("Tint:", ["Farbton:", "Teinte:", "Matiz:", "濃淡:", "色调:"]),
|
||||
("Slug", ["Infobereich", "Ligne-bloc", "Indicaciones", "印刷可能領域", "辅助信息区"]),
|
||||
("Presentation", ["Präsentation", "Présentation", "Presentación", "プレゼンテーション", "演示文稿"]),
|
||||
("Extras", ["Extras", "Options supplémentaires", "Extras", "エクストラ", "附加"]),
|
||||
("Column", ["Spalte", "Colonne", "Columna", "段", "栏"]),
|
||||
];
|
||||
|
||||
|
||||
@@ -1492,4 +1492,5 @@ pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
("Paragraph Rules", "Filetti paragrafo"),
|
||||
("Rule Below", "Filetto sotto"),
|
||||
("Tint:", "Tinta:"),
|
||||
("Presentation", "Presentazione"),
|
||||
];
|
||||
|
||||
+72
-32
@@ -402,34 +402,6 @@ pub const MENUS: &[(&str, &[&str])] = &[
|
||||
"cmd:type.sizeDown",
|
||||
"-",
|
||||
"ui:view.hiddenCharacters",
|
||||
"ui:view.taggedFrames",
|
||||
">Rotate Spread",
|
||||
"ui:view.rotateSpread|90° CW|{\"angle\": 90}",
|
||||
"ui:view.rotateSpread|90° CCW|{\"angle\": -90}",
|
||||
"ui:view.rotateSpread|180°|{\"angle\": 180}",
|
||||
"ui:view.rotateSpread|Clear Rotation|{\"angle\": 0}",
|
||||
"<",
|
||||
">Proof Setup",
|
||||
"ui:view.proofSetup|Working CMYK|{\"target\": \"workingCmyk\"}",
|
||||
"ui:view.proofSetup|Internet Standard RGB (sRGB)|{\"target\": \"srgb\"}",
|
||||
"ui:view.proofSetup|Legacy Macintosh RGB|{\"target\": \"legacyMacRgb\"}",
|
||||
"ui:view.proofSetup|Monitor RGB|{\"target\": \"monitorRgb\"}",
|
||||
"ui:view.proofSetup|Color Blindness – Protanopia|{\"target\": \"protanopia\"}",
|
||||
"ui:view.proofSetup|Color Blindness – Deuteranopia|{\"target\": \"deuteranopia\"}",
|
||||
"-",
|
||||
"ui:view.proofSetup|Simulate Paper Color|{\"simulatePaper\": \"toggle\"}",
|
||||
"<",
|
||||
"ui:view.proofColors",
|
||||
"ui:view.flattenerPreview",
|
||||
"ui:view.tagMarkers",
|
||||
">Separations Preview",
|
||||
"ui:view.separations|Off|{\"plate\": null, \"inkLimit\": null}",
|
||||
"ui:view.separations|Cyan|{\"plate\": \"cyan\"}",
|
||||
"ui:view.separations|Magenta|{\"plate\": \"magenta\"}",
|
||||
"ui:view.separations|Yellow|{\"plate\": \"yellow\"}",
|
||||
"ui:view.separations|Black|{\"plate\": \"black\"}",
|
||||
"ui:view.separations|Ink Limit 300%|{\"inkLimit\": 300}",
|
||||
"<",
|
||||
"-",
|
||||
">Hyperlinks & Cross-References",
|
||||
"cmd:hyperlink.create",
|
||||
@@ -619,6 +591,28 @@ pub const MENUS: &[(&str, &[&str])] = &[
|
||||
(
|
||||
"View",
|
||||
&[
|
||||
"ui:view.overprintPreview",
|
||||
">Proof Setup",
|
||||
"ui:view.proofSetup|Working CMYK|{\"target\": \"workingCmyk\"}",
|
||||
"ui:view.proofSetup|Internet Standard RGB (sRGB)|{\"target\": \"srgb\"}",
|
||||
"ui:view.proofSetup|Legacy Macintosh RGB|{\"target\": \"legacyMacRgb\"}",
|
||||
"ui:view.proofSetup|Monitor RGB|{\"target\": \"monitorRgb\"}",
|
||||
"ui:view.proofSetup|Color Blindness – Protanopia|{\"target\": \"protanopia\"}",
|
||||
"ui:view.proofSetup|Color Blindness – Deuteranopia|{\"target\": \"deuteranopia\"}",
|
||||
"-",
|
||||
"ui:view.proofSetup|Simulate Paper Color|{\"simulatePaper\": \"toggle\"}",
|
||||
"<",
|
||||
"ui:view.proofColors",
|
||||
">Separations Preview",
|
||||
"ui:view.separations|Off|{\"plate\": null, \"inkLimit\": null}",
|
||||
"ui:view.separations|Cyan|{\"plate\": \"cyan\"}",
|
||||
"ui:view.separations|Magenta|{\"plate\": \"magenta\"}",
|
||||
"ui:view.separations|Yellow|{\"plate\": \"yellow\"}",
|
||||
"ui:view.separations|Black|{\"plate\": \"black\"}",
|
||||
"ui:view.separations|Ink Limit 300%|{\"inkLimit\": 300}",
|
||||
"<",
|
||||
"ui:view.flattenerPreview",
|
||||
"-",
|
||||
"ui:view.zoomIn",
|
||||
"ui:view.zoomOut",
|
||||
"ui:view.fitPage",
|
||||
@@ -627,8 +621,20 @@ pub const MENUS: &[(&str, &[&str])] = &[
|
||||
"ui:view.actualSize",
|
||||
"ui:view.entirePasteboard",
|
||||
"-",
|
||||
"ui:view.overprintPreview",
|
||||
"ui:view.togglePreview",
|
||||
">Rotate Spread",
|
||||
"ui:view.rotateSpread|90° CW|{\"angle\": 90}",
|
||||
"ui:view.rotateSpread|90° CCW|{\"angle\": -90}",
|
||||
"ui:view.rotateSpread|180°|{\"angle\": 180}",
|
||||
"ui:view.rotateSpread|Clear Rotation|{\"angle\": 0}",
|
||||
"<",
|
||||
"-",
|
||||
">Screen Mode",
|
||||
"ui:view.screenMode|Normal|{\"mode\": \"normal\"}",
|
||||
"ui:view.screenMode|Preview|{\"mode\": \"preview\"}",
|
||||
"ui:view.screenMode|Bleed|{\"mode\": \"bleed\"}",
|
||||
"ui:view.screenMode|Slug|{\"mode\": \"slug\"}",
|
||||
"ui:view.screenMode|Presentation|{\"mode\": \"presentation\"}",
|
||||
"<",
|
||||
">Display Performance",
|
||||
"ui:view.fastDisplay",
|
||||
"ui:view.typicalDisplay",
|
||||
@@ -636,10 +642,11 @@ pub const MENUS: &[(&str, &[&str])] = &[
|
||||
"<",
|
||||
"-",
|
||||
"ui:view.rulers",
|
||||
"-",
|
||||
">Extras",
|
||||
"ui:view.frameEdges",
|
||||
"ui:view.textThreads",
|
||||
"ui:view.hiddenCharacters",
|
||||
"-",
|
||||
"<",
|
||||
">Grids & Guides",
|
||||
"ui:view.guides",
|
||||
"ui:view.snapToGuides",
|
||||
@@ -649,6 +656,11 @@ pub const MENUS: &[(&str, &[&str])] = &[
|
||||
"-",
|
||||
"ui:app.deleteAllGuides",
|
||||
"<",
|
||||
"-",
|
||||
">Structure",
|
||||
"ui:view.taggedFrames",
|
||||
"ui:view.tagMarkers",
|
||||
"<",
|
||||
],
|
||||
),
|
||||
(
|
||||
@@ -2274,6 +2286,34 @@ pub fn quick_apply_items(session: &designcraft_engine::Session, query: &str) ->
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
/// The entries (command ids) of a menu bar menu, submenus included.
|
||||
fn menu_ids(title: &str) -> Vec<&'static str> {
|
||||
let items = MENUS.iter().find(|(t, _)| *t == title).map(|(_, items)| *items).unwrap_or_default();
|
||||
items.iter().filter_map(|e| e.split_once(':').map(|(_, rest)| rest.split('|').next().unwrap_or(rest))).collect()
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn view_items_are_in_the_view_menu_as_in_indesign() {
|
||||
let (view, typ) = (menu_ids("View"), menu_ids("Type"));
|
||||
for id in [
|
||||
"view.rotateSpread",
|
||||
"view.proofSetup",
|
||||
"view.proofColors",
|
||||
"view.flattenerPreview",
|
||||
"view.separations",
|
||||
"view.taggedFrames",
|
||||
"view.tagMarkers",
|
||||
] {
|
||||
assert!(view.contains(&id), "{id} is in View");
|
||||
assert!(!typ.contains(&id), "{id} isn't in Type");
|
||||
}
|
||||
// Screen Mode and Extras are View submenus; Show Hidden Characters stays in Type.
|
||||
assert!(view.contains(&"view.screenMode") && view.contains(&"view.frameEdges"));
|
||||
assert!(typ.contains(&"view.hiddenCharacters") && !view.contains(&"view.hiddenCharacters"));
|
||||
// W still toggles Normal / Preview without a menu entry.
|
||||
assert_eq!(ui_label("view.togglePreview").and_then(|c| c.1), Some("W"));
|
||||
}
|
||||
|
||||
fn walk(items: &[Item], out: &mut Vec<(String, String, Value)>) {
|
||||
for it in items {
|
||||
match it {
|
||||
|
||||
Reference in New Issue
Block a user