diff options
-rw-r--r-- | core/Cargo.toml | 2 | ||||
-rw-r--r-- | examples/color_palette/Cargo.toml | 2 | ||||
-rw-r--r-- | examples/color_palette/src/main.rs | 34 | ||||
-rw-r--r-- | examples/download_progress/src/download.rs | 4 | ||||
-rw-r--r-- | graphics/src/widget/canvas/frame.rs | 42 | ||||
-rw-r--r-- | graphics/src/widget/canvas/geometry.rs | 6 | ||||
-rw-r--r-- | wgpu/src/window/compositor.rs | 2 |
7 files changed, 53 insertions, 39 deletions
diff --git a/core/Cargo.toml b/core/Cargo.toml index 92b8c56a..a8d50801 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -11,7 +11,7 @@ repository = "https://github.com/iced-rs/iced" bitflags = "1.2" [dependencies.palette] -version = "0.5" +version = "0.6" optional = true [target.'cfg(target_arch = "wasm32")'.dependencies] diff --git a/examples/color_palette/Cargo.toml b/examples/color_palette/Cargo.toml index 23670b46..8fd37202 100644 --- a/examples/color_palette/Cargo.toml +++ b/examples/color_palette/Cargo.toml @@ -7,4 +7,4 @@ publish = false [dependencies] iced = { path = "../..", features = ["canvas", "palette"] } -palette = "0.5.0" +palette = "0.6.0" diff --git a/examples/color_palette/src/main.rs b/examples/color_palette/src/main.rs index 5dbbd8f3..f5fab251 100644 --- a/examples/color_palette/src/main.rs +++ b/examples/color_palette/src/main.rs @@ -3,7 +3,7 @@ use iced::{ alignment, slider, Alignment, Canvas, Color, Column, Element, Length, Point, Rectangle, Row, Sandbox, Settings, Size, Slider, Text, Vector, }; -use palette::{self, Hsl, Limited, Srgb}; +use palette::{self, convert::FromColor, Hsl, Srgb}; use std::marker::PhantomData; use std::ops::RangeInclusive; @@ -49,25 +49,25 @@ impl Sandbox for ColorPalette { fn update(&mut self, message: Message) { let srgb = match message { Message::RgbColorChanged(rgb) => palette::Srgb::from(rgb), - Message::HslColorChanged(hsl) => palette::Srgb::from(hsl), - Message::HsvColorChanged(hsv) => palette::Srgb::from(hsv), - Message::HwbColorChanged(hwb) => palette::Srgb::from(hwb), - Message::LabColorChanged(lab) => palette::Srgb::from(lab), - Message::LchColorChanged(lch) => palette::Srgb::from(lch), + Message::HslColorChanged(hsl) => palette::Srgb::from_color(hsl), + Message::HsvColorChanged(hsv) => palette::Srgb::from_color(hsv), + Message::HwbColorChanged(hwb) => palette::Srgb::from_color(hwb), + Message::LabColorChanged(lab) => palette::Srgb::from_color(lab), + Message::LchColorChanged(lch) => palette::Srgb::from_color(lch), }; - self.theme = Theme::new(srgb.clamp()); + self.theme = Theme::new(srgb); } fn view(&mut self) -> Element<Message> { let base = self.theme.base; let srgb = palette::Srgb::from(base); - let hsl = palette::Hsl::from(srgb); - let hsv = palette::Hsv::from(srgb); - let hwb = palette::Hwb::from(srgb); - let lab = palette::Lab::from(srgb); - let lch = palette::Lch::from(srgb); + let hsl = palette::Hsl::from_color(srgb); + let hsv = palette::Hsv::from_color(srgb); + let hwb = palette::Hwb::from_color(srgb); + let lab = palette::Lab::from_color(srgb); + let lch = palette::Lch::from_color(srgb); Column::new() .padding(10) @@ -98,7 +98,7 @@ impl Theme { let base = base.into(); // Convert to HSL color for manipulation - let hsl = Hsl::from(Srgb::from(base)); + let hsl = Hsl::from_color(Srgb::from(base)); let lower = [ hsl.shift_hue(-135.0).lighten(0.075), @@ -117,12 +117,12 @@ impl Theme { Theme { lower: lower .iter() - .map(|&color| Srgb::from(color).clamp().into()) + .map(|&color| Srgb::from_color(color).into()) .collect(), base, higher: higher .iter() - .map(|&color| Srgb::from(color).clamp().into()) + .map(|&color| Srgb::from_color(color).into()) .collect(), canvas_cache: canvas::Cache::default(), } @@ -207,14 +207,14 @@ impl Theme { text.vertical_alignment = alignment::Vertical::Bottom; - let hsl = Hsl::from(Srgb::from(self.base)); + let hsl = Hsl::from_color(Srgb::from(self.base)); for i in 0..self.len() { let pct = (i as f32 + 1.0) / (self.len() as f32 + 1.0); let graded = Hsl { lightness: 1.0 - pct, ..hsl }; - let color: Color = Srgb::from(graded.clamp()).into(); + let color: Color = Srgb::from_color(graded).into(); let anchor = Point { x: (i as f32) * box_size.width, diff --git a/examples/download_progress/src/download.rs b/examples/download_progress/src/download.rs index 7db1206b..39dd843f 100644 --- a/examples/download_progress/src/download.rs +++ b/examples/download_progress/src/download.rs @@ -70,9 +70,7 @@ async fn download<I: Copy>( // We do not let the stream die, as it would start a // new download repeatedly if the user is not careful // in case of errors. - let _: () = iced::futures::future::pending().await; - - unreachable!() + iced::futures::future::pending().await } } } diff --git a/graphics/src/widget/canvas/frame.rs b/graphics/src/widget/canvas/frame.rs index a3449605..8e198b29 100644 --- a/graphics/src/widget/canvas/frame.rs +++ b/graphics/src/widget/canvas/frame.rs @@ -265,12 +265,30 @@ impl Frame { f(&mut frame); - self.primitives.push(Primitive::Clip { - bounds: region, - content: Box::new(Primitive::Translate { - translation: Vector::new(region.x, region.y), - content: Box::new(frame.into_geometry().into_primitive()), - }), + let primitives = frame.into_primitives(); + + let (text, meshes) = primitives + .into_iter() + .partition(|primitive| matches!(primitive, Primitive::Text { .. })); + + let translation = Vector::new(region.x, region.y); + + self.primitives.push(Primitive::Group { + primitives: vec![ + Primitive::Translate { + translation, + content: Box::new(Primitive::Group { primitives: meshes }), + }, + Primitive::Translate { + translation, + content: Box::new(Primitive::Clip { + bounds: region, + content: Box::new(Primitive::Group { + primitives: text, + }), + }), + }, + ], }); } @@ -308,7 +326,13 @@ impl Frame { } /// Produces the [`Geometry`] representing everything drawn on the [`Frame`]. - pub fn into_geometry(mut self) -> Geometry { + pub fn into_geometry(self) -> Geometry { + Geometry::from_primitive(Primitive::Group { + primitives: self.into_primitives(), + }) + } + + fn into_primitives(mut self) -> Vec<Primitive> { if !self.buffers.indices.is_empty() { self.primitives.push(Primitive::Mesh2D { buffers: triangle::Mesh2D { @@ -319,9 +343,7 @@ impl Frame { }); } - Geometry::from_primitive(Primitive::Group { - primitives: self.primitives, - }) + self.primitives } } diff --git a/graphics/src/widget/canvas/geometry.rs b/graphics/src/widget/canvas/geometry.rs index 8915cda1..e8ac621d 100644 --- a/graphics/src/widget/canvas/geometry.rs +++ b/graphics/src/widget/canvas/geometry.rs @@ -22,9 +22,3 @@ impl Geometry { self.0 } } - -impl From<Geometry> for Primitive { - fn from(geometry: Geometry) -> Primitive { - geometry.0 - } -} diff --git a/wgpu/src/window/compositor.rs b/wgpu/src/window/compositor.rs index 6feb795b..64c53607 100644 --- a/wgpu/src/window/compositor.rs +++ b/wgpu/src/window/compositor.rs @@ -53,7 +53,7 @@ impl Compositor { .using_resolution(adapter.limits()); #[cfg(not(target_arch = "wasm32"))] - let limits = wgpu::Limits::default(); + let limits = wgpu::Limits::downlevel_defaults(); let (device, queue) = adapter .request_device( |