From 8be489eaecdd9458730d0be376d43e42d823fa54 Mon Sep 17 00:00:00 2001 From: aiongg Date: Mon, 19 Oct 2026 13:25:02 +0000 Subject: [PATCH] Docking trial: craft-ui c715d3f, seeded float space --- Cargo.lock | 2 +- Cargo.toml | 2 +- crates/ui-egui/src/panel_docking.rs | 38 +++++++++-------------------- 3 files changed, 13 insertions(+), 29 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 32b91c425..85374c054 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -849,7 +849,7 @@ dependencies = [ [[package]] name = "craft-ui" version = "0.1.0" -source = "git+https://github.com/aiongg/craft-libs?rev=6261d9d39a0a109a832685f37af6ce75321caea1#6261d9d39a0a109a832685f37af6ce75321caea1" +source = "git+https://github.com/aiongg/craft-libs?rev=c715d3f25fdfd615ae1685daa328776e9d7ad9a8#c715d3f25fdfd615ae1685daa328776e9d7ad9a8" dependencies = [ "egui", "serde", diff --git a/Cargo.toml b/Cargo.toml index f5c0281d2..52f732973 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -126,4 +126,4 @@ hayro-jbig2 = { git = "https://github.com/storytold/pdfcraft", rev = "b5467d93a0 # Docking trial: craft-ui from the craft-libs `docking` branch. [patch."https://github.com/storytold/craft-libs"] -craft-ui = { git = "https://github.com/aiongg/craft-libs", rev = "6261d9d39a0a109a832685f37af6ce75321caea1" } +craft-ui = { git = "https://github.com/aiongg/craft-libs", rev = "c715d3f25fdfd615ae1685daa328776e9d7ad9a8" } diff --git a/crates/ui-egui/src/panel_docking.rs b/crates/ui-egui/src/panel_docking.rs index a55f059d7..7edc2705d 100644 --- a/crates/ui-egui/src/panel_docking.rs +++ b/crates/ui-egui/src/panel_docking.rs @@ -407,36 +407,12 @@ fn resolve_panels(params: &Value) -> Result { Ok(params) } -/// The panel `params` names, resolved, if it names one. -fn named_panel(params: &Value) -> Option { - params.get("panel").and_then(Value::as_str).map(str::to_owned) -} - -/// Is `panel` alone in a floating window? -fn floats_alone(layout: &Layout, panel: &str) -> bool { - layout.floating.iter().any(|w| w.contains(&panel.to_string()) && w.panels().count() == 1) -} - /// A shared docking command (`window.panel.*`, `window.workspace.*`, `ui.dock`) on the layout in /// use, all or nothing. craft-ui's `DockCommand` parses it and makes the layout actions; /// DesignCraft resolves panel names, shows a hidden panel before moving, floating or docking -/// it, floats a panel at its own size (also when it was hidden, which craft-ui never drew), -/// and returns a floated panel to its dock place on Dock Panel. +/// it, and returns a floated panel to its dock place on Dock Panel. fn shared_command(app: &mut DesignApp, id: &str, params: &Value) -> Result { let mut params = resolve_panels(params)?; - let whole = |key: &str| params.get(key).and_then(Value::as_bool).unwrap_or(false); - if id == "window.panel.float" - && !whole("group") - && !whole("column") - && let Some(panel) = named_panel(¶ms) - && !floats_alone(&layout_of(app), &panel) - && let Some(fields) = params.as_object_mut() - { - let size = floating_size(&panel); - for (key, default) in [("width", size.x), ("height", size.y)] { - fields.entry(key).or_insert(json!(default)); - } - } if let Some(fields) = params.as_object_mut() { fields.insert("command".into(), Value::String(id.to_owned())); } @@ -496,9 +472,17 @@ fn shared_command(app: &mut DesignApp, id: &str, params: &Value) -> Result