1use crate::core::{Font, Pixels};
3use crate::graphics::{self, Antialiasing};
4
5#[derive(Debug, Clone, Copy, PartialEq)]
9pub struct Settings {
10    pub present_mode: wgpu::PresentMode,
14
15    pub backends: wgpu::Backends,
17
18    pub default_font: Font,
20
21    pub default_text_size: Pixels,
25
26    pub antialiasing: Option<Antialiasing>,
30}
31
32impl Default for Settings {
33    fn default() -> Settings {
34        Settings {
35            present_mode: wgpu::PresentMode::AutoVsync,
36            backends: wgpu::Backends::all(),
37            default_font: Font::default(),
38            default_text_size: Pixels(16.0),
39            antialiasing: None,
40        }
41    }
42}
43
44impl From<graphics::Settings> for Settings {
45    fn from(settings: graphics::Settings) -> Self {
46        Self {
47            default_font: settings.default_font,
48            default_text_size: settings.default_text_size,
49            antialiasing: settings.antialiasing,
50            ..Settings::default()
51        }
52    }
53}
54
55pub fn present_mode_from_env() -> Option<wgpu::PresentMode> {
68    let present_mode = std::env::var("ICED_PRESENT_MODE").ok()?;
69
70    match present_mode.to_lowercase().as_str() {
71        "vsync" => Some(wgpu::PresentMode::AutoVsync),
72        "no_vsync" => Some(wgpu::PresentMode::AutoNoVsync),
73        "immediate" => Some(wgpu::PresentMode::Immediate),
74        "fifo" => Some(wgpu::PresentMode::Fifo),
75        "fifo_relaxed" => Some(wgpu::PresentMode::FifoRelaxed),
76        "mailbox" => Some(wgpu::PresentMode::Mailbox),
77        _ => None,
78    }
79}