summaryrefslogtreecommitdiffstats
path: root/core/src
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-05-02 17:14:20 +0200
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-05-02 17:28:29 +0200
commitefc55b655bfce98fc32e698cf3c2007e27be941a (patch)
treed57d87b3c392f764e350c61b137c7dfb4c0f2bf0 /core/src
parent610394b6957d9424aec1c50d927e34a0fb3fe5fd (diff)
downloadiced-efc55b655bfce98fc32e698cf3c2007e27be941a.tar.gz
iced-efc55b655bfce98fc32e698cf3c2007e27be941a.tar.bz2
iced-efc55b655bfce98fc32e698cf3c2007e27be941a.zip
Create `ferris` example to showcase `ContentFit` and `Rotation`
Diffstat (limited to 'core/src')
-rw-r--r--core/src/angle.rs43
-rw-r--r--core/src/content_fit.rs14
-rw-r--r--core/src/rotation.rs7
3 files changed, 63 insertions, 1 deletions
diff --git a/core/src/angle.rs b/core/src/angle.rs
index 69630717..8322273c 100644
--- a/core/src/angle.rs
+++ b/core/src/angle.rs
@@ -7,6 +7,11 @@ use std::ops::{Add, AddAssign, Div, Mul, RangeInclusive, Sub, SubAssign};
#[derive(Debug, Copy, Clone, PartialEq, PartialOrd)]
pub struct Degrees(pub f32);
+impl Degrees {
+ /// The range of degrees of a circle.
+ pub const RANGE: RangeInclusive<Self> = Self(0.0)..=Self(360.0);
+}
+
impl PartialEq<f32> for Degrees {
fn eq(&self, other: &f32) -> bool {
self.0.eq(other)
@@ -19,6 +24,44 @@ impl PartialOrd<f32> for Degrees {
}
}
+impl From<f32> for Degrees {
+ fn from(degrees: f32) -> Self {
+ Self(degrees)
+ }
+}
+
+impl From<u8> for Degrees {
+ fn from(degrees: u8) -> Self {
+ Self(f32::from(degrees))
+ }
+}
+
+impl From<Degrees> for f32 {
+ fn from(degrees: Degrees) -> Self {
+ degrees.0
+ }
+}
+
+impl From<Degrees> for f64 {
+ fn from(degrees: Degrees) -> Self {
+ Self::from(degrees.0)
+ }
+}
+
+impl num_traits::FromPrimitive for Degrees {
+ 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))
+ }
+}
+
/// Radians
#[derive(Debug, Copy, Clone, PartialEq, PartialOrd)]
pub struct Radians(pub f32);
diff --git a/core/src/content_fit.rs b/core/src/content_fit.rs
index 56d2ffa6..19642716 100644
--- a/core/src/content_fit.rs
+++ b/core/src/content_fit.rs
@@ -1,6 +1,8 @@
//! Control the fit of some content (like an image) within a space.
use crate::Size;
+use std::fmt;
+
/// The strategy used to fit the contents of a widget to its bounding box.
///
/// Each variant of this enum is a strategy that can be applied for resolving
@@ -118,3 +120,15 @@ impl ContentFit {
}
}
}
+
+impl fmt::Display for ContentFit {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ f.write_str(match self {
+ ContentFit::Contain => "Contain",
+ ContentFit::Cover => "Cover",
+ ContentFit::Fill => "Fill",
+ ContentFit::None => "None",
+ ContentFit::ScaleDown => "Scale Down",
+ })
+ }
+}
diff --git a/core/src/rotation.rs b/core/src/rotation.rs
index ebb85f3c..f36ef089 100644
--- a/core/src/rotation.rs
+++ b/core/src/rotation.rs
@@ -1,5 +1,5 @@
//! Control the rotation of some content (like an image) within a space.
-use crate::{Radians, Size};
+use crate::{Degrees, Radians, Size};
/// The strategy used to rotate the content.
///
@@ -31,6 +31,11 @@ impl Rotation {
}
}
+ /// Returns the angle of the [`Rotation`] in [`Degrees`].
+ pub fn degrees(self) -> Degrees {
+ Degrees(self.radians().0.to_degrees())
+ }
+
/// Rotates the given [`Size`].
pub fn apply(self, size: Size) -> Size {
match self {