From 0a32c8d6d8e1b53965ff66c02fc1974c5141151c Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Fri, 18 Sep 2026 10:50:46 +0200 Subject: [PATCH 1/2] Patch `egui` to the bleeding-edge `main` branch Uncomment the `[patch.crates-io]` entries so the workspace builds against `https://github.com/emilk/egui` `main`. `egui_extras` was pinned to `=0.36.0`, which no patched version can ever satisfy, so relax it to `0.36.0` like its siblings. Co-Authored-By: Claude Opus 5 --- Cargo.lock | 197 +++++++++++++++++++++++++++++++++++++++-------------- Cargo.toml | 14 ++-- 2 files changed, 155 insertions(+), 56 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 30cf1eed..ae556d48 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1157,9 +1157,8 @@ checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" [[package]] name = "ecolor" -version = "0.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30429559efada7bd06098ced68e90f1f745acb9a25b51caf158741493c5b94bb" +version = "0.36.2" +source = "git+https://github.com/emilk/egui?branch=main#6bc0a82e2157ad28728b277d6d73d3acdfefa7bd" dependencies = [ "bytemuck", "emath", @@ -1168,9 +1167,8 @@ dependencies = [ [[package]] name = "eframe" -version = "0.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a9f6000a8c01ca5b79bb914777c85902a5173d9f6c44278463aa0039bee4ca4" +version = "0.36.2" +source = "git+https://github.com/emilk/egui?branch=main#6bc0a82e2157ad28728b277d6d73d3acdfefa7bd" dependencies = [ "ahash", "bytemuck", @@ -1179,6 +1177,7 @@ dependencies = [ "egui-wgpu", "egui-winit", "egui_glow", + "egui_system_fonts", "glow", "glutin", "glutin-winit", @@ -1206,9 +1205,8 @@ dependencies = [ [[package]] name = "egui" -version = "0.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e70d4e8e8896ba5becb0bc1c8c06d203cb44ff16a93d7a619a5e565500085d" +version = "0.36.2" +source = "git+https://github.com/emilk/egui?branch=main#6bc0a82e2157ad28728b277d6d73d3acdfefa7bd" dependencies = [ "accesskit", "ahash", @@ -1228,9 +1226,8 @@ dependencies = [ [[package]] name = "egui-wgpu" -version = "0.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a262a88482609aeda48457fa6f76f5b754b2965e88797c22ac8ab2709f397906" +version = "0.36.2" +source = "git+https://github.com/emilk/egui?branch=main#6bc0a82e2157ad28728b277d6d73d3acdfefa7bd" dependencies = [ "ahash", "bytemuck", @@ -1248,9 +1245,8 @@ dependencies = [ [[package]] name = "egui-winit" -version = "0.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcc5ff243c9d41a665caeeb1e2b18258904524eb9f7c6840e00e9055017f0ade" +version = "0.36.2" +source = "git+https://github.com/emilk/egui?branch=main#6bc0a82e2157ad28728b277d6d73d3acdfefa7bd" dependencies = [ "accesskit_winit", "arboard", @@ -1271,9 +1267,8 @@ dependencies = [ [[package]] name = "egui_extras" -version = "0.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2cb8e069ccbb4b9f49e9c8f52637a088dc520b1d20f4071fdcb801ec4606fc4" +version = "0.36.2" +source = "git+https://github.com/emilk/egui?branch=main#6bc0a82e2157ad28728b277d6d73d3acdfefa7bd" dependencies = [ "ahash", "egui", @@ -1285,9 +1280,8 @@ dependencies = [ [[package]] name = "egui_glow" -version = "0.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc088c86612837efb5a79a0cef947edc59db0bf52a2230785836d27005866b58" +version = "0.36.2" +source = "git+https://github.com/emilk/egui?branch=main#6bc0a82e2157ad28728b277d6d73d3acdfefa7bd" dependencies = [ "bytemuck", "egui", @@ -1299,9 +1293,8 @@ dependencies = [ [[package]] name = "egui_kittest" -version = "0.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0faf48edfa198e2343de2083bd10628a41197c1a17855cd12cec4c0f140dd3b" +version = "0.36.2" +source = "git+https://github.com/emilk/egui?branch=main#6bc0a82e2157ad28728b277d6d73d3acdfefa7bd" dependencies = [ "dify", "eframe", @@ -1336,6 +1329,20 @@ dependencies = [ "serde", ] +[[package]] +name = "egui_system_fonts" +version = "0.36.2" +source = "git+https://github.com/emilk/egui?branch=main#6bc0a82e2157ad28728b277d6d73d3acdfefa7bd" +dependencies = [ + "epaint", + "fontique", + "log", + "poll-promise", + "skrifa", + "sys-locale", + "unicode-script", +] + [[package]] name = "either" version = "1.17.0" @@ -1344,9 +1351,8 @@ checksum = "9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d" [[package]] name = "emath" -version = "0.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b4d19daeb47a1e42e9e67fdc8dd003364b4d3e6c6bc4df865a2b5ad2c920e0" +version = "0.36.2" +source = "git+https://github.com/emilk/egui?branch=main#6bc0a82e2157ad28728b277d6d73d3acdfefa7bd" dependencies = [ "bytemuck", "serde", @@ -1360,22 +1366,22 @@ checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099" [[package]] name = "enum-map" -version = "2.7.3" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6866f3bfdf8207509a033af1a75a7b08abda06bbaaeae6669323fd5a097df2e9" +checksum = "d4532960034c15ba2f55e9eee631040ecc473c32e6c4b200828c759840f13a06" dependencies = [ "enum-map-derive", ] [[package]] name = "enum-map-derive" -version = "0.17.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" +checksum = "7127272f64b3e098f7d81f350d672081b879bff896d219c42370dc858b1af9ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", ] [[package]] @@ -1435,9 +1441,8 @@ dependencies = [ [[package]] name = "epaint" -version = "0.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a7cb8f831a5a43423e4838101ac4a3264910f2f326670c24f4f4b7ee43d9c8" +version = "0.36.2" +source = "git+https://github.com/emilk/egui?branch=main#6bc0a82e2157ad28728b277d6d73d3acdfefa7bd" dependencies = [ "ahash", "bytemuck", @@ -1455,15 +1460,15 @@ dependencies = [ "skrifa", "smallvec", "unicode-general-category", + "unicode-properties", "unicode-segmentation", "vello_cpu", ] [[package]] name = "epaint_default_fonts" -version = "0.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d16e23bfeaa81d590306ae25da24269a0686d240c623013badbda44d3f5fab46" +version = "0.36.2" +source = "git+https://github.com/emilk/egui?branch=main#6bc0a82e2157ad28728b277d6d73d3acdfefa7bd" [[package]] name = "equivalent" @@ -1587,14 +1592,36 @@ checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "font-types" -version = "0.12.2" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a7299a780854a6d391be2ae1c8521c9368471b559dbfd6a8dbd9f407eaff100" +checksum = "b8eb065f3251655b3c90e22e5e363f310fc5332fb3402e37bbc94752283248f6" dependencies = [ "bytemuck", "serde", ] +[[package]] +name = "fontique" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6688bc1294fe7117d788937b6c53480169b29c566954af490830d4c09da9516a" +dependencies = [ + "hashbrown 0.17.1", + "linebender_resource_handle", + "memmap2", + "objc2 0.6.4", + "objc2-core-foundation", + "objc2-core-text", + "objc2-foundation 0.3.2", + "parlance", + "read-fonts", + "roxmltree", + "smallvec", + "windows", + "windows-core", + "yeslogic-fontconfig-sys", +] + [[package]] name = "foreign-types" version = "0.5.0" @@ -1752,15 +1779,16 @@ dependencies = [ [[package]] name = "glifo" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed4a1bb24121291d27230c1b1b44e07d6a9b28cefdb32fe1581dfb84e14f940a" +checksum = "282a26c1e23de04bdab3e34a21b6f877a479b96737792516b9b8b8f69b6661be" dependencies = [ "bytemuck", "foldhash", "hashbrown 0.17.1", "log", "peniko", + "png", "skrifa", "smallvec", "vello_common", @@ -2414,9 +2442,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.33" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" [[package]] name = "markers" @@ -2717,6 +2745,16 @@ dependencies = [ "objc2-foundation 0.2.2", ] +[[package]] +name = "objc2-core-text" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" +dependencies = [ + "bitflags 2.13.1", + "objc2-core-foundation", +] + [[package]] name = "objc2-encode" version = "4.1.0" @@ -2994,6 +3032,12 @@ dependencies = [ "windows-link", ] +[[package]] +name = "parlance" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b6937eda350acc1a5d05872c3cbf99fe78619c269096e2be3d4a350058639d5" + [[package]] name = "peniko" version = "0.6.1" @@ -3148,6 +3192,16 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "poll-promise" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6a58fecbf9da8965bcdb20ce4fd29788d1acee68ddbb64f0ba1b81bccdb7df" +dependencies = [ + "document-features", + "static_assertions", +] + [[package]] name = "polling" version = "3.11.0" @@ -3472,6 +3526,15 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "roxmltree" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1964b10c76125c36f8afe190065a4bf9a87bf324842c05701330bba9f1cacbb" +dependencies = [ + "memchr", +] + [[package]] name = "rustc-hash" version = "1.1.0" @@ -3717,9 +3780,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.15.2" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" +checksum = "ba467056f1b547ed52077911161fc86985becbc60e8e1857c8a144dab0def891" dependencies = [ "serde", ] @@ -3866,6 +3929,15 @@ dependencies = [ "syn 2.0.119", ] +[[package]] +name = "sys-locale" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4" +dependencies = [ + "libc", +] + [[package]] name = "tempfile" version = "3.27.0" @@ -4106,6 +4178,18 @@ version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +[[package]] +name = "unicode-properties" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d" + +[[package]] +name = "unicode-script" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "383ad40bb927465ec0ce7720e033cb4ca06912855fc35db31b5755d0de75b1ee" + [[package]] name = "unicode-segmentation" version = "1.13.3" @@ -4162,28 +4246,30 @@ dependencies = [ [[package]] name = "vello_common" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2e9aed918117e8152c9eddfd8362d73c465c23f26c44786aa331707b8a64fa2" +checksum = "bbb2141a2bca6e6d598e471fd4d1d7eed8e020aad6a28187edda07f091a325dd" dependencies = [ "bytemuck", "fearless_simd", "guillotiere", "log", "peniko", + "png", "smallvec", "thiserror 2.0.19", ] [[package]] name = "vello_cpu" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac7349e1f55f6b801c7c277958df4ea53e7f20f21e8014910ad888b2ecda93ea" +checksum = "ace506ca414548966fcf3c283be94eb1cad8254de488791ee698bf438b0890a9" dependencies = [ "bytemuck", "glifo", "hashbrown 0.17.1", + "png", "vello_common", ] @@ -5069,6 +5155,17 @@ version = "0.8.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" +[[package]] +name = "yeslogic-fontconfig-sys" +version = "6.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d8b8abf912b9a29ff112e1671c97c33636903d13a69712037190e6805af4f76" +dependencies = [ + "dlib", + "once_cell", + "pkg-config", +] + [[package]] name = "yoke" version = "0.8.3" diff --git a/Cargo.toml b/Cargo.toml index adbdb583..a22946e7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -55,7 +55,7 @@ assertables = "9.8.2" document-features = "0.2.12" eframe = { version = "0.36.0", default-features = false } egui = { version = "0.36.0", default-features = false } -egui_extras = { version = "=0.36.0", default-features = false } +egui_extras = { version = "0.36.0", default-features = false } egui_kittest = { version = "0.36.0", default-features = false } emath = { version = "0.36.0", default-features = false } env_logger = { version = "0.11.8", default-features = false, features = [ @@ -72,15 +72,17 @@ web-sys = "0.3.83" [patch.crates-io] # When we want to use the bleeding edge version of egui and eframe: -# egui = { git = "https://github.com/emilk/egui", branch = "main" } -# egui_kittest = { git = "https://github.com/emilk/egui", branch = "main" } -# eframe = { git = "https://github.com/emilk/egui", branch = "main" } -# emath = { git = "https://github.com/emilk/egui", branch = "main" } +eframe = { git = "https://github.com/emilk/egui", branch = "main" } +egui = { git = "https://github.com/emilk/egui", branch = "main" } +egui_extras = { git = "https://github.com/emilk/egui", branch = "main" } +egui_kittest = { git = "https://github.com/emilk/egui", branch = "main" } +emath = { git = "https://github.com/emilk/egui", branch = "main" } # If you fork https://github.com/emilk/egui you can test with: +# eframe = { path = "../egui/crates/eframe" } # egui = { path = "../egui/crates/egui" } +# egui_extras = { path = "../egui/crates/egui_extras" } # egui_kittest = { path = "../egui/crates/egui_kittest" } -# eframe = { path = "../egui/crates/eframe" } # emath = { path = "../egui/crates/emath" } # ---------------------------------------------------------------------------------------- From 76cb363c26f97d56b9f0ddda30b5e83380d2faec Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Fri, 18 Sep 2026 10:50:46 +0200 Subject: [PATCH 2/2] Adapt the examples to the breaking changes on egui `main` * `egui::Event::Screenshot` is gone: `ViewportCommand::Screenshot` now carries a `ScreenshotCallback`, so `save_plot` hands the image back through a shared slot instead of scanning raw events. * `Ui::id` was renamed to `Ui::scope_id`; use `Ui::make_persistent_id` instead. Co-Authored-By: Claude Opus 5 --- examples/linked_axes/src/app.rs | 2 +- examples/save_plot/src/app.rs | 23 +++++++++++++---------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/examples/linked_axes/src/app.rs b/examples/linked_axes/src/app.rs index d76f3f2b..5e1e621f 100644 --- a/examples/linked_axes/src/app.rs +++ b/examples/linked_axes/src/app.rs @@ -46,7 +46,7 @@ impl LinkedAxesExample { pub fn show_plot(&self, ui: &mut egui::Ui) -> Response { ui.style_mut().wrap_mode = Some(TextWrapMode::Extend); - let link_group_id = ui.id().with("linked_demo"); + let link_group_id = ui.make_persistent_id("linked_demo"); ui.horizontal(|ui| { Plot::new("left-top") .data_aspect(1.0) diff --git a/examples/save_plot/src/app.rs b/examples/save_plot/src/app.rs index f0882e6f..37a2417e 100644 --- a/examples/save_plot/src/app.rs +++ b/examples/save_plot/src/app.rs @@ -1,5 +1,8 @@ +use std::sync::Arc; + use eframe::egui; use eframe::egui::Response; +use eframe::egui::mutex::Mutex; use egui_plot::Legend; use egui_plot::Line; use egui_plot::Plot; @@ -8,6 +11,9 @@ use egui_plot::PlotPoints; #[derive(Default)] pub struct SavePlotExample { plot_rect: Option, + + /// Filled in by the screenshot callback, which runs on the integration's thread. + screenshot: Arc>>>, } impl SavePlotExample { @@ -26,14 +32,7 @@ impl SavePlotExample { { // Check for returned screenshot: let ctx = ui.ctx(); - let screenshot = ctx.input(|i| { - for event in &i.raw.events { - if let egui::Event::Screenshot { image, .. } = event { - return Some(std::sync::Arc::clone(image)); - } - } - None - }); + let screenshot = self.screenshot.lock().take(); if let (Some(screenshot), Some(plot_location)) = (screenshot, self.plot_rect) && let Some(mut path) = rfd::FileDialog::new().save_file() { @@ -66,11 +65,15 @@ impl SavePlotExample { inner.response } - #[expect(clippy::unused_self, reason = "required by the example template")] pub fn show_controls(&self, ui: &mut egui::Ui) -> Response { let response = ui.button("Save Plot"); if response.clicked() { - ui.send_viewport_cmd(egui::ViewportCommand::Screenshot(Default::default())); + let ctx = ui.ctx().clone(); + let slot = Arc::clone(&self.screenshot); + ui.ctx().request_screenshot(move |image| { + *slot.lock() = Some(image); + ctx.request_repaint(); + }); } response }