diff --git a/Cargo.lock b/Cargo.lock index 198494929e5..373236f1883 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -819,12 +819,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ecdffb913a326b6c642290a0d0ec8e8d6597291acdc07cc4c9cb4b3635d44cf9" -[[package]] -name = "color_quant" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" - [[package]] name = "com" version = "0.6.0" @@ -2072,17 +2066,16 @@ dependencies = [ [[package]] name = "image" -version = "0.24.7" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f3dfdbdd72063086ff443e297b61695500514b1e41095b6fb9a5ab48a70a711" +checksum = "a9b4f005360d32e9325029b38ba47ebd7a56f3316df09249368939562d518645" dependencies = [ "bytemuck", "byteorder", - "color_quant", - "jpeg-decoder", - "num-rational", "num-traits", "png", + "zune-core", + "zune-jpeg", ] [[package]] @@ -2188,12 +2181,6 @@ dependencies = [ "libc", ] -[[package]] -name = "jpeg-decoder" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" - [[package]] name = "js-sys" version = "0.3.69" @@ -2498,27 +2485,6 @@ dependencies = [ "minimal-lexical", ] -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - [[package]] name = "num-traits" version = "0.2.16" @@ -4883,6 +4849,21 @@ dependencies = [ "syn 2.0.48", ] +[[package]] +name = "zune-core" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" + +[[package]] +name = "zune-jpeg" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec866b44a2a1fd6133d363f073ca1b179f438f99e7e5bfb1e33f7181facfe448" +dependencies = [ + "zune-core", +] + [[package]] name = "zvariant" version = "3.15.0" diff --git a/Cargo.toml b/Cargo.toml index 0853df671d6..8c59b92deb5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -62,23 +62,31 @@ egui_demo_lib = { version = "0.27.2", path = "crates/egui_demo_lib", default-fea egui_glow = { version = "0.27.2", path = "crates/egui_glow", default-features = false } eframe = { version = "0.27.2", path = "crates/eframe", default-features = false } -#TODO(emilk): make more things workspace dependencies ahash = { version = "0.8.6", default-features = false, features = [ "no-rng", # we don't need DOS-protection, so we let users opt-in to it instead "std", ] } backtrace = "0.3" +bytemuck = "1.7.2" criterion = { version = "0.5.1", default-features = false } document-features = " 0.2.8" glow = "0.13" +glutin = "0.31" +glutin-winit = "0.4" +image = { version = "0.25", default-features = false } log = { version = "0.4", features = ["std"] } nohash-hasher = "0.2" parking_lot = "0.12" puffin = "0.19" puffin_http = "0.16" +ron = "0.8" raw-window-handle = "0.6.0" +serde = { version = "1", features = ["derive"] } thiserror = "1.0.37" web-time = "0.2" # Timekeeping for native and web +wasm-bindgen = "0.2" +wasm-bindgen-futures = "0.4" +web-sys = "0.3.58" wgpu = { version = "0.20.0", default-features = false, features = [ # Make the renderer `Sync` even on wasm32, because it makes the code simpler: "fragile-send-sync-non-atomic-wasm", diff --git a/crates/ecolor/Cargo.toml b/crates/ecolor/Cargo.toml index fe4c6f444b1..6b46bc1062c 100644 --- a/crates/ecolor/Cargo.toml +++ b/crates/ecolor/Cargo.toml @@ -33,7 +33,7 @@ default = [] #! ### Optional dependencies ## [`bytemuck`](https://docs.rs/bytemuck) enables you to cast `ecolor` types to `&[u8]`. -bytemuck = { version = "1.7.2", optional = true, features = ["derive"] } +bytemuck = { workspace = true, optional = true, features = ["derive"] } ## [`cint`](https://docs.rs/cint) enables interoperability with other color libraries. cint = { version = "0.3.1", optional = true } @@ -45,4 +45,4 @@ color-hex = { version = "0.2.0", optional = true } document-features = { workspace = true, optional = true } ## Allow serialization using [`serde`](https://docs.rs/serde). -serde = { version = "1", optional = true, features = ["derive"] } +serde = { workspace = true, optional = true } diff --git a/crates/eframe/Cargo.toml b/crates/eframe/Cargo.toml index 33cc5ba6bfe..f992c5c66a2 100644 --- a/crates/eframe/Cargo.toml +++ b/crates/eframe/Cargo.toml @@ -144,8 +144,8 @@ glow = { workspace = true, optional = true } rwh_05 = { package = "raw-window-handle", version = "0.5.2", optional = true, features = [ "std", ] } -ron = { version = "0.8", optional = true, features = ["integer128"] } -serde = { version = "1", optional = true, features = ["derive"] } +ron = { workspace = true, optional = true, features = ["integer128"] } +serde = { workspace = true, optional = true } # ------------------------------------------- # native: @@ -154,9 +154,7 @@ egui-winit = { workspace = true, default-features = false, features = [ "clipboard", "links", ] } -image = { version = "0.24", default-features = false, features = [ - "png", -] } # Needed for app icon +image = { workspace = true, features = ["png"] } # Needed for app icon winit = { workspace = true, default-features = false, features = ["rwh_06"] } # optional native: @@ -168,8 +166,8 @@ pollster = { version = "0.3", optional = true } # needed for wgpu # we can expose these to user so that they can select which backends they want to enable to avoid compiling useless deps. # this can be done at the same time we expose x11/wayland features of winit crate. -glutin = { version = "0.31", optional = true } -glutin-winit = { version = "0.4", optional = true } +glutin = { workspace = true, optional = true } +glutin-winit = { workspace = true, optional = true } puffin = { workspace = true, optional = true } wgpu = { workspace = true, optional = true, features = [ # Let's enable some backends so that users can use `eframe` out-of-the-box @@ -201,12 +199,12 @@ winapi = { version = "0.3.9", features = ["winuser"] } # ------------------------------------------- # web: [target.'cfg(target_arch = "wasm32")'.dependencies] -bytemuck = "1.7" +bytemuck.workspace = true js-sys = "0.3" percent-encoding = "2.1" -wasm-bindgen = "0.2" -wasm-bindgen-futures = "0.4" -web-sys = { version = "0.3.58", features = [ +wasm-bindgen.workspace = true +wasm-bindgen-futures.workspace = true +web-sys = { workspace = true, features = [ "BinaryType", "Blob", "Clipboard", diff --git a/crates/eframe/src/icon_data.rs b/crates/eframe/src/icon_data.rs index 847228f9ec0..ed514d00e1f 100644 --- a/crates/eframe/src/icon_data.rs +++ b/crates/eframe/src/icon_data.rs @@ -54,7 +54,7 @@ impl IconDataExt for IconData { image .write_to( &mut std::io::Cursor::new(&mut png_bytes), - image::ImageOutputFormat::Png, + image::ImageFormat::Png, ) .map_err(|err| err.to_string())?; Ok(png_bytes) diff --git a/crates/eframe/src/native/app_icon.rs b/crates/eframe/src/native/app_icon.rs index 90100298680..840bf367b27 100644 --- a/crates/eframe/src/native/app_icon.rs +++ b/crates/eframe/src/native/app_icon.rs @@ -118,7 +118,7 @@ fn set_app_icon_windows(icon_data: &IconData) -> AppIconStatus { if image_scaled .write_to( &mut std::io::Cursor::new(&mut image_scaled_bytes), - image::ImageOutputFormat::Png, + image::ImageFormat::Png, ) .is_err() { diff --git a/crates/egui-wgpu/Cargo.toml b/crates/egui-wgpu/Cargo.toml index 817233b88ba..1de7d1446ef 100644 --- a/crates/egui-wgpu/Cargo.toml +++ b/crates/egui-wgpu/Cargo.toml @@ -50,7 +50,7 @@ x11 = ["winit?/x11"] egui = { workspace = true, default-features = false } epaint = { workspace = true, default-features = false, features = ["bytemuck"] } -bytemuck = "1.7" +bytemuck.workspace = true document-features.workspace = true log.workspace = true thiserror.workspace = true diff --git a/crates/egui-winit/Cargo.toml b/crates/egui-winit/Cargo.toml index fc2b8a53620..6354b7a439f 100644 --- a/crates/egui-winit/Cargo.toml +++ b/crates/egui-winit/Cargo.toml @@ -73,7 +73,7 @@ accesskit_winit = { version = "0.16.0", optional = true } document-features = { workspace = true, optional = true } puffin = { workspace = true, optional = true } -serde = { version = "1.0", optional = true, features = ["derive"] } +serde = { workspace = true, optional = true } webbrowser = { version = "1.0.0", optional = true } [target.'cfg(any(target_os="linux", target_os="dragonfly", target_os="freebsd", target_os="netbsd", target_os="openbsd"))'.dependencies] diff --git a/crates/egui/Cargo.toml b/crates/egui/Cargo.toml index 909beba133a..2e8e1ddd557 100644 --- a/crates/egui/Cargo.toml +++ b/crates/egui/Cargo.toml @@ -95,5 +95,5 @@ document-features = { workspace = true, optional = true } log = { workspace = true, optional = true } puffin = { workspace = true, optional = true } -ron = { version = "0.8", optional = true } -serde = { version = "1", optional = true, features = ["derive", "rc"] } +ron = { workspace = true, optional = true } +serde = { workspace = true, optional = true, features = ["derive", "rc"] } diff --git a/crates/egui_demo_app/Cargo.toml b/crates/egui_demo_app/Cargo.toml index 0491f5ff934..87f787a054a 100644 --- a/crates/egui_demo_app/Cargo.toml +++ b/crates/egui_demo_app/Cargo.toml @@ -51,7 +51,7 @@ log.workspace = true # Optional dependencies: -bytemuck = { version = "1.7.1", optional = true } +bytemuck = { workspace = true, optional = true } puffin = { workspace = true, optional = true } puffin_http = { workspace = true, optional = true } # Enable both WebGL & WebGPU when targeting the web (these features have no effect when not targeting wasm32) @@ -60,14 +60,11 @@ wgpu = { workspace = true, features = ["webgpu", "webgl"], optional = true } # feature "http": ehttp = { version = "0.5", optional = true } -image = { version = "0.24", optional = true, default-features = false, features = [ - "jpeg", - "png", -] } +image = { workspace = true, optional = true, features = ["jpeg", "png"] } poll-promise = { version = "0.3", optional = true, default-features = false } # feature "persistence": -serde = { version = "1", optional = true, features = ["derive"] } +serde = { workspace = true, optional = true } # native: @@ -81,5 +78,5 @@ rfd = { version = "0.13", optional = true } # web: [target.'cfg(target_arch = "wasm32")'.dependencies] wasm-bindgen = "=0.2.92" -wasm-bindgen-futures = "0.4" -web-sys = "0.3" +wasm-bindgen-futures.workspace = true +web-sys.workspace = true diff --git a/crates/egui_demo_lib/Cargo.toml b/crates/egui_demo_lib/Cargo.toml index d1daa5b8cfb..9a6e79dd99c 100644 --- a/crates/egui_demo_lib/Cargo.toml +++ b/crates/egui_demo_lib/Cargo.toml @@ -52,7 +52,7 @@ unicode_names2 = { version = "0.6.0", default-features = false } # this old vers chrono = { version = "0.4", optional = true, features = ["js-sys", "wasmbind"] } ## Enable this when generating docs. document-features = { workspace = true, optional = true } -serde = { version = "1", optional = true, features = ["derive"] } +serde = { workspace = true, optional = true } [dev-dependencies] diff --git a/crates/egui_extras/Cargo.toml b/crates/egui_extras/Cargo.toml index 372f754cc52..edbac462c94 100644 --- a/crates/egui_extras/Cargo.toml +++ b/crates/egui_extras/Cargo.toml @@ -45,8 +45,7 @@ http = ["dep:ehttp"] ## ## You also need to ALSO opt-in to the image formats you want to support, like so: ## ```toml -## image = { version = "0.24", features = ["jpeg", "png"] } # Add the types you want support for - +## image = { version = "0.25", features = ["jpeg", "png"] } # Add the types you want support for ## ``` image = ["dep:image"] @@ -67,7 +66,7 @@ egui = { workspace = true, default-features = false, features = ["serde"] } enum-map = { version = "2", features = ["serde"] } log.workspace = true -serde = { version = "1", features = ["derive"] } +serde.workspace = true #! ### Optional dependencies @@ -82,7 +81,7 @@ chrono = { version = "0.4", optional = true, default-features = false, features ## Enable this when generating docs. document-features = { workspace = true, optional = true } -image = { version = "0.24", optional = true, default-features = false } +image = { workspace = true, optional = true } # file feature mime_guess2 = { version = "2", optional = true, default-features = false } diff --git a/crates/egui_extras/README.md b/crates/egui_extras/README.md index 0ccb1de2b1e..4e5e96dce63 100644 --- a/crates/egui_extras/README.md +++ b/crates/egui_extras/README.md @@ -13,7 +13,7 @@ One thing `egui_extras` is commonly used for is to install image loaders for `eg ```toml egui_extras = { version = "*", features = ["all_loaders"] } -image = { version = "0.24", features = ["jpeg", "png"] } # Add the types you want support for +image = { version = "0.25", features = ["jpeg", "png"] } # Add the types you want support for ``` ```rs diff --git a/crates/egui_extras/src/image.rs b/crates/egui_extras/src/image.rs index a0b042e26ae..f6301aec823 100644 --- a/crates/egui_extras/src/image.rs +++ b/crates/egui_extras/src/image.rs @@ -43,7 +43,7 @@ impl RetainedImage { /// `image_bytes` should be the raw contents of an image file (`.png`, `.jpg`, …). /// /// Requires the "image" feature. You must also opt-in to the image formats you need - /// with e.g. `image = { version = "0.24", features = ["jpeg", "png"] }`. + /// with e.g. `image = { version = "0.25", features = ["jpeg", "png"] }`. /// /// # Errors /// On invalid image or unsupported image format. @@ -195,7 +195,7 @@ use egui::ColorImage; /// Load a (non-svg) image. /// /// Requires the "image" feature. You must also opt-in to the image formats you need -/// with e.g. `image = { version = "0.24", features = ["jpeg", "png"] }`. +/// with e.g. `image = { version = "0.25", features = ["jpeg", "png"] }`. /// /// # Errors /// On invalid image or unsupported image format. diff --git a/crates/egui_extras/src/loaders.rs b/crates/egui_extras/src/loaders.rs index 05df9bc8eef..d66ea483071 100644 --- a/crates/egui_extras/src/loaders.rs +++ b/crates/egui_extras/src/loaders.rs @@ -20,7 +20,7 @@ /// /// ```toml,ignore /// egui_extras = { version = "*", features = ["all_loaders"] } -/// image = { version = "0.24", features = ["jpeg", "png"] } # Add the types you want support for +/// image = { version = "0.25", features = ["jpeg", "png"] } # Add the types you want support for /// ``` /// /// ⚠ You have to configure both the supported loaders in `egui_extras` _and_ the supported image formats diff --git a/crates/egui_glow/Cargo.toml b/crates/egui_glow/Cargo.toml index 44939640cfb..29129dddc3f 100644 --- a/crates/egui_glow/Cargo.toml +++ b/crates/egui_glow/Cargo.toml @@ -56,7 +56,7 @@ x11 = ["winit?/x11"] egui = { workspace = true, default-features = false, features = ["bytemuck"] } egui-winit = { workspace = true, optional = true, default-features = false } -bytemuck = "1.7" +bytemuck.workspace = true glow.workspace = true log.workspace = true memoffset = "0.9" @@ -74,13 +74,13 @@ winit = { workspace = true, optional = true, default-features = false, features # Web: [target.'cfg(target_arch = "wasm32")'.dependencies] -web-sys = { version = "0.3", features = ["console"] } -wasm-bindgen = "0.2" +web-sys = { workspace = true, features = ["console"] } +wasm-bindgen.workspace = true [dev-dependencies] -glutin = "0.31" # examples/pure_glow -glutin-winit = "0.4.0" +glutin.workspace = true # examples/pure_glow +glutin-winit.workspace = true # glutin stuck on old version of raw-window-handle: rwh_05 = { package = "raw-window-handle", version = "0.5.2", features = [ "std", diff --git a/crates/egui_plot/Cargo.toml b/crates/egui_plot/Cargo.toml index 91c4b3a50fc..bc42765ea16 100644 --- a/crates/egui_plot/Cargo.toml +++ b/crates/egui_plot/Cargo.toml @@ -42,4 +42,4 @@ egui = { workspace = true, default-features = false } ## Enable this when generating docs. document-features = { workspace = true, optional = true } -serde = { version = "1", optional = true, features = ["derive"] } +serde = { workspace = true, optional = true } diff --git a/crates/emath/Cargo.toml b/crates/emath/Cargo.toml index 99fc1b004b8..f47f281c968 100644 --- a/crates/emath/Cargo.toml +++ b/crates/emath/Cargo.toml @@ -30,7 +30,7 @@ default = [] #! ### Optional dependencies ## [`bytemuck`](https://docs.rs/bytemuck) enables you to cast `emath` types to `&[u8]`. -bytemuck = { version = "1.7.2", optional = true, features = ["derive"] } +bytemuck = { workspace = true, optional = true, features = ["derive"] } ## Enable this when generating docs. document-features = { workspace = true, optional = true } @@ -39,4 +39,4 @@ document-features = { workspace = true, optional = true } mint = { version = "0.5.6", optional = true } ## Allow serialization using [`serde`](https://docs.rs/serde). -serde = { version = "1", optional = true, features = ["derive"] } +serde = { workspace = true, optional = true } diff --git a/crates/epaint/Cargo.toml b/crates/epaint/Cargo.toml index 852066d046c..3588a280dc1 100644 --- a/crates/epaint/Cargo.toml +++ b/crates/epaint/Cargo.toml @@ -84,7 +84,7 @@ nohash-hasher.workspace = true parking_lot.workspace = true # Using parking_lot over std::sync::Mutex gives 50% speedups in some real-world scenarios. #! ### Optional dependencies -bytemuck = { version = "1.7.2", optional = true, features = ["derive"] } +bytemuck = { workspace = true, optional = true, features = ["derive"] } ## Enable this when generating docs. document-features = { workspace = true, optional = true } @@ -94,7 +94,7 @@ puffin = { workspace = true, optional = true } rayon = { version = "1.7", optional = true } ## Allow serialization using [`serde`](https://docs.rs/serde) . -serde = { version = "1", optional = true, features = ["derive", "rc"] } +serde = { workspace = true, optional = true, features = ["derive", "rc"] } # native: [target.'cfg(not(target_arch = "wasm32"))'.dependencies] diff --git a/crates/epaint/src/mutex.rs b/crates/epaint/src/mutex.rs index 2c61f038f9c..157701c2be0 100644 --- a/crates/epaint/src/mutex.rs +++ b/crates/epaint/src/mutex.rs @@ -133,14 +133,16 @@ mod rw_lock_impl { /// the feature `deadlock_detection` is turned enabled, in which case /// extra checks are added to detect deadlocks. #[derive(Default)] - pub struct RwLock(parking_lot::RwLock); + pub struct RwLock(parking_lot::RwLock); impl RwLock { #[inline(always)] pub fn new(val: T) -> Self { Self(parking_lot::RwLock::new(val)) } + } + impl RwLock { #[inline(always)] pub fn read(&self) -> RwLockReadGuard<'_, T> { parking_lot::RwLockReadGuard::map(self.0.read(), |v| v) diff --git a/examples/images/Cargo.toml b/examples/images/Cargo.toml index 092535c9125..57d552e3be4 100644 --- a/examples/images/Cargo.toml +++ b/examples/images/Cargo.toml @@ -21,7 +21,4 @@ env_logger = { version = "0.10", default-features = false, features = [ "auto-color", "humantime", ] } -image = { version = "0.24", default-features = false, features = [ - "jpeg", - "png", -] } +image = { workspace = true, features = ["jpeg", "png"] } diff --git a/examples/save_plot/Cargo.toml b/examples/save_plot/Cargo.toml index c4c287c001d..d20c927b058 100644 --- a/examples/save_plot/Cargo.toml +++ b/examples/save_plot/Cargo.toml @@ -16,7 +16,7 @@ eframe = { workspace = true, features = [ "__screenshot", # __screenshot is so we can dump a screenshot using EFRAME_SCREENSHOT_TO ] } egui_plot.workspace = true -image = { version = "0.24", default-features = false, features = ["png"] } +image = { workspace = true, features = ["png"] } rfd = "0.13.0" env_logger = { version = "0.10", default-features = false, features = [ "auto-color", diff --git a/examples/screenshot/Cargo.toml b/examples/screenshot/Cargo.toml index aba066669c9..84399e4bc24 100644 --- a/examples/screenshot/Cargo.toml +++ b/examples/screenshot/Cargo.toml @@ -24,4 +24,4 @@ env_logger = { version = "0.10", default-features = false, features = [ "auto-color", "humantime", ] } -image = { version = "0.24", default-features = false, features = ["png"] } +image = { workspace = true, features = ["png"] }