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

commit4b78aa504b9559e01d613b4c1eb920d8666e7f77
parent3347fb57e7
authorLucas Galante <[email protected]>
date2026-07-13 13:03
fix(events): params pane gets its own press z-tier above the viewport

VIEWPORT_IDX and PARAM_IDX shared the -4 tier in the press hit-order
sort, so the stable sort's index tiebreak (viewport=3 < param=6) handed
every press over the floating params pane to the viewport underneath.
The pane's whole drag chain (drag_begin's re-press arming dragging_param,
drag_update, sync_parameters_to_project) was correctly wired and simply
never received the press — slider/Float3 held drags were dead, and only
the scrollbar (armed through a different path) worked.

PARAM_IDX now sorts at -3, above the viewport it floats over.
Viewport-only presses are unaffected: where the pane doesn't hit,
find() skips it exactly as before.

Live-verified via the HTTP API: a held drag on Position X moved Camera 1
from 2.50:1.80:2.50 to 10.00:1.80:2.50, tracking mid-drag.

Co-Authored-By: Claude Fable 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Fb2AGNKjfQZxfbxP43fVbC

 src/app.rs | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/app.rs b/src/app.rs
index b1415b7..452784c 100644
--- a/src/app.rs
+++ b/src/app.rs
@@ -4771,8 +4771,13 @@ pub(crate) fn geometry_to_spreadsheet_data(geom: &Geometry) -> (Vec<String>, Vec
                             hit_order.sort_by_key(|&i| {
                                 let z = if i == NETWORK_PANEL_IDX || i == PARAM_PLATE_IDX {
                                     -5
-                                } else if i == VIEWPORT_IDX || i == PARAM_IDX {
+                                } else if i == VIEWPORT_IDX {
+                                    // Below PARAM_IDX: the params pane floats over the viewport,
+                                    // and the old shared -4 tier let the stable sort's index order
+                                    // hand every press over the pane to the viewport instead.
                                     -4
+                                } else if i == PARAM_IDX {
+                                    -3
                                 } else {
                                     self.slots.get_dyn_mut(i).z_index()
                                 };