summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2023-09-08 01:58:52 +0200
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2023-09-08 01:58:52 +0200
commitd2294737c2e28b3b3050d7bf820bbca09896b00e (patch)
tree169b5c7bc38527f185db4ace2196d609dc08a041 /core
parentc1139898c50d22ac3b711801b1058aacef514030 (diff)
downloadiced-d2294737c2e28b3b3050d7bf820bbca09896b00e.tar.gz
iced-d2294737c2e28b3b3050d7bf820bbca09896b00e.tar.bz2
iced-d2294737c2e28b3b3050d7bf820bbca09896b00e.zip
Use `Radians` as a number directly in `gradient` example
Diffstat (limited to 'core')
-rw-r--r--core/Cargo.toml1
-rw-r--r--core/src/angle.rs45
2 files changed, 43 insertions, 3 deletions
diff --git a/core/Cargo.toml b/core/Cargo.toml
index 8859e91e..7acb7511 100644
--- a/core/Cargo.toml
+++ b/core/Cargo.toml
@@ -15,6 +15,7 @@ bitflags.workspace = true
log.workspace = true
thiserror.workspace = true
twox-hash.workspace = true
+num-traits.workspace = true
palette.workspace = true
palette.optional = true
diff --git a/core/src/angle.rs b/core/src/angle.rs
index 75a57c76..91fc2ba7 100644
--- a/core/src/angle.rs
+++ b/core/src/angle.rs
@@ -1,17 +1,56 @@
use crate::{Point, Rectangle, Vector};
+
use std::f32::consts::PI;
+use std::ops::RangeInclusive;
-#[derive(Debug, Copy, Clone, PartialEq)]
/// Degrees
+#[derive(Debug, Copy, Clone, PartialEq, PartialOrd)]
pub struct Degrees(pub f32);
-#[derive(Debug, Copy, Clone, PartialEq)]
/// Radians
+#[derive(Debug, Copy, Clone, PartialEq, PartialOrd)]
pub struct Radians(pub f32);
+impl Radians {
+ /// The range of radians of a circle.
+ pub const RANGE: RangeInclusive<Radians> = Radians(0.0)..=Radians(2.0 * PI);
+}
+
impl From<Degrees> for Radians {
fn from(degrees: Degrees) -> Self {
- Radians(degrees.0 * PI / 180.0)
+ Self(degrees.0 * PI / 180.0)
+ }
+}
+
+impl From<f32> for Radians {
+ fn from(radians: f32) -> Self {
+ Self(radians)
+ }
+}
+
+impl From<u8> for Radians {
+ fn from(radians: u8) -> Self {
+ Self(f32::from(radians))
+ }
+}
+
+impl From<Radians> for f64 {
+ fn from(radians: Radians) -> Self {
+ Self::from(radians.0)
+ }
+}
+
+impl num_traits::FromPrimitive for Radians {
+ fn from_i64(n: i64) -> Option<Self> {
+ Some(Self(n as f32))
+ }
+
+ fn from_u64(n: u64) -> Option<Self> {
+ Some(Self(n as f32))
+ }
+
+ fn from_f64(n: f64) -> Option<Self> {
+ Some(Self(n as f32))
}
}