From a30553ddbbbe7d68eec96efd00b65f5d89f63e8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Ram=C3=B3n=20Jim=C3=A9nez?= Date: Mon, 20 Jan 2020 10:52:06 +0100 Subject: [PATCH 1/2] Forbid unsafe code and Rust 2018 idioms --- core/src/lib.rs | 4 ++-- futures/src/lib.rs | 4 ++-- native/src/lib.rs | 4 ++-- src/lib.rs | 4 ++-- web/src/lib.rs | 4 ++-- wgpu/src/lib.rs | 4 ++-- winit/src/lib.rs | 4 ++-- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/core/src/lib.rs b/core/src/lib.rs index 51863327..3cbce743 100644 --- a/core/src/lib.rs +++ b/core/src/lib.rs @@ -12,8 +12,8 @@ #![deny(missing_docs)] #![deny(missing_debug_implementations)] #![deny(unused_results)] -#![deny(unsafe_code)] -#![deny(rust_2018_idioms)] +#![forbid(unsafe_code)] +#![forbid(rust_2018_idioms)] mod align; mod background; diff --git a/futures/src/lib.rs b/futures/src/lib.rs index 4872df10..c25c0853 100644 --- a/futures/src/lib.rs +++ b/futures/src/lib.rs @@ -2,8 +2,8 @@ #![deny(missing_docs)] #![deny(missing_debug_implementations)] #![deny(unused_results)] -#![deny(unsafe_code)] -#![deny(rust_2018_idioms)] +#![forbid(unsafe_code)] +#![forbid(rust_2018_idioms)] pub use futures; mod command; diff --git a/native/src/lib.rs b/native/src/lib.rs index b5856c00..3b81ef71 100644 --- a/native/src/lib.rs +++ b/native/src/lib.rs @@ -37,8 +37,8 @@ #![deny(missing_docs)] #![deny(missing_debug_implementations)] #![deny(unused_results)] -#![deny(unsafe_code)] -#![deny(rust_2018_idioms)] +#![forbid(unsafe_code)] +#![forbid(rust_2018_idioms)] pub mod input; pub mod layout; pub mod renderer; diff --git a/src/lib.rs b/src/lib.rs index 1da3f549..0e2e0337 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -177,8 +177,8 @@ #![deny(missing_docs)] #![deny(missing_debug_implementations)] #![deny(unused_results)] -#![deny(unsafe_code)] -#![deny(rust_2018_idioms)] +#![forbid(unsafe_code)] +#![forbid(rust_2018_idioms)] mod application; mod element; mod sandbox; diff --git a/web/src/lib.rs b/web/src/lib.rs index b1bb80e3..1b265bc9 100644 --- a/web/src/lib.rs +++ b/web/src/lib.rs @@ -54,8 +54,8 @@ #![deny(missing_docs)] #![deny(missing_debug_implementations)] #![deny(unused_results)] -#![deny(unsafe_code)] -#![deny(rust_2018_idioms)] +#![forbid(unsafe_code)] +#![forbid(rust_2018_idioms)] use dodrio::bumpalo; use std::{cell::RefCell, rc::Rc}; diff --git a/wgpu/src/lib.rs b/wgpu/src/lib.rs index ab14987c..b8cd3fce 100644 --- a/wgpu/src/lib.rs +++ b/wgpu/src/lib.rs @@ -22,8 +22,8 @@ #![deny(missing_docs)] #![deny(missing_debug_implementations)] #![deny(unused_results)] -#![deny(unsafe_code)] -#![deny(rust_2018_idioms)] +#![forbid(unsafe_code)] +#![forbid(rust_2018_idioms)] pub mod defaults; pub mod triangle; pub mod widget; diff --git a/winit/src/lib.rs b/winit/src/lib.rs index 056ae8f0..13824f32 100644 --- a/winit/src/lib.rs +++ b/winit/src/lib.rs @@ -18,8 +18,8 @@ #![deny(missing_docs)] #![deny(missing_debug_implementations)] #![deny(unused_results)] -#![deny(unsafe_code)] -#![deny(rust_2018_idioms)] +#![forbid(unsafe_code)] +#![forbid(rust_2018_idioms)] #[doc(no_inline)] pub use iced_native::*; From bc611cf51cd35bb3a4b91500c8a13202db58ac38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Ram=C3=B3n=20Jim=C3=A9nez?= Date: Mon, 20 Jan 2020 11:19:42 +0100 Subject: [PATCH 2/2] Make `image` support optional in `iced_wgpu` This reduces binary size when image rendering is not necessary a considerable amount. --- Cargo.toml | 6 ++++-- examples/pokedex/Cargo.toml | 2 +- examples/tour/Cargo.toml | 2 +- wgpu/Cargo.toml | 2 +- wgpu/src/image.rs | 24 +++++++++++++++++++----- wgpu/src/renderer/widget.rs | 4 +++- 6 files changed, 29 insertions(+), 11 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 28a97af9..7bfce09a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,10 +12,12 @@ keywords = ["gui", "ui", "graphics", "interface", "widgets"] categories = ["gui"] [features] +# Enables the Image widget +image = ["iced_wgpu/image"] +# Enables the Svg widget +svg = ["iced_wgpu/svg"] # Enables a debug view in native platforms (press F12) debug = ["iced_winit/debug"] -# Enables support for SVG rendering -svg = ["iced_wgpu/svg"] [badges] maintenance = { status = "actively-developed" } diff --git a/examples/pokedex/Cargo.toml b/examples/pokedex/Cargo.toml index 2972590f..76a3a82f 100644 --- a/examples/pokedex/Cargo.toml +++ b/examples/pokedex/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" publish = false [dependencies] -iced = { path = "../.." } +iced = { path = "../..", features = ["image"] } iced_futures = { path = "../../futures", features = ["async-std"] } surf = "1.0" rand = "0.7" diff --git a/examples/tour/Cargo.toml b/examples/tour/Cargo.toml index 7772df1b..45105c31 100644 --- a/examples/tour/Cargo.toml +++ b/examples/tour/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" publish = false [dependencies] -iced = { path = "../..", features = ["debug"] } +iced = { path = "../..", features = ["image", "debug"] } env_logger = "0.7" [target.'cfg(target_arch = "wasm32")'.dependencies] diff --git a/wgpu/Cargo.toml b/wgpu/Cargo.toml index 19d41bba..60b98b40 100644 --- a/wgpu/Cargo.toml +++ b/wgpu/Cargo.toml @@ -17,8 +17,8 @@ wgpu = "0.4" glyph_brush = "0.6" wgpu_glyph = { version = "0.7", git = "https://github.com/hecrj/wgpu_glyph", branch = "fix/font-load-panic" } raw-window-handle = "0.3" -image = "0.22" glam = "0.8" font-kit = "0.4" log = "0.4" resvg = { version = "0.8", features = ["raqote-backend"], optional = true } +image = { version = "0.22", optional = true } diff --git a/wgpu/src/image.rs b/wgpu/src/image.rs index 4558ffb0..ccc956a9 100644 --- a/wgpu/src/image.rs +++ b/wgpu/src/image.rs @@ -1,3 +1,4 @@ +#[cfg(feature = "image")] mod raster; #[cfg(feature = "svg")] mod vector; @@ -5,10 +6,14 @@ mod vector; use crate::Transformation; use iced_native::{image, svg, Rectangle}; -use std::{cell::RefCell, mem}; +use std::mem; + +#[cfg(any(feature = "image", feature = "svg"))] +use std::cell::RefCell; #[derive(Debug)] pub struct Pipeline { + #[cfg(feature = "image")] raster_cache: RefCell, #[cfg(feature = "svg")] vector_cache: RefCell, @@ -191,6 +196,7 @@ impl Pipeline { }); Pipeline { + #[cfg(feature = "image")] raster_cache: RefCell::new(raster::Cache::new()), #[cfg(feature = "svg")] vector_cache: RefCell::new(vector::Cache::new()), @@ -205,6 +211,7 @@ impl Pipeline { } } + #[cfg(feature = "image")] pub fn dimensions(&self, handle: &image::Handle) -> (u32, u32) { let mut cache = self.raster_cache.borrow_mut(); let memory = cache.load(&handle); @@ -250,11 +257,17 @@ impl Pipeline { // [1]: https://github.com/nical/guillotiere for image in instances { let uploaded_texture = match &image.handle { - Handle::Raster(handle) => { - let mut cache = self.raster_cache.borrow_mut(); - let memory = cache.load(&handle); + Handle::Raster(_handle) => { + #[cfg(feature = "image")] + { + let mut cache = self.raster_cache.borrow_mut(); + let memory = cache.load(&_handle); - memory.upload(device, encoder, &self.texture_layout) + memory.upload(device, encoder, &self.texture_layout) + } + + #[cfg(not(feature = "image"))] + None } Handle::Vector(_handle) => { #[cfg(feature = "svg")] @@ -339,6 +352,7 @@ impl Pipeline { } pub fn trim_cache(&mut self) { + #[cfg(feature = "image")] self.raster_cache.borrow_mut().trim(); #[cfg(feature = "svg")] diff --git a/wgpu/src/renderer/widget.rs b/wgpu/src/renderer/widget.rs index 2c75413f..84f908e7 100644 --- a/wgpu/src/renderer/widget.rs +++ b/wgpu/src/renderer/widget.rs @@ -2,7 +2,6 @@ mod button; mod checkbox; mod column; mod container; -mod image; mod progress_bar; mod radio; mod row; @@ -14,3 +13,6 @@ mod text_input; #[cfg(feature = "svg")] mod svg; + +#[cfg(feature = "image")] +mod image;