diff options
Diffstat (limited to 'core')
| -rw-r--r-- | core/Cargo.toml | 5 | ||||
| -rw-r--r-- | core/src/color.rs | 40 | ||||
| -rw-r--r-- | core/src/window.rs | 2 | ||||
| -rw-r--r-- | core/src/window/level.rs | 19 | 
4 files changed, 44 insertions, 22 deletions
| diff --git a/core/Cargo.toml b/core/Cargo.toml index 41b0640a..55f2e85f 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -14,8 +14,11 @@ log = "0.4.17"  twox-hash = { version = "1.5", default-features = false }  [dependencies.palette] -version = "0.6" +version = "0.7"  optional = true  [target.'cfg(target_arch = "wasm32")'.dependencies]  instant = "0.1" + +[dev-dependencies] +approx = "0.5" diff --git a/core/src/color.rs b/core/src/color.rs index fe0a1856..1392f28b 100644 --- a/core/src/color.rs +++ b/core/src/color.rs @@ -183,15 +183,15 @@ macro_rules! color {  }  #[cfg(feature = "palette")] -/// Converts from palette's `Srgba` type to a [`Color`]. +/// Converts from palette's `Rgba` type to a [`Color`].  impl From<Srgba> for Color { -    fn from(srgba: Srgba) -> Self { -        Color::new(srgba.red, srgba.green, srgba.blue, srgba.alpha) +    fn from(rgba: Srgba) -> Self { +        Color::new(rgba.red, rgba.green, rgba.blue, rgba.alpha)      }  }  #[cfg(feature = "palette")] -/// Converts from [`Color`] to palette's `Srgba` type. +/// Converts from [`Color`] to palette's `Rgba` type.  impl From<Color> for Srgba {      fn from(c: Color) -> Self {          Srgba::new(c.r, c.g, c.b, c.a) @@ -199,15 +199,15 @@ impl From<Color> for Srgba {  }  #[cfg(feature = "palette")] -/// Converts from palette's `Srgb` type to a [`Color`]. +/// Converts from palette's `Rgb` type to a [`Color`].  impl From<Srgb> for Color { -    fn from(srgb: Srgb) -> Self { -        Color::new(srgb.red, srgb.green, srgb.blue, 1.0) +    fn from(rgb: Srgb) -> Self { +        Color::new(rgb.red, rgb.green, rgb.blue, 1.0)      }  }  #[cfg(feature = "palette")] -/// Converts from [`Color`] to palette's `Srgb` type. +/// Converts from [`Color`] to palette's `Rgb` type.  impl From<Color> for Srgb {      fn from(c: Color) -> Self {          Srgb::new(c.r, c.g, c.b) @@ -218,12 +218,12 @@ impl From<Color> for Srgb {  #[cfg(test)]  mod tests {      use super::*; -    use palette::Blend; +    use palette::blend::Blend;      #[test]      fn srgba_traits() {          let c = Color::from_rgb(0.5, 0.4, 0.3); -        // Round-trip conversion to the palette:Srgba type +        // Round-trip conversion to the palette::Srgba type          let s: Srgba = c.into();          let r: Color = s.into();          assert_eq!(c, r); @@ -231,6 +231,8 @@ mod tests {      #[test]      fn color_manipulation() { +        use approx::assert_relative_eq; +          let c1 = Color::from_rgb(0.5, 0.4, 0.3);          let c2 = Color::from_rgb(0.2, 0.5, 0.3); @@ -238,19 +240,15 @@ mod tests {          let l1 = Srgba::from(c1).into_linear();          let l2 = Srgba::from(c2).into_linear(); -        // Take the lighter of each of the RGB components +        // Take the lighter of each of the sRGB components          let lighter = l1.lighten(l2);          // Convert back to our Color -        let r: Color = Srgba::from_linear(lighter).into(); -        assert_eq!( -            r, -            Color { -                r: 0.5, -                g: 0.5, -                b: 0.3, -                a: 1.0 -            } -        ); +        let result: Color = Srgba::from_linear(lighter).into(); + +        assert_relative_eq!(result.r, 0.5); +        assert_relative_eq!(result.g, 0.5); +        assert_relative_eq!(result.b, 0.3); +        assert_relative_eq!(result.a, 1.0);      }  } diff --git a/core/src/window.rs b/core/src/window.rs index 81bd7e3d..a6dbdfb4 100644 --- a/core/src/window.rs +++ b/core/src/window.rs @@ -2,12 +2,14 @@  pub mod icon;  mod event; +mod level;  mod mode;  mod redraw_request;  mod user_attention;  pub use event::Event;  pub use icon::Icon; +pub use level::Level;  pub use mode::Mode;  pub use redraw_request::RedrawRequest;  pub use user_attention::UserAttention; diff --git a/core/src/window/level.rs b/core/src/window/level.rs new file mode 100644 index 00000000..3878ecac --- /dev/null +++ b/core/src/window/level.rs @@ -0,0 +1,19 @@ +/// A window level groups windows with respect to their z-position. +/// +/// The relative ordering between windows in different window levels is fixed. +/// The z-order of a window within the same window level may change dynamically +/// on user interaction. +#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] +pub enum Level { +    /// The default behavior. +    #[default] +    Normal, + +    /// The window will always be below normal windows. +    /// +    /// This is useful for a widget-based app. +    AlwaysOnBottom, + +    /// The window will always be on top of normal windows. +    AlwaysOnTop, +} | 
