summaryrefslogtreecommitdiffstats
path: root/style/src/theme.rs
diff options
context:
space:
mode:
Diffstat (limited to 'style/src/theme.rs')
-rw-r--r--style/src/theme.rs41
1 files changed, 41 insertions, 0 deletions
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 {