graphic design tool
git clone https://git.lucas.co/cce-designer.git
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) {