git.lucas.co / cce-designer
graphic design tool
git clone https://git.lucas.co/cce-designer.git

commita1883d8069a90f964edd1c5f6f8a11752621a4d4
parent72ae3a7b9a
authorLucas Galante <[email protected]>
date2026-08-26 14:51
feat: the graph fills the network plate; the breadcrumb floats over it

The floating layout reserved a BREADCRUMB_H band above the content — a
titlebar-looking strip of bare plate the graph never entered. The
content now spans the full plate; the breadcrumb strip rect stays for
the widget's layout, its refined hit() (cce-ui@…) claims only the
segment run, and a press-order priority above the graph keeps segment
clicks from also landing in the cell beneath. The circular pane keeps
its own interior offsets.

Co-Authored-By: Claude Fable 5 <[email protected]>

 src/app.rs | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/app.rs b/src/app.rs
index d915075..c58c2e1 100644
--- a/src/app.rs
+++ b/src/app.rs
@@ -3948,9 +3948,13 @@ pub(crate) fn geometry_to_spreadsheet_data(geom: &Geometry) -> (Vec<String>, Vec
                 
                 let mb_h = 0.0;
                 let bc_h = if self.show_network { BREADCRUMB_H } else { 0.0 };
-                let content_h = (ph - mb_h - bc_h).max(0.0);
+                // The breadcrumb HOVERS over the graph: its strip rect stays
+                // (the widget lays its run out in it, and hit() claims only
+                // the segments), but the content spans the full plate — no
+                // reserved titlebar band above the cells.
+                let content_h = (ph - mb_h).max(0.0);
 
-                self.positions[CONTENT_IDX] = (px, py + mb_h + bc_h, pw, content_h);
+                self.positions[CONTENT_IDX] = (px, py + mb_h, pw, content_h);
                 self.positions[NETWORK_PANEL_IDX] = (px, py, pw, ph);
                 self.slots.network_panel.set_rect(px, py, pw, ph);
                 if let Some(plate) = self.slots.network_panel.as_any_mut().downcast_mut::<PassivePlate>() {
@@ -5038,6 +5042,11 @@ pub(crate) fn geometry_to_spreadsheet_data(geom: &Geometry) -> (Vec<String>, Vec
                                     -4
                                 } else if i == PARAM_IDX {
                                     -3
+                                } else if i == BREADCRUMB_IDX {
+                                    // Floats over the graph (the content spans the full plate);
+                                    // its refined hit() claims only the segment run, so this
+                                    // priority never shadows the graph elsewhere in the strip.
+                                    1
                                 } else {
                                     self.slots.get_dyn_mut(i).z_index()
                                 };