Create ferris example to showcase ContentFit and Rotation
This commit is contained in:
parent
610394b695
commit
efc55b655b
5 changed files with 234 additions and 1 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue