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
42#[derive(Clone)]
43pub struct LayerSettings<I, L, A> {
44    pub objects: Vec<LayerObjectSettings<I, L, A>>,
45}
46
47impl<I: Default, L: From<f32>, A: Default> LayerSettings<I, L, A> {
48    pub fn common() -> Self {
49        Self {
50            objects: Vec::new(),
51        }
52    }
53
54    fn at(&mut self, index: usize) -> &mut LayerObjectSettings<I, L, A> {
55        if index >= self.objects.len() {
56            self.objects.resize_with(index + 1, || LayerObjectSettings {
57                image: Default::default(),
58                hor: 0.0.into(),
59                ver: 0.0.into(),
60                scale: 1.0.into(),
61                anchor: Default::default(),
62            });
63        }
64        &mut self.objects[index]
65    }
66}
67
68#[derive(Clone, Debug, PartialEq, Eq, Hash)]
69pub struct LayerImageParameter(pub usize);
70
71#[derive(Clone, Debug, PartialEq, Eq, Hash)]
72pub struct LayerLayoutParameter {
73    pub layer: usize,
74    pub layout: LayerObjectLayoutParameter,
75}
76
77#[derive(Clone, Debug, PartialEq, Eq, Hash)]
78pub struct LayerAnchorParameter(pub usize);
79
80impl<I: Default, L: From<f32>, A: Default> Settings<LayerImageParameter>
81    for LayerSettings<I, L, A>
82{
83    type Value = I;
84
85    fn get_mut(&mut self, &LayerImageParameter(index): &LayerImageParameter) -> &mut I {
86        &mut self.at(index).image
87    }
88}
89
90impl<I: Default, L: From<f32>, A: Default> Settings<LayerLayoutParameter>
91    for LayerSettings<I, L, A>
92{
93    type Value = L;
94
95    fn get_mut(&mut self, parameter: &LayerLayoutParameter) -> &mut L {
96        self.at(parameter.layer).get_mut(&parameter.layout)
97    }
98}
99
100impl<I: Default, L: From<f32>, A: Default> Settings<LayerAnchorParameter>
101    for LayerSettings<I, L, A>
102{
103    type Value = A;
104
105    fn get_mut(&mut self, &LayerAnchorParameter(index): &LayerAnchorParameter) -> &mut A {
106        &mut self.at(index).anchor
107    }
108}
109
110impl<I: Resettable, L: Resettable, A: Resettable> Resettable for LayerSettings<I, L, A> {
111    fn reset(&mut self) {
112        for object in &mut self.objects {
113            object.reset();
114        }
115    }
116}