Co-authored-by: Brandon Thomas <echelon@gmail.com>
This commit is contained in:
parent
2db1b26d9d
commit
b4044a5c0c
|
|
@ -854,7 +854,6 @@ pub const HIDDEN_UNTIL_IMPLEMENTED: &[&str] = &[
|
|||
"interface.dynamicColorSliders",
|
||||
"workspace.autoCollapseIconPanels",
|
||||
"workspace.autoShowHiddenPanels",
|
||||
"workspace.openDocumentsAsTabs",
|
||||
"workspace.enableFloatingDocumentWindowDocking",
|
||||
"workspace.enableNarrowOptionsBar",
|
||||
"tools.enableFlickPanning",
|
||||
|
|
|
|||
|
|
@ -665,3 +665,21 @@ fn notices_render_without_panicking() {
|
|||
out.textures_delta.clear();
|
||||
assert_eq!(app.ui.notices.len(), 2);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn open_documents_as_tabs_preference_controls_floating_windows() {
|
||||
let (mut app, _) = app_with(Vec::new());
|
||||
app.session.edit_prefs(|p| p.workspace.open_documents_as_tabs = false);
|
||||
app.open_bytes("a.psd", b"x").unwrap();
|
||||
assert_eq!(app.ui.windows.len(), 1);
|
||||
assert_eq!(app.ui.windows[0].document, 0);
|
||||
|
||||
app.run("file.new", json!({"width": 100, "height": 100})).unwrap();
|
||||
assert_eq!(app.ui.windows.len(), 2);
|
||||
assert_eq!(app.ui.windows[1].document, 1);
|
||||
|
||||
// Opening with preference true docks into tabs, creating no new floating window
|
||||
app.session.edit_prefs(|p| p.workspace.open_documents_as_tabs = true);
|
||||
app.open_bytes("b.psd", b"x").unwrap();
|
||||
assert_eq!(app.ui.windows.len(), 2);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -844,6 +844,14 @@ impl PhotocraftApp {
|
|||
}
|
||||
self.ui.views = views.into_iter().map(Option::unwrap_or_default).collect();
|
||||
self.ui.windows.retain_mut(|w| now(w.document).map(|d| w.document = d).is_some());
|
||||
if !self.session.prefs().workspace.open_documents_as_tabs {
|
||||
let new_docs: Vec<usize> = ids.iter().enumerate().filter(|(_, id)| !self.view_docs.contains(id)).map(|(i, _)| i).collect();
|
||||
for &idx in &new_docs {
|
||||
if !self.ui.windows.iter().any(|w| w.document == idx) {
|
||||
crate::view_cmds::float_window(self, idx, idx);
|
||||
}
|
||||
}
|
||||
}
|
||||
self.canvases.retain(|(doc, _), _| ids.contains(doc));
|
||||
self.navigator_textures.retain(|doc, _| ids.contains(doc));
|
||||
self.view_docs = ids;
|
||||
|
|
|
|||
|
|
@ -617,7 +617,7 @@ fn fit_layers(app: &mut PhotocraftApp) -> Result<Value, String> {
|
|||
Ok(json!({"zoom": v.zoom, "bounds": [b.x0, b.y0, b.x1, b.y1]}))
|
||||
}
|
||||
|
||||
fn float_window(app: &mut PhotocraftApp, doc: usize, offset: usize) -> u64 {
|
||||
pub(crate) fn float_window(app: &mut PhotocraftApp, doc: usize, offset: usize) -> u64 {
|
||||
let wid = app.ui.alloc_id();
|
||||
let mut view = app.ui.views.get(doc).cloned().unwrap_or_default();
|
||||
view.fit_pending = offset > 0 || view.fit_pending;
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ Generated by `cargo xtask scorecard` from `perf/budgets.toml`, `perf/baseline.js
|
|||
| [Performance](#performance) | 3 | 22 | 22 | 56 scenarios: 3 within budget, 22 over budget or failing, 9 tracked only, 15 not run, 7 not measurable yet (baseline 2026-10-05) |
|
||||
| [File compatibility](#file-compatibility) | 4 | 12 | 11 | io corpus: oracle ≥ 146/170, round trip ≥ 169/170; psd-tools corpus: oracle ≥ 236/309, round trip ≥ 307/309; photoshop oracles: oracle ≥ 133/256, round trip ≥ 258/256 |
|
||||
| [Tools](#tools) | 19 | 13 | 7 | |
|
||||
| [Workspace and UI](#workspace-and-ui) | 5 | 7 | 11 | settings that do nothing: 48 of 146 (target 0) |
|
||||
| [Workspace and UI](#workspace-and-ui) | 5 | 7 | 11 | settings that do nothing: 47 of 146 (target 0) |
|
||||
| [Type](#type) | 0 | 3 | 6 | |
|
||||
| [Automation](#automation) | 3 | 2 | 6 | 627 of 627 menu items live (100.0%) |
|
||||
| [Reliability](#reliability) | 5 | 0 | 2 | never-crash lints on 28 of 28 crates; panic_hunt present |
|
||||
|
|
@ -172,9 +172,9 @@ Corpus floors (`crates/io/tests/corpus.rs`): the enforced minimums; the corpus t
|
|||
|
||||
## Workspace and UI
|
||||
|
||||
**Settings that do nothing: 48 of 146** (target 0, #204). Counted by the prefs audit (`xtask/src/scorecard.rs`): a `Preferences` field counts as read when code outside the prefs model (`prefs.rs` except its `impl Session` blocks; tests excluded; the schema-driven dialog never names a field) accesses `section.field`, or `.section` and `.field` in the same file, or calls a section method that reads `self.field`. It is a heuristic lower bound: a generic name can look read when it isn't.
|
||||
**Settings that do nothing: 47 of 146** (target 0, #204). Counted by the prefs audit (`xtask/src/scorecard.rs`): a `Preferences` field counts as read when code outside the prefs model (`prefs.rs` except its `impl Session` blocks; tests excluded; the schema-driven dialog never names a field) accesses `section.field`, or `.section` and `.field` in the same file, or calls a section method that reads `self.field`. It is a heuristic lower bound: a generic name can look read when it isn't.
|
||||
|
||||
Unread: `general.color_picker`, `general.beep_when_done`, `general.resize_image_during_place`, `general.always_create_smart_objects_when_placing`, `general.animated_zoom`, `general.zoom_resizes_windows`, `interface.dynamic_color_sliders`, `workspace.auto_collapse_icon_panels`, `workspace.auto_show_hidden_panels`, `workspace.open_documents_as_tabs`, `workspace.enable_floating_document_window_docking`, `workspace.enable_narrow_options_bar`, `tools.enable_flick_panning`, `tools.vary_round_brush_hardness_on_hud`, `tools.show_transformation_values`, `tools.double_click_layer_mask_launches_select_and_mask`, `file_handling.image_previews`, `file_handling.save_in_background`, `file_handling.ignore_exif_profile_tag`, `file_handling.maximize_psd_compatibility`, `performance.cache_levels`, `performance.legacy_compositing`, `scratch_disks.disks`, `cursors.brush_preview_color`, `units_and_rulers.type_units`, `units_and_rulers.column_width`, `units_and_rulers.gutter`, `units_and_rulers.print_resolution`, `plug_ins.show_extension_panels`, `plug_ins.allow_scripts_to_connect`, `plug_ins.generator_enabled`, `type_.smart_quotes`, `type_.missing_glyph_protection`, `type_.show_font_names_in_english`, `type_.text_engine`, `type_.font_preview`, `type_.recent_fonts`, `enhanced_controls.scrubby_slider_acceleration`, `enhanced_controls.touch_gestures`, `enhanced_controls.zoom_with_trackpad_pinch`, `raw_defaults.color_space`, `raw_defaults.bit_depth`, `raw_defaults.resolution`, `raw_defaults.sharpen_for`, `raw_defaults.open_as_smart_object`, `raw_defaults.apply_auto_tone`, `integrations.allow_agent_control`, `integrations.control_port`.
|
||||
Unread: `general.color_picker`, `general.beep_when_done`, `general.resize_image_during_place`, `general.always_create_smart_objects_when_placing`, `general.animated_zoom`, `general.zoom_resizes_windows`, `interface.dynamic_color_sliders`, `workspace.auto_collapse_icon_panels`, `workspace.auto_show_hidden_panels`, `workspace.enable_floating_document_window_docking`, `workspace.enable_narrow_options_bar`, `tools.enable_flick_panning`, `tools.vary_round_brush_hardness_on_hud`, `tools.show_transformation_values`, `tools.double_click_layer_mask_launches_select_and_mask`, `file_handling.image_previews`, `file_handling.save_in_background`, `file_handling.ignore_exif_profile_tag`, `file_handling.maximize_psd_compatibility`, `performance.cache_levels`, `performance.legacy_compositing`, `scratch_disks.disks`, `cursors.brush_preview_color`, `units_and_rulers.type_units`, `units_and_rulers.column_width`, `units_and_rulers.gutter`, `units_and_rulers.print_resolution`, `plug_ins.show_extension_panels`, `plug_ins.allow_scripts_to_connect`, `plug_ins.generator_enabled`, `type_.smart_quotes`, `type_.missing_glyph_protection`, `type_.show_font_names_in_english`, `type_.text_engine`, `type_.font_preview`, `type_.recent_fonts`, `enhanced_controls.scrubby_slider_acceleration`, `enhanced_controls.touch_gestures`, `enhanced_controls.zoom_with_trackpad_pinch`, `raw_defaults.color_space`, `raw_defaults.bit_depth`, `raw_defaults.resolution`, `raw_defaults.sharpen_for`, `raw_defaults.open_as_smart_object`, `raw_defaults.apply_auto_tone`, `integrations.allow_agent_control`, `integrations.control_port`.
|
||||
|
||||
| Id | Target | Status | Issue | Note |
|
||||
|---|---|---|---|---|
|
||||
|
|
|
|||
Loading…
Reference in New Issue