summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2023-09-10 00:34:21 +0200
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2023-09-10 00:34:21 +0200
commitb8e5693a3089d728b4f8d4b3b0b7197202ebd732 (patch)
tree79a9f84f9920525657fbe03d53ce33bab09053d7 /core
parent956512338905bac0b156fdaf16fe3c3e07e97a84 (diff)
parenta3489e4af960388e9f73988b88df361022a654a4 (diff)
downloadiced-b8e5693a3089d728b4f8d4b3b0b7197202ebd732.tar.gz
iced-b8e5693a3089d728b4f8d4b3b0b7197202ebd732.tar.bz2
iced-b8e5693a3089d728b4f8d4b3b0b7197202ebd732.zip
Merge branch 'master' into explicit-text-caching
Diffstat (limited to 'core')
-rw-r--r--core/Cargo.toml31
-rw-r--r--core/src/angle.rs62
-rw-r--r--core/src/gradient.rs4
-rw-r--r--core/src/lib.rs5
-rw-r--r--core/src/shell.rs4
-rw-r--r--core/src/window/icon.rs2
-rw-r--r--core/src/window/redraw_request.rs2
7 files changed, 76 insertions, 34 deletions
diff --git a/core/Cargo.toml b/core/Cargo.toml
index 8bb37309..7acb7511 100644
--- a/core/Cargo.toml
+++ b/core/Cargo.toml
@@ -1,24 +1,27 @@
[package]
name = "iced_core"
-version = "0.10.0"
-authors = ["Héctor Ramón Jiménez <hector0193@gmail.com>"]
-edition = "2021"
-description = "The essential concepts of Iced"
-license = "MIT"
-repository = "https://github.com/iced-rs/iced"
+description = "The essential ideas of iced"
+version.workspace = true
+edition.workspace = true
+authors.workspace = true
+license.workspace = true
+repository.workspace = true
+homepage.workspace = true
+categories.workspace = true
+keywords.workspace = true
[dependencies]
-bitflags = "1.2"
-thiserror = "1"
-log = "0.4.17"
-twox-hash = { version = "1.5", default-features = false }
+bitflags.workspace = true
+log.workspace = true
+thiserror.workspace = true
+twox-hash.workspace = true
+num-traits.workspace = true
-[dependencies.palette]
-version = "0.7"
-optional = true
+palette.workspace = true
+palette.optional = true
[target.'cfg(target_arch = "wasm32")'.dependencies]
-instant = "0.1"
+instant.workspace = true
[dev-dependencies]
approx = "0.5"
diff --git a/core/src/angle.rs b/core/src/angle.rs
index 75a57c76..102b69cf 100644
--- a/core/src/angle.rs
+++ b/core/src/angle.rs
@@ -1,32 +1,72 @@
use crate::{Point, Rectangle, Vector};
-use std::f32::consts::PI;
-#[derive(Debug, Copy, Clone, PartialEq)]
+use std::f32::consts::{FRAC_PI_2, PI};
+use std::ops::RangeInclusive;
+
/// 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))
}
}
impl Radians {
- /// Calculates the line in which the [`Angle`] intercepts the `bounds`.
+ /// Calculates the line in which the angle intercepts the `bounds`.
pub fn to_distance(&self, bounds: &Rectangle) -> (Point, Point) {
- let v1 = Vector::new(f32::cos(self.0), f32::sin(self.0));
+ let angle = self.0 - FRAC_PI_2;
+ let r = Vector::new(f32::cos(angle), f32::sin(angle));
- let distance_to_rect = f32::min(
- f32::abs((bounds.y - bounds.center().y) / v1.y),
- f32::abs(((bounds.x + bounds.width) - bounds.center().x) / v1.x),
+ let distance_to_rect = f32::max(
+ f32::abs(r.x * bounds.width / 2.0),
+ f32::abs(r.y * bounds.height / 2.0),
);
- let start = bounds.center() + v1 * distance_to_rect;
- let end = bounds.center() - v1 * distance_to_rect;
+ let start = bounds.center() - r * distance_to_rect;
+ let end = bounds.center() + r * distance_to_rect;
(start, end)
}
diff --git a/core/src/gradient.rs b/core/src/gradient.rs
index e19622fb..4a0d5ea0 100644
--- a/core/src/gradient.rs
+++ b/core/src/gradient.rs
@@ -6,10 +6,8 @@ use std::cmp::Ordering;
#[derive(Debug, Clone, Copy, PartialEq)]
/// A fill which transitions colors progressively along a direction, either linearly, radially (TBD),
/// or conically (TBD).
-///
-/// For a gradient which can be used as a fill on a canvas, see [`iced_graphics::Gradient`].
pub enum Gradient {
- /// A linear gradient interpolates colors along a direction at a specific [`Angle`].
+ /// A linear gradient interpolates colors along a direction at a specific angle.
Linear(Linear),
}
diff --git a/core/src/lib.rs b/core/src/lib.rs
index c1c8424b..1bfba7bd 100644
--- a/core/src/lib.rs
+++ b/core/src/lib.rs
@@ -9,6 +9,7 @@
#![doc(
html_logo_url = "https://raw.githubusercontent.com/iced-rs/iced/9ab6923e943f784985e9ef9ca28b10278297225d/docs/logo.svg"
)]
+#![forbid(unsafe_code, rust_2018_idioms)]
#![deny(
missing_debug_implementations,
missing_docs,
@@ -17,9 +18,9 @@
clippy::from_over_into,
clippy::needless_borrow,
clippy::new_without_default,
- clippy::useless_conversion
+ clippy::useless_conversion,
+ rustdoc::broken_intra_doc_links
)]
-#![forbid(unsafe_code, rust_2018_idioms)]
#![allow(clippy::inherent_to_string, clippy::type_complexity)]
pub mod alignment;
pub mod clipboard;
diff --git a/core/src/shell.rs b/core/src/shell.rs
index 74a5c616..246c937a 100644
--- a/core/src/shell.rs
+++ b/core/src/shell.rs
@@ -35,7 +35,7 @@ impl<'a, Message> Shell<'a, Message> {
self.messages.push(message);
}
- /// Requests a new frame to be drawn at the given [`Instant`].
+ /// Requests a new frame to be drawn.
pub fn request_redraw(&mut self, request: window::RedrawRequest) {
match self.redraw_request {
None => {
@@ -48,7 +48,7 @@ impl<'a, Message> Shell<'a, Message> {
}
}
- /// Returns the requested [`Instant`] a redraw should happen, if any.
+ /// Returns the request a redraw should happen, if any.
pub fn redraw_request(&self) -> Option<window::RedrawRequest> {
self.redraw_request
}
diff --git a/core/src/window/icon.rs b/core/src/window/icon.rs
index 31868ecf..2fc48e3b 100644
--- a/core/src/window/icon.rs
+++ b/core/src/window/icon.rs
@@ -49,7 +49,7 @@ impl Icon {
}
#[derive(Debug, thiserror::Error)]
-/// An error produced when using [`Icon::from_rgba`] with invalid arguments.
+/// An error produced when using [`from_rgba`] with invalid arguments.
pub enum Error {
/// Produced when the length of the `rgba` argument isn't divisible by 4, thus `rgba` can't be
/// safely interpreted as 32bpp RGBA pixels.
diff --git a/core/src/window/redraw_request.rs b/core/src/window/redraw_request.rs
index 3b4f0fd3..8a59e83c 100644
--- a/core/src/window/redraw_request.rs
+++ b/core/src/window/redraw_request.rs
@@ -13,7 +13,7 @@ pub enum RedrawRequest {
#[cfg(test)]
mod tests {
use super::*;
- use std::time::{Duration, Instant};
+ use crate::time::{Duration, Instant};
#[test]
fn ordering() {