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