aboutsummaryrefslogtreecommitdiff
path: root/alacritty_terminal/src/config/visual_bell.rs
diff options
context:
space:
mode:
Diffstat (limited to 'alacritty_terminal/src/config/visual_bell.rs')
-rw-r--r--alacritty_terminal/src/config/visual_bell.rs64
1 files changed, 64 insertions, 0 deletions
diff --git a/alacritty_terminal/src/config/visual_bell.rs b/alacritty_terminal/src/config/visual_bell.rs
new file mode 100644
index 00000000..3a31b24a
--- /dev/null
+++ b/alacritty_terminal/src/config/visual_bell.rs
@@ -0,0 +1,64 @@
+use std::time::Duration;
+
+use crate::config::failure_default;
+use crate::term::color::Rgb;
+
+#[serde(default)]
+#[derive(Debug, Deserialize, PartialEq, Eq)]
+pub struct VisualBellConfig {
+ /// Visual bell animation function
+ #[serde(deserialize_with = "failure_default")]
+ pub animation: VisualBellAnimation,
+
+ /// Visual bell duration in milliseconds
+ #[serde(deserialize_with = "failure_default")]
+ pub duration: u16,
+
+ /// Visual bell flash color
+ #[serde(deserialize_with = "failure_default")]
+ pub color: Rgb,
+}
+
+impl Default for VisualBellConfig {
+ fn default() -> VisualBellConfig {
+ VisualBellConfig {
+ animation: Default::default(),
+ duration: Default::default(),
+ color: default_visual_bell_color(),
+ }
+ }
+}
+
+impl VisualBellConfig {
+ /// Visual bell duration in milliseconds
+ #[inline]
+ pub fn duration(&self) -> Duration {
+ Duration::from_millis(u64::from(self.duration))
+ }
+}
+
+/// `VisualBellAnimations` are modeled after a subset of CSS transitions and Robert
+/// Penner's Easing Functions.
+#[derive(Clone, Copy, Debug, Deserialize, PartialEq, Eq)]
+pub enum VisualBellAnimation {
+ Ease, // CSS
+ EaseOut, // CSS
+ EaseOutSine, // Penner
+ EaseOutQuad, // Penner
+ EaseOutCubic, // Penner
+ EaseOutQuart, // Penner
+ EaseOutQuint, // Penner
+ EaseOutExpo, // Penner
+ EaseOutCirc, // Penner
+ Linear,
+}
+
+impl Default for VisualBellAnimation {
+ fn default() -> Self {
+ VisualBellAnimation::EaseOutExpo
+ }
+}
+
+fn default_visual_bell_color() -> Rgb {
+ Rgb { r: 255, g: 255, b: 255 }
+}