Skip to main content

vn_settings/
layer.rs

1use super::{Resettable, Settings};
2
3#[derive(Clone)]
4pub struct LayerObjectSettings<I, L, A> {
5    pub image: I,
6    pub hor: L,
7    pub ver: L,
8    pub scale: L,
9    pub anchor: A,
10}
11
12#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
13pub enum LayerObjectLayoutParameter {
14    Hor,
15    Ver,
16    Scale,
17}
18
19impl<I, L, A> Settings<LayerObjectLayoutParameter> for LayerObjectSettings<I, L, A> {
20    type Value = L;
21
22    fn get_mut(&mut self, parameter: &LayerObjectLayoutParameter) -> &mut L {
23        use LayerObjectLayoutParameter::*;
24        match parameter {
25            Hor => &mut self.hor,
26            Ver => &mut self.ver,
27            Scale => &mut self.scale,
28        }
29    }
30}
31
32impl<I: Resettable, L: Resettable, A: Resettable> Resettable for LayerObjectSettings<I, L, A> {
33    fn reset(&mut self) {
34        self.image.reset();
35        self.hor.reset();
36        self.ver.reset();
37        self.scale.reset();
38        self.anchor.reset();
39    }
40
41    fn reset_aspects(&mut self) {
42        self.image.reset_aspects();
43        self.hor.reset_aspects();
44        self.ver.reset_aspects();
45        self.scale.reset_aspects();
46        self.anchor.reset_aspects();
47    }
48}
49
50#[derive(Clone)]
51pub struct LayerSettings<I, L, A> {
52    pub objects: Vec<LayerObjectSettings<I, L, A>>,
53}
54
55impl<I: Default, L: From<f32>, A: Default> LayerSettings<I, L, A> {
56    pub fn common() -> Self {
57        Self {
58            objects: Vec::new(),
59        }
60    }
61
62    fn at(&mut self, index: usize) -> &mut LayerObjectSettings<I, L, A> {
63        if index >= self.objects.len() {
64            self.objects.resize_with(index + 1, || LayerObjectSettings {
65                image: Default::default(),
66                hor: 0.0.into(),
67                ver: 0.0.into(),
68                scale: 1.0.into(),
69                anchor: Default::default(),
70            });
71        }
72        &mut self.objects[index]
73    }
74}
75
76#[derive(Clone, Debug, PartialEq, Eq, Hash)]
77pub struct LayerImageParameter(pub usize);
78
79#[derive(Clone, Debug, PartialEq, Eq, Hash)]
80pub struct LayerLayoutParameter {
81    pub layer: usize,
82    pub layout: LayerObjectLayoutParameter,
83}
84
85#[derive(Clone, Debug, PartialEq, Eq, Hash)]
86pub struct LayerAnchorParameter(pub usize);
87
88impl<I: Default, L: From<f32>, A: Default> Settings<LayerImageParameter>
89    for LayerSettings<I, L, A>
90{
91    type Value = I;
92
93    fn get_mut(&mut self, &LayerImageParameter(index): &LayerImageParameter) -> &mut I {
94        &mut self.at(index).image
95    }
96}
97
98impl<I: Default, L: From<f32>, A: Default> Settings<LayerLayoutParameter>
99    for LayerSettings<I, L, A>
100{
101    type Value = L;
102
103    fn get_mut(&mut self, parameter: &LayerLayoutParameter) -> &mut L {
104        self.at(parameter.layer).get_mut(&parameter.layout)
105    }
106}
107
108impl<I: Default, L: From<f32>, A: Default> Settings<LayerAnchorParameter>
109    for LayerSettings<I, L, A>
110{
111    type Value = A;
112
113    fn get_mut(&mut self, &LayerAnchorParameter(index): &LayerAnchorParameter) -> &mut A {
114        &mut self.at(index).anchor
115    }
116}
117
118impl<I: Resettable, L: Resettable, A: Resettable> Resettable for LayerSettings<I, L, A> {
119    fn reset(&mut self) {
120        for object in &mut self.objects {
121            object.reset();
122        }
123    }
124
125    fn reset_aspects(&mut self) {
126        for object in &mut self.objects {
127            object.reset_aspects();
128        }
129    }
130}