mister_fpga/config/
fb_size.rs

1use merg::Merge;
2use serde::Deserialize;
3
4/// 0 - automatic, 1 - full size, 2 - 1/2 of resolution, 4 - 1/4 of resolution.
5#[derive(Default, Debug, Clone, Copy, PartialEq, Deserialize)]
6#[serde(rename_all = "snake_case")]
7pub enum FramebufferSizeConfig {
8    #[default]
9    #[serde(alias = "0")]
10    Automatic = 0,
11
12    #[serde(alias = "1")]
13    FullSize = 1,
14
15    #[serde(alias = "2", alias = "3")]
16    HalfSize = 2,
17
18    #[serde(alias = "4")]
19    QuarterSize = 4,
20}
21
22impl Merge for FramebufferSizeConfig {
23    fn merge(&mut self, other: Self) {
24        if other != FramebufferSizeConfig::default() {
25            *self = other;
26        }
27    }
28}
29
30impl FramebufferSizeConfig {
31    pub fn as_scale(&self) -> u8 {
32        match self {
33            FramebufferSizeConfig::Automatic => 0,
34            FramebufferSizeConfig::FullSize => 1,
35            FramebufferSizeConfig::HalfSize => 2,
36            FramebufferSizeConfig::QuarterSize => 4,
37        }
38    }
39}