1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
use winit::{self, WindowBuilder};
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct DisplayConfig {
#[serde(default = "default_title")]
pub title: String,
#[serde(default)]
pub fullscreen: bool,
#[serde(default)]
pub dimensions: Option<(u32, u32)>,
#[serde(default)]
pub min_dimensions: Option<(u32, u32)>,
#[serde(default)]
pub max_dimensions: Option<(u32, u32)>,
#[serde(default = "default_vsync")]
pub vsync: bool,
#[serde(default = "default_multisampling")]
pub multisampling: u16,
#[serde(default = "default_visibility")]
pub visibility: bool,
}
impl Default for DisplayConfig {
fn default() -> Self {
DisplayConfig {
title: default_title(),
fullscreen: false,
dimensions: None,
min_dimensions: None,
max_dimensions: None,
vsync: default_vsync(),
multisampling: default_multisampling(),
visibility: default_visibility(),
}
}
}
fn default_title() -> String {
"Amethyst game".to_string()
}
fn default_vsync() -> bool {
true
}
fn default_multisampling() -> u16 {
1
}
fn default_visibility() -> bool {
true
}
impl DisplayConfig {
pub fn to_windowbuilder(self, el: winit::EventsLoop) -> WindowBuilder {
use winit::WindowAttributes;
let attrs = WindowAttributes {
dimensions: self.dimensions,
max_dimensions: self.max_dimensions,
min_dimensions: self.min_dimensions,
title: self.title,
visible: self.visibility,
..Default::default()
};
let mut builder = WindowBuilder::new();
builder.window = attrs;
if self.fullscreen {
builder = builder.with_fullscreen(Some(el.get_primary_monitor()));
}
builder
}
}
impl From<WindowBuilder> for DisplayConfig {
fn from(wb: WindowBuilder) -> Self {
DisplayConfig {
title: wb.window.title,
fullscreen: wb.window.fullscreen.is_some(),
dimensions: wb.window.dimensions,
max_dimensions: wb.window.max_dimensions,
min_dimensions: wb.window.min_dimensions,
visibility: wb.window.visible,
..Default::default()
}
}
}