diff options
author | 2024-02-01 16:23:41 -0600 | |
---|---|---|
committer | 2024-02-09 23:43:01 +0100 | |
commit | c2d82833a0d56660b66bb06a9fb6360f425416af (patch) | |
tree | cb506d15b15d99d77db446ec132c8fe926dc686e /style | |
parent | 99a3f25c5f95a144fee7d25b4607f7275abcfaa2 (diff) | |
download | iced-c2d82833a0d56660b66bb06a9fb6360f425416af.tar.gz iced-c2d82833a0d56660b66bb06a9fb6360f425416af.tar.bz2 iced-c2d82833a0d56660b66bb06a9fb6360f425416af.zip |
Styling for QR Code using theme framework
Diffstat (limited to 'style')
-rw-r--r-- | style/src/lib.rs | 1 | ||||
-rw-r--r-- | style/src/qr_code.rs | 20 | ||||
-rw-r--r-- | style/src/theme.rs | 41 |
3 files changed, 62 insertions, 0 deletions
diff --git a/style/src/lib.rs b/style/src/lib.rs index e4097434..3c2865eb 100644 --- a/style/src/lib.rs +++ b/style/src/lib.rs @@ -24,6 +24,7 @@ pub mod menu; pub mod pane_grid; pub mod pick_list; pub mod progress_bar; +pub mod qr_code; pub mod radio; pub mod rule; pub mod scrollable; diff --git a/style/src/qr_code.rs b/style/src/qr_code.rs new file mode 100644 index 00000000..a024506c --- /dev/null +++ b/style/src/qr_code.rs @@ -0,0 +1,20 @@ +//! Change the appearance of a QR code. +use crate::core::Color; + +/// The appearance of a QR code. +#[derive(Debug, Clone, Copy)] +pub struct Appearance { + /// The color of the QR code data cells + pub cell: Color, + /// The color of the QR code background + pub background: Color, +} + +/// A set of rules that dictate the style of a QR code. +pub trait StyleSheet { + /// The supported style of the [`StyleSheet`]. + type Style: Default; + + /// Produces the style of a QR code. + fn appearance(&self, style: &Self::Style) -> Appearance; +} diff --git a/style/src/theme.rs b/style/src/theme.rs index e579a1c2..afb4d027 100644 --- a/style/src/theme.rs +++ b/style/src/theme.rs @@ -12,6 +12,7 @@ use crate::menu; use crate::pane_grid; use crate::pick_list; use crate::progress_bar; +use crate::qr_code; use crate::radio; use crate::rule; use crate::scrollable; @@ -956,6 +957,46 @@ impl<T: Fn(&Theme) -> progress_bar::Appearance> progress_bar::StyleSheet for T { } } +/// The style of a QR Code. +#[derive(Default)] +pub enum QRCode { + /// The default style. + #[default] + Default, + /// A custom style. + Custom(Box<dyn qr_code::StyleSheet<Style = Theme>>), +} + +impl<T: Fn(&Theme) -> qr_code::Appearance + 'static> From<T> for QRCode { + fn from(f: T) -> Self { + Self::Custom(Box::new(f)) + } +} + +impl qr_code::StyleSheet for Theme { + type Style = QRCode; + + fn appearance(&self, style: &Self::Style) -> qr_code::Appearance { + let palette = self.palette(); + + match style { + QRCode::Default => qr_code::Appearance { + cell: palette.text, + background: palette.background, + }, + QRCode::Custom(custom) => custom.appearance(self), + } + } +} + +impl<T: Fn(&Theme) -> qr_code::Appearance> qr_code::StyleSheet for T { + type Style = Theme; + + fn appearance(&self, style: &Self::Style) -> qr_code::Appearance { + (self)(style) + } +} + /// The style of a rule. #[derive(Default)] pub enum Rule { |