diff options
-rw-r--r-- | Cargo.lock | 223 | ||||
-rw-r--r-- | svgbob/Cargo.toml | 2 | ||||
-rw-r--r-- | svgbob/src/buffer/cell_buffer.rs | 34 | ||||
-rw-r--r-- | svgbob/src/buffer/fragment_buffer/fragment.rs | 4 | ||||
-rw-r--r-- | svgbob/src/buffer/fragment_buffer/fragment/arc.rs | 4 | ||||
-rw-r--r-- | svgbob/src/buffer/fragment_buffer/fragment/circle.rs | 4 | ||||
-rw-r--r-- | svgbob/src/buffer/fragment_buffer/fragment/line.rs | 4 | ||||
-rw-r--r-- | svgbob/src/buffer/fragment_buffer/fragment/marker_line.rs | 6 | ||||
-rw-r--r-- | svgbob/src/buffer/fragment_buffer/fragment/polygon.rs | 4 | ||||
-rw-r--r-- | svgbob/src/buffer/fragment_buffer/fragment/rect.rs | 4 | ||||
-rw-r--r-- | svgbob/src/buffer/fragment_buffer/fragment/text.rs | 11 | ||||
-rw-r--r-- | svgbob/src/buffer/fragment_buffer/fragment_tree.rs | 6 | ||||
-rw-r--r-- | svgbob/src/lib.rs | 6 |
13 files changed, 268 insertions, 44 deletions
@@ -22,6 +22,12 @@ dependencies = [ ] [[package]] +name = "anyhow" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7825f6833612eb2414095684fcf6c635becf3ce97fe48cf6421321e93bfbd53c" + +[[package]] name = "approx" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -60,6 +66,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" [[package]] +name = "bumpalo" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f359dc14ff8911330a51ef78022d376f25ed00248912803b58f00cb1c27f742" + +[[package]] name = "cfg-if" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -123,6 +135,15 @@ dependencies = [ ] [[package]] +name = "heck" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" +dependencies = [ + "unicode-segmentation", +] + +[[package]] name = "hermit-abi" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -141,6 +162,15 @@ dependencies = [ ] [[package]] +name = "js-sys" +version = "0.3.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7889c7c36282151f6bf465be4700359318aef36baa951462382eae49e9577cf9" +dependencies = [ + "wasm-bindgen", +] + +[[package]] name = "lazy_static" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -183,6 +213,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" [[package]] +name = "memchr" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400" + +[[package]] name = "nalgebra" version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -219,6 +255,16 @@ dependencies = [ ] [[package]] +name = "nom" +version = "4.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" +dependencies = [ + "memchr", + "version_check", +] + +[[package]] name = "num-complex" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -281,6 +327,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef5cf7f52c12da93c26b63ee0d9f012bc82fb071851c546c030dc6ecb5f2994b" [[package]] +name = "proc-macro2" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c09721c6781493a2a492a96b5a5bf19b65917fe6728884e7c44dd0c60ca3435" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "quote" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" +dependencies = [ + "proc-macro2", +] + +[[package]] name = "rand" version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -403,21 +467,25 @@ dependencies = [ [[package]] name = "sauron" -version = "0.21.1" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee92eb275e1c4dd3d2f314cf162d67f9db7916436a59aebf93715c40d6818c16" +checksum = "987022bf1b21c2d5d5cbd02af2af0a9c78b954b1e8b493e177250e43e5f6f28a" dependencies = [ "cfg-if", + "js-sys", "lazy_static", "log", "sauron_vdom", + "thiserror", + "wasm-bindgen", + "web-sys", ] [[package]] name = "sauron_vdom" -version = "0.21.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce9de12db6e3f973366706550ff4a3a2a3396d5dd4398ec666dd8d3552eb5ebe" +checksum = "f60ed6fcda6e9822203da7ecf0c04d14e6e85475992ada0589e0ad357e3f3179" dependencies = [ "log", ] @@ -438,6 +506,12 @@ dependencies = [ ] [[package]] +name = "sourcefile" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bf77cb82ba8453b42b6ae1d692e4cdc92f9a47beaf89a847c8be83f4e328ad3" + +[[package]] name = "strsim" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -465,6 +539,17 @@ dependencies = [ ] [[package]] +name = "syn" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "123bd9499cfb380418d509322d7a6d52e5315f064fe4b3ad18a53d6b92c07859" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] name = "textwrap" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -474,24 +559,154 @@ dependencies = [ ] [[package]] +name = "thiserror" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee14bf8e6767ab4c687c9e8bc003879e042a96fd67a3ba5934eadb6536bef4db" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7b51e1fbc44b5a0840be594fbc0f960be09050f2617e61e6aa43bef97cd3ef4" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] name = "typenum" version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d2783fe2d6b8c1101136184eb41be8b1ad379e4657050b8aaff0c79ee7575f9" [[package]] +name = "unicode-segmentation" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0" + +[[package]] name = "unicode-width" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479" [[package]] +name = "unicode-xid" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" + +[[package]] name = "vec_map" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" [[package]] +name = "version_check" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" + +[[package]] +name = "wasm-bindgen" +version = "0.2.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5205e9afdf42282b192e2310a5b463a6d1c1d774e30dc3c791ac37ab42d2616c" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11cdb95816290b525b32587d76419facd99662a07e59d3cdb560488a819d9a45" +dependencies = [ + "bumpalo", + "lazy_static", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "574094772ce6921576fb6f2e3f7497b8a76273b6db092be18fc48a082de09dc3" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e85031354f25eaebe78bb7db1c3d86140312a911a106b2e29f9cc440ce3e7668" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5e7e61fc929f4c0dddb748b102ebf9f632e2b8d739f2016542b4de2965a9601" + +[[package]] +name = "wasm-bindgen-webidl" +version = "0.2.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef012a0d93fc0432df126a8eaf547b2dce25a8ce9212e1d3cbeef5c11157975d" +dependencies = [ + "anyhow", + "heck", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "weedle", +] + +[[package]] +name = "web-sys" +version = "0.3.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aaf97caf6aa8c2b1dac90faf0db529d9d63c93846cca4911856f78a83cebf53b" +dependencies = [ + "anyhow", + "js-sys", + "sourcefile", + "wasm-bindgen", + "wasm-bindgen-webidl", +] + +[[package]] +name = "weedle" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bb43f70885151e629e2a19ce9e50bd730fd436cfd4b666894c9ce4de9141164" +dependencies = [ + "nom", +] + +[[package]] name = "winapi" version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" diff --git a/svgbob/Cargo.toml b/svgbob/Cargo.toml index 287b509..b110a82 100644 --- a/svgbob/Cargo.toml +++ b/svgbob/Cargo.toml @@ -13,7 +13,7 @@ license = "Apache-2.0" nalgebra = "0.18.0" ncollide2d = "0.19.1" lazy_static = "1.3.0" -sauron = { version = "0.21.0", default-features = false} +sauron = { version = "0.22.0", default-features = false, features = ["with-dom"]} unicode-width = "0.1.5" itertools = "0.8.0" pom = { version = "3.1.0" } diff --git a/svgbob/src/buffer/cell_buffer.rs b/svgbob/src/buffer/cell_buffer.rs index c2f9239..d4cda46 100644 --- a/svgbob/src/buffer/cell_buffer.rs +++ b/svgbob/src/buffer/cell_buffer.rs @@ -131,7 +131,7 @@ impl CellBuffer { } /// get the svg node of this cell buffer, using the default settings for the sizes - pub fn get_node(&self) -> Node<()> { + pub fn get_node<MSG>(&self) -> Node<MSG> { let (node, _w, _h) = self.get_node_with_size(&Settings::default()); node } @@ -146,7 +146,7 @@ impl CellBuffer { } /// get all nodes of this cell buffer - pub fn get_node_with_size(&self, settings: &Settings) -> (Node<()>, f32, f32) { + pub fn get_node_with_size<MSG>(&self, settings: &Settings) -> (Node<MSG>, f32, f32) { let (w, h) = self.get_size(&settings); // vec_fragments are the fragment result of successful endorsement // @@ -170,14 +170,18 @@ impl CellBuffer { .flat_map(|contact| contact.0) .collect(); - let group_nodes: Vec<Node<()>> = vec_groups + let group_nodes: Vec<Node<MSG>> = vec_groups .into_iter() .map(|contact| contact.0) .map(move |contacts| { let mut group_members = contacts .iter() - .map(move |gfrag| gfrag.scale(settings.scale).into()) - .collect::<Vec<_>>(); + .map(move |gfrag| { + let scaled = gfrag.scale(settings.scale); + let node: Node<MSG> = scaled.into(); + node + }) + .collect::<Vec<Node<MSG>>>(); g(vec![], group_members) }) .collect(); @@ -199,7 +203,7 @@ impl CellBuffer { classes.join("\n") } - fn get_style(settings: &Settings, legend_css: String) -> Node<()> { + fn get_style<MSG>(settings: &Settings, legend_css: String) -> Node<MSG> { html::tags::style( vec![], vec![text(format!( @@ -287,18 +291,18 @@ impl CellBuffer { /// convert the fragments into svg nodes using the supplied settings, with size for the /// dimension - pub(crate) fn fragments_to_node( + pub(crate) fn fragments_to_node<MSG>( fragments: Vec<Fragment>, legend_css: String, settings: &Settings, w: f32, h: f32, - ) -> Node<()> { + ) -> Node<MSG> { let fragments_scaled: Vec<Fragment> = fragments .into_iter() .map(|frag| frag.scale(settings.scale)) .collect(); - let fragment_nodes: Vec<Node<()>> = FragmentTree::fragments_to_node(fragments_scaled); + let fragment_nodes: Vec<Node<MSG>> = FragmentTree::fragments_to_node(fragments_scaled); let svg_node = svg( vec![xmlns("http://www.w3.org/2000/svg"), width(w), height(h)], @@ -315,7 +319,7 @@ impl CellBuffer { svg_node } - fn get_defs() -> Node<()> { + fn get_defs<MSG>() -> Node<MSG> { defs( vec![], vec![ @@ -328,7 +332,7 @@ impl CellBuffer { ) } - fn arrow_marker() -> Node<()> { + fn arrow_marker<MSG>() -> Node<MSG> { marker( vec![ id("arrow"), @@ -343,7 +347,7 @@ impl CellBuffer { ) } - fn diamond_marker() -> Node<()> { + fn diamond_marker<MSG>() -> Node<MSG> { marker( vec![ id("diamond"), @@ -358,7 +362,7 @@ impl CellBuffer { ) } - fn open_circle_marker() -> Node<()> { + fn open_circle_marker<MSG>() -> Node<MSG> { marker( vec![ id("open_circle"), @@ -376,7 +380,7 @@ impl CellBuffer { ) } - fn circle_marker() -> Node<()> { + fn circle_marker<MSG>() -> Node<MSG> { marker( vec![ id("circle"), @@ -394,7 +398,7 @@ impl CellBuffer { ) } - fn big_open_circle_marker() -> Node<()> { + fn big_open_circle_marker<MSG>() -> Node<MSG> { marker( vec![ id("big_open_circle"), diff --git a/svgbob/src/buffer/fragment_buffer/fragment.rs b/svgbob/src/buffer/fragment_buffer/fragment.rs index a968e1e..3329315 100644 --- a/svgbob/src/buffer/fragment_buffer/fragment.rs +++ b/svgbob/src/buffer/fragment_buffer/fragment.rs @@ -450,8 +450,8 @@ impl Bounds for Fragment { } } -impl Into<Node<()>> for Fragment { - fn into(self) -> Node<()> { +impl<MSG> Into<Node<MSG>> for Fragment { + fn into(self) -> Node<MSG> { match self { Fragment::Line(line) => line.into(), Fragment::MarkerLine(marker_line) => marker_line.into(), diff --git a/svgbob/src/buffer/fragment_buffer/fragment/arc.rs b/svgbob/src/buffer/fragment_buffer/fragment/arc.rs index d37a1c5..12a477e 100644 --- a/svgbob/src/buffer/fragment_buffer/fragment/arc.rs +++ b/svgbob/src/buffer/fragment_buffer/fragment/arc.rs @@ -156,8 +156,8 @@ impl fmt::Display for Arc { } } -impl Into<Node<()>> for Arc { - fn into(self) -> Node<()> { +impl<MSG> Into<Node<MSG>> for Arc { + fn into(self) -> Node<MSG> { let dv = format!( "M {},{} A {},{} {},{},{} {},{}", self.start.x, diff --git a/svgbob/src/buffer/fragment_buffer/fragment/circle.rs b/svgbob/src/buffer/fragment_buffer/fragment/circle.rs index 585de64..03a7e65 100644 --- a/svgbob/src/buffer/fragment_buffer/fragment/circle.rs +++ b/svgbob/src/buffer/fragment_buffer/fragment/circle.rs @@ -61,8 +61,8 @@ impl fmt::Display for Circle { } } -impl Into<Node<()>> for Circle { - fn into(self) -> Node<()> { +impl<MSG> Into<Node<MSG>> for Circle { + fn into(self) -> Node<MSG> { circle( vec![ cx(self.center.x), diff --git a/svgbob/src/buffer/fragment_buffer/fragment/line.rs b/svgbob/src/buffer/fragment_buffer/fragment/line.rs index a69b5d4..f51eb27 100644 --- a/svgbob/src/buffer/fragment_buffer/fragment/line.rs +++ b/svgbob/src/buffer/fragment_buffer/fragment/line.rs @@ -558,8 +558,8 @@ impl fmt::Display for Line { } } -impl Into<Node<()>> for Line { - fn into(self) -> Node<()> { +impl<MSG> Into<Node<MSG>> for Line { + fn into(self) -> Node<MSG> { svg::tags::line( vec![ x1(self.start.x), diff --git a/svgbob/src/buffer/fragment_buffer/fragment/marker_line.rs b/svgbob/src/buffer/fragment_buffer/fragment/marker_line.rs index 7e57490..423612f 100644 --- a/svgbob/src/buffer/fragment_buffer/fragment/marker_line.rs +++ b/svgbob/src/buffer/fragment_buffer/fragment/marker_line.rs @@ -175,9 +175,9 @@ impl fmt::Display for MarkerLine { } } -impl Into<Node<()>> for MarkerLine { - fn into(self) -> Node<()> { - let mut node: Node<()> = self.line.into(); +impl<MSG> Into<Node<MSG>> for MarkerLine { + fn into(self) -> Node<MSG> { + let mut node: Node<MSG> = self.line.into(); let mut classes = vec![]; if let Some(start_marker) = self.start_marker { classes.push(class(format!("start_marked_{}", start_marker))); diff --git a/svgbob/src/buffer/fragment_buffer/fragment/polygon.rs b/svgbob/src/buffer/fragment_buffer/fragment/polygon.rs index b1a9239..ce82ae4 100644 --- a/svgbob/src/buffer/fragment_buffer/fragment/polygon.rs +++ b/svgbob/src/buffer/fragment_buffer/fragment/polygon.rs @@ -159,8 +159,8 @@ impl fmt::Display for Polygon { } } -impl Into<Node<()>> for Polygon { - fn into(self) -> Node<()> { +impl<MSG> Into<Node<MSG>> for Polygon { + fn into(self) -> Node<MSG> { polygon( vec![ points( diff --git a/svgbob/src/buffer/fragment_buffer/fragment/rect.rs b/svgbob/src/buffer/fragment_buffer/fragment/rect.rs index d716dc7..97a15e0 100644 --- a/svgbob/src/buffer/fragment_buffer/fragment/rect.rs +++ b/svgbob/src/buffer/fragment_buffer/fragment/rect.rs @@ -107,8 +107,8 @@ impl fmt::Display for Rect { } } -impl Into<Node<()>> for Rect { - fn into(self) -> Node<()> { +impl<MSG> Into<Node<MSG>> for Rect { + fn into(self) -> Node<MSG> { rect( vec![ x(self.start.x), diff --git a/svgbob/src/buffer/fragment_buffer/fragment/text.rs b/svgbob/src/buffer/fragment_buffer/fragment/text.rs index b5ce261..039e6d7 100644 --- a/svgbob/src/buffer/fragment_buffer/fragment/text.rs +++ b/svgbob/src/buffer/fragment_buffer/fragment/text.rs @@ -95,8 +95,8 @@ impl Into<Text> for CellText { } } -impl Into<Node<()>> for CellText { - fn into(self) -> Node<()> { +impl<MSG> Into<Node<MSG>> for CellText { + fn into(self) -> Node<MSG> { let text: Text = self.into(); text.into() } @@ -162,11 +162,14 @@ impl fmt::Display for Text { } } -impl Into<Node<()>> for Text { - fn into(self) -> Node<()> { +impl<MSG> Into<Node<MSG>> for Text { + fn into(self) -> Node<MSG> { svg::tags::text( vec![x(self.start.x), y(self.start.y)], + #[cfg(not(feature = "with-dom"))] vec![text(escape_html_text(&self.text))], + #[cfg(feature = "with-dom")] + vec![text(&self.text)], ) } } diff --git a/svgbob/src/buffer/fragment_buffer/fragment_tree.rs b/svgbob/src/buffer/fragment_buffer/fragment_tree.rs index 863dfad..e3f476b 100644 --- a/svgbob/src/buffer/fragment_buffer/fragment_tree.rs +++ b/svgbob/src/buffer/fragment_buffer/fragment_tree.rs @@ -99,9 +99,9 @@ impl FragmentTree { } /// convert back into fragments - fn into_nodes(self) -> Vec<Node<()>> { + fn into_nodes<MSG>(self) -> Vec<Node<MSG>> { let mut nodes = vec![]; - let mut fragment_node: Node<()> = self.fragment.into(); + let mut fragment_node: Node<MSG> = self.fragment.into(); fragment_node = fragment_node.add_attributes(vec![classes(self.css_tag)]); nodes.push(fragment_node); for child in self.enclosing { @@ -112,7 +112,7 @@ impl FragmentTree { /// convert fragments to node, where cell_text and text may become /// css class of the contain fragment - pub(crate) fn fragments_to_node(fragments: Vec<Fragment>) -> Vec<Node<()>> { + pub(crate) fn fragments_to_node<MSG>(fragments: Vec<Fragment>) -> Vec<Node<MSG>> { let fragment_trees: Vec<FragmentTree> = Self::enclose_fragments(fragments); fragment_trees .into_iter() diff --git a/svgbob/src/lib.rs b/svgbob/src/lib.rs index 1d9e836..dff232c 100644 --- a/svgbob/src/lib.rs +++ b/svgbob/src/lib.rs @@ -13,16 +13,18 @@ pub use buffer::{ Signal, }; pub use point::Point; +use sauron::Node; /// convert svgbob ascii art to svg pub fn to_svg(ascii: &str) -> String { let cb = CellBuffer::from(ascii); - cb.get_node().to_string() + let node: Node<()> = cb.get_node(); + node.to_string() } /// convert ascii art into an svg pub fn to_svg_with_settings(ascii: &str, settings: &Settings) -> String { let cb = CellBuffer::from(ascii); - let (node, _w, _h) = cb.get_node_with_size(settings); + let (node, _w, _h): (Node<()>, f32, f32) = cb.get_node_with_size(settings); node.to_string() } |