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

commit23bf080694bdb7493e5e896c6411d15cdd482d60
parente6d7722dad
authorLucas Galante <[email protected]>
date2026-07-24 12:43
fix: stop clobbering the config node color's alpha

State::node_color was stored rgb-only and re-applied through
set_node_color with a hardcoded 1.0 alpha in three places, so a
translucent graph.node color in config always rendered opaque. Carry
the full rgba through instead.

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

 src/app.rs | 26 ++++++++------------------
 1 file changed, 8 insertions(+), 18 deletions(-)

diff --git a/src/app.rs b/src/app.rs
index a40bfb7..9c2cd20 100644
--- a/src/app.rs
+++ b/src/app.rs
@@ -823,7 +823,7 @@ pub struct State {
     pub pending_window_drag: Option<PendingWindowDrag>,
     pub window_action: Option<cce_ui::engine::WindowAction>,
     pub vertex_count_spheres: u32,
-    pub node_color: [f32; 3],
+    pub node_color: [f32; 4],
     pub grid_color: [f32; 3],
     pub cell_color: [f32; 3],
     pub gap_color: [f32; 3],
@@ -2489,10 +2489,7 @@ pub(crate) fn geometry_to_spreadsheet_data(geom: &Geometry) -> (Vec<String>, Vec
             pending_window_drag: None,
             window_action: None,
             vertex_count_spheres: 0,
-            node_color: {
-                let nc = cce_ui::color::graph_node_color();
-                [nc[0], nc[1], nc[2]]
-            },
+            node_color: cce_ui::color::graph_node_color(),
             grid_color: settings.viewport.grid_color,
             cell_color: cce_ui::color::graph_cell_color(),
             gap_color: cce_ui::color::graph_gap_color(),
@@ -2640,12 +2637,7 @@ pub(crate) fn geometry_to_spreadsheet_data(geom: &Geometry) -> (Vec<String>, Vec
         state.update_inertial_settings();
         state.update_graph_settings_from_config();
         state.update_window_title();
-        colors::set_node_color([
-            state.node_color[0],
-            state.node_color[1],
-            state.node_color[2],
-            1.0,
-        ]);
+        colors::set_node_color(state.node_color);
         state.ensure_menubar_subnets();
         state.apply_settings_from_menubar_subnets();
         state.sync_nodes();
@@ -2768,9 +2760,8 @@ pub(crate) fn geometry_to_spreadsheet_data(geom: &Geometry) -> (Vec<String>, Vec
         let cell_color = cce_ui::color::graph_cell_color();
         let gap_color = cce_ui::color::graph_gap_color();
         let snap_enabled = cce_ui::layout::graph_grid_snap();
-        let node_c = cce_ui::color::graph_node_color();
-        let node_color = [node_c[0], node_c[1], node_c[2]];
-        
+        let node_color = cce_ui::color::graph_node_color();
+
         let mut changed = false;
         
         if (self.network_opacity - opacity).abs() > 0.001 {
@@ -2791,7 +2782,7 @@ pub(crate) fn geometry_to_spreadsheet_data(geom: &Geometry) -> (Vec<String>, Vec
         }
         if self.node_color != node_color {
             self.node_color = node_color;
-            colors::set_node_color([node_color[0], node_color[1], node_color[2], 1.0]);
+            colors::set_node_color(node_color);
             changed = true;
         }
         if self.grid_snap_enabled != snap_enabled {
@@ -4714,15 +4705,14 @@ pub(crate) fn geometry_to_spreadsheet_data(geom: &Geometry) -> (Vec<String>, Vec
                          self.viewport_mut().show_origin = settings.viewport.show_origin_enabled;
                          self.viewport_mut().show_camera_pivot = settings.viewport.show_camera_pivot_enabled;
                          self.viewport_mut().bg_color = settings.viewport.bg_color;
-                         let node_c = cce_ui::color::graph_node_color();
-                         self.node_color = [node_c[0], node_c[1], node_c[2]];
+                         self.node_color = cce_ui::color::graph_node_color();
                          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.cell_color = cce_ui::color::graph_cell_color();
                          self.gap_color = cce_ui::color::graph_gap_color();
 
-                        colors::set_node_color([self.node_color[0], self.node_color[1], self.node_color[2], 1.0]);
+                        colors::set_node_color(self.node_color);
 
                         self.update_origin_geometry();
                         self.update_grid_geometry();