Skip to content

Releases: emilk/egui

0.26.0 - Text selection in labels

05 Feb 16:43
Compare
Choose a tag to compare

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/

text_selection

egui changelog

⚠️ BREAKING

  • Always set response.hovered to false when dragging another widget #3860
  • InputState::scroll_delta has been replaced by InputState::raw_scroll_delta and InputState::smooth_scroll_delta #3884
  • Improve Response.dragged, drag_started and clicked #3888

⭐ Added

  • Selectable text in Labels #3814 #3870
  • Add some drag-and-drop-related APIs in Response and Memory #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 and on_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 or Label 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 that Option<Id> is the same size as Id #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 and minimized 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:

  • When using wgpu on web, eframe will try to use WebGPU if available, then fall back to WebGL #3824 #3895 (thanks @Wumpf!)

0.26.0 Alpha 1 - Selectable Labels

01 Feb 19:31
Compare
Choose a tag to compare
Pre-release

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 or Label 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 and Memory #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 and on_end_frame. #3886
  • Improve Response.dragged, drag_started and clicked #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 that Option<Id> is the same size as Id #3932
  • Parallell tessellation #3934
  • Update to puffin 0.19 #3940

eframe

  • Keep ViewportInfo::maximized and minimized 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 of wgpu #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 and wayland 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 and wayland features to egui-wgpu and egui_glow #3909 (thanks @YgorSouza!)

egui-winit

  • Don't consume clipboard shortcuts #3812 (thanks @Dinnerbone!)
  • egui_winit: Allow getting the clipboard and allow_ime state #3724 (thanks @tosti007!)

epaint

0.25.0 - Better keyboard input

08 Jan 11:36
Compare
Choose a tag to compare

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 with Key::Plus and Key::Equals #3769
  • Removed WidgetTextGalley, WidgetTextJob, RichText::into_text_job, WidgetText::into_text_job #3727
  • Rename TextBuffer::replace to replace_with #3751

⭐ Added

🔧 Changed

  • Grid now follows style.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 by Visuals.window_highlight_topmost #3515 (thanks @GuillaumeSchmid!)

🐛 Fixed

  • Derive serde Serialize and Deserialize for KeyboardShortcut #3694 (thanks @zeozeozeo!)
  • Fix Window positioning bug when bad pivot is stored in app data #3721 (thanks @abey79!)
  • Impl Clone for Fonts #3737
  • Add missing ResizeDirection::East #3749 (thanks @dbuch!)
  • Fix: don't open context menu on drag #3767
  • Fix IME input of CompositionEnd without a CompositionStart #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 Areas 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

30 Nov 16:54
Compare
Choose a tag to compare

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 calling App::update #3665

Web:

  • Fix click-to-copy on Safari #3621
  • Don't throw away frames on click/copy/cut #3623
  • Remove dependency on tts #3651

0.24.0 - Multi-viewport

23 Nov 15:28
Compare
Choose a tag to compare

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/

code-example

✨ 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 with ctx.input(|i| i.viewport())

🔧 Changed

  • Replace Id::null() with Id::NULL #3544
  • Update MSRV to Rust 1.72 #3595
  • Update puffin to 0.18 #3600

🐛 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 with Options::zoom_with_keyboard, which is true by default
  • Spacing::scroll_bar_X has been moved to Spacing::scroll_bar.X
  • Context::set_pixels_per_point now calls Context::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 the eframe 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 of ViewportOutput in FullOutput 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

28 Sep 06:47
Compare
Choose a tag to compare

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

23 May 18:07
Compare
Choose a tag to compare

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

08 Feb 19:39
Compare
Choose a tag to compare

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

11 Dec 16:21
Compare
Choose a tag to compare
Release 0.20.1 - Fix key-repeat

0.20.0 - AccessKit, prettier text, overlapping widgets

08 Dec 14:27
Compare
Choose a tag to compare