From 74c0a0cb9b14c84f7b64190bfcb743afe4fce2f2 Mon Sep 17 00:00:00 2001 From: lucasmerlin Date: Thu, 25 Jun 2026 20:25:16 +0200 Subject: [PATCH] Add changelog --- CHANGELOG.md | 111 +++++++++++++++++++++++ crates/ecolor/CHANGELOG.md | 4 + crates/eframe/CHANGELOG.md | 23 +++++ crates/egui-wgpu/CHANGELOG.md | 7 ++ crates/egui-winit/CHANGELOG.md | 8 ++ crates/egui_extras/CHANGELOG.md | 8 ++ crates/egui_glow/CHANGELOG.md | 4 + crates/egui_kittest/CHANGELOG.md | 7 ++ crates/emath/CHANGELOG.md | 4 + crates/epaint/CHANGELOG.md | 19 ++++ crates/epaint_default_fonts/CHANGELOG.md | 4 + examples/hello_world_simple/src/main.rs | 9 ++ 12 files changed, 208 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e7c9601d0..c863e03c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,117 @@ This file is updated upon each release. Changes since the last release can be found at or by running the `scripts/generate_changelog.py` script. +## 0.35.0 - 2026-06-25 - Inspection, egui_mcp, classes and improved IME + +### Highlights +- New egui_mcp crate based on eguis new inspection protocol +- Set classes on your `Ui`s to modify widget behavior based on surrounding context +- Improved IME + +### Egui inspection and egui_mcp +This release includes a new inspection protocol for egui. It allows reading the accesskit tree of a running app, as well +as sending events to control it. It's implemented via a new `InspectionPlugin` in the `egui_inspection` crate. +Eframe includes a new `inspection` feature. When enabled, you can enable inspection by launching the app with +`EGUI_INSPECTION=1`. This will cause the app to listen on port 5719. + +The first inspection protocol consumer is [egui_mcp](https://github.com/rerun-io/kittest_inspector/tree/main/crates/egui_mcp). +It's a [mcp](https://modelcontextprotocol.io/docs/getting-started/intro) server that allows your agent to see and use +egui apps. It can be used to have the agent use the app, reproduce bugs and verify its changes. +Install it via `cargo install --git https://github.com/rerun-io/kittest_inspector egui_mcp` and then add it to your +agent via `claude mcp add egui egui-mcp`. + +There is also a plan of adding a general inspection gui using the same protocol, that can e.g. be used to step through +kittest tests frame by frame. + +Here is claude using the mcp to try some of the egui demos (sped up by a lot, claude is slow): +https://github.com/user-attachments/assets/c3dd0456-acfc-428c-8efe-f4a244c9e3ba + +* Add `egui_inspection` protocol and plugin [#8234](https://github.com/emilk/egui/pull/8234) by [@lucasmerlin](https://github.com/lucasmerlin) + +### Classes + +As part of [css like styling](https://github.com/emilk/egui/issues/3284), we've added classes to egui. You can already +use them to e.g. modify widget behavior or styling based on surrounding context. +Add classes to the container: +```rs +ui.scope_builder(UiBuilder::new().with_class("my_container"), |ui| { + ... +}); +``` + +In your widget, check if we're in `my_container`, to e.g. change sizes or colors: +```rs + let in_container = ui.stack().iter().any(|s| s.classes.has("my_container")); +``` + +Today this only works for custom widgets and ui code, but the next step will be a styling system that allows you to modify built +in widget styling based on these classes. + +* Add `Classes` to `UiBuilder` and some Widgets [#7843](https://github.com/emilk/egui/pull/7843) by [@AdrienZianne](https://github.com/AdrienZianne) + +### Better IME composition + +IME visuals received an overhaul, they are now indicated by an underline and properly show the cursor during composition: + +https://github.com/user-attachments/assets/487c7e7c-ef6d-4a86-8dbc-8c71871b4470 + +* Implement proper visuals for IME composition [#8083](https://github.com/emilk/egui/pull/8083) by [@umajho](https://github.com/umajho) + +### ⭐ Added +* Add `Classes` to `UiBuilder` and some Widgets [#7843](https://github.com/emilk/egui/pull/7843) by [@AdrienZianne](https://github.com/AdrienZianne) +* Drag-to-close panels [#8182](https://github.com/emilk/egui/pull/8182) by [@emilk](https://github.com/emilk) +* Add `AtomKind::Layout`, for nesting `AtomLayout` [#8219](https://github.com/emilk/egui/pull/8219) by [@lucasmerlin](https://github.com/lucasmerlin) +* Add `AtomLayout::direction` [#8221](https://github.com/emilk/egui/pull/8221) by [@lucasmerlin](https://github.com/lucasmerlin) +* Make the size of tabs and thin space configurable [#8070](https://github.com/emilk/egui/pull/8070) by [@emilk](https://github.com/emilk) +* Add `subpixel_binning` to `TextOptions` and `FontTweak` [#8072](https://github.com/emilk/egui/pull/8072) by [@emilk](https://github.com/emilk) +* Allow `Atoms` in `Ui::small_button` [#8159](https://github.com/emilk/egui/pull/8159) by [@lucasmerlin](https://github.com/lucasmerlin) +* Atom support for `egui::Window` Titlebar [#8154](https://github.com/emilk/egui/pull/8154) by [@lucasmerlin](https://github.com/lucasmerlin) +* Add `AsId` and `IdSalt` [#8184](https://github.com/emilk/egui/pull/8184) by [@emilk](https://github.com/emilk) +* Add Context::set_cursor_image for OS-level custom cursors [#8155](https://github.com/emilk/egui/pull/8155) by [@all3f0r1](https://github.com/all3f0r1) +* Add `ViewportBuilder::with_monitor` + `ViewportCommand::SetMonitor` [#8140](https://github.com/emilk/egui/pull/8140) by [@Le-Syl21](https://github.com/Le-Syl21) +* Add modifier keys to `egui::Key` [#8127](https://github.com/emilk/egui/pull/8127) by [@Le-Syl21](https://github.com/Le-Syl21) +* Expose interactive rects from the last pass [#8211](https://github.com/emilk/egui/pull/8211) by [@psyche314](https://github.com/psyche314) +* Add `AtomLayout::selectable` for opt-in text selection [#8224](https://github.com/emilk/egui/pull/8224) by [@akagifreeez](https://github.com/akagifreeez) +* Add `LayoutJob::format_at_byte` [#8244](https://github.com/emilk/egui/pull/8244) by [@emilk](https://github.com/emilk) +* Add `atoms()` helpers to get `Atoms` from widgets [#8128](https://github.com/emilk/egui/pull/8128) by [@Nashvill375](https://github.com/Nashvill375) + +### 🔧 Changed +* Improve IME handling, add public method `owns_ime_events` on `Memory` [#7983](https://github.com/emilk/egui/pull/7983) by [@umajho](https://github.com/umajho) +* Use `harfrust` for better kerning and ligatures [#8031](https://github.com/emilk/egui/pull/8031) by [@gcailly](https://github.com/gcailly) +* Rework `Window` margins and set `clip_rect_margin` to zero [#7725](https://github.com/emilk/egui/pull/7725) by [@emilk](https://github.com/emilk) +* Slide panels when animating them [#8175](https://github.com/emilk/egui/pull/8175) by [@emilk](https://github.com/emilk) +* Slow down animation time from 0.1s to 0.2s [#8176](https://github.com/emilk/egui/pull/8176) by [@emilk](https://github.com/emilk) +* Smoother CollapsingHeader animation [#8177](https://github.com/emilk/egui/pull/8177) by [@emilk](https://github.com/emilk) +* Drag-to-scroll: now only on touch screens [#8181](https://github.com/emilk/egui/pull/8181) by [@emilk](https://github.com/emilk) +* `Window`: move only by dragging title bar [#8183](https://github.com/emilk/egui/pull/8183) by [@emilk](https://github.com/emilk) +* Rename `Panel` methods [#8192](https://github.com/emilk/egui/pull/8192) by [@emilk](https://github.com/emilk) +* Panels: double-click resize edge to toggle [#8193](https://github.com/emilk/egui/pull/8193) by [@emilk](https://github.com/emilk) +* Rename `AlphaFromCoverage` to `FontColorTransferFunction` [#8201](https://github.com/emilk/egui/pull/8201) by [@emilk](https://github.com/emilk) +* Smoother collapsed-panel animation [#8202](https://github.com/emilk/egui/pull/8202) by [@emilk](https://github.com/emilk) +* Improve `Debug`-formatting of `Id` in debug-builds [#8190](https://github.com/emilk/egui/pull/8190) by [@emilk](https://github.com/emilk) +* Use strongly typed `CharIndex` and `ByteIndex` + bug fixes [#8245](https://github.com/emilk/egui/pull/8245) by [@emilk](https://github.com/emilk) +* Allow downscaling image in `GetScreenshot` inspection request [#8248](https://github.com/emilk/egui/pull/8248) by [@lucasmerlin](https://github.com/lucasmerlin) +* Announce pressed state of selectable buttons to screen readers [#8130](https://github.com/emilk/egui/pull/8130) by [@antoinecellerier](https://github.com/antoinecellerier) +* Pre-populate font variation axes in the `FontTweak` UI [#8258](https://github.com/emilk/egui/pull/8258) by [@emilk](https://github.com/emilk) +* Make font hinting target configurable via `FontTweak` [#8262](https://github.com/emilk/egui/pull/8262) by [@emilk](https://github.com/emilk) + +### 🔥 Removed +* Remove everything that was marked `#[deprecated]` [#8105](https://github.com/emilk/egui/pull/8105) by [@emilk](https://github.com/emilk) +* Remove 64-bit atomics in main crate [#8037](https://github.com/emilk/egui/pull/8037) by [@kay-lambdadelta](https://github.com/kay-lambdadelta) +* Remove `impl Into` arguments [#8194](https://github.com/emilk/egui/pull/8194) by [@emilk](https://github.com/emilk) + +### 🐛 Fixed +* Don't hide whitespaces in centered and right aligned text edits [#8102](https://github.com/emilk/egui/pull/8102) by [@lucasmerlin](https://github.com/lucasmerlin) +* Don't allow resizing past minimum content size [#8152](https://github.com/emilk/egui/pull/8152) by [@lucasmerlin](https://github.com/lucasmerlin) +* Fix resizing of `Grid` [#8170](https://github.com/emilk/egui/pull/8170) by [@lucasmerlin](https://github.com/lucasmerlin) +* Fix glyph caching on font variations [#8189](https://github.com/emilk/egui/pull/8189) by [@emilk](https://github.com/emilk) +* `Panel`: never overflow available width, nor `max_width` [#8198](https://github.com/emilk/egui/pull/8198) by [@emilk](https://github.com/emilk) +* Fixes color picker hue drift at low alpha values [#8208](https://github.com/emilk/egui/pull/8208) by [@aedm](https://github.com/aedm) +* Fix: ScrollArea layout jitter with floating bars and zoom levels [#7944](https://github.com/emilk/egui/pull/7944) by [@rustbasic](https://github.com/rustbasic) +* Fix #2142 - lost_focus not firing after a mid-frame focus transfer [#8210](https://github.com/emilk/egui/pull/8210) by [@ufoscout](https://github.com/ufoscout) +* Fix label selection in deferred viewports [#8242](https://github.com/emilk/egui/pull/8242) by [@yay](https://github.com/yay) + + ## 0.34.3 - 2026-05-27 * Fix `ScrollArea::scroll_to_*` calls when `stick_to_bottom` is Active [#8033](https://github.com/emilk/egui/pull/8033) by [@AmmarAbouZor](https://github.com/AmmarAbouZor) diff --git a/crates/ecolor/CHANGELOG.md b/crates/ecolor/CHANGELOG.md index e441bf982..340a0c4ae 100644 --- a/crates/ecolor/CHANGELOG.md +++ b/crates/ecolor/CHANGELOG.md @@ -6,6 +6,10 @@ This file is updated upon each release. Changes since the last release can be found at or by running the `scripts/generate_changelog.py` script. +## 0.35.0 - 2026-06-25 +Nothing new + + ## 0.34.3 - 2026-05-27 Nothing new diff --git a/crates/eframe/CHANGELOG.md b/crates/eframe/CHANGELOG.md index faea2d407..d65e3699a 100644 --- a/crates/eframe/CHANGELOG.md +++ b/crates/eframe/CHANGELOG.md @@ -7,6 +7,29 @@ This file is updated upon each release. Changes since the last release can be found at or by running the `scripts/generate_changelog.py` script. +## 0.35.0 - 2026-06-25 +### ⭐ Added +* Add Context::set_cursor_image for OS-level custom cursors [#8155](https://github.com/emilk/egui/pull/8155) by [@all3f0r1](https://github.com/all3f0r1) +* Feat: add `remove_string()` to storage trait [#8264](https://github.com/emilk/egui/pull/8264) by [@mikesk8r](https://github.com/mikesk8r) + +### 🔧 Changed +* Delegate handling of IME interruptions to integrations to fix virtual keyboard flickering on web [#8078](https://github.com/emilk/egui/pull/8078) by [@umajho](https://github.com/umajho) +* Wgpu: Allow configuring VSync and frame latency at runtime [#8114](https://github.com/emilk/egui/pull/8114) by [@emilk](https://github.com/emilk) +* Group `glow` config in a `struct` [#8108](https://github.com/emilk/egui/pull/8108) by [@TapGhoul](https://github.com/TapGhoul) +* Choose restored window monitor by overlap [#8191](https://github.com/emilk/egui/pull/8191) by [@YelovSK](https://github.com/YelovSK) +* Configure wgpu to be low-latency by default [#8203](https://github.com/emilk/egui/pull/8203) by [@lucasmerlin](https://github.com/lucasmerlin) + +### 🔥 Removed +* Remove everything that was marked `#[deprecated]` [#8105](https://github.com/emilk/egui/pull/8105) by [@emilk](https://github.com/emilk) + +### 🐛 Fixed +* Prevent entire page from scrolling out of view in Chrome (WASM) [#7888](https://github.com/emilk/egui/pull/7888) by [@rustbasic](https://github.com/rustbasic) +* Fix crash when parent viewport is hidden [#8226](https://github.com/emilk/egui/pull/8226) by [@kpouer](https://github.com/kpouer) +* Fix "drunk text" bug [#8250](https://github.com/emilk/egui/pull/8250) by [@emilk](https://github.com/emilk) +* Call `logic` even while browser tab is in background [#8257](https://github.com/emilk/egui/pull/8257) by [@lucasmerlin](https://github.com/lucasmerlin) +* Fix macOS wgpu live resize with low-latency surfaces [#8229](https://github.com/emilk/egui/pull/8229) by [@yay](https://github.com/yay) + + ## 0.34.3 - 2026-05-27 * Default `app_id` to `app_name` on native [#8172](https://github.com/emilk/egui/pull/8172) by [@grtlr](https://github.com/grtlr) * Add winit window access to `eframe::Frame` and `CreationContext` [#8205](https://github.com/emilk/egui/pull/8205) by [@emilk](https://github.com/emilk) diff --git a/crates/egui-wgpu/CHANGELOG.md b/crates/egui-wgpu/CHANGELOG.md index f36b8f539..6d0d1085d 100644 --- a/crates/egui-wgpu/CHANGELOG.md +++ b/crates/egui-wgpu/CHANGELOG.md @@ -6,6 +6,13 @@ This file is updated upon each release. Changes since the last release can be found at or by running the `scripts/generate_changelog.py` script. +## 0.35.0 - 2026-06-25 +* Call `pre_present_notify` before presenting [#8089](https://github.com/emilk/egui/pull/8089) by [@dimtpap](https://github.com/dimtpap) +* Wgpu: Allow configuring VSync and frame latency at runtime [#8114](https://github.com/emilk/egui/pull/8114) by [@emilk](https://github.com/emilk) +* Configure wgpu to be low-latency by default [#8203](https://github.com/emilk/egui/pull/8203) by [@lucasmerlin](https://github.com/lucasmerlin) +* Fix "drunk text" bug [#8250](https://github.com/emilk/egui/pull/8250) by [@emilk](https://github.com/emilk) + + ## 0.34.3 - 2026-05-27 * Fix random hangs by improving `wgpu::Surface` lifecycle handling [#8171](https://github.com/emilk/egui/pull/8171) by [@grtlr](https://github.com/grtlr) diff --git a/crates/egui-winit/CHANGELOG.md b/crates/egui-winit/CHANGELOG.md index 58cc9be9e..536294ddc 100644 --- a/crates/egui-winit/CHANGELOG.md +++ b/crates/egui-winit/CHANGELOG.md @@ -5,6 +5,14 @@ This file is updated upon each release. Changes since the last release can be found at or by running the `scripts/generate_changelog.py` script. +## 0.35.0 - 2026-06-25 +* Delegate handling of IME interruptions to integrations to fix virtual keyboard flickering on web [#8078](https://github.com/emilk/egui/pull/8078) by [@umajho](https://github.com/umajho) +* Always enable windows undecorated shadows [#8169](https://github.com/emilk/egui/pull/8169) by [@Wumpf](https://github.com/Wumpf) +* Choose restored window monitor by overlap [#8191](https://github.com/emilk/egui/pull/8191) by [@YelovSK](https://github.com/YelovSK) +* Add `ViewportBuilder::with_monitor` + `ViewportCommand::SetMonitor` [#8140](https://github.com/emilk/egui/pull/8140) by [@Le-Syl21](https://github.com/Le-Syl21) +* Implement proper visuals for IME composition [#8083](https://github.com/emilk/egui/pull/8083) by [@umajho](https://github.com/umajho) + + ## 0.34.3 - 2026-05-27 Nothing new diff --git a/crates/egui_extras/CHANGELOG.md b/crates/egui_extras/CHANGELOG.md index 45c1b9f56..a6b2470a4 100644 --- a/crates/egui_extras/CHANGELOG.md +++ b/crates/egui_extras/CHANGELOG.md @@ -5,6 +5,14 @@ This file is updated upon each release. Changes since the last release can be found at or by running the `scripts/generate_changelog.py` script. +## 0.35.0 - 2026-06-25 +* Improve FileLoader file uri to path handling for windows [#8163](https://github.com/emilk/egui/pull/8163) by [@aconbere](https://github.com/aconbere) +* Add arbitrary request headers to `EhttpLoader` [#8121](https://github.com/emilk/egui/pull/8121) by [@frnsys](https://github.com/frnsys) +* `Column::remainder().clip(true)` now shrinks when available width decreases [#8048](https://github.com/emilk/egui/pull/8048) by [@germ4n](https://github.com/germ4n) +* Respect `image`'s orientation [#8240](https://github.com/emilk/egui/pull/8240) by [@mattfbacon](https://github.com/mattfbacon) +* Remove 64 bit atomics in egui_extras [#8263](https://github.com/emilk/egui/pull/8263) by [@kay-lambdadelta](https://github.com/kay-lambdadelta) + + ## 0.34.3 - 2026-05-27 Nothing new diff --git a/crates/egui_glow/CHANGELOG.md b/crates/egui_glow/CHANGELOG.md index 83cf74472..988189427 100644 --- a/crates/egui_glow/CHANGELOG.md +++ b/crates/egui_glow/CHANGELOG.md @@ -6,6 +6,10 @@ Changes since the last release can be found at or by running the `scripts/generate_changelog.py` script. +## 0.35.0 - 2026-06-25 +* Add `HarnessBuilder::with_render_options()` (closes #7630) [#8060](https://github.com/emilk/egui/pull/8060) by [@MichaelGrupp](https://github.com/MichaelGrupp) +* Add `Harness::spawn_eframe_app` [#8120](https://github.com/emilk/egui/pull/8120) by [@emilk](https://github.com/emilk) +* Exclude `take_app` from `wasm32` in `egui_kittest` [#8178](https://github.com/emilk/egui/pull/8178) by [@grtlr](https://github.com/grtlr) +* Handle `ViewportCommand::Screenshot` in kittest [#8256](https://github.com/emilk/egui/pull/8256) by [@lucasmerlin](https://github.com/lucasmerlin) + + ## 0.34.3 - 2026-05-27 Nothing new diff --git a/crates/emath/CHANGELOG.md b/crates/emath/CHANGELOG.md index 1c69ee38b..4aae540c5 100644 --- a/crates/emath/CHANGELOG.md +++ b/crates/emath/CHANGELOG.md @@ -6,6 +6,10 @@ This file is updated upon each release. Changes since the last release can be found at or by running the `scripts/generate_changelog.py` script. +## 0.35.0 - 2026-06-25 +Nothing new + + ## 0.34.3 - 2026-05-27 Nothing new diff --git a/crates/epaint/CHANGELOG.md b/crates/epaint/CHANGELOG.md index 7d0781d52..4bb868bd3 100644 --- a/crates/epaint/CHANGELOG.md +++ b/crates/epaint/CHANGELOG.md @@ -5,6 +5,25 @@ This file is updated upon each release. Changes since the last release can be found at or by running the `scripts/generate_changelog.py` script. +## 0.35.0 - 2026-06-25 +### ⭐ Added +* Make the size of tabs and thin space configurable [#8070](https://github.com/emilk/egui/pull/8070) by [@emilk](https://github.com/emilk) +* Add `subpixel_binning` to `TextOptions` and `FontTweak` [#8072](https://github.com/emilk/egui/pull/8072) by [@emilk](https://github.com/emilk) +* Add `LayoutJob::format_at_byte` [#8244](https://github.com/emilk/egui/pull/8244) by [@emilk](https://github.com/emilk) + +### 🔧 Changed +* Use `harfrust` for better kerning and ligatures [#8031](https://github.com/emilk/egui/pull/8031) by [@gcailly](https://github.com/gcailly) +* Rename `AlphaFromCoverage` to `FontColorTransferFunction` [#8201](https://github.com/emilk/egui/pull/8201) by [@emilk](https://github.com/emilk) +* Use strongly typed `CharIndex` and `ByteIndex` + bug fixes [#8245](https://github.com/emilk/egui/pull/8245) by [@emilk](https://github.com/emilk) +* Make font hinting target configurable via `FontTweak` [#8262](https://github.com/emilk/egui/pull/8262) by [@emilk](https://github.com/emilk) + +### 🔥 Removed +* Remove `impl Into` arguments [#8194](https://github.com/emilk/egui/pull/8194) by [@emilk](https://github.com/emilk) + +### 🐛 Fixed +* Fix glyph caching on font variations [#8189](https://github.com/emilk/egui/pull/8189) by [@emilk](https://github.com/emilk) + + ## 0.34.3 - 2026-05-27 Nothing new diff --git a/crates/epaint_default_fonts/CHANGELOG.md b/crates/epaint_default_fonts/CHANGELOG.md index 35afd930b..67a0a9234 100644 --- a/crates/epaint_default_fonts/CHANGELOG.md +++ b/crates/epaint_default_fonts/CHANGELOG.md @@ -5,6 +5,10 @@ This file is updated upon each release. Changes since the last release can be found at or by running the `scripts/generate_changelog.py` script. +## 0.35.0 - 2026-06-25 +Nothing new + + ## 0.34.3 - 2026-05-27 Nothing new diff --git a/examples/hello_world_simple/src/main.rs b/examples/hello_world_simple/src/main.rs index e3660d87b..531ff5f68 100644 --- a/examples/hello_world_simple/src/main.rs +++ b/examples/hello_world_simple/src/main.rs @@ -2,6 +2,8 @@ #![expect(rustdoc::missing_crate_level_docs)] // it's an example use eframe::egui; +use eframe::egui::UiBuilder; +use eframe::egui::widget_style::HasClasses; fn main() -> eframe::Result { env_logger::init(); // Log to stderr (if you run with `RUST_LOG=debug`). @@ -17,6 +19,13 @@ fn main() -> eframe::Result { eframe::run_ui_native("My egui App", options, move |ui, _frame| { egui::CentralPanel::default().show(ui, |ui| { + + ui.scope_builder(UiBuilder::new().with_class("my_container"), |ui| { + + let in_container = ui.stack().iter().any(|s| s.classes.has("my_container")); + + }); + ui.heading("My egui Application"); ui.horizontal(|ui| { let name_label = ui.label("Your name: ");