From ddaee00b479bb1c89328cd70210e0fbae1867723 Mon Sep 17 00:00:00 2001
From: PlexSheep <software@cscherr.de>
Date: Thu, 9 Jan 2025 02:29:59 +0100
Subject: [PATCH] graph basic start

---
 Cargo.lock                | 253 +++++++++++++++++++++++++++++++++++++-
 Cargo.toml                | 132 ++++++++++----------
 members/graph/Cargo.toml  |   7 ++
 members/graph/src/main.rs |  18 +++
 4 files changed, 339 insertions(+), 71 deletions(-)
 create mode 100644 members/graph/Cargo.toml
 create mode 100644 members/graph/src/main.rs

diff --git a/Cargo.lock b/Cargo.lock
index 1ea8b8e..7ce2104 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1,6 +1,6 @@
 # This file is automatically @generated by Cargo.
 # It is not intended for manual editing.
-version = 3
+version = 4
 
 [[package]]
 name = "ab_glyph"
@@ -970,6 +970,12 @@ dependencies = [
  "unicode-width",
 ]
 
+[[package]]
+name = "color_quant"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+
 [[package]]
 name = "colorchoice"
 version = "1.0.1"
@@ -1102,6 +1108,18 @@ dependencies = [
  "libc",
 ]
 
+[[package]]
+name = "core-text"
+version = "20.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9d2790b5c08465d49f8dc05c8bcae9fea467855947db39b0f8145c091aaced5"
+dependencies = [
+ "core-foundation",
+ "core-graphics",
+ "foreign-types",
+ "libc",
+]
+
 [[package]]
 name = "cpufeatures"
 version = "0.2.12"
@@ -1459,6 +1477,27 @@ dependencies = [
  "subtle",
 ]
 
+[[package]]
+name = "dirs"
+version = "5.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
+dependencies = [
+ "libc",
+ "option-ext",
+ "redox_users",
+ "windows-sys 0.48.0",
+]
+
 [[package]]
 name = "dispatch"
 version = "0.2.0"
@@ -1526,6 +1565,18 @@ dependencies = [
  "syn 2.0.68",
 ]
 
+[[package]]
+name = "dwrote"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70182709525a3632b2ba96b6569225467b18ecb4a77f46d255f713a6bebf05fd"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "winapi",
+ "wio",
+]
+
 [[package]]
 name = "echargs"
 version = "0.1.0"
@@ -1556,7 +1607,7 @@ dependencies = [
  "glow",
  "glutin",
  "glutin-winit",
- "image",
+ "image 0.25.2",
  "js-sys",
  "log",
  "objc2 0.5.2",
@@ -1825,6 +1876,12 @@ dependencies = [
  "miniz_oxide",
 ]
 
+[[package]]
+name = "float-ord"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce81f49ae8a0482e4c55ea62ebbd7e5a686af544c00b9d090bba3ff9be97b3d"
+
 [[package]]
 name = "fluent"
 version = "0.16.1"
@@ -1883,6 +1940,31 @@ version = "1.0.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
 
+[[package]]
+name = "font-kit"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b64b34f4efd515f905952d91bc185039863705592c0c53ae6d979805dd154520"
+dependencies = [
+ "bitflags 2.6.0",
+ "byteorder",
+ "core-foundation",
+ "core-graphics",
+ "core-text",
+ "dirs",
+ "dwrote",
+ "float-ord",
+ "freetype-sys",
+ "lazy_static",
+ "libc",
+ "log",
+ "pathfinder_geometry",
+ "pathfinder_simd",
+ "walkdir",
+ "winapi",
+ "yeslogic-fontconfig-sys",
+]
+
 [[package]]
 name = "foreign-types"
 version = "0.5.0"
@@ -1919,6 +2001,17 @@ dependencies = [
  "percent-encoding",
 ]
 
+[[package]]
+name = "freetype-sys"
+version = "0.20.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e7edc5b9669349acfda99533e9e0bcf26a51862ab43b08ee7745c55d28eb134"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
 [[package]]
 name = "future_stream"
 version = "0.1.0"
@@ -2122,6 +2215,16 @@ dependencies = [
  "typed-builder",
 ]
 
+[[package]]
+name = "gif"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80792593675e051cf94a4b111980da2ba60d4a83e43e0048c5693baab3977045"
+dependencies = [
+ "color_quant",
+ "weezl",
+]
+
 [[package]]
 name = "gimli"
 version = "0.29.0"
@@ -2326,6 +2429,13 @@ dependencies = [
  "bitflags 2.6.0",
 ]
 
+[[package]]
+name = "graph"
+version = "0.1.0"
+dependencies = [
+ "plotters",
+]
+
 [[package]]
 name = "gtk-sys"
 version = "0.18.0"
@@ -2621,6 +2731,20 @@ dependencies = [
  "winapi-util",
 ]
 
+[[package]]
+name = "image"
+version = "0.24.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "color_quant",
+ "jpeg-decoder",
+ "num-traits",
+ "png",
+]
+
 [[package]]
 name = "image"
 version = "0.25.2"
@@ -2779,6 +2903,12 @@ dependencies = [
  "libc",
 ]
 
+[[package]]
+name = "jpeg-decoder"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0"
+
 [[package]]
 name = "js-sys"
 version = "0.3.69"
@@ -2918,6 +3048,16 @@ dependencies = [
  "redox_syscall 0.4.1",
 ]
 
+[[package]]
+name = "libredox"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d"
+dependencies = [
+ "bitflags 2.6.0",
+ "libc",
+]
+
 [[package]]
 name = "libsqlite3-sys"
 version = "0.28.0"
@@ -3456,13 +3596,19 @@ version = "11.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
 
+[[package]]
+name = "option-ext"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
+
 [[package]]
 name = "orbclient"
 version = "0.3.47"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "52f0d54bde9774d3a51dcf281a5def240c71996bc6ca05d2c847ec8b2b216166"
 dependencies = [
- "libredox",
+ "libredox 0.0.2",
 ]
 
 [[package]]
@@ -3487,7 +3633,7 @@ version = "0.24.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "490d3a563d3122bf7c911a59b0add9389e5ec0f5f0c3ac6b91ff235a0e6a7f90"
 dependencies = [
- "ttf-parser",
+ "ttf-parser 0.24.1",
 ]
 
 [[package]]
@@ -3552,6 +3698,25 @@ version = "1.0.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
 
+[[package]]
+name = "pathfinder_geometry"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b7e7b4ea703700ce73ebf128e1450eb69c3a8329199ffbfb9b2a0418e5ad3"
+dependencies = [
+ "log",
+ "pathfinder_simd",
+]
+
+[[package]]
+name = "pathfinder_simd"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cf07ef4804cfa9aea3b04a7bbdd5a40031dbb6b4f2cbaf2b011666c80c5b4f2"
+dependencies = [
+ "rustc_version",
+]
+
 [[package]]
 name = "peg"
 version = "0.6.3"
@@ -3689,13 +3854,20 @@ checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec"
 
 [[package]]
 name = "plotters"
-version = "0.3.6"
+version = "0.3.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a15b6eccb8484002195a3e44fe65a4ce8e93a625797a063735536fd59cb01cf3"
+checksum = "5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747"
 dependencies = [
+ "chrono",
+ "font-kit",
+ "image 0.24.9",
+ "lazy_static",
  "num-traits",
+ "pathfinder_geometry",
  "plotters-backend",
+ "plotters-bitmap",
  "plotters-svg",
+ "ttf-parser 0.20.0",
  "wasm-bindgen",
  "web-sys",
 ]
@@ -3706,6 +3878,17 @@ version = "0.3.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "414cec62c6634ae900ea1c56128dfe87cf63e7caece0852ec76aba307cebadb7"
 
+[[package]]
+name = "plotters-bitmap"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72ce181e3f6bf82d6c1dc569103ca7b1bd964c60ba03d7e6cdfbb3e3eb7f7405"
+dependencies = [
+ "gif",
+ "image 0.24.9",
+ "plotters-backend",
+]
+
 [[package]]
 name = "plotters-svg"
 version = "0.3.6"
@@ -3933,6 +4116,17 @@ dependencies = [
  "bitflags 2.6.0",
 ]
 
+[[package]]
+name = "redox_users"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43"
+dependencies = [
+ "getrandom",
+ "libredox 0.1.3",
+ "thiserror",
+]
+
 [[package]]
 name = "regex"
 version = "1.10.5"
@@ -4069,6 +4263,15 @@ version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
 
+[[package]]
+name = "rustc_version"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
+dependencies = [
+ "semver",
+]
+
 [[package]]
 name = "rustix"
 version = "0.37.27"
@@ -4169,6 +4372,12 @@ version = "1.0.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d369a96f978623eb3dc28807c4852d6cc617fed53da5d3c400feff1ef34a714a"
 
+[[package]]
+name = "semver"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba"
+
 [[package]]
 name = "serde"
 version = "1.0.203"
@@ -4957,6 +5166,12 @@ version = "0.2.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
 
+[[package]]
+name = "ttf-parser"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4"
+
 [[package]]
 name = "ttf-parser"
 version = "0.24.1"
@@ -5457,6 +5672,12 @@ dependencies = [
  "web-sys",
 ]
 
+[[package]]
+name = "weezl"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082"
+
 [[package]]
 name = "wgpu"
 version = "0.20.1"
@@ -5922,6 +6143,15 @@ dependencies = [
  "memchr",
 ]
 
+[[package]]
+name = "wio"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5"
+dependencies = [
+ "winapi",
+]
+
 [[package]]
 name = "x11-dl"
 version = "2.21.0"
@@ -5995,6 +6225,17 @@ version = "0.8.21"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "539a77ee7c0de333dcc6da69b177380a0b81e0dacfa4f7344c465a36871ee601"
 
+[[package]]
+name = "yeslogic-fontconfig-sys"
+version = "6.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "503a066b4c037c440169d995b869046827dbc71263f6e8f3be6d77d4f3229dbd"
+dependencies = [
+ "dlib",
+ "once_cell",
+ "pkg-config",
+]
+
 [[package]]
 name = "zbus"
 version = "3.15.2"
diff --git a/Cargo.toml b/Cargo.toml
index 0b03032..a0fa39c 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,78 +1,80 @@
 [workspace]
 members = [
-  ".",
-  "members/criterion-demo",
-  "members/cucumber-demo",
-  "members/panic-calm",
-  "members/pest-demo",
-  "members/revsqrt",
-  "members/serde-json-demo",
-  "members/shortc",
-  "members/socker",
-  "members/tokryon",
-  "members/tokio-send-sync",
-  "members/matchmatchmatch",
-  "members/future_stream",
-  "members/mpsc",
-  "members/mpsc-full",
-  "members/echargs",
-  "members/claptest",
-  "members/rest",
-  "members/rest-queued",
-  "members/fluent-demo",
-  "members/onlytoken",
-  "members/sqlite-demo",
-  "members/diesel-demo",
-  "members/ptlog",
-  "members/hello-world",
-  "members/statusline",
-  "members/clap-repl-demo",
-  "members/arithmetics",
-  "members/egui-demo",
-  "members/rfd-demo",
+	".",
+	"members/criterion-demo",
+	"members/cucumber-demo",
+	"members/panic-calm",
+	"members/pest-demo",
+	"members/revsqrt",
+	"members/serde-json-demo",
+	"members/shortc",
+	"members/socker",
+	"members/tokryon",
+	"members/tokio-send-sync",
+	"members/matchmatchmatch",
+	"members/future_stream",
+	"members/mpsc",
+	"members/mpsc-full",
+	"members/echargs",
+	"members/claptest",
+	"members/rest",
+	"members/rest-queued",
+	"members/fluent-demo",
+	"members/onlytoken",
+	"members/sqlite-demo",
+	"members/diesel-demo",
+	"members/ptlog",
+	"members/hello-world",
+	"members/statusline",
+	"members/clap-repl-demo",
+	"members/arithmetics",
+	"members/egui-demo",
+	"members/rfd-demo",
+	"members/graph",
 ]
 default-members = [
-  ".",
-  "members/rfd-demo",
-  "members/egui-demo",
-  "members/arithmetics",
-  "members/statusline",
-  "members/ptlog",
-  "members/diesel-demo",
-  "members/onlytoken",
-  "members/fluent-demo",
-  "members/echargs",
-  "members/revsqrt",
-  "members/claptest",
-  "members/mpsc",
-  "members/mpsc-full",
-  "members/criterion-demo",
-  "members/shortc",
-  "members/pest-demo",
-  "members/serde-json-demo",
-  "members/cucumber-demo",
-  "members/panic-calm",
-  "members/socker",
-  "members/tokryon",
-  "members/tokio-send-sync",
-  "members/matchmatchmatch",
-  "members/future_stream",
-  "members/rest",
-  "members/rest-queued",
-  "members/sqlite-demo",
+	".",
+	"members/graph",
+	"members/rfd-demo",
+	"members/egui-demo",
+	"members/arithmetics",
+	"members/statusline",
+	"members/ptlog",
+	"members/diesel-demo",
+	"members/onlytoken",
+	"members/fluent-demo",
+	"members/echargs",
+	"members/revsqrt",
+	"members/claptest",
+	"members/mpsc",
+	"members/mpsc-full",
+	"members/criterion-demo",
+	"members/shortc",
+	"members/pest-demo",
+	"members/serde-json-demo",
+	"members/cucumber-demo",
+	"members/panic-calm",
+	"members/socker",
+	"members/tokryon",
+	"members/tokio-send-sync",
+	"members/matchmatchmatch",
+	"members/future_stream",
+	"members/rest",
+	"members/rest-queued",
+	"members/sqlite-demo",
 ]
 
 [workspace.dependencies]
 anyhow = "1.0.79"
 thiserror = "1.0.56"
 tokio = { version = "1.35.1", features = [
-  "net",
-  "rt",
-  "macros",
-  "rt-multi-thread",
-  "io-util",
-  "time",
-  "sync",
+	"net",
+	"rt",
+	"macros",
+	"rt-multi-thread",
+	"io-util",
+	"time",
+	"sync",
 ] }
 futures = { version = "0.3.30", features = ["executor"] }
 serde = { version = "1.0.171", features = ["derive"] }
diff --git a/members/graph/Cargo.toml b/members/graph/Cargo.toml
new file mode 100644
index 0000000..0eeafa5
--- /dev/null
+++ b/members/graph/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "graph"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+plotters = "0.3.7"
diff --git a/members/graph/src/main.rs b/members/graph/src/main.rs
new file mode 100644
index 0000000..879dbfb
--- /dev/null
+++ b/members/graph/src/main.rs
@@ -0,0 +1,18 @@
+use plotters::prelude::*;
+
+fn main() {
+    let root_area = BitMapBackend::new("images/2.5.png", (600, 400)).into_drawing_area();
+    root_area.fill(&WHITE).unwrap();
+
+    let mut ctx = ChartBuilder::on(&root_area)
+        .set_label_area_size(LabelAreaPosition::Left, 40)
+        .set_label_area_size(LabelAreaPosition::Bottom, 40)
+        .caption("Line Plot Demo", ("sans-serif", 40))
+        .build_cartesian_2d(-10..10, 0..100)
+        .unwrap();
+
+    ctx.configure_mesh().draw().unwrap();
+
+    ctx.draw_series(LineSeries::new((-10..=10).map(|x| (x, x * x)), &GREEN))
+        .unwrap();
+}