Releases: emilk/egui
0.26.0 - Text selection in labels
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 changelog
⚠️ BREAKING
- Always set
response.hovered
to false when dragging another widget #3860 InputState::scroll_delta
has been replaced byInputState::raw_scroll_delta
andInputState::smooth_scroll_delta
#3884- Improve
Response.dragged
,drag_started
andclicked
#3888
⭐ Added
- Selectable text in Labels #3814 #3870
- Add some drag-and-drop-related APIs in
Response
andMemory
#3876 (thanks @abey79!) - Add drag-and-drop APIs with payloads storage #3887
ComboBox
: add builder method for height #3001 (thanks @hinto-janai!)- Add keys
?
,/
,|
#3820 - Add
Response::contains_pointer
#3859 - Add
Align2::anchor_size
#3863 - Add
Context::debug_text
#3864 - Allow read access to shapes added to painter this frame #3866 (thanks @brunizzl!)
- Register callbacks with
Context::on_begin_frame
andon_end_frame
#3886 - Improve
Frame
API to allow picking color until after adding content #3889 - Add opacity factor to
TextShape
#3916 (thanks @StratusFearMe21!) Context::repaint_causes
:file:line
of what caused a repaint #3949- Add
TextureOptions::wrap_mode
#3954 (thanks @CodedNil!) - Add
Spacing::menu_width
#3973
🔧 Changed
- Move text selection logic to own module #3843
- Smooth scrolling #3884
- Turn off text wrapping by default in combo-box popups #3912
Response.context_menu
now returns the response of the context menu, if open #3904 (thanks @AufarZakiev!)- Update to puffin 0.19 #3940
- Wait with showing tooltip until mouse has been still for 300ms #3977
🐛 Fixed
- Fix: dragging to above/below a
TextEdit
orLabel
will select text to begin/end #3858 - Fix clickable widgets blocking scrolling on touch screens #3815 (thanks @lucasmerlin!)
- Fix
stable_dt
#3832 - Bug Fix :
Response::is_pointer_button_down_on
is now false the frame the button is released #3833 (thanks @rustbasic!) - Use runtime knowledge of OS for OS-specific text editing #3840
- Fix calling
request_repaint_after
every frame causing immediate repaint #3978
🚀 Performance
- Niche-optimize
Id
so thatOption<Id>
is the same size asId
#3932 - Parallel tessellation with opt-in
rayon
feature #3934
eframe changelog
- Update
wgpu
to 0.19 #3824 - Disable the default features of
wgpu
#3875 - Much more accurate
cpu_usage
timing #3913 - Update to puffin 0.19 #3940
Desktop/Native:
- Keep
ViewportInfo::maximized
andminimized
up-to-date on Windows #3831 (thanks @rustbasic!) - Handle
IconData::default()
without crashing #3842 - Fix Android crash on resume #3847 #3867 (thanks @Garoven!)
- Add
WgpuConfiguration::desired_maximum_frame_latency
#3874 - Don't call
App::update
on minimized windows #3877 (thanks @rustbasic!)
Web:
0.26.0 Alpha 1 - Selectable Labels
Try it out with version string 0.26.0-alpha.1
Changelogs
Full diff at https://github.com/emilk/egui/compare/0.25.0..HEAD
egui
- Selectable text in Labels #3814
ComboBox
: add builder method for height #3001 (thanks @hinto-janai!)- Add keys
?
,/
,|
#3820 - Fix clickable widgets blocking scrolling on touch screens #3815 (thanks @lucasmerlin!)
- Fix
stable_dt
#3832 - Bug Fix :
Response::is_pointer_button_down_on
is now false the frame the button is released #3833 (thanks @rustbasic!) - Use runtime knowledge of OS for OS-specific text editing #3840
- Refactor: move text selection logic to own module #3843
- Fix: dragging to above/below a
TextEdit
orLabel
will select text to begin/end #3858 - Add
Response::contains_pointer
#3859 - Always set
response.hovered
to false when dragging another widget #3860 - Add
Align2::anchor_size
#3863 - Add
Context::debug_text
#3864 - Add some drag-and-drop-related APIs in
Response
andMemory
#3876 (thanks @abey79!) - Allow read access to shapes added to painter this frame #3866 (thanks @brunizzl!)
- Cross-widget text select #3870
- Smooth scrolling #3884
- Register callbacks with
Context::on_begin_frame
andon_end_frame
. #3886 - Improve
Response.dragged
,drag_started
andclicked
#3888 - Improve
Frame
API to allow picking color until after adding content #3889 - Add drag-and-drop APIs with payloads storage #3887
- Turn off text wrapping by default in combo-box popups #3912
Response.context_menu
now returns the response of the context menu, if open #3904 (thanks @AufarZakiev!)- Add opacity factor to
TextShape
#3916 (thanks @StratusFearMe21!) - Auto-repaint when widgets move or changes id. #3930
- Niche-optimize
Id
so thatOption<Id>
is the same size asId
#3932 - Parallell tessellation #3934
- Update to puffin 0.19 #3940
eframe
- Keep
ViewportInfo::maximized
andminimized
up-to-date on Windows #3831 (thanks @rustbasic!) - Update wgpu to 0.19 #3824
- Fix: handle
IconData::default()
without crashing #3842 - Fix Android crash on resume #3847 (thanks @Garoven!)
- Add
WgpuConfiguration::desired_maximum_frame_latency
#3874 egui-wgpu
: turn off the default features ofwgpu
#3875- Fix Android crash on resume with Glow backend #3867 (thanks @Garoven!)
- Don't call
App::update
on minimized windows #3877 (thanks @rustbasic!) - Much more accurate
cpu_usage
timing #3913 - Update to puffin 0.19 #3940
egui_extras
egui_plot
- Make
egui_plot::PlotMemory
public #3871 - Customizable spacing of grid and axis label spacing #3896
- Change default plot line thickness from 1.0 to 1.5 #3918
- Expand plot axes thickness to fit their labels #3921
- Plot items now have optional id which is returned in the plot's response when hovered #3920 (thanks @Wumpf!)
- Parallell tessellation #3934
egui_glow
- Add
x11
andwayland
features to egui-wgpu and egui_glow #3909 (thanks @YgorSouza!)
egui-wgpu
- Update wgpu to 0.19 #3824
- Add
WgpuConfiguration::desired_maximum_frame_latency
#3874 - Turn off the default features of
wgpu
#3875 - Re-try adapter creation if creation with WebGPU enabled fails and WebGL was enabled. #3895 (thanks @Wumpf!)
- Postpone call to get_current_texture #3914
- Add
x11
andwayland
features to egui-wgpu and egui_glow #3909 (thanks @YgorSouza!)
egui-winit
- Don't consume clipboard shortcuts #3812 (thanks @Dinnerbone!)
- ✋
egui_winit
: Allow getting theclipboard
andallow_ime
state #3724 (thanks @tosti007!)
epaint
- Add
Align2::anchor_size
#3863 - Add opacity factor to
TextShape
#3916 (thanks @StratusFearMe21!) - Parallell tessellation #3934
0.25.0 - Better keyboard input
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/
⚠️ BREAKING
- Ignore extra SHIFT and ALT when matching modifiers #3769
- Replace
Key::PlusEquals
withKey::Plus
andKey::Equals
#3769 - Removed
WidgetTextGalley
,WidgetTextJob
,RichText::into_text_job
,WidgetText::into_text_job
#3727 - Rename
TextBuffer::replace
toreplace_with
#3751
⭐ Added
- Replace a special
Color32::PLACEHOLDER
with widget fallback color #3727 - Add
Key
s forCut
Copy
Paste
[
]
,
\
:
.
;
+
=
#3725 #3373 #3649 #3769 (thanks @MarijnS95 and @mkrueger!) - Add
Key::from_name
,Key::ALL
#3649 - Add
Event::Key::physical_key
#3649 - Add indeterminate state to checkbox #3605 (thanks @YgorSouza!)
- Add
Color32::from_hex
andColor32::to_hex
#3570 #3777 (thanks @YgorSouza!) - Add
DragValue
s for RGB(A) in the color picker #2734 (thanks @IVAN-MK7!) - Add option to customize progress bar rounding #2881 (thanks @YgorSouza!)
- Add methods to load/store
TextEditState
undoer #3479 (thanks @LoganDark!) ScrollArea
: Add option to always scroll the only enabled direction #3710 (thanks @untbu!)
🔧 Changed
Grid
now followsstyle.visuals.striped
if not explicitly overwritten #3723 (thanks @Wcubed!)- Allow arrow keys to move away focus from a Slider #3641 (thanks @fornwall!)
- Keep submenus open until another one is hovered #3055 (thanks @DannyStoll1!)
- Highlight the header of the topmost
Window
, controlled byVisuals.window_highlight_topmost
#3515 (thanks @GuillaumeSchmid!)
🐛 Fixed
- Derive
serde
Serialize
andDeserialize
forKeyboardShortcut
#3694 (thanks @zeozeozeo!) - Fix
Window
positioning bug when badpivot
is stored in app data #3721 (thanks @abey79!) - Impl
Clone
forFonts
#3737 - Add missing
ResizeDirection::East
#3749 (thanks @dbuch!) - Fix: don't open context menu on drag #3767
- Fix IME input of
CompositionEnd
without aCompositionStart
#3768 (thanks @FrankLeeC!) - Fix: allow using the full Private Use Area for custom fonts #3509 (thanks @varphone!)
- Fix: apply edited
DragValue
when it looses focus #3776 - Fix: Non-resizable
Area
s now ignore mouse input outside their bounds #3039 (thanks @fleabitdev!) - Highlight submenu buttons when hovered and open #3780
- Invalidate font atlas on any change to
pixels_per_point
, not matter how small #3698 (thanks @StarStarJ!) - Fix zoom-in shortcut (
Cmd +
) on non-English keyboards #3769
0.24.1 - 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 changelog
- Fix buggy text with multiple viewports on monitors with different scales #3666
eframe changelog
Desktop/Native:
- Fix window flashing white on launch #3631 (thanks @zeozeozeo!)
- Fix windowing problems when using the
x11
feature on Linux #3643 - Fix bugs when there are multiple monitors with different scales #3663
glow
backend: clear framebuffer color before callingApp::update
#3665
Web:
0.24.0 - Multi-viewport
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/
✨ 0.24 Highlights
You can now spawn multiple native windows on supported backends (e.g. eframe
), using the new viewport
API (#3172).
You can easily zoom any egui app using Cmd+Plus, Cmd+Minus or Cmd+0, just like in a browser (#3608).
Scrollbars are now hidden by default until you hover the ScrollArea
(#3539).
⭐ Added
- Multiple viewports/windows #3172 (thanks @konkitoman!)
- Introduce global
zoom_factor
#3608 - Floating scroll bars #3539
- Add redo support to
Undoer
#3478 (thanks @LoganDark!) - Add
egui::Vec2b
#3543 - Add max
Window
size & other size helpers #3537 (thanks @arduano!) - Allow changing shape of slider handle #3429 (thanks @YgorSouza!)
RawInput::viewports
contains a list of all viewports. Access the current one withctx.input(|i| i.viewport())
🔧 Changed
🐛 Fixed
- Fix upside down slider in the vertical orientation #3424 (thanks @YgorSouza!)
- Make slider step account for range start #3488 (thanks @YgorSouza!)
- Fix rounding of
ImageButton
#3531 (thanks @chriscate!) - Fix naming:
constraint_to
->constrain_to
#3438 (thanks @rinde!) - Fix Shift+Tab behavior when no widget is focused #3498 (thanks @DataTriny!)
- Fix scroll not sticking when scrollbar is hidden #3434 (thanks @LoganDark!)
- Add
#[inline]
to all builder-pattern functions #3557 - Properly reverse bool animation if value changes before it's finished #3577 (thanks @YgorSouza!)
⚠️ BREAKING
egui::gui_zoom::zoom_with_keyboard_shortcuts
is gone, replaced withOptions::zoom_with_keyboard
, which istrue
by defaultSpacing::scroll_bar_X
has been moved toSpacing::scroll_bar.X
Context::set_pixels_per_point
now callsContext::set_zoom_level
, and it may make sense for you to call that directly instead- If you are using
eframe
, check out the breaking changes in theeframe
changelog
For integrations
There are several changes relevant to integrations.
- Added
crate::RawInput::viewports
with information about all active viewports - The repaint callback set by
Context::set_request_repaint_callback
now points to which viewport should be repainted Context::run
now returns a list ofViewportOutput
inFullOutput
which should result in their own independent windows- There is a new
Context::set_immediate_viewport_renderer
for setting up the immediate viewport integration - If you support viewports, you need to call
Context::set_embed_viewports(false)
, or all new viewports will be embedded (the default behavior)
0.23.0 - New image API
egui is an easy-to-use immediate mode GUI in pure Rust. eframe is the official egui framework, allowing you to run egui on both web and native.
This release contains a simple and powerful image API:
// Load from web:
ui.image("https://www.example.com/some_image.png");
// Include image in the binary using `include_bytes`:
ui.image(egui::include_image!("../assets/ferris.svg"));
// With options:
ui.add(
egui::Image::new("file://path/to/image.jpg")
.max_width(200.0)
.rounding(10.0),
);
The API is based on a plugin-system, where you can tell egui
how to load the images, and from where.
egui_extras
comes with loaders for you, so all you need to do is add the following to your Cargo.toml
:
egui_extras = { version = "0.23", features = ["all_loaders"] }
image = { version = "0.24", features = ["jpeg", "png"] } # Add the types you want support for
And this to your code:
egui_extras::install_image_loaders(egui_ctx);
Try the live demo at https://www.egui.rs/
0.22.0 - A plethora of small improvements
egui is an easy-to-use immediate mode GUI in pure Rust. eframe is the official egui framework, allowing you to run egui on both web and native.
There's a bunch of improvements in 0.22, especially to eframe:
- eframe now supports application icons on Windows and Mac. Set it with
NativeOptions::icon_data
- eframe will now follow the system dark/light mode live with
NativeOptions::follow_system_theme
. Works both on native and on web! - The error reporting on the web is also much nicer, with panics being caught, logged, and is accessible to JavaScript
Try the live demo at https://www.egui.rs/
0.21.0 - Deadlock fix and winit update
This is a relatively minor release, but with a major breaking change in the egui API to prevent a rare deadlock.
Full changelog: https://github.com/emilk/egui/blob/master/CHANGELOG.md
0.20.1 - Fix key-repeats
Release 0.20.1 - Fix key-repeat