summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmil Ernerfeldt <emil.ernerfeldt@gmail.com>2024-09-26 15:13:21 +0200
committerEmil Ernerfeldt <emil.ernerfeldt@gmail.com>2024-09-26 15:32:02 +0200
commit59d71831fd43139bf9b427b779a241099b9c9826 (patch)
treed28ef247d87c6a1e1702ccf531d2d91b2cc42ebd
parentdae1979dd334ace310b6e3ef02e98281ed7dfb8e (diff)
Release 0.29.0 - Multipass, `UiBuilder`, & visual improvements0.29.0
-rw-r--r--CHANGELOG.md99
-rw-r--r--Cargo.lock28
-rw-r--r--Cargo.toml24
-rw-r--r--RELEASES.md6
-rw-r--r--crates/ecolor/CHANGELOG.md4
-rw-r--r--crates/eframe/CHANGELOG.md35
-rw-r--r--crates/egui-wgpu/CHANGELOG.md14
-rw-r--r--crates/egui-winit/CHANGELOG.md5
-rw-r--r--crates/egui_extras/CHANGELOG.md18
-rw-r--r--crates/egui_glow/CHANGELOG.md7
-rw-r--r--crates/epaint/CHANGELOG.md15
-rw-r--r--crates/epaint_default_fonts/CHANGELOG.md6
-rwxr-xr-xscripts/generate_changelog.py36
13 files changed, 255 insertions, 42 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ac42b232..69437e03 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 <https://github.com/emilk/egui/compare/latest...HEAD> 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
+<img width="198" alt="New text selection in light mode" src="https://github.com/user-attachments/assets/bd342946-299c-44ab-bc2d-2aa8ddbca8eb">
+<img width="187" alt="New text selection in dark mode" src="https://github.com/user-attachments/assets/352bed32-5150-49b9-a9f9-c7679a0d30b2">
+
+
+#### What text selection used to look like
+<img width="143" alt="Old text selection in light mode" src="https://github.com/user-attachments/assets/f3cbd798-cfed-4ad4-aa3a-d7480efcfa3c">
+<img width="143" alt="Old text selection in dark mode" src="https://github.com/user-attachments/assets/9925d18d-da82-4a44-8a98-ea6857ecc14f">
+
+### 🧳 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 2c509d74..5fdfab95 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 b8e02f3f..ecec4fcc 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 99aec8ef..b3777a3a 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 6b374869..27280c70 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 <https://github.com/emilk/egui/compare/latest...HEAD> 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 f57b1f61..ff54dc2e 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 <https://github.com/emilk/egui/compare/latest...HEAD> 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 97a19d61..e254517b 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 <https://github.com/emilk/egui/compare/latest...HEAD> 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 3b7faf14..785c57b9 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 <https://github.com/emilk/egui/compare/latest...HEAD> 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 d19b9c6d..27f23ef4 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 <https://github.com/emilk/egui/compare/latest...HEAD> 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 2df31fbf..6ab4aee2 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 <https://github.com/emilk/egui/co
+## 0.29.0 - 2024-09-26 - `glow` 0.14
+* Update `glow` to 0.14 [#4952](https://github.com/emilk/egui/pull/4952) by [@bircni](https://github.com/bircni)
+* Introduce dithering to reduce banding [#4497](https://github.com/emilk/egui/pull/4497) by [@jwagner](https://github.com/jwagner)
+* Fix missing `winit` feature in `egui_glow` [#4916](https://github.com/emilk/egui/pull/4916) by [@bash](https://github.com/bash)
+* Add support for mipmap textures [#5146](https://github.com/emilk/egui/pull/5146) by [@nolanderc](https://github.com/nolanderc)
+
+
## 0.28.1 - 2024-07-05
Nothing new
diff --git a/crates/epaint/CHANGELOG.md b/crates/epaint/CHANGELOG.md
index 0ae2252a..dda7d6e9 100644
--- a/crates/epaint/CHANGELOG.md
+++ b/crates/epaint/CHANGELOG.md
@@ -5,6 +5,21 @@ This file is updated upon each release.
Changes since the last release can be found at <https://github.com/emilk/egui/compare/latest...HEAD> 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 0b335fe2..b41f316d 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 <https://github.com/emilk/egui/compare/latest...HEAD> 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 414a4a5a..2f40f995 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()