Add impl From<Color> for Gradient

This commit is contained in:
Ivan Molodetskikh
2025-02-02 08:41:42 +03:00
parent 019e75955d
commit d5592743cb
2 changed files with 14 additions and 8 deletions
+12
View File
@@ -530,6 +530,18 @@ pub struct Gradient {
pub in_: GradientInterpolation,
}
impl From<Color> for Gradient {
fn from(value: Color) -> Self {
Self {
from: value,
to: value,
angle: 0,
relative_to: GradientRelativeTo::Window,
in_: GradientInterpolation::default(),
}
}
}
#[derive(knuffel::DecodeScalar, Debug, Default, Clone, Copy, PartialEq, Eq)]
pub enum GradientRelativeTo {
#[default]
+2 -8
View File
@@ -1,7 +1,7 @@
use std::iter::zip;
use arrayvec::ArrayVec;
use niri_config::{CornerRadius, Gradient, GradientInterpolation, GradientRelativeTo};
use niri_config::{CornerRadius, Gradient, GradientRelativeTo};
use smithay::backend::renderer::element::Kind;
use smithay::utils::{Logical, Point, Rectangle, Size};
@@ -86,13 +86,7 @@ impl FocusRing {
self.use_border_shader = radius != CornerRadius::default() || gradient.is_some();
// Set the defaults for solid color + rounded corners.
let gradient = gradient.unwrap_or(Gradient {
from: color,
to: color,
angle: 0,
relative_to: GradientRelativeTo::Window,
in_: GradientInterpolation::default(),
});
let gradient = gradient.unwrap_or_else(|| Gradient::from(color));
let full_rect = Rectangle::new(Point::from((-width, -width)), self.full_size);
let gradient_area = match gradient.relative_to {