use serde::{Deserialize, Serialize};
use std::path::PathBuf;
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ShaderMetadata {
pub name: Option<String>,
pub author: Option<String>,
pub description: Option<String>,
pub version: Option<String>,
#[serde(default)]
pub defaults: ShaderConfig,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct ShaderConfig {
pub animation_speed: Option<f32>,
pub brightness: Option<f32>,
pub text_opacity: Option<f32>,
pub full_content: Option<bool>,
pub channel0: Option<String>,
pub channel1: Option<String>,
pub channel2: Option<String>,
pub channel3: Option<String>,
pub cubemap: Option<String>,
pub cubemap_enabled: Option<bool>,
pub use_background_as_channel0: Option<bool>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
pub struct CursorShaderConfig {
#[serde(flatten)]
pub base: ShaderConfig,
pub hides_cursor: Option<bool>,
pub disable_in_alt_screen: Option<bool>,
pub glow_radius: Option<f32>,
pub glow_intensity: Option<f32>,
pub trail_duration: Option<f32>,
pub cursor_color: Option<[u8; 3]>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CursorShaderMetadata {
pub name: Option<String>,
pub author: Option<String>,
pub description: Option<String>,
pub version: Option<String>,
#[serde(default)]
pub defaults: CursorShaderConfig,
}
#[derive(Debug, Clone)]
pub struct ResolvedShaderConfig {
pub animation_speed: f32,
pub brightness: f32,
pub text_opacity: f32,
pub full_content: bool,
pub channel0: Option<PathBuf>,
pub channel1: Option<PathBuf>,
pub channel2: Option<PathBuf>,
pub channel3: Option<PathBuf>,
pub cubemap: Option<PathBuf>,
pub cubemap_enabled: bool,
pub use_background_as_channel0: bool,
}
impl Default for ResolvedShaderConfig {
fn default() -> Self {
Self {
animation_speed: 1.0,
brightness: 1.0,
text_opacity: 1.0,
full_content: false,
channel0: None,
channel1: None,
channel2: None,
channel3: None,
cubemap: None,
cubemap_enabled: true,
use_background_as_channel0: false,
}
}
}
#[derive(Debug, Clone)]
pub struct ResolvedCursorShaderConfig {
pub base: ResolvedShaderConfig,
pub hides_cursor: bool,
pub disable_in_alt_screen: bool,
pub glow_radius: f32,
pub glow_intensity: f32,
pub trail_duration: f32,
pub cursor_color: [u8; 3],
}
impl Default for ResolvedCursorShaderConfig {
fn default() -> Self {
Self {
base: ResolvedShaderConfig::default(),
hides_cursor: false,
disable_in_alt_screen: true,
glow_radius: 80.0,
glow_intensity: 0.3,
trail_duration: 0.5,
cursor_color: [255, 255, 255],
}
}
}