summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-05-20 20:28:35 +0200
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-05-20 20:28:35 +0200
commita1a5fcfd46622d5b18d1716aa2adb4659835ccf3 (patch)
tree8c9c2468151ebcc517688edc6d0d4867c11c441c /core
parent720e7756f2afe30706b6b1a7fbde86b9f15e1d8c (diff)
downloadiced-a1a5fcfd46622d5b18d1716aa2adb4659835ccf3.tar.gz
iced-a1a5fcfd46622d5b18d1716aa2adb4659835ccf3.tar.bz2
iced-a1a5fcfd46622d5b18d1716aa2adb4659835ccf3.zip
Refactor `Viewport` and `Compositor`
Diffstat (limited to 'core')
-rw-r--r--core/src/rectangle.rs33
-rw-r--r--core/src/size.rs22
2 files changed, 29 insertions, 26 deletions
diff --git a/core/src/rectangle.rs b/core/src/rectangle.rs
index 8bc89a44..aa23372e 100644
--- a/core/src/rectangle.rs
+++ b/core/src/rectangle.rs
@@ -125,17 +125,29 @@ impl Rectangle<f32> {
None
}
}
+
+ /// Rounds the [`Rectangle`] to __unsigned__ integer coordinates.
+ ///
+ /// [`Rectangle`]: struct.Rectangle.html
+ pub fn round(self) -> Rectangle<u32> {
+ Rectangle {
+ x: self.x as u32,
+ y: self.y as u32,
+ width: (self.width + 0.5).round() as u32,
+ height: (self.height + 0.5).round() as u32,
+ }
+ }
}
-impl std::ops::Mul<f32> for Rectangle<u32> {
+impl std::ops::Mul<f32> for Rectangle<f32> {
type Output = Self;
fn mul(self, scale: f32) -> Self {
Self {
- x: (self.x as f32 * scale).round() as u32,
- y: (self.y as f32 * scale).round() as u32,
- width: (self.width as f32 * scale).round() as u32,
- height: (self.height as f32 * scale).round() as u32,
+ x: self.x as f32 * scale,
+ y: self.y as f32 * scale,
+ width: self.width * scale,
+ height: self.height * scale,
}
}
}
@@ -151,17 +163,6 @@ impl From<Rectangle<u32>> for Rectangle<f32> {
}
}
-impl From<Rectangle<f32>> for Rectangle<u32> {
- fn from(rectangle: Rectangle<f32>) -> Rectangle<u32> {
- Rectangle {
- x: rectangle.x as u32,
- y: rectangle.y as u32,
- width: (rectangle.width + 0.5).round() as u32,
- height: (rectangle.height + 0.5).round() as u32,
- }
- }
-}
-
impl<T> std::ops::Add<Vector<T>> for Rectangle<T>
where
T: std::ops::Add<Output = T>,
diff --git a/core/src/size.rs b/core/src/size.rs
index a02299e8..aceb5311 100644
--- a/core/src/size.rs
+++ b/core/src/size.rs
@@ -2,11 +2,20 @@ use std::f32;
/// An amount of space in 2 dimensions.
#[derive(Debug, Clone, Copy, PartialEq)]
-pub struct Size {
+pub struct Size<T = f32> {
/// The width.
- pub width: f32,
+ pub width: T,
/// The height.
- pub height: f32,
+ pub height: T,
+}
+
+impl<T> Size<T> {
+ /// Creates a new [`Size`] with the given width and height.
+ ///
+ /// [`Size`]: struct.Size.html
+ pub const fn new(width: T, height: T) -> Self {
+ Size { width, height }
+ }
}
impl Size {
@@ -25,13 +34,6 @@ impl Size {
/// [`Size`]: struct.Size.html
pub const INFINITY: Size = Size::new(f32::INFINITY, f32::INFINITY);
- /// Creates a new [`Size`] with the given width and height.
- ///
- /// [`Size`]: struct.Size.html
- pub const fn new(width: f32, height: f32) -> Self {
- Size { width, height }
- }
-
/// Increments the [`Size`] to account for the given padding.
///
/// [`Size`]: struct.Size.html