#[derive(Debug, Clone, Copy, PartialEq)]
pub struct MenuEffects {
pub enabled: bool,
pub animations: bool,
pub animation_speed: f32,
pub transparency: bool,
pub shadows: bool,
pub blur: bool,
pub max_visible_items: Option<u32>,
pub hardware_acceleration: bool,
pub caching: bool,
}
impl MenuEffects {
pub const fn legacy() -> Self {
Self {
enabled: false,
animations: true,
animation_speed: 1.0,
transparency: false,
shadows: false,
blur: false,
max_visible_items: None,
hardware_acceleration: false,
caching: false,
}
}
pub const fn visible_items_or(&self, fallback: u32) -> u32 {
match self.max_visible_items {
Some(value) => value,
None => fallback,
}
}
}
impl Default for MenuEffects {
fn default() -> Self {
Self::legacy()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn legacy_is_pixel_neutral() {
let legacy = MenuEffects::legacy();
assert!(!legacy.enabled);
assert!(legacy.animations, "popups animated before the wiring");
assert_eq!(legacy.animation_speed, 1.0);
assert!(!legacy.transparency);
assert!(!legacy.shadows);
assert!(!legacy.blur);
assert!(!legacy.caching);
assert_eq!(legacy.max_visible_items, None, "no cap beyond each control's own");
}
#[test]
fn visible_items_or_prefers_the_configured_cap() {
let mut effects = MenuEffects::legacy();
assert_eq!(effects.visible_items_or(8), 8);
effects.max_visible_items = Some(20);
assert_eq!(effects.visible_items_or(8), 20);
}
}