feat: configurable blur alpha
This commit is contained in:
parent
8d2dbb3f23
commit
991a8f2c78
1 changed files with 74 additions and 23 deletions
|
|
@ -119,6 +119,9 @@ pub struct Theme {
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
/// frosted applet popups
|
/// frosted applet popups
|
||||||
pub frosted_applets: bool,
|
pub frosted_applets: bool,
|
||||||
|
#[serde(default)]
|
||||||
|
/// alpha map
|
||||||
|
pub alpha_map: AlphaMap,
|
||||||
/// shade color for dialogs
|
/// shade color for dialogs
|
||||||
#[serde(with = "color_serde")]
|
#[serde(with = "color_serde")]
|
||||||
#[cosmic_config_entry(with = ColorRepr)]
|
#[cosmic_config_entry(with = ColorRepr)]
|
||||||
|
|
@ -904,6 +907,9 @@ pub struct ThemeBuilder {
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
/// frosted applet popups
|
/// frosted applet popups
|
||||||
pub frosted_applets: bool,
|
pub frosted_applets: bool,
|
||||||
|
#[serde(default)]
|
||||||
|
/// alpha map
|
||||||
|
pub alpha_map: AlphaMap,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for ThemeBuilder {
|
impl Default for ThemeBuilder {
|
||||||
|
|
@ -930,6 +936,7 @@ impl Default for ThemeBuilder {
|
||||||
frosted_system_interface: false,
|
frosted_system_interface: false,
|
||||||
frosted_panel: false,
|
frosted_panel: false,
|
||||||
frosted_applets: false,
|
frosted_applets: false,
|
||||||
|
alpha_map: AlphaMap::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1076,9 +1083,10 @@ impl ThemeBuilder {
|
||||||
frosted_system_interface,
|
frosted_system_interface,
|
||||||
frosted_panel,
|
frosted_panel,
|
||||||
frosted_applets,
|
frosted_applets,
|
||||||
|
alpha_map,
|
||||||
} = self;
|
} = self;
|
||||||
|
|
||||||
let container_alpha = frosted.alpha();
|
let container_alpha = alpha_map.blurred_alpha(frosted);
|
||||||
let actual_alpha =
|
let actual_alpha =
|
||||||
if (frosted_windows || frosted_system_interface || frosted_panel || frosted_applets) {
|
if (frosted_windows || frosted_system_interface || frosted_panel || frosted_applets) {
|
||||||
container_alpha
|
container_alpha
|
||||||
|
|
@ -1537,6 +1545,7 @@ impl ThemeBuilder {
|
||||||
frosted_system_interface,
|
frosted_system_interface,
|
||||||
frosted_panel,
|
frosted_panel,
|
||||||
frosted_applets,
|
frosted_applets,
|
||||||
|
alpha_map,
|
||||||
transparent_background: Container::new(
|
transparent_background: Container::new(
|
||||||
Component::component(
|
Component::component(
|
||||||
transparent_bg_component,
|
transparent_bg_component,
|
||||||
|
|
@ -1624,7 +1633,7 @@ impl ThemeBuilder {
|
||||||
/// but this represents the strength of the blur effect.
|
/// but this represents the strength of the blur effect.
|
||||||
#[allow(missing_docs)]
|
#[allow(missing_docs)]
|
||||||
#[repr(u8)]
|
#[repr(u8)]
|
||||||
#[derive(Default, Copy, Clone, Debug, Serialize, Deserialize, PartialEq)]
|
#[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq)]
|
||||||
pub enum BlurStrength {
|
pub enum BlurStrength {
|
||||||
ExtremelyLow,
|
ExtremelyLow,
|
||||||
ExtremelyLow2,
|
ExtremelyLow2,
|
||||||
|
|
@ -1632,7 +1641,6 @@ pub enum BlurStrength {
|
||||||
VeryLow2,
|
VeryLow2,
|
||||||
Low,
|
Low,
|
||||||
Low2,
|
Low2,
|
||||||
#[default]
|
|
||||||
Medium,
|
Medium,
|
||||||
Medium2,
|
Medium2,
|
||||||
High,
|
High,
|
||||||
|
|
@ -1643,26 +1651,9 @@ pub enum BlurStrength {
|
||||||
ExtremelyHigh2,
|
ExtremelyHigh2,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BlurStrength {
|
impl Default for BlurStrength {
|
||||||
/// Get the alpha value corresponding to the blur strength
|
fn default() -> Self {
|
||||||
/// Lower alpha values correspond to stronger blur effects, and higher alpha values correspond to weaker blur effects. The mapping is as follows:
|
Self::Medium
|
||||||
pub fn alpha(&self) -> f32 {
|
|
||||||
match self {
|
|
||||||
Self::ExtremelyLow => 0.90,
|
|
||||||
Self::ExtremelyLow2 => 0.87692,
|
|
||||||
Self::VeryLow => 0.85385,
|
|
||||||
Self::VeryLow2 => 0.83076,
|
|
||||||
Self::Low => 0.80769,
|
|
||||||
Self::Low2 => 0.78461,
|
|
||||||
Self::Medium => 0.76154,
|
|
||||||
Self::Medium2 => 0.73846,
|
|
||||||
Self::High => 0.71538,
|
|
||||||
Self::High2 => 0.69231,
|
|
||||||
Self::VeryHigh => 0.66023,
|
|
||||||
Self::VeryHigh2 => 0.64615,
|
|
||||||
Self::ExtremelyHigh => 0.62308,
|
|
||||||
Self::ExtremelyHigh2 => 0.6,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1689,3 +1680,63 @@ impl TryFrom<u8> for BlurStrength {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq)]
|
||||||
|
pub struct AlphaMap {
|
||||||
|
pub extremely_low: f32,
|
||||||
|
pub extremely_low_2: f32,
|
||||||
|
pub very_low: f32,
|
||||||
|
pub very_low_2: f32,
|
||||||
|
pub low: f32,
|
||||||
|
pub low_2: f32,
|
||||||
|
pub medium: f32,
|
||||||
|
pub medium_2: f32,
|
||||||
|
pub high: f32,
|
||||||
|
pub high_2: f32,
|
||||||
|
pub very_high: f32,
|
||||||
|
pub very_high_2: f32,
|
||||||
|
pub extremely_high: f32,
|
||||||
|
pub extremely_high_2: f32,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl AlphaMap {
|
||||||
|
pub fn blurred_alpha(&self, blur: BlurStrength) -> f32 {
|
||||||
|
match blur {
|
||||||
|
BlurStrength::ExtremelyLow => self.extremely_low,
|
||||||
|
BlurStrength::ExtremelyLow2 => self.extremely_low_2,
|
||||||
|
BlurStrength::VeryLow => self.very_low,
|
||||||
|
BlurStrength::VeryLow2 => self.very_low_2,
|
||||||
|
BlurStrength::Low => self.low,
|
||||||
|
BlurStrength::Low2 => self.low_2,
|
||||||
|
BlurStrength::Medium => self.medium,
|
||||||
|
BlurStrength::Medium2 => self.medium_2,
|
||||||
|
BlurStrength::High => self.high,
|
||||||
|
BlurStrength::High2 => self.high_2,
|
||||||
|
BlurStrength::VeryHigh => self.very_high,
|
||||||
|
BlurStrength::VeryHigh2 => self.very_high_2,
|
||||||
|
BlurStrength::ExtremelyHigh => self.extremely_high,
|
||||||
|
BlurStrength::ExtremelyHigh2 => self.extremely_high_2,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for AlphaMap {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self {
|
||||||
|
extremely_low: 0.90,
|
||||||
|
extremely_low_2: 0.87692,
|
||||||
|
very_low: 0.85385,
|
||||||
|
very_low_2: 0.83076,
|
||||||
|
low: 0.80769,
|
||||||
|
low_2: 0.78461,
|
||||||
|
medium: 0.76154,
|
||||||
|
medium_2: 0.73846,
|
||||||
|
high: 0.71538,
|
||||||
|
high_2: 0.69231,
|
||||||
|
very_high: 0.66023,
|
||||||
|
very_high_2: 0.64615,
|
||||||
|
extremely_high: 0.62308,
|
||||||
|
extremely_high_2: 0.6,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue