1
0
Fork 0
forked from wry/wry

Add open and close animations, xdg_popup blur pre-pass,

damage viz config option.
This commit is contained in:
entailz 2026-05-20 18:50:11 -07:00
parent 12adb678bb
commit e35dce433a
24 changed files with 1056 additions and 67 deletions

View file

@ -169,3 +169,55 @@ impl Default for BlurConfigIpc {
}
}
}
#[derive(Serialize, Deserialize, Copy, Clone, Debug, PartialEq)]
pub enum AnimationCurveIpc {
Linear,
EaseOut,
EaseInOut,
/// Standard CSS cubic-bezier(x1, y1, x2, y2). P0=(0,0), P3=(1,1) are fixed.
Bezier {
x1: f32,
y1: f32,
x2: f32,
y2: f32,
},
}
#[derive(Serialize, Deserialize, Copy, Clone, Debug)]
pub struct AnimationsConfigIpc {
pub enabled: bool,
pub open_duration_ms: u32,
pub open_curve: AnimationCurveIpc,
pub close_duration_ms: u32,
pub close_curve: AnimationCurveIpc,
}
impl Default for AnimationsConfigIpc {
fn default() -> Self {
Self {
enabled: false,
open_duration_ms: 200,
open_curve: AnimationCurveIpc::EaseOut,
close_duration_ms: 200,
close_curve: AnimationCurveIpc::EaseOut,
}
}
}
#[derive(Serialize, Deserialize, Copy, Clone, Debug)]
pub struct DamageVisualizationIpc {
pub enabled: bool,
pub color: crate::theme::Color,
pub decay_millis: u64,
}
impl Default for DamageVisualizationIpc {
fn default() -> Self {
Self {
enabled: false,
color: crate::theme::Color::new_straight(255, 0, 0, 128),
decay_millis: 2000,
}
}
}

View file

@ -880,6 +880,14 @@ impl ConfigClient {
self.send(&ClientMessage::SetBlurConfig { config })
}
pub fn set_damage_visualization(&self, config: crate::_private::DamageVisualizationIpc) {
self.send(&ClientMessage::SetDamageVisualization { config })
}
pub fn set_animations_config(&self, config: crate::_private::AnimationsConfigIpc) {
self.send(&ClientMessage::SetAnimationsConfig { config })
}
pub fn switch_to_vt(&self, vtnr: u32) {
self.send(&ClientMessage::SwitchTo { vtnr })
}

View file

@ -1,8 +1,8 @@
use {
crate::{
_private::{
BlurConfigIpc, ClientCriterionIpc, LayerRuleIpc, PollableId, WindowCriterionIpc,
WireMode,
BlurConfigIpc, ClientCriterionIpc, DamageVisualizationIpc, LayerRuleIpc, PollableId,
WindowCriterionIpc, WireMode,
},
Axis, Direction, PciId, Workspace,
client::{Client, ClientCapabilities, ClientMatcher},
@ -925,6 +925,12 @@ pub enum ClientMessage<'a> {
SetBlurConfig {
config: BlurConfigIpc,
},
SetDamageVisualization {
config: DamageVisualizationIpc,
},
SetAnimationsConfig {
config: crate::_private::AnimationsConfigIpc,
},
}
#[derive(Serialize, Deserialize, Debug)]

View file

@ -407,6 +407,34 @@ pub fn _set_blur_config(config: crate::_private::BlurConfigIpc) {
get!().set_blur_config(config)
}
#[doc(hidden)]
pub fn _set_damage_visualization(config: crate::_private::DamageVisualizationIpc) {
get!().set_damage_visualization(config)
}
#[doc(hidden)]
pub fn _set_animations_config(config: crate::_private::AnimationsConfigIpc) {
get!().set_animations_config(config)
}
/// Configures the damage region visualizer.
///
/// When enabled, every damaged screen region is overlaid with `color` and fades
/// out over `decay` (producing a "blink" effect as new damage accumulates).
/// Useful for debugging damage-tracked rendering paths.
pub fn set_damage_visualization(
enabled: bool,
color: crate::theme::Color,
decay: std::time::Duration,
) {
let decay_millis = decay.as_millis().min(u64::MAX as u128) as u64;
_set_damage_visualization(crate::_private::DamageVisualizationIpc {
enabled,
color,
decay_millis,
});
}
/// Returns the current corner radius for window borders.
pub fn get_corner_radius() -> f32 {
get!(0.0).get_corner_radius()