node-based graph editor
git clone https://git.lucas.co/cce-graph.git
feat: Support uniform background and opacity toggles from updated clear-ui Graph
src/main.rs | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-------
1 file changed, 72 insertions(+), 8 deletions(-)
diff --git a/src/main.rs b/src/main.rs
index 7b765f8..fa883df 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -7,6 +7,10 @@ use clear_ui::widget::{MouseButton, ElementState, MouseScrollDelta, KeyEvent, Te
enum AppMessage {
Exit,
ToggleGrid,
+ ToggleUniformBackground,
+ SetOpacity95,
+ SetOpacity75,
+ SetOpacity50,
AddNode,
}
@@ -20,6 +24,8 @@ struct GraphApp {
height: u32,
scale_factor: f64,
show_grid: bool,
+ uniform_background: bool,
+ network_opacity: f32,
}
impl GraphApp {
@@ -76,21 +82,33 @@ impl Application for GraphApp {
];
graph.set_nodes(&nodes);
- // Configure grid settings
+ // Configure initial grid settings on the graph
graph.set_show_network_grid(true);
graph.set_grid_sizes(140.0, 70.0);
graph.set_skipped_sizes(35.0, 35.0);
graph.set_grid_origin(60.0, 60.0);
graph.set_grid_snap_enabled(true);
+ graph.set_uniform_background(false);
+ graph.set_network_opacity(0.95);
- // Build Menu Bar
+ // Build Menu Bar with options to toggle new features
let mut menu_bar = MenuBar::new(0.0, 0.0, 1024.0, 26.0)
.with_title("clear-graph")
.with_item("File", &["Exit"])
.with_item("Edit", &["Add Node"])
- .with_item("View", &["Show Grid"]);
+ .with_item("View", &[
+ "Show Grid",
+ "Uniform Background",
+ "Opacity: 95%",
+ "Opacity: 75%",
+ "Opacity: 50%"
+ ]);
- menu_bar.set_item_checked(2, 0, true);
+ menu_bar.set_item_checked(2, 0, true); // Show Grid checked
+ menu_bar.set_item_checked(2, 1, false); // Uniform Background unchecked
+ menu_bar.set_item_checked(2, 2, true); // Opacity 95% checked
+ menu_bar.set_item_checked(2, 3, false); // Opacity 75% unchecked
+ menu_bar.set_item_checked(2, 4, false); // Opacity 50% unchecked
let mut app = Self {
menu_bar,
@@ -102,6 +120,8 @@ impl Application for GraphApp {
height: 768,
scale_factor: 1.0,
show_grid: true,
+ uniform_background: false,
+ network_opacity: 0.95,
};
app.menu_bar.set_rect(0.0, 0.0, 1024.0, 26.0);
@@ -133,6 +153,40 @@ impl Application for GraphApp {
*needs_rebuild = true;
self.needs_rebuild = true;
}
+ AppMessage::ToggleUniformBackground => {
+ self.uniform_background = !self.uniform_background;
+ self.graph.set_uniform_background(self.uniform_background);
+ self.menu_bar.set_item_checked(2, 1, self.uniform_background);
+ *needs_rebuild = true;
+ self.needs_rebuild = true;
+ }
+ AppMessage::SetOpacity95 => {
+ self.network_opacity = 0.95;
+ self.graph.set_network_opacity(self.network_opacity);
+ self.menu_bar.set_item_checked(2, 2, true);
+ self.menu_bar.set_item_checked(2, 3, false);
+ self.menu_bar.set_item_checked(2, 4, false);
+ *needs_rebuild = true;
+ self.needs_rebuild = true;
+ }
+ AppMessage::SetOpacity75 => {
+ self.network_opacity = 0.75;
+ self.graph.set_network_opacity(self.network_opacity);
+ self.menu_bar.set_item_checked(2, 2, false);
+ self.menu_bar.set_item_checked(2, 3, true);
+ self.menu_bar.set_item_checked(2, 4, false);
+ *needs_rebuild = true;
+ self.needs_rebuild = true;
+ }
+ AppMessage::SetOpacity50 => {
+ self.network_opacity = 0.50;
+ self.graph.set_network_opacity(self.network_opacity);
+ self.menu_bar.set_item_checked(2, 2, false);
+ self.menu_bar.set_item_checked(2, 3, false);
+ self.menu_bar.set_item_checked(2, 4, true);
+ *needs_rebuild = true;
+ self.needs_rebuild = true;
+ }
AppMessage::AddNode => {
let mut nodes = self.graph.get_nodes();
let next_id = nodes.len() + 1;
@@ -168,10 +222,15 @@ impl Application for GraphApp {
self.needs_rebuild = false;
}
- // 1. Background quad
+ // 1. Background quad (outer window color)
quads.push((0.0, 0.0, self.width as f32, self.height as f32, [0.08, 0.08, 0.10, 1.0]));
- // 2. Add Graph extra quads
+ // 2. Add Graph extra quads (includes graph background color if uniform background is active)
+ let graph_color = self.graph.color();
+ if graph_color[3] > 0.0 {
+ let (gx, gy, gw, gh) = self.graph.rect();
+ quads.push((gx, gy, gw, gh, graph_color));
+ }
quads.extend(self.graph.extra_quads());
// 3. Add MenuBar background and highlights/dropdowns
@@ -244,8 +303,13 @@ impl Application for GraphApp {
msg_out = Some(AppMessage::AddNode);
}
} else if menu_idx == 2 { // View
- if item_idx == 0 { // Toggle Grid
- msg_out = Some(AppMessage::ToggleGrid);
+ match item_idx {
+ 0 => msg_out = Some(AppMessage::ToggleGrid),
+ 1 => msg_out = Some(AppMessage::ToggleUniformBackground),
+ 2 => msg_out = Some(AppMessage::SetOpacity95),
+ 3 => msg_out = Some(AppMessage::SetOpacity75),
+ 4 => msg_out = Some(AppMessage::SetOpacity50),
+ _ => {}
}
}
}