Skip to content

Commit

Permalink
Add race font size and scaling.
Browse files Browse the repository at this point in the history
Fix detection to also consider height, to remove ambiguity between font sizes.
  • Loading branch information
mmosca committed Feb 19, 2024
1 parent 219fd4a commit cb81609
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 18 deletions.
52 changes: 35 additions & 17 deletions backend/src/font/dimensions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,16 @@ pub(crate) const CHARACTER_WIDTH_LARGE: u32 = 36;
pub(crate) const CHARACTER_HEIGHT_LARGE: u32 = 54;
pub(crate) const CHARACTER_WIDTH_SMALL: u32 = 24;
pub(crate) const CHARACTER_HEIGHT_SMALL: u32 = 36;
pub(crate) const CHARACTER_WIDTH_RACE: u32 = 18;
pub(crate) const CHARACTER_HEIGHT_RACE: u32 = 27;

#[derive(Debug, Clone, PartialEq)]
pub enum CharacterSize {
Large,
Small,
Ultra,
XLarge,
//Race,
Race,
}

impl CharacterSize {
Expand All @@ -27,6 +29,7 @@ impl CharacterSize {
CharacterSize::Small => CHARACTER_WIDTH_SMALL,
CharacterSize::XLarge => CHARACTER_WIDTH_2K,
CharacterSize::Ultra => CHARACTER_WIDTH_4K,
CharacterSize::Race => CHARACTER_WIDTH_RACE,
}
}

Expand All @@ -36,6 +39,7 @@ impl CharacterSize {
CharacterSize::Small => CHARACTER_HEIGHT_SMALL,
CharacterSize::XLarge => CHARACTER_HEIGHT_2K,
CharacterSize::Ultra => CHARACTER_HEIGHT_4K,
CharacterSize::Race => CHARACTER_HEIGHT_RACE,
}
}
}
Expand All @@ -50,6 +54,7 @@ impl Display for CharacterSize {
CharacterSize::Small => "720p",
CharacterSize::XLarge => "2.7K",
CharacterSize::Ultra => "4K",
CharacterSize::Race => "540p",
}
)
}
Expand All @@ -75,38 +80,46 @@ impl FontType {
}

pub fn detect_dimensions(width: u32, height: u32) -> Result<(CharacterSize, FontType, u32), FontFileError> {
let (size, r#type) = if width == CHARACTER_WIDTH_SMALL {
let (size, r#type) = if width == CHARACTER_WIDTH_SMALL && (height / CHARACTER_HEIGHT_SMALL) % 256 == 0 {
(CharacterSize::Small, FontType::Standard)
} else if width == CHARACTER_WIDTH_LARGE {
} else if width == CHARACTER_WIDTH_LARGE && (height / CHARACTER_HEIGHT_LARGE) % 256 == 0 {
(CharacterSize::Large, FontType::Standard)
} else if width == CHARACTER_WIDTH_2K {
} else if width == CHARACTER_WIDTH_2K && (height / CHARACTER_HEIGHT_2K) % 256 == 0 {
(CharacterSize::XLarge, FontType::Standard)
} else if width == CHARACTER_WIDTH_4K {
} else if width == CHARACTER_WIDTH_4K && (height / CHARACTER_HEIGHT_4K) % 256 == 0 {
(CharacterSize::Ultra, FontType::Standard)
} else if width == CHARACTER_WIDTH_SMALL * 2 {
} else if width == CHARACTER_WIDTH_RACE && (height / CHARACTER_HEIGHT_RACE) % 256 == 0 {
(CharacterSize::Race, FontType::Standard)
} else if width == CHARACTER_WIDTH_SMALL * 2 && (height / CHARACTER_HEIGHT_SMALL) % 256 == 0 {
(CharacterSize::Small, FontType::TwoPages)
} else if width == CHARACTER_WIDTH_LARGE * 2 {
} else if width == CHARACTER_WIDTH_LARGE * 2 && (height / CHARACTER_HEIGHT_LARGE) % 256 == 0 {
(CharacterSize::Large, FontType::TwoPages)
} else if width == CHARACTER_WIDTH_2K * 2 {
} else if width == CHARACTER_WIDTH_2K * 2 && (height / CHARACTER_HEIGHT_2K) % 256 == 0 {
(CharacterSize::XLarge, FontType::TwoPages)
} else if width == CHARACTER_WIDTH_4K * 2 {
} else if width == CHARACTER_WIDTH_4K * 2 && (height / CHARACTER_HEIGHT_4K) % 256 == 0 {
(CharacterSize::Ultra, FontType::TwoPages)
} else if width == CHARACTER_WIDTH_SMALL * 3 {
} else if width == CHARACTER_WIDTH_RACE * 2 && (height / CHARACTER_HEIGHT_RACE) % 256 == 0 {
(CharacterSize::Race, FontType::TwoPages)
} else if width == CHARACTER_WIDTH_SMALL * 3 && (height / CHARACTER_HEIGHT_SMALL) % 256 == 0 {
(CharacterSize::Small, FontType::ThreePages)
} else if width == CHARACTER_WIDTH_LARGE * 3 {
} else if width == CHARACTER_WIDTH_LARGE * 3 && (height / CHARACTER_HEIGHT_LARGE) % 256 == 0 {
(CharacterSize::Large, FontType::ThreePages)
} else if width == CHARACTER_WIDTH_2K * 3 {
} else if width == CHARACTER_WIDTH_2K * 3 && (height / CHARACTER_HEIGHT_2K) % 256 == 0 {
(CharacterSize::XLarge, FontType::ThreePages)
} else if width == CHARACTER_WIDTH_4K * 3 {
} else if width == CHARACTER_WIDTH_4K * 3 && (height / CHARACTER_HEIGHT_4K) % 256 == 0 {
(CharacterSize::Ultra, FontType::ThreePages)
} else if width == CHARACTER_WIDTH_SMALL * 4 {
} else if width == CHARACTER_WIDTH_RACE * 3 && (height / CHARACTER_HEIGHT_RACE) % 256 == 0 {
(CharacterSize::Race, FontType::ThreePages)
} else if width == CHARACTER_WIDTH_SMALL * 4 && (height / CHARACTER_HEIGHT_SMALL) % 256 == 0 {
(CharacterSize::Small, FontType::FourColor)
} else if width == CHARACTER_WIDTH_LARGE * 4 {
} else if width == CHARACTER_WIDTH_LARGE * 4 && (height / CHARACTER_HEIGHT_LARGE) % 256 == 0 {
(CharacterSize::Large, FontType::FourColor)
} else if width == CHARACTER_WIDTH_2K * 4 {
} else if width == CHARACTER_WIDTH_2K * 4 && (height / CHARACTER_HEIGHT_2K) % 256 == 0 {
(CharacterSize::XLarge, FontType::FourColor)
} else if width == CHARACTER_WIDTH_4K * 4 {
} else if width == CHARACTER_WIDTH_4K * 4 && (height / CHARACTER_HEIGHT_4K) % 256 == 0 {
(CharacterSize::Ultra, FontType::FourColor)
} else if width == CHARACTER_WIDTH_RACE * 4 && (height / CHARACTER_HEIGHT_RACE) % 256 == 0 {
(CharacterSize::Race, FontType::FourColor)
} else {
return Err(FontFileError::InvalidFontFileWidth { width });
};
Expand Down Expand Up @@ -148,6 +161,11 @@ mod tests {
(144, 13824, CharacterSize::Large, FontType::FourColor, 256),
(192, 18432, CharacterSize::XLarge, FontType::FourColor, 256),
(288, 27648, CharacterSize::Ultra, FontType::FourColor, 256),
(18, 6912, CharacterSize::Race, FontType::Standard, 256),
(36, 6912, CharacterSize::Race, FontType::TwoPages, 256),
(54, 6912, CharacterSize::Race, FontType::ThreePages, 256),
(72, 6912, CharacterSize::Race, FontType::FourColor, 256),
(18, 13824, CharacterSize::Race, FontType::Standard, 512),
];
for test in test_cases {
assert_ok_eq!(detect_dimensions(test.0, test.1), (test.2, test.3, test.4));
Expand Down
2 changes: 1 addition & 1 deletion backend/src/overlay/osd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use crate::{
pub fn get_character_size(lines: u32) -> CharacterSize
{
match lines {
//540 => CharacterSize::Race,
540 => CharacterSize::Race,
720 => CharacterSize::Small,
1080 => CharacterSize::Large,
1440 => CharacterSize::XLarge,
Expand Down

0 comments on commit cb81609

Please sign in to comment.