Slightly reworked serialized panel's format.

This commit is contained in:
Filipe Rodrigues 2025-09-07 05:25:06 +01:00
parent 6fd8a70398
commit 1322d17148
Signed by: zenithsiz
SSH Key Fingerprint: SHA256:Mb5ppb3Sh7IarBO/sBTXLHbYEOz37hJAlslLQPPAPaU
4 changed files with 32 additions and 29 deletions

View File

@ -9,5 +9,6 @@ duration = 5.0
fade_duration = 1.0
[shader]
type = "fade-out"
type = "fade"
fade = "out"
strength = 1.0

View File

@ -6,5 +6,6 @@ duration = 5.0
fade_duration = 1.0
[shader]
type = "fade-white"
type = "fade"
fade = "white"
strength = 1.0

View File

@ -63,27 +63,20 @@ impl Panels {
// Finally convert it
let geometries = panel.geometries.into_iter().map(|geometry| geometry.geometry).collect();
// TODO: Is this a good default?
let panel_shader = panel.shader.unwrap_or(ser::PanelShader::FadeOut { strength: 1.5 });
let panel_shader = panel
.shader
.unwrap_or(ser::PanelShader::Fade(ser::PanelShaderFade::Out { strength: 1.5 }));
let state = match panel_shader {
ser::PanelShader::None { background_color } =>
PanelState::None(PanelNoneState::new(background_color)),
ser::PanelShader::Fade |
ser::PanelShader::FadeWhite { .. } |
ser::PanelShader::FadeOut { .. } |
ser::PanelShader::FadeIn { .. } => PanelState::Fade(PanelFadeState::new(
ser::PanelShader::Fade(fade) => PanelState::Fade(PanelFadeState::new(
panel.state.duration,
panel.state.fade_duration,
#[expect(
clippy::match_wildcard_for_single_variants,
reason = "We only care about the variants above"
)]
match panel_shader {
ser::PanelShader::Fade => PanelShaderFade::Basic,
ser::PanelShader::FadeWhite { strength } => PanelShaderFade::White { strength },
ser::PanelShader::FadeOut { strength } => PanelShaderFade::Out { strength },
ser::PanelShader::FadeIn { strength } => PanelShaderFade::In { strength },
_ => unreachable!(),
match fade {
ser::PanelShaderFade::Basic => PanelShaderFade::Basic,
ser::PanelShaderFade::White { strength } => PanelShaderFade::White { strength },
ser::PanelShaderFade::Out { strength } => PanelShaderFade::Out { strength },
ser::PanelShaderFade::In { strength } => PanelShaderFade::In { strength },
},
)),
};

View File

@ -46,7 +46,6 @@ pub struct PanelState {
#[derive(Debug)]
#[derive(serde::Serialize, serde::Deserialize)]
#[serde(tag = "type")]
#[expect(variant_size_differences, reason = "16 bytes is still reasonable for this type")]
pub enum PanelShader {
#[serde(rename = "none")]
None {
@ -55,14 +54,23 @@ pub enum PanelShader {
},
#[serde(rename = "fade")]
Fade,
#[serde(rename = "fade-white")]
FadeWhite { strength: f32 },
#[serde(rename = "fade-out")]
FadeOut { strength: f32 },
#[serde(rename = "fade-in")]
FadeIn { strength: f32 },
Fade(PanelShaderFade),
}
/// Configuration shader fade
#[derive(Debug)]
#[derive(serde::Serialize, serde::Deserialize)]
#[serde(tag = "fade")]
pub enum PanelShaderFade {
#[serde(rename = "basic")]
Basic,
#[serde(rename = "white")]
White { strength: f32 },
#[serde(rename = "out")]
Out { strength: f32 },
#[serde(rename = "in")]
In { strength: f32 },
}