From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <yew-devel-bounces@lists.proxmox.com>
Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9])
	by lore.proxmox.com (Postfix) with ESMTPS id 171261FF15C
	for <inbox@lore.proxmox.com>; Fri, 30 May 2025 14:22:50 +0200 (CEST)
Received: from firstgate.proxmox.com (localhost [127.0.0.1])
	by firstgate.proxmox.com (Proxmox) with ESMTP id 0D0802E9C1;
	Fri, 30 May 2025 14:23:06 +0200 (CEST)
From: Dominik Csapak <d.csapak@proxmox.com>
To: yew-devel@lists.proxmox.com
Date: Fri, 30 May 2025 14:22:00 +0200
Message-Id: <20250530122202.2779300-19-d.csapak@proxmox.com>
X-Mailer: git-send-email 2.39.5
In-Reply-To: <20250530122202.2779300-1-d.csapak@proxmox.com>
References: <20250530122202.2779300-1-d.csapak@proxmox.com>
MIME-Version: 1.0
X-SPAM-LEVEL: Spam detection results:  0
 AWL -0.128 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DMARC_MISSING             0.1 Missing DMARC policy
 KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment
 POISEN_SPAM_PILL          0.1 Meta: its spam
 POISEN_SPAM_PILL_2        0.1 random spam to be learned in bayes
 POISEN_SPAM_PILL_4        0.1 random spam to be learned in bayes
 SPF_HELO_NONE           0.001 SPF: HELO does not publish an SPF Record
 SPF_PASS               -0.001 SPF: sender matches SPF record
Subject: [yew-devel] [PATCH yew-comp 18/20] rrd: calculate series svg data
 only when necessary
X-BeenThere: yew-devel@lists.proxmox.com
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Yew framework devel list at Proxmox <yew-devel.lists.proxmox.com>
List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/yew-devel>, 
 <mailto:yew-devel-request@lists.proxmox.com?subject=unsubscribe>
List-Archive: <http://lists.proxmox.com/pipermail/yew-devel/>
List-Post: <mailto:yew-devel@lists.proxmox.com>
List-Help: <mailto:yew-devel-request@lists.proxmox.com?subject=help>
List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/yew-devel>, 
 <mailto:yew-devel-request@lists.proxmox.com?subject=subscribe>
Reply-To: Yew framework devel list at Proxmox <yew-devel@lists.proxmox.com>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Errors-To: yew-devel-bounces@lists.proxmox.com
Sender: "yew-devel" <yew-devel-bounces@lists.proxmox.com>

namely when the grid data changes. This change also prepares the code a
bit for having more than two series, by being able to draw any amount of
precalculated series paths.

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

diff --git a/src/rrd/graph.rs b/src/rrd/graph.rs
index 7845dc3..c54d288 100644
--- a/src/rrd/graph.rs
+++ b/src/rrd/graph.rs
@@ -129,6 +129,7 @@ pub struct PwtRRDGraph {
     serie0_visible: bool,
     serie1_visible: bool,
     grid: RrdGrid,
+    series_paths: Vec<Option<(String, String)>>, //outline path, fill path
 }
 
 use pwt::widget::canvas::{Canvas, Circle, Group, Path, Rect};
@@ -189,6 +190,24 @@ impl PwtRRDGraph {
         self.graph_space
             .update(time_data, &[data1, data2], props.include_zero, props.binary);
         self.grid = RrdGrid::new(&self.graph_space);
+
+        let mut paths = Vec::new();
+        if self.serie0_visible {
+            let outline_path = compute_outline_path(time_data, data1, &self.graph_space);
+            let fill_path = compute_fill_path(time_data, data1, &self.graph_space);
+            paths.push(Some((outline_path, fill_path)));
+        } else {
+            paths.push(None);
+        }
+        if self.serie1_visible {
+            let outline_path = compute_outline_path(time_data, data2, &self.graph_space);
+            let fill_path = compute_fill_path(time_data, data2, &self.graph_space);
+            paths.push(Some((outline_path, fill_path)));
+        } else {
+            paths.push(None);
+        }
+
+        self.series_paths = paths;
     }
 
     fn get_view_data<'a>(&self, ctx: &'a Context<Self>) -> (&'a [i64], &'a [f64], &'a [f64]) {
@@ -242,38 +261,23 @@ impl PwtRRDGraph {
                 .into(),
         );
 
-        if self.serie0_visible && props.serie0.is_some() {
-            let path = compute_outline_path(data0, data1, &self.graph_space);
-            let pos_fill_path = compute_fill_path(data0, data1, &self.graph_space);
-
-            children.extend(vec![
-                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(),
-            ]);
-        }
-
-        if self.serie1_visible && props.serie1.is_some() {
-            let path = compute_outline_path(data0, data2, &self.graph_space);
-            let pos_fill_path = compute_fill_path(data0, data2, &self.graph_space);
-
+        // draw series
+        for (idx, series) in self.series_paths.iter().enumerate() {
+            let idx = idx + 1;
+            let (outline_path, fill_path) = match series {
+                Some(res) => res,
+                None => continue,
+            };
             children.extend(vec![
                 Path::new()
-                    .key("series1-path")
-                    .class("pwt-rrd-outline-path2")
-                    .d(path)
+                    .key(format!("series{idx}-path"))
+                    .class(format!("pwt-rrd-outline-path{idx}"))
+                    .d(outline_path.to_string())
                     .into(),
                 Path::new()
-                    .key("series1-fill")
-                    .class("pwt-rrd-fill-path2")
-                    .d(pos_fill_path)
+                    .key(format!("series{idx}-fill"))
+                    .class(format!("pwt-rrd-fill-path{idx}"))
+                    .d(fill_path.to_string())
                     .into(),
             ]);
         }
@@ -443,6 +447,7 @@ impl Component for PwtRRDGraph {
             serie0_visible: true,
             serie1_visible: true,
             grid,
+            series_paths: Vec::new(),
         };
 
         this.update_grid_content(ctx);
-- 
2.39.5



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