Add open and close animations, xdg_popup blur pre-pass,
damage viz config option.
This commit is contained in:
parent
12adb678bb
commit
e35dce433a
24 changed files with 1056 additions and 67 deletions
|
|
@ -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,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)]
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue