pub struct Config {
pub title: String,
pub resizeable: bool,
pub logical_width: u32,
pub logical_height: u32,
pub window_width: u32,
pub window_height: u32,
pub target_fps: Option<u32>
}
pub struct ConfigBuilder {
title: Option<String>,
resizeable: Option<bool>,
logical_width: Option<u32>,
logical_height: Option<u32>,
window_width: Option<u32>,
window_height: Option<u32>,
target_fps: Option<u32>
}
impl ConfigBuilder {
pub fn with_title<S: Into<String>>(mut self, title: S) -> Self {
self.title = Some(title.into());
self
}
pub fn with_target_fps(mut self, fps: u32) -> Self{
self.target_fps = Some(fps);
self
}
pub fn set_window_size(mut self, size: (u32, u32)) -> Self {
self.window_width = Some(size.0);
self.window_height = Some(size.1);
self
}
pub fn set_logical_size(mut self, size: (u32, u32)) -> Self {
self.logical_width = Some(size.0);
self.logical_height = Some(size.1);
self
}
pub fn set_resizeable(mut self, resizeable: bool) -> Self {
self.resizeable = Some(resizeable);
self
}
pub fn build(self) -> Config {
Config {
title: self.title.unwrap_or("Graphicility Window".to_string()),
resizeable: self.resizeable.unwrap_or(true),
logical_width: self.logical_width.unwrap_or(640),
logical_height: self.logical_height.unwrap_or(400),
window_width: self.window_width.unwrap_or(1280),
window_height: self.window_height.unwrap_or(800),
target_fps: self.target_fps,
}
}
}
impl Config {
pub fn builder() -> ConfigBuilder {
ConfigBuilder {
logical_height: None,
logical_width: None,
window_height: None,
window_width: None,
resizeable: None,
title: None,
target_fps: None,
}
}
}
impl Default for Config {
fn default() -> Self {
Self {
title: "Graphicility Window".to_string(),
resizeable: true,
logical_width: 640,
logical_height: 400,
window_width: 1280,
window_height: 800,
target_fps: Some(60),
}
}
}