vizia_core/modifiers/
control.rs1use crate::prelude::*;
2
3#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
5pub enum ControlSize {
6 ExtraSmall,
8 Small,
10 #[default]
11 Medium,
13 Large,
15}
16
17impl_res_simple!(ControlSize);
18
19pub trait ControlModifiers: Sized {
21 fn control_size<U: Into<ControlSize> + Clone + 'static>(
23 self,
24 size: impl Res<U> + 'static,
25 ) -> Self;
26}
27
28pub(crate) fn bind_control_size<V: View, U: Into<ControlSize> + Clone + 'static>(
29 handle: Handle<'_, V>,
30 size: impl Res<U> + 'static,
31) -> Handle<'_, V> {
32 let size = size.to_signal(handle.cx).map(|value| value.clone().into());
33 handle.bind(size, move |handle| {
34 match size.get() {
35 ControlSize::ExtraSmall => {
36 handle
37 .toggle_class("xsmall", true)
38 .toggle_class("small", false)
39 .toggle_class("medium", false)
40 .toggle_class("large", false);
41 }
42 ControlSize::Small => {
43 handle
44 .toggle_class("small", true)
45 .toggle_class("xsmall", false)
46 .toggle_class("medium", false)
47 .toggle_class("large", false);
48 }
49 ControlSize::Medium => {
50 handle
51 .toggle_class("medium", true)
52 .toggle_class("xsmall", false)
53 .toggle_class("small", false)
54 .toggle_class("large", false);
55 }
56 ControlSize::Large => {
57 handle
58 .toggle_class("large", true)
59 .toggle_class("xsmall", false)
60 .toggle_class("small", false)
61 .toggle_class("medium", false);
62 }
63 };
64 })
65}