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
next prev 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