public inbox for yew-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Dominik Csapak <d.csapak@proxmox.com>
To: yew-devel@lists.proxmox.com
Subject: [yew-devel] [PATCH yew-comp 10/20] rrd: give all elements in svg keys
Date: Fri, 30 May 2025 14:21:52 +0200	[thread overview]
Message-ID: <20250530122202.2779300-11-d.csapak@proxmox.com> (raw)
In-Reply-To: <20250530122202.2779300-1-d.csapak@proxmox.com>

otherwise adding the selection rectangle (or others in the future)
redraws the whole svg, which messes up the events, for example we then
get a pointerenter event for the svg but no pointerleave, even though
the mouse did not move

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
---
 src/rrd/graph.rs | 42 ++++++++++++++++++++++++++++++++----------
 1 file changed, 32 insertions(+), 10 deletions(-)

diff --git a/src/rrd/graph.rs b/src/rrd/graph.rs
index e2ac767..7f02274 100644
--- a/src/rrd/graph.rs
+++ b/src/rrd/graph.rs
@@ -480,14 +480,22 @@ impl PwtRRDGraph {
         }
         let mut children: Vec<Html> = Vec::new();
 
-        children.push(Path::new().class("pwt-rrd-grid").d(grid_path).into());
-        children.extend(time_labels);
-
-        let y_label_group = Group::new()
-            .node_ref(self.y_label_ref.clone())
-            .children(value_labels);
-
-        children.push(y_label_group.into());
+        children.push(
+            Path::new()
+                .key("grid")
+                .class("pwt-rrd-grid")
+                .d(grid_path)
+                .into(),
+        );
+        children.push(Group::new().key("time-labels").children(time_labels).into());
+
+        children.push(
+            Group::new()
+                .key("value-labels")
+                .node_ref(self.y_label_ref.clone())
+                .children(value_labels)
+                .into(),
+        );
 
         if self.serie0_visible && props.serie0.is_some() {
             let path = compute_outline_path(data0, data1, compute_x, compute_y);
@@ -495,8 +503,13 @@ impl PwtRRDGraph {
                 compute_fill_path(data0, data1, min_data, max_data, compute_x, compute_y);
 
             children.extend(vec![
-                Path::new().class("pwt-rrd-outline-path1").d(path).into(),
                 Path::new()
+                    .key("series0-path")
+                    .class("pwt-rrd-outline-path1")
+                    .d(path)
+                    .into(),
+                Path::new()
+                    .key("series0-fill")
                     .class("pwt-rrd-fill-path1")
                     .d(pos_fill_path)
                     .into(),
@@ -509,8 +522,13 @@ impl PwtRRDGraph {
                 compute_fill_path(data0, data2, min_data, max_data, compute_x, compute_y);
 
             children.extend(vec![
-                Path::new().class("pwt-rrd-outline-path2").d(path).into(),
                 Path::new()
+                    .key("series1-path")
+                    .class("pwt-rrd-outline-path2")
+                    .d(path)
+                    .into(),
+                Path::new()
+                    .key("series1-fill")
                     .class("pwt-rrd-fill-path2")
                     .d(pos_fill_path)
                     .into(),
@@ -535,6 +553,7 @@ impl PwtRRDGraph {
 
                     children.push(
                         Rect::new()
+                            .key("selection-rect")
                             .class("pwt-rrd-selection")
                             .position(start_x as f32, end_y as f32)
                             .width((end_x - start_x) as f32)
@@ -557,6 +576,7 @@ impl PwtRRDGraph {
                         let py = compute_y(*v) as f32;
                         children.push(
                             Circle::new()
+                                .key("selection-circle1")
                                 .class("pwt-rrd-selected-datapoint")
                                 .position(px, py)
                                 .r(5)
@@ -570,6 +590,7 @@ impl PwtRRDGraph {
                         let py = compute_y(*v) as f32;
                         children.push(
                             Circle::new()
+                                .key("selection-circle2")
                                 .class("pwt-rrd-selected-datapoint")
                                 .position(px, py)
                                 .r(5)
@@ -588,6 +609,7 @@ impl PwtRRDGraph {
 
             children.push(
                 Path::new()
+                    .key("cross")
                     .class("pwt-rrd-cross")
                     .d(format!("M {x} 0 L {x} {max_y} M {min_x} {y} L {max_x} {y}"))
                     .into(),
-- 
2.39.5



_______________________________________________
yew-devel mailing list
yew-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/yew-devel


  parent reply	other threads:[~2025-05-30 12:22 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-05-30 12:21 [yew-devel] [PATCH yew-comp 00/20] refactor and improve rrd graph code Dominik Csapak
2025-05-30 12:21 ` [yew-devel] [PATCH yew-comp 01/20] remove old rrd uplot code Dominik Csapak
2025-05-30 12:21 ` [yew-devel] [PATCH yew-comp 02/20] rrd: refactor code for compute_min_max Dominik Csapak
2025-05-30 12:21 ` [yew-devel] [PATCH yew-comp 03/20] rrd: move into own module Dominik Csapak
2025-05-30 12:21 ` [yew-devel] [PATCH yew-comp 04/20] rrd: move unit calculation to " Dominik Csapak
2025-05-30 12:21 ` [yew-devel] [PATCH yew-comp 05/20] rrd: units: add tests Dominik Csapak
2025-05-30 12:21 ` [yew-devel] [PATCH yew-comp 06/20] rrd: units: simplify calculations for get_grid_unit_base Dominik Csapak
2025-05-30 12:21 ` [yew-devel] [PATCH yew-comp 07/20] rrd: remove unnecessary `no_data` field Dominik Csapak
2025-05-30 12:21 ` [yew-devel] [PATCH yew-comp 08/20] rrd: align tooltip directly to pointer position Dominik Csapak
2025-05-30 12:21 ` [yew-devel] [PATCH yew-comp 09/20] rrd: use 'cross_pos' state instead of 'draw_cross' Dominik Csapak
2025-05-30 12:21 ` Dominik Csapak [this message]
2025-05-30 12:21 ` [yew-devel] [PATCH yew-comp 11/20] rrd: simplify toggle Msg Dominik Csapak
2025-05-30 12:21 ` [yew-devel] [PATCH yew-comp 12/20] rrd: remove wrongly annotated lifetime Dominik Csapak
2025-05-30 12:21 ` [yew-devel] [PATCH yew-comp 13/20] rrd: refactor series related struct and functions into own module Dominik Csapak
2025-05-30 12:21 ` [yew-devel] [PATCH yew-comp 14/20] rrd: clamp view range when time_data changes Dominik Csapak
2025-05-30 12:21 ` [yew-devel] [PATCH yew-comp 15/20] rrd: refactor grid data computation Dominik Csapak
2025-05-30 12:21 ` [yew-devel] [PATCH yew-comp 16/20] rrd: introduce GraphSpace struct and use it to precalculate graph data Dominik Csapak
2025-05-30 12:21 ` [yew-devel] [PATCH yew-comp 17/20] rrd: precalculate the grid line and label positions Dominik Csapak
2025-05-30 12:22 ` [yew-devel] [PATCH yew-comp 18/20] rrd: calculate series svg data only when necessary Dominik Csapak
2025-05-30 12:22 ` [yew-devel] [PATCH yew-comp 19/20] rrd: refactor selection rectangle calculation Dominik Csapak
2025-05-30 12:22 ` [yew-devel] [PATCH yew-comp 20/20] rrd: refactor the cross position calculation Dominik Csapak

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250530122202.2779300-11-d.csapak@proxmox.com \
    --to=d.csapak@proxmox.com \
    --cc=yew-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal