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(¶meter.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}