0.34.1: Enable WebGL fallback in eframe
egui is an easy-to-use immediate mode GUI for Rust that runs on both web and native.
Try it now: https://www.egui.rs/
egui development is sponsored by Rerun, a startup building an SDK for visualizing streams of multimodal data.
0.34.0: More `Ui`, less `Context`
egui is an easy-to-use immediate mode GUI for Rust that runs on both web and native.
Try it now: https://www.egui.rs/
egui development is sponsored by Rerun, a startup building an SDK for visualizing streams of multimodal data.
- Sharper text unlocked by switching font rendering crate to
skrifa - Fade out edges of
ScrollAreas - Use
Uias the main entrypoint
The font rendering backend was switched from ab_glyph to skrifa + vello_cpu. This enabled us support font hinting and variations. It also paves the way for more font improvements in the future, like support for color emojis and adding helpers for variations like RichText::bold.
Font hinting makes text more clear (look at the =):
https://github.com/user-attachments/assets/ea9151ec-869f-4c05-ab59-836114683417
We now support setting variable font parameters:
https://github.com/user-attachments/assets/0febde1c-ebf6-4d85-8f96-86ec0f934ecf
(Unfortunately there is currently a bug with variations, meaning changing them live like this won't work in practise. There is a draft PR to fix it, but it didn't make the release)
- Replace ab_glyph with Skrifa + vello_cpu; enable font hinting #7694 by @valadaptive
- Add font variations API #7859 by @valadaptive
egui has long had a confusing overlap in responsibilities between Context and Ui. In particular, you could add panels to either one (or both!). In this release, we switch from having Context be the main entrypoint, and instead provide whole-app Ui. In egui we've replaced Context::run with Context::run_ui, and changed viewports to be given a &mut Ui instead of Context. In eframe we've deprecated App::update replaced it with App::ui (which provides a &mut Ui instead of a &Context).
In addition to this, Ui now derefs to Context, so all code like ui.ctx().input(…) can now be written ui.input(…). This means you are much less likely to have to use naked Contexts. Context can still be useful though, since they implement Clone and can be sent to other threads so you can call .request_repaint on them.
- Add
Context::run_ui#7736 by @emilk - Add
Deref<Target = Context>forUi#7770 by @emilk - Replace
App::updatewithfn logicandfn ui#7775 by @emilk - Rename
Context::styletoglobal_style; avoid confusion w/Ui::style#7772 by @emilk - Rename functions in
Contextto avoid confusion #7773 by @emilk - Viewports: give the caller a
Uiinstead ofContext#7779 by @emilk
As part of the above work, we have unified the panel API. SidePanel and TopBottomPanel are deprecated, replaced by a single Panel. Furthermore, it is now deprecated to use panels directly on Context. Use the show_inside functions instead, acting on Uis.
This unification and simplification will make it easier to maintain and improve panels going forward.
- Add
Panelto replaceSidePanelandTopBottomPanel#5659 by @sharky98 - Deprecate using
Paneldirectly on aContext#7781 by @emilk - Deprecate
CentralPanel::show#7783 by @emilk - Deprecate
Context::used_sizeandContext::available_rect#7788 by @emilk
- Add
is_scrolling/is_smooth_scrollingutil, checking for active scroll action #7669 by @IsseW - Allow multiple atoms in
Button::shortcut_textandright_text#7696 by @emilk - Add
ScrollArea::content_margin#7722 by @emilk - Per-widget style #7667 by @AdrienZianne
- Plugin: export
TypedPluginGuardandTypedPluginHandle#7780 by @apekros - Add
ViewportInfo::occludedandvisible#7948 by @emilk - Add
Atomprefix/suffix support toDragValue#7949 by @lucasmerlin ⚠️ Atom improvements:Atom::id,align,closure,max_size#7958 by @lucasmerlin- Add
DebugOptions::warn_if_rect_changes_id#7984 by @emilk TextEditAtomprefix/suffix #7587 by @lucasmerlin- Add
Button::left_text#7955 by @rustbasic - Add
Response::parent_id#8010 by @lucasmerlin - Add
Context::text_edit_focused#8014 by @emilk - Add
Context::time#8017 by @emilk - Add
Ui::is_tooltip#8016 by @emilk - Add
UiStack::bg_color#8020 by @emilk - Make
egui::IdSetpublic #8019 by @lucasmerlin - Add raw key methods to TypeIdMap #8007 by @AlexanderSchuetz97
- Remove
accesskitfeature and always depend onaccesskit#7701 by @emilk - Update MSRV from 1.88 to 1.92 #7793 by @JasperBRiedel
- Improve modifier handling when scrolling #7678 by @emilk
- Apply preferred font weight when loading variable fonts #7790 by @pmnxis
- Make scroll bars and resize splitters visible to accesskit #7804 by @emilk
- Allow moving existing widgets to the top of interaction stack #7805 by @emilk
- Slightly change interact behavior around thin splitters #7806 by @emilk
- Move window resize interaction to be over contents #7807 by @emilk
- Don't expand widgets on hover #7808 by @emilk
- Make
FrameCache::getreturn a reference instead of cloning the cached value #7834 by @KonaeAkira - Update selected dependencies #7920 by @oscargus
- Make
Galley::pos_from_layout_cursorpub#7864 by @dionb - Update accesskit to 0.24.0 (and related deps) #7850 by @delan
- Quit on Ctrl-Q #7985 by @emilk
- Fade out the edges of
ScrollAreas#8018 by @emilk
- Fix: ensure
CentralPanel::show_insideallocates space in parent #7778 by @emilk - Heed constrain rect when auto-positioning windows #7786 by @emilk
- Fix jitter when hovering edge of scroll area close to resize splitter #7803 by @emilk
- Don't focus Areas, Windows and ScrollAreas #7827 by @lucasmerlin
- Fix backspacing leaving last character in IME prediction not removed on macOS native and Safari #7810 by @umajho
- Implemented distance threshold for double/triple clicks #7817 by @bl4ze4447
- Fix
CentralPanel::show_inside_dynto roundpanel_rect#7868 by @ripopov - Stop ctrl+arrow etc from moving focus #7897 by @emilk
- Fix scroll area not consuming scroll events #7904 by @lucasmerlin
- Pass in an explicit id in
UiBuilder, to avoid wrapping passed in ids with Id::new() #7925 by @lucasmerlin - Fix crash when dragging a DragValue through small floats #7939 by @Fyrecean
- Fix emoji icon font #7940 by @Jhynjhiruu
- Fixes the overly aggressive overflow elision in
truncate()and similar for os scaling other than 100% #7867 by @RndUsr123 - Fix text color when selecting newline character #7951 by @emilk
- Fix: repaint on drag-and-drop files #7953 by @emilk
- Fix instable IDs following animated panels #7994 by @emilk
- Enables every combination of
TextEditandLayoutJobalignments #7831 by @RndUsr123 - Fix
horizontal_wrappingrow height after usingtext_edit_multiline#8000 by @optozorax - Fix menu keyboard toggle for open submenus #7957 by @fjkorf
- Fix:
Visuals::interact_cursorsupport inButton#7986 by @mango766
0.33.3 - Improve kittest and text selection
egui is an easy-to-use immediate mode GUI for Rust that runs on both web and native.
Try it now: https://www.egui.rs/
egui development is sponsored by Rerun, a startup building an SDK for visualizing streams of multimodal data.
- Treat
.as a word-splitter in text navigation #7741 by @emilk - Change text color of selected text #7691 by @emilk
- Enforce consistent snapshot updates #7744 by @lucasmerlin
kittest: add drag-and-drop helpers #7690 by @emilk
- Bump
ehttpto 0.6.0 #7757 by @jprochazk
0.33.2
egui is an easy-to-use immediate mode GUI for Rust that runs on both web and native.
Try it now: https://www.egui.rs/
egui development is sponsored by Rerun, a startup building an SDK for visualizing streams of multimodal data.
- Add
Plugin::on_widget_under_pointerto support widget inspector #7652 by @juancampa - Add
Response::total_drag_deltaandPointerState::total_drag_delta#7708 by @emilk
- Improve accessibility and testability of
ComboBox#7658 by @lucasmerlin
- Fix
profiling::scopecompile error when profiling usingtracingbackend #7646 by @PPakalns - Fix edge cases in "smart aiming" in sliders #7680 by @emilk
- Hide scroll bars when dragging other things #7689 by @emilk
- Prevent widgets sometimes appearing to move relative to each other #7710 by @emilk
- Fix
ui.response().interact(Sense::click())being flakey #7713 by @lucasmerlin
- Fix jittering during window resize on MacOS for WGPU/Metal #7641 by @aspcartman
- Make sure
native_pixels_per_pointis set during app creation #7683 by @emilk
0.33.0 - `egui::Plugin`, better kerning, kitdiff viewer
egui is an easy-to-use immediate mode GUI for Rust that runs on both web and native.
Try it now: https://www.egui.rs/
egui development is sponsored by Rerun, a startup building an SDK for visualizing streams of multimodal data.
Highlights from this release:
egui::Plugina improved way to create and access egui plugins- kitdiff, a viewer for egui_kittest image snapshots (and a general image diff tool)
- better kerning
As a step towards using parley for font rendering, @valadaptive has refactored the font loading and rendering code. A result of this (next to the font rendering code being much nicer now) is improved kerning. Notice how the c moved away from the k:
- More even text kerning #7431 by @valadaptive
We've added a new trait-based plugin api, meant to replace Context::on_begin_pass and Context::on_end_pass. This makes it a lot easier to handle state in your plugins. Instead of having to write to egui memory it can live right on your plugin struct. The trait based api also makes easier to add new hooks that plugins can use. In addition to on_begin_pass and on_end_pass, the Plugin trait now has a input_hook and output_hook which you can use to inspect / modify the RawInput / FullOutput.
- New Plugin trait #7385 by @lucasmerlin
At rerun we have a ton of snapshots. Some PRs will change most of them (e.g. the one that updated egui and introduced the kerning improvements, ~500 snapshots changed!). If you really want to look at every changed snapshot it better be as efficient as possible, and the experience on github, fiddeling with the sliders, is kind of frustrating. In order to fix this, we've made kitdiff. You can use it locally via
kitdiff files .will search for .new.png and .diff.png fileskitdiff gitwill compare the current files to the default branch (main/master) Or in the browser via- going to https://rerun-io.github.io/kitdiff/ and pasting a PR or github artifact url
- linking to kitdiff via e.g. a github workflow
https://rerun-io.github.io/kitdiff/?url=<link_to_pr_or_artifact>
To install kitdiff run cargo install --git https://github.com/rerun-io/kitdiff. You might need to login with your github account for viewing artifacts and to prevent running into rate limits.
Here is a video showing the kerning changes in kitdiff (try it yourself):
https://github.com/user-attachments/assets/74640af1-09ba-435a-9d0c-2cbeee140c8f
egui::Mutexnow has a timeout as a simple deadlock detection- If you use a
egui::Mutexin some place where it's held for longer than a single frame, you should switch to the std mutex or parking_lot instead (egui mutexes are wrappers around parking lot)
- If you use a
screen_rectis deprecated- In order to support safe areas, egui now has
viewport_rectandcontent_rect. - Update all usages of
screen_recttocontent_rect, unless you are sure that you want to draw outside thesafe area(which would mean your Ui may be covered by notches, system ui, etc.)
- In order to support safe areas, egui now has
- New Plugin trait #7385 by @lucasmerlin
- Add
Ui::take_available_space()helper function, which sets the Ui's minimum size to the available space #7573 by @IsseW - Add support for the safe area on iOS #7578 by @irh
- Add
UiBuilder::global_scopeandUiBuilder::id#7372 by @Icekey - Add
emath::fast_midpoint#7435 by @emilk - Make the
hex_colormacroconst#7444 by @YgorSouza - Add
SurrenderFocusOnoption #7471 by @lucasmerlin - Add
Memory::move_focus#7476 by @darkwater - Support on hover tooltip that is noninteractable even with interactable content #5543 by @PPakalns
- Add rotation gesture support for trackpad sources #7453 by @thatcomputerguy0101
- Document platform compatibility on
viewport::WindowLeveland dependents #7432 by @lkdm - Deprecated
ImageButtonand removedWidgetType::ImageButton#7483 by @Stelios-Kourlis - More even text kerning #7431 by @valadaptive
- Increase default text size from 12.5 to 13.0 #7521 by @emilk
- Update accesskit to 0.21.0 #7550 by @fundon
- Update MSRV from 1.86 to 1.88 #7579 by @Wumpf
- Group AccessKit nodes by
Ui#7386 by @lucasmerlin
- Remove the
deadlock_detectionfeature #7497 by @lucasmerlin - Remove deprecated fields from
PlatformOutput#7523 by @emilk - Remove
logfeature #7583 by @emilk
- Enable
clippy::iter_over_hash_typelint #7421 by @emilk - Fixes sense issues in TextEdit when vertical alignment is used #7436 by @RndUsr123
- Fix stuck menu when submenu vanishes #7589 by @lucasmerlin
- Change Spinner widget to account for width as well as height #7560 by @bryceberger
0.32.3 - Fix tooltips for ellided text
egui is an easy-to-use immediate mode GUI for Rust that runs on both web and native.
Try it now: https://www.egui.rs/
egui development is sponsored by Rerun, a startup building an SDK for visualizing streams of multimodal data.
- Preserve text format in truncated label tooltip #7514 #7535 by @lucasmerlin
- Fix
TextEdit's in RTL layouts #5547 by @zakarumych - Optimize
Mesh::add_rect_with_uv#7511 by @valadaptive
0.32.2 - Ui::place, Harness::mask and more bug fixes
egui is an easy-to-use immediate mode GUI for Rust that runs on both web and native.
Try it now: https://www.egui.rs/
egui development is sponsored by Rerun, a startup building an SDK for visualizing streams of multimodal data.
Ui::place is similar to Ui::put, but it doesn't update the current Uis cursor. This is very useful when using the new Atoms or making badge-like widgets. The following breaks with Ui::put but works just fine with Ui::place:
Harness::mask allows for simple masking of Rects you don't want to be visible in snapshot test images. The rect will be masked with a ugly color to make it obvious whats going on:
- Add
Ui::place, to place widgets without changing the cursor #7359 by @lucasmerlin - Fix:
SubMenushould not display when ui is disabled #7428 by @ozwaldorf - Remove line breaks when pasting into single line TextEdit #7441 by @YgorSouza
- Panic mutexes that can't lock for 30 seconds, in debug builds #7468 by @emilk
- Fix: prevent calendar popup from closing on dropdown change #7409 by @AStrizh
- Fix memory leak when
forget_imageis called while loading #7380 by @Vanadiae - Fix deadlock in
ImageLoader,FileLoader,EhttpLoader#7494 by @lucasmerlin
- Allow masking widgets in kittest snapshots #7467 by @lucasmerlin
- Panic mutexes that can't lock for 30 seconds, in debug builds #7468 by @emilk
- Skip zero-length layout job sections #7430 by @HactarCE
- Add track_caller to Mutex and RwLock for deadlock_detection b17d716
0.32.1 - Misc bug fixes
egui is an easy-to-use immediate mode GUI for Rust that runs on both web and native.
Try it now: https://www.egui.rs/
egui development is sponsored by Rerun, a startup building an SDK for visualizing streams of multimodal data.
- Add
ComboBox::popup_style#7360 by @lucasmerlin
- Fix glyph rendering: clamp coverage to [0, 1] #7415 by @emilk
- Fix manual
Popupnot closing #7383 by @lucasmerlin - Fix
WidgetText::Textignoring fallback font and overrides #7361 by @lucasmerlin - Fix
override_text_colorpriority #7439 by @YgorSouza - Fix debug-panic in ScrollArea if contents fit without scrolling #7440 by @YgorSouza
- Enable wgpu default features in eframe / egui_wgpu default features #7344 by @lucasmerlin
- Request a redraw when the url change through the
popstateevent listener #7403 by @irevoire
0.32.0 - Atoms, popups, and better SVG support
egui is an easy-to-use immediate mode GUI for Rust that runs on both web and native.
Try it now: https://www.egui.rs/
egui development is sponsored by Rerun, a startup building an SDK for visualizing streams of multimodal data.
This is a big egui release, with several exciting new features!
- Atoms are new layout primitives in egui, for text and images
- Popups, tooltips and menus have undergone a complete rewrite
- Much improved SVG support
- Crisper graphics (especially text!)
Let's dive in!
egui::Atom is the new, indivisible building block of egui (hence the name). It lets you mix images and text in many places where you would previously only be able to add text.
Atoms is the first step towards a more powerful layout engine in egui - more to come!
Right now an Atom is an enum that can be either WidgetText, Image, or Custom.
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. There is a new IntoAtoms trait that works with tuples of Atoms. Each atom can be customized with the AtomExt trait 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:
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 (meaning they support adding Atoms and are built on top of AtomLayout). 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:
pub struct ALButton<'a> {
al: AtomLayout<'a>,
}
impl<'a> ALButton<'a> {
pub fn new(content: impl IntoAtoms<'a>) -> Self {
Self {
al: AtomLayout::new(content.into_atoms()).sense(Sense::click()),
}
}
}
impl<'a> Widget for ALButton<'a> {
fn ui(mut self, ui: &mut Ui) -> Response {
let Self { al } = self;
let response = ui.ctx().read_response(ui.next_auto_id());
let visuals = response.map_or(&ui.style().visuals.widgets.inactive, |response| {
ui.style().interact(&response)
});
let al = al.frame(
Frame::new()
.inner_margin(ui.style().spacing.button_padding)
.fill(visuals.bg_fill)
.stroke(visuals.bg_stroke)
.corner_radius(visuals.corner_radius),
);
al.show(ui).response
}
}
You can even use Atom::custom to add custom content to Widgets. Here is a button in a button:
https://github.com/user-attachments/assets/8c649784-dcc5-4979-85f8-e735b9cdd090
let custom_button_id = Id::new("custom_button");
let response = Button::new((
Atom::custom(custom_button_id, Vec2::splat(18.0)),
"Look at my mini button!",
))
.atom_ui(ui);
if let Some(rect) = response.rect(custom_button_id) {
ui.put(rect, Button::new("🔎").frame_when_inactive(false));
}
Currently, you need to use atom_ui to get a AtomResponse which will have the Rect to use, but in the future this could be streamlined, e.g. by adding a AtomKind::Callback or by passing the Rects back with egui::Response.
Basing our widgets on AtomLayout also allowed us to improve Response::intrinsic_size, which will now report the correct size even if widgets are truncated. intrinsic_size is 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.
- Add
AtomLayout, abstracting layouting within widgets #5830 by @lucasmerlin - Add
Galley::intrinsic_sizeand use it inAtomLayout#7146 by @lucasmerlin
Introduces a new egui::Popup api. Checkout the new demo on https://egui.rs:
https://github.com/user-attachments/assets/74e45243-7d05-4fc3-b446-2387e1412c05
We introduced a new RectAlign helper to align a rect relative to an other rect. The Popup will by default try to find the best RectAlign based on the source widgets position (previously submenus would annoyingly overlap if at the edge of the window):
https://github.com/user-attachments/assets/0c5adb6b-8310-4e0a-b936-646bb4ec02f7
Tooltip and menu have been rewritten based on the new Popup api. They are now compatible with each other, meaning you can just show a ui.menu_button() in any Popup to get a sub menu. There are now customizable MenuButton and SubMenuButton structs, to help with customizing your menu buttons. This means menus now also support PopupCloseBehavior so you can remove your close_menu calls 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_button etc now open the new menu, if you can't update to the new one immediately you can use the old buttons from the deprecated egui::menu menu.
We also introduced ui.close() which closes the nearest container. So you can now conveniently close Windows, Collapsibles, Modals and Popups from within. To use this for your own containers, call UiBuilder::closable and then check for closing within that ui via ui.should_close().
- Add
PopupandTooltip, unifying the previous behaviours #5713 by @lucasmerlin - Add
Ui::closeandResponse::should_close#5729 by @lucasmerlin ⚠️ Improved menu based onegui::Popup#5716 by @lucasmerlin- Add a toggle for the compact menu style #5777 by @s-nie
- Use the new
PopupAPI for the color picker button #7137 by @lucasmerlin ⚠️ Close popup ifMemory::keep_popup_openisn't called #5814 by @juancampa- Fix tooltips sometimes changing position each frame #7304 by @emilk
- Change popup memory to be per-viewport #6753 by @mkalte666
- Deprecate
Memory::popupAPI in favor of newPopupAPI #7317 by @emilk
You can render SVG in egui with
ui.add(egui::Image::new(egui::include_image!("icon.svg"));
(Requires the use of egui_extras, with the svg feature enabled and a call to install_image_loaders).
Previously this would sometimes result in a blurry SVG, epecially if the Image was set to be dynamically scale based on the size of the Ui that contained it. Now SVG:s are always pixel-perfect, for truly scalable graphics.
- Support text in SVGs #5979 by @cernec1999
- Fix sometimes blurry SVGs #7071 by @emilk
- Fix incorrect color fringe colors on SVG:s #7069 by @emilk
- Make
Image::paint_atpixel-perfect crisp for SVG images #7078 by @emilk
Non-SVG icons are also rendered better, and text sharpness has been improved, especially in light mode.
- Improve text sharpness #5838 by @emilk
- Improve text rendering in light mode #7290 by @emilk
- Improve texture filtering by doing it in gamma space #7311 by @emilk
- Make text underline and strikethrough pixel perfect crisp #5857 by @emilk
We have some silently breaking changes (code compiles fine but behavior changed) that require special care:
- wgpu 25 made the gles and vulkan backends optional
- We missed this, so for now you need to manually opt in to those backends. Add the following to you Cargo.toml
wgpu = "25" # enables the wgpu default features so we get the default backends
- We missed this, so for now you need to manually opt in to those backends. Add the following to you Cargo.toml
- Previously menus would only close on click outside
- Either
- Remove the
ui.close_menu()calls from button click handlers since they are obsolete - If the menu should stay open on clicks, change the
PopupCloseBehavior:You can also change the behavior only for a single SubMenu by using// Change this ui.menu_button("Text", |ui| { /* Menu Content */ }); // To this: MenuButton::new("Text").config( MenuConfig::default().close_behavior(PopupCloseBehavior::CloseOnClickOutside), ).ui(ui, |ui| { /* Menu Content */ });
SubMenuButton, but by default it should be passed to any submenus when usingMenuButton.
- Remove the
- The popup will immediately close if
keep_popup_openis not called. - It's recommended to use the new
Popupapi which handles this for you. - If you can't switch to the new api for some reason, update the code to call
keep_popup_open:if ui.memory(|mem| mem.is_popup_open(popup_id)) { ui.memory_mut(|mem| mem.keep_popup_open(popup_id)); // <- add this line let area_response = Area::new(popup_id).show(...) }
- Add
Label::show_tooltip_when_elided#5710 by @bryceberger - Deprecate
Ui::allocate_new_uiin favor ofUi::scope_builder#5764 by @lucasmerlin - Add
expand_bgto customize size of text background #5365 by @MeGaGiGaGon - Add assert messages and print bad argument values in asserts #5216 by @bircni
- Use
TextBufferforlayouterinTextEditinstead of&str#5712 by @kernelkind - Add a
Slider::update_while_editing(bool)API #5978 by @mbernat - Add
Scene::drag_pan_buttonsoption. Allows specifying which pointer buttons pan the scene by dragging #5892 by @mitchmindtree - Add
Scene::senseto customize howSceneresponds to user input #5893 by @mitchmindtree - Rework
TextEditarrow navigation to handle Unicode graphemes #5812 by @MStarha ScrollAreaimprovements for user configurability #5443 by @MStarha- Add
Response::clicked_with_open_in_background#7093 by @emilk - Add
Modifiers::matches_any#7123 by @emilk - Add
Context::format_modifiers#7125 by @emilk - Add
OperatingSystem::is_mac#7122 by @emilk - Support vertical-only scrolling by holding down Alt #7124 by @emilk
- Support for back-button on Android #7073 by @ardocrat
- Select all text in DragValue when gaining focus via keyboard #7107 by @Azkellas
- Add
Context::current_pass_index#7276 by @emilk - Add
Context::cumulative_frame_nr#7278 by @emilk - Add
Visuals::text_edit_bg_color#7283 by @emilk - Add
Visuals::weak_text_alphaandweak_text_color#7285 by @emilk - Add support for scrolling via accesskit / kittest #7286 by @lucasmerlin
- Update area struct to allow force resizing #7114 by @blackberryfloat
- Add
egui::Sidesshrink_left/shrink_right#7295 by @lucasmerlin - Set intrinsic size for Label #7328 by @lucasmerlin
- Raise MSRV to 1.85 #6848 by @torokati44, #7279 by @emilk
- Set
hint_textinWidgetInfo#5724 by @bircni - Implement
DefaultforThemePreference#5702 by @MichaelGrupp - Align
available_rectdocs with the new reality after #4590 #5701 by @podusowski - Clarify platform-specific details for
Viewportpositioning #5715 by @aspiringLich - Simplify the text cursor API #5785 by @valadaptive
- Bump accesskit to 0.19 #7040 by @valadaptive
- Better define the meaning of
SizeHint#7079 by @emilk - Move all input-related options into
InputOptions#7121 by @emilk Buttoninherits thealt_textof theImagein it, if any #7136 by @emilk- Change API of
Tooltipslightly #7151 by @emilk - Use Rust edition 2024 #7280 by @emilk
- Change
ui.disable()to modify opacity #7282 by @emilk - Make the font atlas use a color image #7298 by @valadaptive
- Implement
BitOrandBitOrAssignforRect#7319 by @lucasmerlin
- Remove things that have been deprecated for over a year #7099 by @emilk
- Remove
SelectableLabel#7277 by @lucasmerlin
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 @mitchmindtree- Fix: transform
TextShapeunderline width #5865 by @emilk - Fix missing repaint after
consume_key#7134 by @lucasmerlin - Update
emoji-icon-fontwith fix for fullwidth latin characters #7067 by @emilk - Mark all keys as released if the app loses focus #5743 by @emilk
- Fix scroll handle extending outside of
ScrollArea#5286 by @gilbertoalexsantos - Fix
Response::clicked_elsewherenot returningtruesometimes #5798 by @lucasmerlin - Fix kinetic scrolling on touch devices #5778 by @lucasmerlin
- Fix
DragValueexpansion when editing #5809 by @MStarha - Fix disabled
DragValueeating focus, causing focus to reset #5826 by @KonaeAkira - Fix semi-transparent colors appearing too bright #5824 by @emilk
- Improve drag-to-select text (add margins) #5797 by @hankjordan
- Fix bug in pointer movement detection #5329 by @rustbasic
- Protect against NaN in hit-test code #6851 by @Skgland
- Fix image button panicking with tiny
available_space#6900 by @lucasmerlin - Fix links and text selection in horizontal_wrapped layout #6905 by @lucasmerlin
- Fix
leading_spacesometimes being ignored during paragraph splitting #7031 by @afishhh - Fix typo in deprecation message for
ComboBox::from_id_source#7055 by @aelmizeb - Bug fix: make sure
end_passis called for all loaders #7072 by @emilk - Report image alt text as text if widget contains no other text #7142 by @lucasmerlin
- Slider: move by at least the next increment when using fixed_decimals #7066 by @0x53A
- Fix crash when using infinite widgets #7296 by @emilk
- Fix
debug_asserttriggered bymenu/intersect_ray#7299 by @emilk - Change
Rect::areato return zero for negative rectangles #7305 by @emilk
- Optimize editing long text by caching each paragraph #5411 by @afishhh
- Make
WidgetTextsmaller and faster #6903 by @lucasmerlin
- Add pointer events and focus handling for apps run in a Shadow DOM #5627 by @xxvvii
- MacOS: Add
movable_by_window_backgroundoption to viewport #5412 by @jim-ec - Add macOS-specific
has_shadowandwith_has_shadowto ViewportBuilder #6850 by @gaelanmcmillan - Add external eventloop support #6750 by @wpbrown
- Update MSRV to 1.85 #7279 by @emilk
- Use Rust edition 2024 #7280 by @emilk
- Rename
should_propagate_eventand addshould_prevent_default#5779 by @th0rex - Clarify platform-specific details for
Viewportpositioning #5715 by @aspiringLich - Enhance stability on Windows #5723 by @rustbasic
- Set
web-sysmin version to0.3.73#5862 by @wareya - Bump
ronto0.10.1#6861 by @torokati44 - Disallow
accesskiton Android NativeActivity, makinghello_androidworking again #6855 by @podusowski - Respect and detect
prefers-color-scheme: no-preference#7293 by @emilk
- Mark all keys as up if the app loses focus #5743 by @emilk
- Fix text input on Android #5759 by @StratusFearMe21
- Fix text distortion on mobile devices/browsers with
glowbackend #6893 by @wareya - Workaround libpng crash on macOS by not creating
NSImagefrom png data #7252 by @Wumpf - Fix incorrect window sizes for non-resizable windows on Wayland #7103 by @GoldsteinE
- Web: only consume copy/cut events if the canvas has focus #7270 by @emilk
0.31.1 - TextEdit and egui_kittest fixes
egui is an easy-to-use immediate mode GUI for Rust that runs on both web and native.
Try it now: https://www.egui.rs/
egui development is sponsored by Rerun, a startup building an SDK for visualizing streams of multimodal data.
- Fix sizing bug in
TextEdit::singleline#5640 by @IaVashik - Fix panic when rendering thin textured rectangles #5692 by @PPakalns
- Fix image_loader for animated image types #5688 by @BSteffaniak
- Fix modifiers not working in kittest #5693 by @lucasmerlin
- Enable all features for egui_kittest docs #5711 by @YgorSouza
- Run a frame per queued event in egui_kittest #5704 by @lucasmerlin
- Add guidelines for image comparison tests #5714 by @Wumpf