GPU-accelerated UI toolkit (Vulkan)
git clone https://git.lucas.co/cce-ui.git
Support connector_activation_radius style configuration
src/layout.rs | 15 +++++++++++++++
src/widget/display/graph.rs | 8 ++++----
2 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/src/layout.rs b/src/layout.rs
index 56ac2a4..8e3bd6e 100644
--- a/src/layout.rs
+++ b/src/layout.rs
@@ -159,6 +159,7 @@ fn flatten_json_to_flat_props(val: &serde_json::Value, prefix: &str, flat_props:
"style.surface.graph.node.connector_color" => "graph_connector_color",
"style.surface.graph.node.connector_highlight_color" => "graph_connector_highlight_color",
"style.surface.graph.node.connector_size" => "graph_connector_size",
+ "style.surface.graph.node.connector_activation_radius" => "graph_connector_activation_radius",
other => {
if let Some(rest) = other.strip_prefix("layout.") {
@@ -2573,6 +2574,18 @@ pub fn set_graph_connector_size(size: f32) {
}
}
+pub fn graph_connector_activation_radius() -> f32 {
+ lazy_init_style_registry();
+ get_style_registry().read().unwrap().get_float("graph_connector_activation_radius").unwrap_or(9.0)
+}
+
+pub fn set_graph_connector_activation_radius(radius: f32) {
+ lazy_init_style_registry();
+ if let Ok(mut registry) = get_style_registry().write() {
+ registry.set_float("graph_connector_activation_radius", radius);
+ }
+}
+
pub fn font_selector_corner_radius() -> f32 {
lazy_init_style_registry();
get_style_registry().read().unwrap().get_float("font_selector_corner_radius").unwrap_or(4.0)
@@ -5146,6 +5159,7 @@ mod tests {
set_graph_wire_size(10.0);
set_graph_wire_activation_radius(15.0);
set_graph_connector_size(12.0);
+ set_graph_connector_activation_radius(18.0);
assert_eq!(graph_spacing_x(), 200.0);
assert_eq!(graph_spacing_y(), 100.0);
@@ -5155,6 +5169,7 @@ mod tests {
assert_eq!(graph_wire_size(), 10.0);
assert_eq!(graph_wire_activation_radius(), 15.0);
assert_eq!(graph_connector_size(), 12.0);
+ assert_eq!(graph_connector_activation_radius(), 18.0);
crate::color::set_graph_cell_color([0.1, 0.2, 0.3]);
crate::color::set_graph_gap_color([0.4, 0.5, 0.6]);
diff --git a/src/widget/display/graph.rs b/src/widget/display/graph.rs
index b74a95d..d5370f9 100644
--- a/src/widget/display/graph.rs
+++ b/src/widget/display/graph.rs
@@ -400,12 +400,12 @@ impl Element for Graph {
let was_hovered_port = self.hovered_port;
self.hovered_port = None;
- let wire_act_r = crate::layout::graph_wire_activation_radius();
+ let conn_act_r = crate::layout::graph_connector_activation_radius();
for i in 0..self.nodes.len() {
if let Some((nx, ny, nw, nh)) = self.node_rect(i) {
let scale_f = nw / 80.0;
- let hit_radius = (wire_act_r * scale_f).max(2.0);
+ let hit_radius = (conn_act_r * scale_f).max(2.0);
let node = &self.nodes[i];
for k in 0..node.inputs {
@@ -449,11 +449,11 @@ impl Element for Graph {
match state {
ElementState::Pressed => {
log::debug!("Graph::mouse_input: Pressed px={}, py={}, connecting_from={:?}", px, py, self.connecting_from);
- // First, check direct port clicks
for i in (0..self.nodes.len()).rev() {
if let Some((nx, ny, nw, nh)) = self.node_rect(i) {
let scale_f = nw / 80.0;
- let port_click_radius = (20.0 * scale_f).max(12.0);
+ let conn_act_r = crate::layout::graph_connector_activation_radius();
+ let port_click_radius = (conn_act_r * scale_f).max(2.0);
let port_click_radius_sq = port_click_radius * port_click_radius;
let node = &self.nodes[i];