-
-
Couldn't load subscription status.
- Fork 0
⬆️🦀 Update Rust crate egui to 0.32.0 #137
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
Edited/Blocked NotificationRenovate will not automatically rebase this PR, because it does not recognize the last commit author and assumes somebody else may have edited the PR. You can manually request rebase by checking the rebase/retry box above. |
b13069e to
8c09391
Compare
|
This PR updated not just As a result, the following PRs will be obsolete once this PR is merged:
Furthermore, the following two PRs might have to stay open for a while:
|
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
8c09391 to
009dd75
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR updates the Rust crate egui from version 0.31.1 to 0.32.0, bringing significant new features including atoms (new layout primitives), improved popups/menus, better SVG support, and crisper graphics.
Key changes include:
- Dependency updates: Updated egui, eframe, egui_extras to 0.32.0, wgpu to v25, glyphon to 0.9, and naga_oil to 0.18
- Menu API migration: Replaced deprecated
egui::menu::barwithegui::MenuBar::new().ui()andui.close_menu()withui.close_kind(egui::UiKind::Menu) - UI allocation updates: Migrated from deprecated
ui.allocate_new_ui()toui.scope_builder()
Reviewed Changes
Copilot reviewed 7 out of 8 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| gui/Cargo.toml | Updated egui dependencies from 0.31.1 to 0.32.0 and wgpu from v24 to v25 |
| renderer/Cargo.toml | Updated glyphon to 0.9, naga_oil to 0.18, and wgpu to v25 |
| video/Cargo.toml | Updated wgpu dependency from v24 to v25 |
| gui/src/menu.rs | Migrated to new menu API and replaced deprecated close methods |
| gui/src/aspect_panel.rs | Replaced deprecated allocate_new_ui with scope_builder |
| renderer/src/component/primitive/text.rs | Updated text buffer API call for glyphon compatibility |
| video/src/lib.rs | Updated wgpu device creation API and added unused result handling |
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I understand the cross-referencing issues. I don't have a better solution than to wait until the respective releases support these newer versions, either. Your changes look good to me 👍
|
Let's get this in, right? |
Yes, we just wanted to merge #132 first in case further merge conflicts had appeared. However, it looks like this is not the case. Merging now. 🚂 |
This PR contains the following updates:
0.31.1->0.32.0Release Notes
emilk/egui (egui)
v0.32.1Compare Source
⭐ Added
ComboBox::popup_style#7360 by @lucasmerlin🐛 Fixed
Popupnot closing #7383 by @lucasmerlinWidgetText::Textignoring fallback font and overrides #7361 by @lucasmerlinoverride_text_colorpriority #7439 by @YgorSouzav0.32.0Compare Source
This is a big egui release, with several exciting new features!
Let's dive in!
⚛️ Atoms
egui::Atomis the new, indivisible building blocks of egui (hence their name).An
Atomis anenumthat can be eitherWidgetText,Image, orCustom.The new
AtomLayoutcan be used within widgets to do basic layout.The initial implementation is as minimal as possible, doing just enough to implement what
Buttoncould do before.There is a new
IntoAtomstrait that works with tuples ofAtoms. Each atom can be customized with theAtomExttraitwhich works on everything that implements
Into<Atom>, so e.g.RichTextorImage.So to create a
Buttonwith text and image you can now do:Anywhere you see
impl IntoAtomsyou can add any number of images and text, in any order.As of 0.32, we have ported the
Button,Checkbox,RadioButtonto use atoms(meaning they support adding Atoms and are built on top of
AtomLayout).The
Buttonimplementation 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:You can even use
Atom::customto add custom content to Widgets. Here is a button in a button:Screen.Recording.2025-07-10.at.13.10.52.mov
Currently, you need to use
atom_uito get aAtomResponsewhich will have theRectto use, but in the futurethis could be streamlined, e.g. by adding a
AtomKind::Callbackor by passing the Rects back withegui::Response.Basing our widgets on
AtomLayoutalso allowed us to improveResponse::intrinsic_size, which will now report thecorrect size even if widgets are truncated.
intrinsic_sizeis the size that a non-wrapped, non-truncated,non-justified version of the widget would have, and can be useful in advanced layout
calculations like egui_flex.
Details
AtomLayout, abstracting layouting within widgets #5830 by @lucasmerlinGalley::intrinsic_sizeand use it inAtomLayout#7146 by @lucasmerlin❕ Improved popups, tooltips, and menus
Introduces a new
egui::Popupapi. Checkout the new demo on https://egui.rs:Screen.Recording.2025-07-10.at.11.47.22.mov
We introduced a new
RectAlignhelper to align a rect relative to an other rect. ThePopupwill by default try to find the bestRectAlignbased on the source widgets position (previously submenus would annoyingly overlap if at the edge of the window):Screen.Recording.2025-07-10.at.11.36.29.mov
Tooltipandmenuhave been rewritten based on the newPopupapi. They are now compatible with each other, meaning you can just show aui.menu_button()in anyPopupto get a sub menu. There are now customizableMenuButtonandSubMenuButtonstructs, to help with customizing your menu buttons. This means menus now also supportPopupCloseBehaviorso you can remove yourclose_menucalls from your click handlers!The old tooltip and popup apis have been ported to the new api so there should be very little breaking changes. The old menu is still around but deprecated.
ui.menu_buttonetc now open the new menu, if you can't update to the new one immediately you can use the old buttons from the deprecatedegui::menumenu.We also introduced
ui.close()which closes the nearest container. So you can now conveniently closeWindows,Collapsibles,Modals andPopups from within. To use this for your own containers, callUiBuilder::closableand then check for closing within that ui viaui.should_close().Details
PopupandTooltip, unifying the previous behaviours #5713 by @lucasmerlinUi::closeandResponse::should_close#5729 by @lucasmerlinegui::Popup#5716 by @lucasmerlinPopupAPI for the color picker button #7137 by @lucasmerlinMemory::keep_popup_openisn't called #5814 by @juancampaMemory::popupAPI in favor of newPopupAPI #7317 by @emilk▲ Improved SVG support
You can render SVG in egui with
(Requires the use of
egui_extras, with thesvgfeature enabled and a call toinstall_image_loaders).Previously this would sometimes result in a blurry SVG, epecially if the
Imagewas set to be dynamically scale based on the size of theUithat contained it. Now SVG:s are always pixel-perfect, for truly scalable graphics.Details
Image::paint_atpixel-perfect crisp for SVG images #7078 by @emilk✨ Crisper graphics
Non-SVG icons are also rendered better, and text sharpness has been improved, especially in light mode.
Details
Migration guide
We have some silently breaking changes (code compiles fine but behavior changed) that require special care:
Menus close on click by default
ui.close_menu()calls from button click handlers since they are obsoletePopupCloseBehavior:SubMenuButton, but by default it should be passed to any submenus when usingMenuButton.Memory::is_popup_openapi now requires calls toMemory::keep_popup_openkeep_popup_openis not called.Popupapi which handles this for you.keep_popup_open:⭐ Other improvements
Label::show_tooltip_when_elided#5710 by @brycebergerUi::allocate_new_uiin favor ofUi::scope_builder#5764 by @lucasmerlinexpand_bgto customize size of text background #5365 by @MeGaGiGaGonTextBufferforlayouterinTextEditinstead of&str#5712 by @kernelkindSlider::update_while_editing(bool)API #5978 by @mbernatScene::drag_pan_buttonsoption. Allows specifying which pointer buttons pan the scene by dragging #5892 by @mitchmindtreeScene::senseto customize howSceneresponds to user input #5893 by @mitchmindtreeTextEditarrow navigation to handle Unicode graphemes #5812 by @MStarhaScrollAreaimprovements for user configurability #5443 by @MStarhaResponse::clicked_with_open_in_background#7093 by @emilkModifiers::matches_any#7123 by @emilkContext::format_modifiers#7125 by @emilkOperatingSystem::is_mac#7122 by @emilkContext::current_pass_index#7276 by @emilkContext::cumulative_frame_nr#7278 by @emilkVisuals::text_edit_bg_color#7283 by @emilkVisuals::weak_text_alphaandweak_text_color#7285 by @emilkegui::Sidesshrink_left/shrink_right#7295 by @lucasmerlin🔧 Changed
hint_textinWidgetInfo#5724 by @bircniDefaultforThemePreference#5702 by @MichaelGruppavailable_rectdocs with the new reality after #4590 #5701 by @podusowskiViewportpositioning #5715 by @aspiringLichSizeHint#7079 by @emilkInputOptions#7121 by @emilkButtoninherits thealt_textof theImagein it, if any #7136 by @emilkTooltipslightly #7151 by @emilkui.disable()to modify opacity #7282 by @emilkBitOrandBitOrAssignforRect#7319 by @lucasmerlin🔥 Removed
SelectableLabel#7277 by @lucasmerlin🐛 Fixed
Scene: makescene_rectfull size on reset #5801 by @graydenshandScene:TextEditselection when placed in aScene#5791 by @karhuScene: Set transform layer before calling user content #5884 by @mitchmindtreeTextShapeunderline width #5865 by @emilkconsume_key#7134 by @lucasmerlinemoji-icon-fontwith fix for fullwidth latin characters #7067 by @emilkScrollArea#5286 by @gilbertoalexsantosResponse::clicked_elsewherenot returningtruesometimes #5798 by @lucasmerlinDragValueexpansion when editing #5809 by @MStarhaDragValueeating focus, causing focus to reset #5826 by @KonaeAkiraavailable_space#6900 by @lucasmerlinleading_spacesometimes being ignored during paragraph splitting #7031 by @afishhhComboBox::from_id_source#7055 by @aelmizebend_passis called for all loaders #7072 by @emilkdebug_asserttriggered bymenu/intersect_ray#7299 by @emilkRect::areato return zero for negative rectangles #7305 by @emilk🚀 Performance
WidgetTextsmaller and faster #6903 by @lucasmerlinConfiguration
📅 Schedule: Branch creation - "every weekend" (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.