1
0
mirror of https://github.com/emilk/egui.git synced 2026-09-02 06:40:06 -04:00

Final touches on changelog

This commit is contained in:
Emil Ernerfeldt
2025-07-10 15:09:37 +02:00
parent da544af0fd
commit a4c30505fe

View File

@@ -14,33 +14,38 @@ 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. 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.32.0 - 2025-07-10 - Atoms, Popups, and better SVG support ## 0.32.0 - 2025-07-10 - Atoms, popups, and better SVG support
This is a big egui release, with several exciting new features! This is a big egui release, with several exciting new features!
* _Atoms_ are new layout primitives in egui, for text and images * _Atoms_ are new layout primitives in egui, for text and images
* Popups, tooltips and menus have undergone a complete rewrite * Popups, tooltips and menus have undergone a complete rewrite
* Much improved SVG support! * Much improved SVG support
* Crisper graphics (especially text!) * Crisper graphics (especially text!)
Let's dive in! Let's dive in!
### Highlights ✨ ### ⚛️ Atoms
#### ⚛️ Atoms
`egui::Atom` is the new, indivisible building blocks of egui (hence their name).
An `Atom` is an `enum` that can be either `WidgetText`, `Image`, or `Custom`.
A `egui::Atom` represents the most low-level ui building block in egui. For now this can be `WidgetText` `Image` or `Custom`.
The new `AtomLayout` can be used within widgets to do basic layout. The new `AtomLayout` can be used within widgets to do basic layout.
The initial implementation is as minimal as possible, doing just enough to implement what `Button` could do before. The initial implementation is as minimal as possible, doing just enough to implement what `Button` could do before.
There is a new `IntoAtoms` trait that works with tuples of `Atom`s. Each atom can be customized with the `AtomExt` trait There is a new `IntoAtoms` trait that works with tuples of `Atom`s. Each atom can be customized with the `AtomExt` trait
which works on everything that implements `Into<Atom>`, so e.g. `RichText` or `Image`. which works on everything that implements `Into<Atom>`, so e.g. `RichText` or `Image`.
So to create a `Button` with text and image you can now do: So to create a `Button` with text and image you can now do:
```rs ```rs
ui.button((include_image!("my_icon.png").atom_size(Vec2::splat(12.0)), "Click me!")); let image = include_image!("my_icon.png").atom_size(Vec2::splat(12.0));
ui.button((image, "Click me!"));
``` ```
Anywhere you see `impl IntoAtoms` you can add any number of images and text, in any order.
As of 0.32, we have ported the `Button`, `Checkbox`, `RadioButton` to use atoms As of 0.32, we have ported the `Button`, `Checkbox`, `RadioButton` to use atoms
(meaning they support adding Atoms and are build on top of `AtomLayout`). (meaning they support adding Atoms and are built on top of `AtomLayout`).
The `Button` implementation is much simpler now, removing ~130 lines of layout math. The `Button` implementation is not only more powerful now, but also much simpler, removing ~130 lines of layout math.
In combination with `ui.read_response`, custom widgets are really simple now, here is a minimal Button implementation:
In combination with `ui.read_response`, custom widgets are really simple now, here is a minimal button implementation:
```rs ```rs
pub struct ALButton<'a> { pub struct ALButton<'a> {
@@ -57,13 +62,14 @@ impl<'a> ALButton<'a> {
impl<'a> Widget for ALButton<'a> { impl<'a> Widget for ALButton<'a> {
fn ui(mut self, ui: &mut Ui) -> Response { fn ui(mut self, ui: &mut Ui) -> Response {
let Self { al } = self;
let response = ui.ctx().read_response(ui.next_auto_id()); let response = ui.ctx().read_response(ui.next_auto_id());
let visuals = response.map_or(&ui.style().visuals.widgets.inactive, |response| { let visuals = response.map_or(&ui.style().visuals.widgets.inactive, |response| {
ui.style().interact(&response) ui.style().interact(&response)
}); });
self.al = self.al.frame( let al = al.frame(
Frame::new() Frame::new()
.inner_margin(ui.style().spacing.button_padding) .inner_margin(ui.style().spacing.button_padding)
.fill(visuals.bg_fill) .fill(visuals.bg_fill)
@@ -71,7 +77,7 @@ impl<'a> Widget for ALButton<'a> {
.corner_radius(visuals.corner_radius), .corner_radius(visuals.corner_radius),
); );
self.al.show(ui).response al.show(ui).response
} }
} }
``` ```
@@ -104,7 +110,7 @@ calculations like [egui_flex](https://github.com/lucasmerlin/hello_egui/tree/mai
* Add `Galley::intrinsic_size` and use it in `AtomLayout` [#7146](https://github.com/emilk/egui/pull/7146) by [@lucasmerlin](https://github.com/lucasmerlin) * Add `Galley::intrinsic_size` and use it in `AtomLayout` [#7146](https://github.com/emilk/egui/pull/7146) by [@lucasmerlin](https://github.com/lucasmerlin)
#### ❕ Improved popups, tooltips, and menus ### ❕ Improved popups, tooltips, and menus
Introduces a new `egui::Popup` api. Checkout the new demo on https://egui.rs: Introduces a new `egui::Popup` api. Checkout the new demo on https://egui.rs:
@@ -132,7 +138,7 @@ We also introduced `ui.close()` which closes the nearest container. So you can n
* Deprecate `Memory::popup` API in favor of new `Popup` API [#7317](https://github.com/emilk/egui/pull/7317) by [@emilk](https://github.com/emilk) * Deprecate `Memory::popup` API in favor of new `Popup` API [#7317](https://github.com/emilk/egui/pull/7317) by [@emilk](https://github.com/emilk)
#### ▲ Improved SVG support ### ▲ Improved SVG support
You can render SVG in egui with You can render SVG in egui with
```rs ```rs
@@ -152,7 +158,7 @@ Previously this would sometimes result in a blurry SVG, epecially if the `Image`
* Make `Image::paint_at` pixel-perfect crisp for SVG images [#7078](https://github.com/emilk/egui/pull/7078) by [@emilk](https://github.com/emilk) * Make `Image::paint_at` pixel-perfect crisp for SVG images [#7078](https://github.com/emilk/egui/pull/7078) by [@emilk](https://github.com/emilk)
#### ✨ Crisper graphics ### ✨ Crisper graphics
Non-SVG icons are also rendered better, and text sharpness has been improved, especially in light mode. Non-SVG icons are also rendered better, and text sharpness has been improved, especially in light mode.
![image](https://github.com/user-attachments/assets/7f370aaf-886a-423c-8391-c378849b63ca) ![image](https://github.com/user-attachments/assets/7f370aaf-886a-423c-8391-c378849b63ca)
@@ -192,7 +198,7 @@ We have some silently breaking changes (code compiles fine but behavior changed)
} }
``` ```
### ⭐ Added ### ⭐ Other improvements
* Add `Label::show_tooltip_when_elided` [#5710](https://github.com/emilk/egui/pull/5710) by [@bryceberger](https://github.com/bryceberger) * Add `Label::show_tooltip_when_elided` [#5710](https://github.com/emilk/egui/pull/5710) by [@bryceberger](https://github.com/bryceberger)
* Deprecate `Ui::allocate_new_ui` in favor of `Ui::scope_builder` [#5764](https://github.com/emilk/egui/pull/5764) by [@lucasmerlin](https://github.com/lucasmerlin) * Deprecate `Ui::allocate_new_ui` in favor of `Ui::scope_builder` [#5764](https://github.com/emilk/egui/pull/5764) by [@lucasmerlin](https://github.com/lucasmerlin)
* Add `expand_bg` to customize size of text background [#5365](https://github.com/emilk/egui/pull/5365) by [@MeGaGiGaGon](https://github.com/MeGaGiGaGon) * Add `expand_bg` to customize size of text background [#5365](https://github.com/emilk/egui/pull/5365) by [@MeGaGiGaGon](https://github.com/MeGaGiGaGon)
@@ -271,7 +277,6 @@ We have some silently breaking changes (code compiles fine but behavior changed)
### 🚀 Performance ### 🚀 Performance
* Optimize editing long text by caching each paragraph [#5411](https://github.com/emilk/egui/pull/5411) by [@afishhh](https://github.com/afishhh) * Optimize editing long text by caching each paragraph [#5411](https://github.com/emilk/egui/pull/5411) by [@afishhh](https://github.com/afishhh)
* Make `WidgetText` smaller and faster [#6903](https://github.com/emilk/egui/pull/6903) by [@lucasmerlin](https://github.com/lucasmerlin) * Make `WidgetText` smaller and faster [#6903](https://github.com/emilk/egui/pull/6903) by [@lucasmerlin](https://github.com/lucasmerlin)
* Save a few CPU cycles with earlier early-out from `Popup::show` [#7306](https://github.com/emilk/egui/pull/7306) by [@emilk](https://github.com/emilk)
## 0.31.1 - 2025-03-05 ## 0.31.1 - 2025-03-05