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

commit6b389815249505a957bb8c1f271d0f9abe103886
parentd4e02dd199
authorLucas Galante <lsgalante12@gmail.com>
date2026-10-07 10:21
feat(network): do not draw the node graph's grid lines

The network lattice's lines and its origin axes (cce-ui's
Graph::paint_grid) are no longer drawn; the widget is told
set_show_network_grid(false), and the always-on network_grid_visible
flag and the graph_grid_color plumbing that fed the lines are gone.
Where nodes stand, the snap, the pitch and zoom, and the grid cursor are
unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

 CLAUDE.md     | 24 +++++++++++++++---------
 src/app.rs    | 18 +++---------------
 src/render.rs | 11 ++++++-----
 3 files changed, 24 insertions(+), 29 deletions(-)

diff --git a/CLAUDE.md b/CLAUDE.md
index e17d545..f95cc3f 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -2729,8 +2729,10 @@ spec / shininess / curvature live as `relief.spec` / `.shininess` /
 `.curvature`, not under `plate`. The network pane is two layers: the
 `PassivePlate` above (no longer drawn: the network has no plate) and the
 Graph on top, which has NO fill of its own (since 2026-09-29): its cells
-are whatever it is painted on — the scene — and `style.surface.graph` sets
-only the lines (`grid_color`, `line_width`), their `opacity`, and `blur`.
+are whatever it is painted on — the scene. `style.surface.graph` set only
+its lines (`grid_color`, `line_width`), their `opacity`, and `blur` — and
+the lines are not drawn since 2026-10-07 (below), so in this app the first
+two do nothing.
 Until then the graph filled itself with `cell_color` (chosen by a
 `uniform_background` flag this app hard-coded true) and drew its lines in
 `gap_color`; all three keys are retired, reported by path at load and not
@@ -3220,10 +3222,14 @@ baseline Reset Zoom returns to and Frame All scales down from (never past
 100%); `MIN_PITCH_*` / `MAX_PITCH_*` are the old node-body zoom limits
 expressed on the pitch.
 
-The widget paints the lattice as lines (`paint_grid`: `grid_color`, network
-opacity, `style.surface.graph.line_width` px, each line centred on its
-coordinate so the width changes nothing about where anything sits) with the
-two lines through the (0, 0) crossing heavier as the origin axes. Its
+**The lattice is not drawn** (since 2026-10-07, at the user's request).
+cce-ui's `Graph::paint_grid` — lines in `grid_color` at the network
+opacity, `style.surface.graph.line_width` px, with the two through the
+(0, 0) crossing heavier as the origin axes — is not called, the widget is
+told `set_show_network_grid(false)`, and the always-true
+`network_grid_visible` flag and the `graph_grid_color` plumbing that fed it
+are gone. Everything the lattice MEANS stays: where a node stands, the
+snap, the pitch and zoom, the grid cursor and its region. Its
 cell-and-gap setters (`set_grid_sizes` / `set_skipped_sizes`) survive as a
 description of the same lattice for cce-files and cce-graph, which still
 speak it; this app sets the pitch.
@@ -3232,10 +3238,10 @@ speak it; this app sets the pitch.
 
 The network's wires are drawn by cce-ui's `Graph::paint_wires` (see its
 CLAUDE.md, "A graph's wires are strokes in a style"), called in
-`render.rs` right after `paint_grid`, and come in four styles: Orthogonal,
+`render.rs` under the node bodies, and come in four styles: Orthogonal,
 Rounded, Bezier, Straight. **Node Wire Style** is a dialog Settings row
-(Alt+D, "wire"), a `Ctl::Choice` whose value lives on the two Graph widgets
-themselves (`State::set_node_wire_style` sets both); it persists as
+(Alt+D, "wire"), a `Ctl::Choice` whose value lives on the Graph widget
+itself (`State::set_node_wire_style`); it persists as
 `ViewportSettings::node_wire_style`, so in state.kdl and with the project's
 display block. Empty — every file from before the row — hands the choice
 to config.kdl's `style.surface.graph.node.wire_style`, and the row then
diff --git a/src/app.rs b/src/app.rs
index 8159147..fc11461 100644
--- a/src/app.rs
+++ b/src/app.rs
@@ -2928,9 +2928,6 @@ pub struct State {
     pub vertex_count_spheres: u32,
     pub node_color: [f32; 4],
     pub grid_color: [f32; 3],
-    /// The network lattice's line colour (`style.surface.graph.grid_color`);
-    /// `grid_color` above is the viewport's ground grid.
-    pub graph_grid_color: [f32; 3],
     pub origin_size: f32,
     pub camera_pivot_size: f32,
 
@@ -3140,7 +3137,6 @@ pub struct State {
     /// cell it can land on (cce-ui's `Graph::drag_update`). Not read from
     /// `style.surface.graph.grid_snap`.
     pub grid_snap_enabled: bool,
-    pub network_grid_visible: bool,
     /// The network grid's pitch at the current zoom — centre of one grid
     /// line to the centre of the next, per axis. The grid's one size; a
     /// node's (col, row) is the intersection its centre sits on.
@@ -8263,7 +8259,6 @@ pub(crate) fn geometry_to_spreadsheet_columns(geom: &Detail) -> (Vec<String>, Ve
             vertex_count_spheres: 0,
             node_color: cce_ui::color::graph_node_color(),
             grid_color: settings.viewport.grid_color,
-            graph_grid_color: cce_ui::color::graph_grid_color(),
             origin_size: settings.viewport.origin_size,
             camera_pivot_size: settings.viewport.camera_pivot_size,
             fs_root: fs_root.clone(),
@@ -8336,7 +8331,6 @@ pub(crate) fn geometry_to_spreadsheet_columns(geom: &Detail) -> (Vec<String>, Ve
             scale,
             square_viewport: settings.viewport.square,
             grid_snap_enabled: true,
-            network_grid_visible: true,
             grid_base: cfg_grid,
             grid_pitch_x: cfg_grid.pitch_x,
             grid_pitch_y: cfg_grid.pitch_y,
@@ -8735,7 +8729,6 @@ pub(crate) fn geometry_to_spreadsheet_columns(geom: &Detail) -> (Vec<String>, Ve
         let active_node_area_y = self.positions[CONTENT_IDX].1;
         let active_node_area_x = self.positions[CONTENT_IDX].0;
 
-        let network_grid_visible = self.network_grid_visible;
         let grid_pitch_x = self.grid_pitch_x;
         let grid_pitch_y = self.grid_pitch_y;
         let (node_w, node_h) = self.node_size();
@@ -8743,7 +8736,9 @@ pub(crate) fn geometry_to_spreadsheet_columns(geom: &Detail) -> (Vec<String>, Ve
         let pan_y = self.pan_y;
         let grid_snap_enabled = self.grid_snap_enabled;
         let graph = self.graph_mut();
-        graph.set_show_network_grid(network_grid_visible);
+        // The lattice is not drawn (since 2026-10-07): the widget is told
+        // so, though the designer never asks it to paint the grid either.
+        graph.set_show_network_grid(false);
         graph.set_grid_pitch(grid_pitch_x, grid_pitch_y);
         graph.set_node_size(node_w, node_h);
         graph.set_grid_origin(active_node_area_x + pan_x, active_node_area_y + pan_y);
@@ -8751,7 +8746,6 @@ pub(crate) fn geometry_to_spreadsheet_columns(geom: &Detail) -> (Vec<String>, Ve
         if let Some(graph) = self.slots.content.as_any_mut().downcast_mut::<cce_ui::widget::Graph>() {
             graph.set_network_opacity(self.network_opacity);
             graph.set_node_opacity(self.node_opacity);
-            graph.set_grid_color(self.graph_grid_color);
         }
         if let Some(menubar) = self.slots.left_menubar.as_any_mut().downcast_mut::<cce_ui::widget::MenuBar>() {
             menubar.set_network_opacity(self.network_opacity);
@@ -8807,7 +8801,6 @@ pub(crate) fn geometry_to_spreadsheet_columns(geom: &Detail) -> (Vec<String>, Ve
         
         let opacity = cce_ui::color::graph_opacity();
         let node_opacity = cce_ui::color::graph_node_opacity();
-        let graph_grid_color = cce_ui::color::graph_grid_color();
         let node_color = cce_ui::color::graph_node_color();
         let node_compression = cce_ui::config::cached_config()
             .pointer("/style/surface/graph/node_compression")
@@ -8837,10 +8830,6 @@ pub(crate) fn geometry_to_spreadsheet_columns(geom: &Detail) -> (Vec<String>, Ve
             self.node_opacity = node_opacity;
             changed = true;
         }
-        if self.graph_grid_color != graph_grid_color {
-            self.graph_grid_color = graph_grid_color;
-            changed = true;
-        }
         if self.node_color != node_color {
             self.node_color = node_color;
             colors::set_node_color(node_color);
@@ -12073,7 +12062,6 @@ pub(crate) fn geometry_to_spreadsheet_columns(geom: &Detail) -> (Vec<String>, Ve
                          self.viewport_mut().grid_color = settings.viewport.grid_color;
                          self.origin_size = settings.viewport.origin_size;
                          self.camera_pivot_size = settings.viewport.camera_pivot_size;
-                         self.graph_grid_color = cce_ui::color::graph_grid_color();
 
                         colors::set_node_color(self.node_color);
 
diff --git a/src/render.rs b/src/render.rs
index dc992fb..96620f0 100644
--- a/src/render.rs
+++ b/src/render.rs
@@ -548,11 +548,12 @@ impl State {
                 let mut bodies: Vec<(f32, f32, f32, f32, bool, bool)> = Vec::new();
                 let mut overlays: Vec<(f32, f32, f32, f32, [f32; 4])> = Vec::new();
                 let mut seen_node = false;
-                // The grid lines (flat, gap colour at the network opacity)
-                // and the origin axes, under the wires and nodes; the cells
-                // are the pane plate itself. Then the wires, which are
-                // strokes in the node wire style and not among the quads.
-                g.paint_grid(clip, pc);
+                // The wires, strokes in the node wire style and not among
+                // the quads, under the nodes. (The lattice's lines and its
+                // origin axes were drawn under them, by `paint_grid`, until
+                // 2026-10-07, when the grid's visual was removed; the lattice
+                // itself — where nodes stand, snapping, the grid cursor — is
+                // unchanged.)
                 g.paint_wires(clip, pc);
                 for (qx, qy, qw, qh, qc, cell) in g.geometry_quads_tagged(clip) {
                     if g.is_node_rect(qx, qy, qw, qh) {