
* Use old 1.51 toolchain instead of bleeding edge 1.52 and 1.53 has problems with incremental compilation, so some people chose to stay on 1.51 for now. So let's make sure egui supports 1.51 for a while! * Update to cint 0.2.2 to get rust 1.51.0 compatability
15 KiB
15 KiB
egui changelog
All notable changes to the egui crate will be documented in this file.
NOTE: eframe
, egui_web
and egui_glium
have their own changelogs!
Unreleased
Added ⭐
- Plot legend improvements.
- Line markers for plots.
- Add right and bottom panels (
SidePanel::right
andPanel::bottom
). - Add resizable panels.
- Add an option to overwrite frame of a
Panel
. - Add
ScrollArea::show_rows
for efficient scrolling of huge UI:s. - Add
Ui::set_visible
as a way to hide widgets. - Add
Style::override_text_style
to easily change the text style of everything in aUi
(or globally). - You can now change
TextStyle
on checkboxes, radio buttons andSelectableLabel
. - Add support for cint under
cint
feature. - Add features
extra_asserts
andextra_debug_asserts
to enable additional checks. TextEdit
now supports edits on a generic buffer usingTextBuffer
.- Add
Context::set_debug_on_hover
andegui::trace!(ui)
- Add
ScrollArea::enable_scrolling
to allow freezing scrolling when editing TextEdit widgets within it
Changed 🔧
- Minimum Rust version is now 1.51 (used to be 1.52)
- Tweaked the default visuals style.
- Plot: Changed
Curve
toLine
. TopPanel::top
is nowTopBottomPanel::top
.SidePanel::left
no longet takes the default width by argument, but by a builder call.
Fixed 🐛
- Fix invisible scroll bar when native window is too narrow for egui.
0.12.0 - 2021-05-10 - Multitouch, user memory, window pivots, and improved plots
Added ⭐
- Add anchors to windows and areas so you can put a window in e.g. the top right corner.
- Make labels interactive with
Label::sense(Sense::click())
. - Add
Response::request_focus
andResponse::surrender_focus
. - Add
TextEdit::code_editor
(VERY basic). - Pan and zoom plots.
- Add plot legends.
- Users can now store custom state in
egui::Memory
. - Add
Response::on_disabled_hover_text
to show tooltip for disabled widgets. - Zoom input: ctrl-scroll and (on
egui_web
) trackpad-pinch gesture. - Support for raw multi touch events,
enabling zoom, rotate, and more. Works with
egui_web
on mobile devices, and should work withegui_glium
for certain touch devices/screens. - Add (optional) compatibility with mint.
Changed 🔧
- Make
Memory::has_focus
public (again). Plot
must now be given a name that is unique within its scope.- Tab only selects labels if the
screen_reader
option is turned on. - Rename
ui.wrap
toui.scope
.
Fixed 🐛
- Fix defocus-bug on touch screens.
- Fix bug with the layout of wide
DragValue
:s.
Removed 🔥
- Moved experimental markup language to
egui_demo_lib
0.11.0 - 2021-04-05 - Optimization, screen reader & new layout logic
Added ⭐
- You can now give focus to any clickable widget with tab/shift-tab.
- Use space or enter to click the selected widget.
- Use arrow keys to adjust sliders and
DragValue
s.
- egui will now output events when widgets gain keyboard focus.
- This can be hooked up to a screen reader to aid the visually impaired
- Add the option to restrict the dragging bounds of
Window
andArea
to a specified area usingdrag_bounds(rect)
. - Add support for small and raised text.
- Add
ui.set_row_height
. - Add
DebugOptions::show_widgets
to debug layouting by hovering widgets. - Add
ComboBox
to more easily customize combo boxes. - Add
Slider::new
andDragValue::new
to replace old type-specific constructors. - Add
TextEdit::password
to hide input characters.
Changed 🔧
ui.advance_cursor
is now calledui.add_space
.kb_focus
is now just calledfocus
.
Fixed 🐛
- Fix some bugs related to centered layouts.
- Fixed secondary-click to open a menu.
- Fix panic for zero-range sliders and zero-speed drag values.
- Fix false id clash error for wrapping text.
- Fix bug that would close a popup (e.g. the color picker) when clicking inside of it.
Deprecated ☢️
- Deprectated
combo_box_with_label
in favor of newComboBox
. - Deprectated type-specific constructors for
Slider
andDragValue
(Slider::f32
,DragValue::usize
etc).
0.10.0 - 2021-02-28 - Plot and polish

Added ⭐
- Add
egui::plot::Plot
to plot some 2D data. - Add
Ui::hyperlink_to(label, url)
. - Sliders can now have a value prefix and suffix (e.g. the suffix
"°"
works like a unit). Context::set_pixels_per_point
to control the scale of the UI.- Add
Response::changed()
to query if e.g. a slider was dragged, text was entered or a checkbox was clicked. - Add support for all integers in
DragValue
andSlider
(except 128-bit).
Changed 🔧
- Improve the positioning of tooltips.
- Only show tooltips if mouse is still.
Slider
will now show the value display by default, unless turned off with.show_value(false)
.- The
Slider
value is now aDragValue
which when dragged can pick values outside of the slider range (unlessclamp_to_range
is set).
0.9.0 - 2021-02-07 - Light Mode and much more

Added ⭐
- Add support for secondary and middle mouse buttons.
- Add
Label
methods for code, strong, strikethrough, underline and italics. - Add
ui.group(|ui| { … })
to visually group some widgets within a frame. - Add
Ui
helpers for doing manual layout (ui.put
,ui.allocate_ui_at_rect
and more). - Add
ui.set_enabled(false)
to disable all widgets in aUi
(grayed out and non-interactive). - Add
TextEdit::hint_text
for showing a weak hint text when empty. egui::popup::popup_below_widget
: show a popup area below another widget.- Add
Slider::clamp_to_range(bool)
: if set, clamp the incoming and outgoing values to the slider range. - Add:
ui.spacing()
,ui.spacing_mut()
,ui.visuals()
,ui.visuals_mut()
. - Add:
ctx.set_visuals()
. - You can now control text wrapping with
Style::wrap
. - Add
Grid::max_col_width
.
Changed 🔧
- Text will now wrap at newlines, spaces, dashes, punctuation or in the middle of a words if necessary, in that order of priority.
- Widgets will now always line break at
\n
characters. - Widgets will now more intelligently choose wether or not to wrap text.
mouse
has been renamedpointer
everywhere (to make it clear it includes touches too).- Most parts of
Response
are now methods, soif ui.button("…").clicked {
is nowif ui.button("…").clicked() {
. Response::active
is now gone. You can useresponse.dragged()
orresponse.clicked()
instead.- Backend: pointer (mouse/touch) position and buttons are now passed to egui in the event stream.
DragValue::range
is now calledclamp_range
and also clamps incoming values.- Renamed
Triangles
toMesh
. - The tessellator now wraps the clip rectangle and mesh in
struct ClippedMesh(Rect, Mesh)
. Mesh::split_to_u16
now returns a 16-bit indexedMesh16
.
Fixed 🐛
- It is now possible to click widgets even when FPS is very low.
- Tessellator: handle sharp path corners better (switch to bevel instead of miter joints for > 90°).
0.8.0 - 2021-01-17 - Grid layout & new visual style

Added ⭐
- Added a simple grid layout (
Grid
). - Added
ui.allocate_at_least
andui.allocate_exact_size
. - Added function
InputState::key_down
. - Added
Window::current_pos
to position a window.
Changed 🔧
- New simpler and sleeker look!
- Rename
PaintCmd
toShape
. - Replace tuple
(Rect, Shape)
with tuple-structClippedShape
. - Rename feature
"serde"
to"persistence"
. - Break out the modules
math
andpaint
into separate cratesemath
andepaint
.
Fixed 🐛
- Fixed a bug that would sometimes trigger a "Mismatching panels" panic in debug builds.
Image
andImageButton
will no longer stretch to fill a justified layout.
0.7.0 - 2021-01-04
Added ⭐
- Add
ui.scroll_to_cursor
andresponse.scroll_to_me
(#81 by lucaspoffo). - Add
window.id(…)
andarea.id(…)
for overriding the defaultId
.
Changed 🔧
- Renamed
Srgba
toColor32
. - All color contructions now starts with
from_
, e.g.Color32::from_rgb
. - Renamed
FontFamily::VariableWidth
toFontFamily::Proportional
. - Removed
pixels_per_point
fromFontDefinitions
.
Fixed 🐛
RepaintSignal
now implementsSync
so it can be sent to a background thread.TextEdit
widgets are now slightly larger to accommodate their frames.
Deprecated ☢️
- Deprecated
color::srgba
.
0.6.0 - 2020-12-26
Added ⭐
- Turn off
Window
title bars withwindow.title_bar(false)
. ImageButton
-ui.add(ImageButton::new(...))
.ui.vertical_centered
andui.vertical_centered_justified
.ui.allocate_painter
helper.- Mouse-over explanation to duplicate ID warning.
- You can now easily constrain egui to a portion of the screen using
RawInput::screen_rect
. - You can now control the minimum and maixumum number of decimals to show in a
Slider
orDragValue
. - Add
egui::math::Rot2
: rotation helper. Response
now contains theId
of the widget it pertains to.ui.allocate_response
that allocates space and checks for interactions.- Add
response.interact(sense)
, e.g. to check for clicks on labels.
Changed 🔧
ui.allocate_space
now returns an(Id, Rect)
tuple.Arc<Context>
has been replaced withCtxRef
everywhere.- Slight tweak of the default
Style
and font sizes. SidePanel::left
andTopPanel::top
now takesimpl Hash
as first argument.- A
Window
may now cover an existingCentralPanel
. ui.image
now takesimpl Into<Vec2>
as asize
argument.- Made some more fields of
RawInput
optional. Slider
andDragValue
uses fewer decimals by default. See the full precision by hovering over the value.egui::App
: addedfn name(&self)
andfn clear_color(&self)
.- Combo boxes has scroll bars when needed.
- Expand
Window
+Resize
containers to be large enough for last frames content ui.columns
: Columns now defaults to justified top-to-down layouts.- Rename
Sense::nothing()
toSense::hover()
. - Replaced
parking_lot
dependency withatomic_refcell
by default.
Fixed 🐛
- The background for
CentralPanel
will now cover unused space too. ui.columns
: Improve allocated size estimation.
Deprecated ☢️
RawInput::screen_size
- useRawInput::screen_rect
instead.- left/centered/right column functions on
Ui
. ui.interact_hover
andui.hovered
.
0.5.0 - 2020-12-13
Added ⭐
- Emoji support: 1216 different emojis that work in any text.
- The Demo app comes with a Font Book to explore the available glyphs.
ui.horizontal_wrapped(|ui| ...)
: Add widgets on a row but wrap atmax_size
.ui.horizontal_wrapped_for_text
: Likeui.horizontal_wrapped
, but with spacing made for embedding text.ui.horizontal_for_text
: Likeui.horizontal
, but with spacing made for embedding text.egui::Layout
now supports justified layouts where contents is also centered, right-aligned, etc.ui.allocate_ui(size, |ui| ...)
: Easily create a child-Ui
of a given size.SelectableLabel
(ui.selectable_label
andui.selectable_value
): A text-button that can be selected.ui.small_button
: A smaller button that looks good embedded in text.ui.drag_angle_tau
: For those who want to specify angles as fractions of τ (a full turn).- Add
Resize::id_source
andScrollArea::id_source
to let the user avoid Id clashes.
Changed 🔧
- New default font: Ubuntu-Light.
- Make it simpler to override fonts in
FontDefinitions
. - Remove minimum button width.
- Refactor
egui::Layout
substantially, changing its interface. - Calling
on_hover_text
/on_hover_ui
multiple times will stack tooltips underneath the previous ones. - Text wrapping on labels, buttons, checkboxes and radio buttons is now based on the layout.
Removed 🔥
- Removed the
label!
macro.
0.4.0 - 2020-11-28
Added ⭐
TextEdit
improvements:- Much improved text editing, with better navigation and selection.
- Move focus between
TextEdit
widgets with tab and shift-tab. - Undo edtis in a
TextEdit
. - You can now check if a
TextEdit
lost keyboard focus withresponse.lost_focus
. - Added
ui.text_edit_singleline
andui.text_edit_multiline
.
- You can now debug why your
Ui
is unexpectedly wide withui.style_mut().debug.show_expand_width = true;
Changed 🔧
- Pressing enter in a single-line
TextEdit
will now surrender keyboard focus for it. - You must now be explicit when creating a
TextEdit
if you want it to be singeline or multiline. - Improved automatic
Id
generation, makingId
clashes less likely. - egui now requires modifier key state from the integration
- Added, renamed and removed some keys in the
Key
enum. - Fixed incorrect text wrapping width on radio buttons
Fixed 🐛
- Fixed bug where a lost widget could still retain keyboard focus.
0.3.0 - 2020-11-07
Added ⭐
- Panels: you can now create panels using
SidePanel
,TopPanel
andCentralPanel
. - You can now override the default egui fonts.
- Add ability to override text color with
visuals.override_text_color
. - The demo now includes a simple drag-and-drop example.
- The demo app now has a slider to scale all of egui.
Changed 🔧
ui.horizontal(...)
etc returnsResponse
.- Refactored the interface for
egui::app::App
. - Windows are now constrained to the screen.
Context::begin_frame()
no longer returns aUi
. Instead put your widgets into aSidePanel
,TopPanel
,CentralPanel
,Window
orArea
.Context::end_frame()
now returns shapes that need to be converted to triangles withContext::tessellate()
.- Anti-aliasing is now off by default in debug builds.
Removed 🔥
- You can no longer throw windows.
Fixed 🐛
- Fix a bug where some regions would slowly grow for non-integral scales (
pixels_per_point
).
0.2.0 - 2020-10-10
- Color picker
- Unicode characters in labels (limited by what the default font supports)
- Simple drop-down combo box menu
- Logarithmic sliders
- Optimization: coarse culling in the tessellator
- CHANGED: switch argument order of
ui.checkbox
andui.radio
0.1.4 - 2020-09-08
This is when I started the CHANGELOG.md, after almost two years of development. Better late than never.
- Widgets: label, text button, hyperlink, checkbox, radio button, slider, draggable value, text editing
- Layouts: horizontal, vertical, columns
- Text input: very basic, multiline, copy/paste
- Windows: move, resize, name, minimize and close. Automatically sized and positioned.
- Regions: resizing, vertical scrolling, collapsing headers (sections)
- Rendering: Anti-aliased rendering of lines, circles, text and convex polygons.
- Tooltips on hover