From 09cd0fe9f2d5d775cd1b645300ac56bc203a20cd Mon Sep 17 00:00:00 2001 From: pml68 Date: Sat, 22 Feb 2025 23:48:19 +0100 Subject: feat: start working on options backend (`ApplyOptions` trait) --- src/options.rs | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/options.rs (limited to 'src/options.rs') diff --git a/src/options.rs b/src/options.rs new file mode 100644 index 0000000..9514dcb --- /dev/null +++ b/src/options.rs @@ -0,0 +1,44 @@ +use std::collections::BTreeMap; +use std::str::FromStr; + +use iced::Padding; +use iced::widget::{Button, Column, Container, Image, Row, Svg, Text}; + +pub trait ApplyOptions { + fn apply_options(self, options: BTreeMap>) -> Self; +} + +impl<'a, Message> ApplyOptions for Button<'a, Message> { + fn apply_options(self, options: BTreeMap>) -> Self { + let mut button = self; + + if let Some(padding) = options.get("padding").expect("padding key") { + let padding: Padding = padding + .strip_prefix('[') + .and_then(|s| s.strip_suffix(']')) + .and_then(|s| { + Some( + s.split(',') + .map(|n| f32::from_str(n).unwrap()) + .collect::>(), + ) + }) + .and_then(|s| { + if s.len() == 4 { + Some(Padding { + top: s[0], + right: s[1], + bottom: s[2], + left: s[3], + }) + } else { + None + } + }) + .unwrap(); + button = button.padding(padding); + } + + button + } +} -- cgit v1.2.3