From 59d71831fd43139bf9b427b779a241099b9c9826 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Thu, 26 Sep 2024 15:13:21 +0200 Subject: [PATCH] Release 0.29.0 - Multipass, `UiBuilder`, & visual improvements --- CHANGELOG.md | 99 ++++++++++++++++++++++++ Cargo.lock | 28 +++---- Cargo.toml | 24 +++--- RELEASES.md | 6 +- crates/ecolor/CHANGELOG.md | 4 + crates/eframe/CHANGELOG.md | 35 +++++++++ crates/egui-wgpu/CHANGELOG.md | 14 ++++ crates/egui-winit/CHANGELOG.md | 5 ++ crates/egui_extras/CHANGELOG.md | 18 +++++ crates/egui_glow/CHANGELOG.md | 7 ++ crates/epaint/CHANGELOG.md | 15 ++++ crates/epaint_default_fonts/CHANGELOG.md | 6 +- scripts/generate_changelog.py | 36 +++++---- 13 files changed, 255 insertions(+), 42 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ac42b232bff..69437e03cc1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,105 @@ 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.29.0 - 2024-09-26 - Multipass, `UiBuilder`, & visual improvements +### ✨ Highlights +This release adds initial support for multi-pass layout, which is a tool to circumvent [a common limitation of immediate mode](https://github.com/emilk/egui#layout). +You can use the new `UiBuilder::sizing_pass` ([#4969](https://github.com/emilk/egui/pull/4969)) to instruct the `Ui` and widgets to shrink to their minimum size, then store that size. +Then call the new `Context::request_discard` ([#5059](https://github.com/emilk/egui/pull/5059)) to discard the visual output and do another _pass_ immediately after the current finishes. +Together, this allows more advanced layouts that is normally not possible in immediate mode. +So far this is only used by `egui::Grid` to hide the "first-frame jitters" that would sometimes happen before, but 3rd party libraries can also use it to do much more advanced things. + +There is also a new `UiBuilder` for more flexible construction of `Ui`s ([#4969](https://github.com/emilk/egui/pull/4969)). +By specifying a `sense` for the `Ui` you can make it respond to clicks and drags, reading the result with the new `Ui::response` ([#5054](https://github.com/emilk/egui/pull/5054)). +Among other things, you can use this to create buttons that contain arbitrary widgets. + +0.29 also adds improve support for automatic switching between light and dark mode. +You can now set up a custom `Style` for both dark and light mode, and have egui follow the system preference ([#4744](https://github.com/emilk/egui/pull/4744) [#4860](https://github.com/emilk/egui/pull/4860)). + +There also has been several small improvements to the look of egui: +* Fix vertical centering of text (e.g. in buttons) ([#5117](https://github.com/emilk/egui/pull/5117)) +* Sharper rendering of lines and outlines ([#4943](https://github.com/emilk/egui/pull/4943)) +* Nicer looking text selection, especially in light mode ([#5017](https://github.com/emilk/egui/pull/5017)) + +#### The new text selection +New text selection in light mode +New text selection in dark mode + + +#### What text selection used to look like +Old text selection in light mode +Old text selection in dark mode + +### 🧳 Migration +* `id_source` is now called `id_salt` everywhere ([#5025](https://github.com/emilk/egui/pull/5025)) +* `Ui::new` now takes a `UiBuilder` ([#4969](https://github.com/emilk/egui/pull/4969)) +* Deprecated (replaced with `UiBuilder`): + * `ui.add_visible_ui` + * `ui.allocate_ui_at_rect` + * `ui.child_ui` + * `ui.child_ui_with_id_source` + * `ui.push_stack_info` + +### ⭐ Added +* Create a `UiBuilder` for building `Ui`s [#4969](https://github.com/emilk/egui/pull/4969) by [@emilk](https://github.com/emilk) +* Add `egui::Sides` for adding UI on left and right sides [#5036](https://github.com/emilk/egui/pull/5036) by [@emilk](https://github.com/emilk) +* Make light & dark visuals customizable when following the system theme [#4744](https://github.com/emilk/egui/pull/4744) [#4860](https://github.com/emilk/egui/pull/4860) by [@bash](https://github.com/bash) +* Interactive `Ui`:s: add `UiBuilder::sense` and `Ui::response` [#5054](https://github.com/emilk/egui/pull/5054) by [@lucasmerlin](https://github.com/lucasmerlin) +* Add a menu button with text and image [#4748](https://github.com/emilk/egui/pull/4748) by [@NicolasBircksZR](https://github.com/NicolasBircksZR) +* Add `Ui::columns_const()` [#4764](https://github.com/emilk/egui/pull/4764) by [@v0x0g](https://github.com/v0x0g) +* Add `Slider::max_decimals_opt` [#4953](https://github.com/emilk/egui/pull/4953) by [@bircni](https://github.com/bircni) +* Add `Label::halign` [#4975](https://github.com/emilk/egui/pull/4975) by [@rustbasic](https://github.com/rustbasic) +* Add `ui.shrink_clip_rect` [#5068](https://github.com/emilk/egui/pull/5068) by [@emilk](https://github.com/emilk) +* Add `ScrollArea::scroll_bar_rect` [#5070](https://github.com/emilk/egui/pull/5070) by [@emilk](https://github.com/emilk) +* Add `Options::input_options` for click-delay etc [#4942](https://github.com/emilk/egui/pull/4942) by [@girtsf](https://github.com/girtsf) +* Add `WidgetType::RadioGroup` [#5081](https://github.com/emilk/egui/pull/5081) by [@bash](https://github.com/bash) +* Add return value to `with_accessibility_parent` [#5083](https://github.com/emilk/egui/pull/5083) by [@bash](https://github.com/bash) +* Add `Ui::with_visual_transform` [#5055](https://github.com/emilk/egui/pull/5055) by [@lucasmerlin](https://github.com/lucasmerlin) +* Make `Slider` and `DragValue` compatible with `NonZeroUsize` etc [#5105](https://github.com/emilk/egui/pull/5105) by [@emilk](https://github.com/emilk) +* Add `Context::request_discard` for multi-pass layouts [#5059](https://github.com/emilk/egui/pull/5059) by [@emilk](https://github.com/emilk) +* Add UI to modify `FontTweak` live [#5125](https://github.com/emilk/egui/pull/5125) by [@emilk](https://github.com/emilk) +* Add `Response::intrinsic_size` to enable better layout in 3rd party crates [#5082](https://github.com/emilk/egui/pull/5082) by [@lucasmerlin](https://github.com/lucasmerlin) +* Add support for mipmap textures [#5146](https://github.com/emilk/egui/pull/5146) by [@nolanderc](https://github.com/nolanderc) +* Add `DebugOptions::show_unaligned` [#5165](https://github.com/emilk/egui/pull/5165) by [@emilk](https://github.com/emilk) +* Add `Slider::clamping` for precise clamp control [#5119](https://github.com/emilk/egui/pull/5119) by [@emilk](https://github.com/emilk) + +### 🚀 Performance +* Optimize `Color32::from_rgba_unmultiplied` with LUT [#5088](https://github.com/emilk/egui/pull/5088) by [@YgorSouza](https://github.com/YgorSouza) + +### 🔧 Changed +* Rename `id_source` to `id_salt` [#5025](https://github.com/emilk/egui/pull/5025) by [@bircni](https://github.com/bircni) +* Avoid some `Id` clashes by seeding auto-ids with child id [#4840](https://github.com/emilk/egui/pull/4840) by [@ironpeak](https://github.com/ironpeak) +* Nicer looking text selection, especially in light mode [#5017](https://github.com/emilk/egui/pull/5017) by [@emilk](https://github.com/emilk) +* Fix blurry lines by aligning to pixel grid [#4943](https://github.com/emilk/egui/pull/4943) by [@juancampa](https://github.com/juancampa) +* Center-align all text vertically [#5117](https://github.com/emilk/egui/pull/5117) by [@emilk](https://github.com/emilk) +* Clamp margin values in `Margin::ui` [#4873](https://github.com/emilk/egui/pull/4873) by [@rustbasic](https://github.com/rustbasic) +* Make `scroll_to_*` animations configurable [#4305](https://github.com/emilk/egui/pull/4305) by [@lucasmerlin](https://github.com/lucasmerlin) +* Update `Button` to correctly align contained image [#4891](https://github.com/emilk/egui/pull/4891) by [@PrimmR](https://github.com/PrimmR) +* Deprecate `ahash` re-exports [#4979](https://github.com/emilk/egui/pull/4979) by [@oscargus](https://github.com/oscargus) +* Fix: Ensures correct IME behavior when the text input area gains or loses focus [#4896](https://github.com/emilk/egui/pull/4896) by [@rustbasic](https://github.com/rustbasic) +* Enable rustdoc `generate-link-to-definition` feature on docs.rs [#5030](https://github.com/emilk/egui/pull/5030) by [@GuillaumeGomez](https://github.com/GuillaumeGomez) +* Make some `Memory` methods public [#5046](https://github.com/emilk/egui/pull/5046) by [@bircni](https://github.com/bircni) +* Deprecate `ui.set_sizing_pass` [#5074](https://github.com/emilk/egui/pull/5074) by [@emilk](https://github.com/emilk) +* Export module `egui::frame` [#5087](https://github.com/emilk/egui/pull/5087) by [@simgt](https://github.com/simgt) +* Use `log` crate instead of `eprintln` & remove some unwraps [#5010](https://github.com/emilk/egui/pull/5010) by [@bircni](https://github.com/bircni) +* Fix: `Event::Copy` and `Event::Cut` behave as if they select the entire text when there is no selection [#5115](https://github.com/emilk/egui/pull/5115) by [@rustbasic](https://github.com/rustbasic) + +### 🐛 Fixed +* Prevent text shrinking in tooltips; round wrap-width to integer [#5161](https://github.com/emilk/egui/pull/5161) by [@emilk](https://github.com/emilk) +* Fix bug causing tooltips with dynamic content to shrink [#5168](https://github.com/emilk/egui/pull/5168) by [@emilk](https://github.com/emilk) +* Remove some debug asserts [#4826](https://github.com/emilk/egui/pull/4826) by [@emilk](https://github.com/emilk) +* Handle the IME event first in `TextEdit` to fix some bugs [#4794](https://github.com/emilk/egui/pull/4794) by [@rustbasic](https://github.com/rustbasic) +* Slider: round to decimals after applying `step_by` [#4822](https://github.com/emilk/egui/pull/4822) by [@AurevoirXavier](https://github.com/AurevoirXavier) +* Fix: hint text follows the alignment set on the `TextEdit` [#4889](https://github.com/emilk/egui/pull/4889) by [@PrimmR](https://github.com/PrimmR) +* Request focus on a `TextEdit` when clicked [#4991](https://github.com/emilk/egui/pull/4991) by [@Zoxc](https://github.com/Zoxc) +* Fix `Id` clash in `Frame` styling widget [#4967](https://github.com/emilk/egui/pull/4967) by [@YgorSouza](https://github.com/YgorSouza) +* Prevent `ScrollArea` contents from exceeding the container size [#5006](https://github.com/emilk/egui/pull/5006) by [@DouglasDwyer](https://github.com/DouglasDwyer) +* Fix bug in size calculation of truncated text [#5076](https://github.com/emilk/egui/pull/5076) by [@emilk](https://github.com/emilk) +* Fix: Make sure `RawInput::take` clears all events, like it says it does [#5104](https://github.com/emilk/egui/pull/5104) by [@emilk](https://github.com/emilk) +* Fix `DragValue` range clamping [#5118](https://github.com/emilk/egui/pull/5118) by [@emilk](https://github.com/emilk) +* Fix: panic when dragging window between monitors of different pixels_per_point [#4868](https://github.com/emilk/egui/pull/4868) by [@rustbasic](https://github.com/rustbasic) + + ## 0.28.1 - 2024-07-05 - Tooltip tweaks ### ⭐ Added * Add `Image::uri()` [#4720](https://github.com/emilk/egui/pull/4720) by [@rustbasic](https://github.com/rustbasic) diff --git a/Cargo.lock b/Cargo.lock index 2c509d7462b..5fdfab95d28 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1166,7 +1166,7 @@ checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53" [[package]] name = "ecolor" -version = "0.28.1" +version = "0.29.0" dependencies = [ "bytemuck", "cint", @@ -1178,7 +1178,7 @@ dependencies = [ [[package]] name = "eframe" -version = "0.28.1" +version = "0.29.0" dependencies = [ "ahash", "bytemuck", @@ -1218,7 +1218,7 @@ dependencies = [ [[package]] name = "egui" -version = "0.28.1" +version = "0.29.0" dependencies = [ "accesskit", "ahash", @@ -1235,7 +1235,7 @@ dependencies = [ [[package]] name = "egui-wgpu" -version = "0.28.1" +version = "0.29.0" dependencies = [ "ahash", "bytemuck", @@ -1253,7 +1253,7 @@ dependencies = [ [[package]] name = "egui-winit" -version = "0.28.1" +version = "0.29.0" dependencies = [ "accesskit_winit", "ahash", @@ -1273,7 +1273,7 @@ dependencies = [ [[package]] name = "egui_demo_app" -version = "0.28.1" +version = "0.29.0" dependencies = [ "bytemuck", "chrono", @@ -1298,7 +1298,7 @@ dependencies = [ [[package]] name = "egui_demo_lib" -version = "0.28.1" +version = "0.29.0" dependencies = [ "chrono", "criterion", @@ -1311,7 +1311,7 @@ dependencies = [ [[package]] name = "egui_extras" -version = "0.28.1" +version = "0.29.0" dependencies = [ "ahash", "chrono", @@ -1330,7 +1330,7 @@ dependencies = [ [[package]] name = "egui_glow" -version = "0.28.1" +version = "0.29.0" dependencies = [ "ahash", "bytemuck", @@ -1370,7 +1370,7 @@ checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "emath" -version = "0.28.1" +version = "0.29.0" dependencies = [ "bytemuck", "document-features", @@ -1445,7 +1445,7 @@ dependencies = [ [[package]] name = "epaint" -version = "0.28.1" +version = "0.29.0" dependencies = [ "ab_glyph", "ahash", @@ -1466,7 +1466,7 @@ dependencies = [ [[package]] name = "epaint_default_fonts" -version = "0.28.1" +version = "0.29.0" [[package]] name = "equivalent" @@ -3069,7 +3069,7 @@ checksum = "22686f4785f02a4fcc856d3b3bb19bf6c8160d103f7a99cc258bddd0251dc7f2" [[package]] name = "popups" -version = "0.28.1" +version = "0.29.0" dependencies = [ "eframe", "env_logger", @@ -5026,7 +5026,7 @@ checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" [[package]] name = "xtask" -version = "0.28.1" +version = "0.29.0" [[package]] name = "yaml-rust" diff --git a/Cargo.toml b/Cargo.toml index b8e02f3fdbe..ecec4fcca3c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,7 +23,7 @@ members = [ edition = "2021" license = "MIT OR Apache-2.0" rust-version = "1.76" -version = "0.28.1" +version = "0.29.0" [profile.release] @@ -54,17 +54,17 @@ opt-level = 2 [workspace.dependencies] -emath = { version = "0.28.1", path = "crates/emath", default-features = false } -ecolor = { version = "0.28.1", path = "crates/ecolor", default-features = false } -epaint = { version = "0.28.1", path = "crates/epaint", default-features = false } -epaint_default_fonts = { version = "0.28.1", path = "crates/epaint_default_fonts" } -egui = { version = "0.28.1", path = "crates/egui", default-features = false } -egui-winit = { version = "0.28.1", path = "crates/egui-winit", default-features = false } -egui_extras = { version = "0.28.1", path = "crates/egui_extras", default-features = false } -egui-wgpu = { version = "0.28.1", path = "crates/egui-wgpu", default-features = false } -egui_demo_lib = { version = "0.28.1", path = "crates/egui_demo_lib", default-features = false } -egui_glow = { version = "0.28.1", path = "crates/egui_glow", default-features = false } -eframe = { version = "0.28.1", path = "crates/eframe", default-features = false } +emath = { version = "0.29.0", path = "crates/emath", default-features = false } +ecolor = { version = "0.29.0", path = "crates/ecolor", default-features = false } +epaint = { version = "0.29.0", path = "crates/epaint", default-features = false } +epaint_default_fonts = { version = "0.29.0", path = "crates/epaint_default_fonts" } +egui = { version = "0.29.0", path = "crates/egui", default-features = false } +egui-winit = { version = "0.29.0", path = "crates/egui-winit", default-features = false } +egui_extras = { version = "0.29.0", path = "crates/egui_extras", default-features = false } +egui-wgpu = { version = "0.29.0", path = "crates/egui-wgpu", default-features = false } +egui_demo_lib = { version = "0.29.0", path = "crates/egui_demo_lib", default-features = false } +egui_glow = { version = "0.29.0", path = "crates/egui_glow", default-features = false } +eframe = { version = "0.29.0", path = "crates/eframe", default-features = false } ahash = { version = "0.8.11", default-features = false, features = [ "no-rng", # we don't need DOS-protection, so we let users opt-in to it instead diff --git a/RELEASES.md b/RELEASES.md index 99aec8ef382..b3777a3aedc 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -54,12 +54,13 @@ We don't update the MSRV in a patch release, unless we really, really need to. * [ ] write a short release note that fits in a tweet * [ ] record gif for `CHANGELOG.md` release note (and later twitter post) * [ ] update changelogs using `scripts/generate_changelog.py --write` - - For major releases, always diff to the latest MAJOR release, e.g. `--commit-range 0.27.0..HEAD` + - For major releases, always diff to the latest MAJOR release, e.g. `--commit-range 0.29.0..HEAD` * [ ] bump version numbers in workspace `Cargo.toml` ## Actual release I usually do this all on the `master` branch, but doing it in a release branch is also fine, as long as you remember to merge it into `master` later. +* [ ] Run `typos` * [ ] `git commit -m 'Release 0.x.0 - summary'` * [ ] `cargo publish` (see below) * [ ] `git tag -a 0.x.0 -m 'Release 0.x.0 - summary'` @@ -74,8 +75,8 @@ I usually do this all on the `master` branch, but doing it in a release branch i ``` (cd crates/emath && cargo publish --quiet) && echo "✅ emath" (cd crates/ecolor && cargo publish --quiet) && echo "✅ ecolor" -(cd crates/epaint && cargo publish --quiet) && echo "✅ epaint" (cd crates/epaint_default_fonts && cargo publish --quiet) && echo "✅ epaint_default_fonts" +(cd crates/epaint && cargo publish --quiet) && echo "✅ epaint" (cd crates/egui && cargo publish --quiet) && echo "✅ egui" (cd crates/egui-winit && cargo publish --quiet) && echo "✅ egui-winit" (cd crates/egui_extras && cargo publish --quiet) && echo "✅ egui_extras" @@ -95,4 +96,5 @@ I usually do this all on the `master` branch, but doing it in a release branch i ## After release * [ ] publish new `eframe_template` * [ ] publish new `egui_plot` +* [ ] publish new `egui_table` * [ ] publish new `egui_tiles` diff --git a/crates/ecolor/CHANGELOG.md b/crates/ecolor/CHANGELOG.md index 6b374869f98..27280c70bfb 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.29.0 - 2024-09-26 +* Document the fact that the `hex_color!` macro is not `const` [#5169](https://github.com/emilk/egui/pull/5169) by [@YgorSouza](https://github.com/YgorSouza) + + ## 0.28.1 - 2024-07-05 Nothing new diff --git a/crates/eframe/CHANGELOG.md b/crates/eframe/CHANGELOG.md index f57b1f61eea..ff54dc2e83d 100644 --- a/crates/eframe/CHANGELOG.md +++ b/crates/eframe/CHANGELOG.md @@ -7,6 +7,41 @@ 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.29.0 - 2024-09-26 - `winit` 0.30 & fix mobile text input +### ✨ Highlights +* Upgrade winit to 0.30 ([#4849](https://github.com/emilk/egui/pull/4849) [#4939](https://github.com/emilk/egui/pull/4939)) +* Fix virtual keyboard on (mobile) web ([#4848](https://github.com/emilk/egui/pull/4848) [#4855](https://github.com/emilk/egui/pull/4855)) + +### 🧳 Migration +* `WebRunner::start` now expects a `HtmlCanvasElement` rather than the id of it ([#4780](https://github.com/emilk/egui/pull/4780)) +* `NativeOptions::follow_system_theme` and `default_theme` is gone, and is now in `egui::Options` instead ([#4860](https://github.com/emilk/egui/pull/4860) by [@bash](https://github.com/bash)) + +### ⭐ Added +* Conditionally propagate web events using a filter in WebOptions [#5056](https://github.com/emilk/egui/pull/5056) by [@liamrosenfeld](https://github.com/liamrosenfeld) + +### 🔧 Changed +* Pass `HtmlCanvasElement ` element directly in `WebRunner::start` [#4780](https://github.com/emilk/egui/pull/4780) by [@jprochazk](https://github.com/jprochazk) +* Upgrade winit to 0.30.2 [#4849](https://github.com/emilk/egui/pull/4849) [#4939](https://github.com/emilk/egui/pull/4939) by [@ArthurBrussee](https://github.com/ArthurBrussee) +* Allow non-`static` `eframe::App` lifetime [#5060](https://github.com/emilk/egui/pull/5060) by [@timstr](https://github.com/timstr) +* Improve `glow` context switching [#4814](https://github.com/emilk/egui/pull/4814) by [@rustbasic](https://github.com/rustbasic) +* Ignore viewport size/position on iOS [#4922](https://github.com/emilk/egui/pull/4922) by [@frederik-uni](https://github.com/frederik-uni) +* Update `web-sys` & `wasm-bindgen` [#4980](https://github.com/emilk/egui/pull/4980) by [@bircni](https://github.com/bircni) +* Remove the need for setting `web_sys_unstable_apis` [#5000](https://github.com/emilk/egui/pull/5000) by [@emilk](https://github.com/emilk) +* Remove the `directories` dependency [#4904](https://github.com/emilk/egui/pull/4904) by [@YgorSouza](https://github.com/YgorSouza) + +### 🐛 Fixed +* Fix: call `save` when hiding web tab, and `update` when focusing it [#5114](https://github.com/emilk/egui/pull/5114) by [@emilk](https://github.com/emilk) +* Force canvas/text input focus on touch for iOS web browsers [#4848](https://github.com/emilk/egui/pull/4848) by [@BKSalman](https://github.com/BKSalman) +* Fix virtual keyboard on (mobile) web [#4855](https://github.com/emilk/egui/pull/4855) by [@micmonay](https://github.com/micmonay) +* Fix: Backspace not working after IME input [#4912](https://github.com/emilk/egui/pull/4912) by [@rustbasic](https://github.com/rustbasic) +* Fix iOS build, and add iOS step to CI [#4898](https://github.com/emilk/egui/pull/4898) by [@lucasmerlin](https://github.com/lucasmerlin) +* Fix iOS compilation of eframe [#4851](https://github.com/emilk/egui/pull/4851) by [@ardocrat](https://github.com/ardocrat) +* Fix crash when changing viewport settings [#4862](https://github.com/emilk/egui/pull/4862) by [@pm100](https://github.com/pm100) +* Fix eframe centering on multiple monitor systems [#4919](https://github.com/emilk/egui/pull/4919) by [@VinTarZ](https://github.com/VinTarZ) +* Fix viewport not working when minimized [#5042](https://github.com/emilk/egui/pull/5042) by [@rustbasic](https://github.com/rustbasic) +* Clarified `eframe::run_simple_native()` persistence [#4846](https://github.com/emilk/egui/pull/4846) by [@tpstevens](https://github.com/tpstevens) + + ## 0.28.1 - 2024-07-05 * Web: only capture clicks/touches when actually over canvas [#4775](https://github.com/emilk/egui/pull/4775) by [@lucasmerlin](https://github.com/lucasmerlin) diff --git a/crates/egui-wgpu/CHANGELOG.md b/crates/egui-wgpu/CHANGELOG.md index 97a19d6105d..e254517b1c9 100644 --- a/crates/egui-wgpu/CHANGELOG.md +++ b/crates/egui-wgpu/CHANGELOG.md @@ -6,6 +6,20 @@ 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.29.0 - 2024-09-26 - `wgpu` 22.0 +### ⭐ Added +* Add opt-out `fragile-send-sync-non-atomic-wasm` feature for wgpu [#5098](https://github.com/emilk/egui/pull/5098) by [@9SMTM6](https://github.com/9SMTM6) + +### 🔧 Changed +* Upgrade to wgpu 22.0.0 [#4847](https://github.com/emilk/egui/pull/4847) by [@KeKsBoTer](https://github.com/KeKsBoTer) +* Introduce dithering to reduce banding [#4497](https://github.com/emilk/egui/pull/4497) by [@jwagner](https://github.com/jwagner) +* Ensure that `WgpuConfiguration` is `Send + Sync` [#4803](https://github.com/emilk/egui/pull/4803) by [@murl-digital](https://github.com/murl-digital) +* Wgpu render pass on paint callback has now `'static` lifetime [#5149](https://github.com/emilk/egui/pull/5149) by [@Wumpf](https://github.com/Wumpf) + +### 🐛 Fixed +* Update sampler along with texture on wgpu backend [#5122](https://github.com/emilk/egui/pull/5122) by [@valadaptive](https://github.com/valadaptive) + + ## 0.28.1 - 2024-07-05 Nothing new diff --git a/crates/egui-winit/CHANGELOG.md b/crates/egui-winit/CHANGELOG.md index 3b7faf14559..785c57b9404 100644 --- a/crates/egui-winit/CHANGELOG.md +++ b/crates/egui-winit/CHANGELOG.md @@ -5,6 +5,11 @@ 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.29.0 - 2024-09-26 - `winit` 0.30 +* Upgrade to `winit` 0.30 [#4849](https://github.com/emilk/egui/pull/4849) [#4939](https://github.com/emilk/egui/pull/4939) by [@ArthurBrussee](https://github.com/ArthurBrussee) +* Fix: Backspace not working after IME input [#4912](https://github.com/emilk/egui/pull/4912) by [@rustbasic](https://github.com/rustbasic) + + ## 0.28.1 - 2024-07-05 Nothing new diff --git a/crates/egui_extras/CHANGELOG.md b/crates/egui_extras/CHANGELOG.md index d19b9c6dd78..27f23ef4ea9 100644 --- a/crates/egui_extras/CHANGELOG.md +++ b/crates/egui_extras/CHANGELOG.md @@ -5,6 +5,24 @@ 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.29.0 - 2024-09-26 +### ⭐ Added +* Add `TableRow::set_hovered` [#4820](https://github.com/emilk/egui/pull/4820) by [@addiswebb](https://github.com/addiswebb) +* Add `TableBuilder::id_salt` [#5022](https://github.com/emilk/egui/pull/5022) by [@emilk](https://github.com/emilk) +* Add `TableBuilder::animate_scrolling` [#5159](https://github.com/emilk/egui/pull/5159) by [@ecpost](https://github.com/ecpost) + +### 🔧 Changed +* Truncate text in clipped `Table` columns [#5023](https://github.com/emilk/egui/pull/5023) by [@emilk](https://github.com/emilk) +* Change default `max_scroll_height` of `egui::Table` to `f32::INFINITY` [#4817](https://github.com/emilk/egui/pull/4817) by [@abey79](https://github.com/abey79) +* Return `ScrollAreaOutput` from `Table::body` [#4829](https://github.com/emilk/egui/pull/4829) by [@frederik-uni](https://github.com/frederik-uni) +* Use `Style`'s font size in `egui_extras::syntax_highlighting` [#5090](https://github.com/emilk/egui/pull/5090) by [@lampsitter](https://github.com/lampsitter) + +### 🐛 Fixed +* Make sure SVGs are crisp [#4823](https://github.com/emilk/egui/pull/4823) by [@AurevoirXavier](https://github.com/AurevoirXavier) +* Fix file mime from path (wrong feature name) [#4933](https://github.com/emilk/egui/pull/4933) by [@rustbasic](https://github.com/rustbasic) +* Fix compilation of `egui_extras` without `serde` feature [#5014](https://github.com/emilk/egui/pull/5014) by [@emilk](https://github.com/emilk) + + ## 0.28.1 - 2024-07-05 * Make `serde` a default (opt-out) feature of `egui_extras` [#4786](https://github.com/emilk/egui/pull/4786) by [@emilk](https://github.com/emilk) diff --git a/crates/egui_glow/CHANGELOG.md b/crates/egui_glow/CHANGELOG.md index 2df31fbf8bf..6ab4aee2207 100644 --- a/crates/egui_glow/CHANGELOG.md +++ b/crates/egui_glow/CHANGELOG.md @@ -6,6 +6,13 @@ Changes since the last release can be found at or by running the `scripts/generate_changelog.py` script. +## 0.29.0 - 2024-09-26 +### 🚀 Performance +* Optimize `Color32::from_rgba_unmultiplied` with LUT [#5088](https://github.com/emilk/egui/pull/5088) by [@YgorSouza](https://github.com/YgorSouza) + +### 🔧 Changed +* Fix blurry lines by aligning to pixel grid [#4943](https://github.com/emilk/egui/pull/4943) by [@juancampa](https://github.com/juancampa) +* Better vertical text alignment [#5117](https://github.com/emilk/egui/pull/5117) by [@emilk](https://github.com/emilk) +* Deprecate `ahash` re-exports [#4979](https://github.com/emilk/egui/pull/4979) by [@oscargus](https://github.com/oscargus) + +### 🐛 Fixed +* Fix bug in size calculation of truncated text [#5076](https://github.com/emilk/egui/pull/5076) by [@emilk](https://github.com/emilk) +* Fix text sometime line-breaking or truncating too early [#5077](https://github.com/emilk/egui/pull/5077) by [@emilk](https://github.com/emilk) +* Prevent text shrinking in tooltips; round wrap-width to integer [#5161](https://github.com/emilk/egui/pull/5161) by [@emilk](https://github.com/emilk) + + ## 0.28.1 - 2024-07-05 Nothing new diff --git a/crates/epaint_default_fonts/CHANGELOG.md b/crates/epaint_default_fonts/CHANGELOG.md index 0b335fe25b5..b41f316d39f 100644 --- a/crates/epaint_default_fonts/CHANGELOG.md +++ b/crates/epaint_default_fonts/CHANGELOG.md @@ -5,5 +5,9 @@ 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.29.0 - 2024-09-26 +* Nothing new + + ## 0.28.1 - 2024-07-05 -Crate added. +* Move default fonts to new crate `epaint_default_fonts` [#4853](https://github.com/emilk/egui/pull/4853) by [@alex-pinkus](https://github.com/alex-pinkus) diff --git a/scripts/generate_changelog.py b/scripts/generate_changelog.py index 414a4a5af34..2f40f995068 100755 --- a/scripts/generate_changelog.py +++ b/scripts/generate_changelog.py @@ -85,7 +85,12 @@ def fetch_pr_info(pr_number: int) -> Optional[PrInfo]: if response.status_code == 200: labels = [label["name"] for label in json["labels"]] gh_user_name = json["user"]["login"] - return PrInfo(pr_number=pr_number, gh_user_name=gh_user_name, title=json["title"], labels=labels) + return PrInfo( + pr_number=pr_number, + gh_user_name=gh_user_name, + title=json["title"], + labels=labels, + ) else: print(f"ERROR {url}: {response.status_code} - {json['message']}") return None @@ -126,7 +131,9 @@ def pr_summary(pr: PrInfo, crate_name: Optional[str] = None) -> str: return summary -def pr_info_section(prs: List[PrInfo], *, crate_name: str, heading: Optional[str] = None) -> str: +def pr_info_section( + prs: List[PrInfo], *, crate_name: str, heading: Optional[str] = None +) -> str: result = "" if 0 < len(prs): if heading is not None: @@ -145,13 +152,12 @@ def changelog_from_prs(pr_infos: List[PrInfo], crate_name: str) -> str: # For small crates, or small releases return pr_info_section(pr_infos, crate_name=crate_name) - fixed = [] added = [] rest = [] for pr in pr_infos: summary = pr_summary(pr, crate_name) - if "bug" in pr.labels: + if summary.startswith("Fix") or "bug" in pr.labels: fixed.append(pr) elif summary.startswith("Add") or "feature" in pr.labels: added.append(pr) @@ -196,22 +202,24 @@ def add_to_changelog_file(crate: str, content: str, version: str) -> None: file_path = changelog_filepath(crate) - with open(file_path, 'r') as file: + with open(file_path, "r") as file: content = file.read() - position = content.find('\n##') + position = content.find("\n##") assert position != -1 content = content[:position] + insert_text + content[position:] - with open(file_path, 'w') as file: + with open(file_path, "w") as file: file.write(content) def main() -> None: parser = argparse.ArgumentParser(description="Generate a changelog.") parser.add_argument("--commit-range", help="e.g. 0.24.0..HEAD", required=True) - parser.add_argument("--write", help="Write into the different changelogs?", action="store_true") + parser.add_argument( + "--write", help="Write into the different changelogs?", action="store_true" + ) parser.add_argument("--version", help="What release is this?") args = parser.parse_args() @@ -238,7 +246,7 @@ def main() -> None: all_changelogs = "" for crate in crate_names: file_path = changelog_filepath(crate) - with open(file_path, 'r') as file: + with open(file_path, "r") as file: all_changelogs += file.read() repo = Repo(".") @@ -273,7 +281,9 @@ def main() -> None: unsorted_commits.append(summary) else: if f"[#{pr_number}]" in all_changelogs: - print(f"* Ignoring PR that is already in the changelog: [#{pr_number}](https://github.com/{OWNER}/{REPO}/pull/{pr_number})") + print( + f"* Ignoring PR that is already in the changelog: [#{pr_number}](https://github.com/{OWNER}/{REPO}/pull/{pr_number})" + ) continue assert pr_info is not None @@ -295,7 +305,6 @@ def main() -> None: if not any(label in pr_info.labels for label in ignore_labels): unsorted_prs.append(pr_summary(pr_info)) - print() print(f"Full diff at https://github.com/emilk/egui/compare/{args.commit_range}") print() @@ -304,7 +313,9 @@ def main() -> None: prs = crate_sections[crate] print_section(crate, changelog_from_prs(prs, crate)) print_section("Unsorted PRs", "\n".join([f"* {item}" for item in unsorted_prs])) - print_section("Unsorted commits", "\n".join([f"* {item}" for item in unsorted_commits])) + print_section( + "Unsorted commits", "\n".join([f"* {item}" for item in unsorted_commits]) + ) if args.write: for crate in crate_names: @@ -312,6 +323,5 @@ def main() -> None: add_to_changelog_file(crate, items, args.version) - if __name__ == "__main__": main()