
Closes https://github.com/emilk/egui/issues/2068 Before this PR, the default font, Ubuntu-Light, was ~11% smaller than it should have been, and the default monospace font, Hack, was ~14% smaller. This means that setting the font size `12` in egui would yield smaller text than using that font size in any other app. Ooops! The change is that this PR now takes into account the ttf properties `units_per_em` and `height_unscaled`. If your egui application has specified you own font sizes or text styles you will see the text in your application grow larger, unless you go in and compensate by dividing all font sizes by ~1.21 for Ubuntu-Light/Proportional and ~1.16 for Hack/Monospace, and with something else if you are using a custom font! This effects any use of `FontId`, `RichText::size`, etc. This PR changes the default `Style::text_styles` to compensate, so the default egui style should look the same before and after this PR.
42 KiB
42 KiB
egui changelog
All notable changes to the egui
crate will be documented in this file.
NOTE: epaint
, eframe
, egui-winit
, egui_glium
, egui_glow
and egui-wgpu
have their own changelogs!
Unreleased
- ⚠️ BREAKING: Fix text being too small (#2069).
0.19.0 - 2022-08-20
Added ⭐
- Added
*_released
&*_clicked
methods forPointerState
(#1582). - Added
PointerButton::Extra1
andPointerButton::Extra2
(#1592). - Added
egui::hex_color!
to createColor32
's from hex strings under thecolor-hex
feature (#1596). - Optimized painting of filled circles (e.g. for scatter plots) by 10x or more (#1616).
- Added opt-in feature
deadlock_detection
to detect double-lock of mutexes on the same thread (#1619). - Added
InputState::stable_dt
: a more stable estimate for the delta-time in reactive mode (#1625). - You can now specify a texture filter for your textures (#1636).
- Added functions keys in
egui::Key
(#1665). - Added support for using
PaintCallback
shapes with the WGPU backend (#1684). - Added
Contex::request_repaint_after
(#1694). ctrl-h
now acts like backspace inTextEdit
(#1812).- Added
custom_formatter
method forSlider
andDragValue
(#1851). - Added
RawInput::has_focus
which backends can set to indicate whether the UI as a whole has the keyboard focus (#1859). - Added
PointerState::button_double_clicked()
andPointerState::button_triple_clicked()
(#1906). - Added
custom_formatter
,binary
,octal
, andhexadecimal
toDragValue
andSlider
(#1953)
Changed
- MSRV (Minimum Supported Rust Version) is now
1.61.0
(#1846). PaintCallback
shapes now require the whole callback to be put in anArc<dyn Any>
with the value being a backend-specific callback type (#1684).- Replaced
needs_repaint
inFullOutput
withrepaint_after
. Used to force repaint after the set duration in reactive mode (#1694). Layout::left_to_right
andLayout::right_to_left
now takes the vertical align as an argument. Previous default wasAlign::Center
.- Improved ergonomics of adding plot items. All plot items that take a series of 2D coordinates can now be created directly from
Vec<[f64; 2]>
. TheValue
andValues
types were removed in favor ofPlotPoint
andPlotPoints
respectively (#1816). TextBuffer
no longer needs to implementAsRef<str>
(#1824).
Fixed 🐛
- Fixed
Response::changed
forui.toggle_value
(#1573). - Fixed
ImageButton
's changing background padding on hover (#1595). - Fixed
Plot
auto-bounds bug (#1599). - Fixed dead-lock when alt-tabbing while also showing a tooltip (#1618).
- Fixed
ScrollArea
scrolling when editing an unrelatedTextEdit
(#1779). - Fixed
Slider
not always generating events on change (#1854). - Fixed jitter of anchored windows for the first frame (#1856).
- Fixed focus behavior when pressing Tab in a UI with no focused widget (#1861).
- Fixed automatic plot bounds (#1865).
0.18.1 - 2022-05-01
- Change
Shape::Callback
from&dyn Any
to&mut dyn Any
to support more backends.
0.18.0 - 2022-04-30
Added ⭐
- Added
Shape::Callback
for backend-specific painting, with an example (#1351). - Added
Frame::canvas
(#1362). Context::request_repaint
will now wake up UI thread, if integrations has calledContext::set_request_repaint_callback
(#1366).- Added
Plot::allow_scroll
,Plot::allow_zoom
no longer affects scrolling (#1382). - Added
Ui::push_id
to resolve id clashes (#1374). - Added
ComboBox::icon
(#1405). - Added
Ui::scroll_with_delta
. - Added
Frame::outer_margin
. - Added
Painter::hline
andPainter::vline
. - Added
Link
andui.link
(#1506). - Added triple-click support; triple-clicking a TextEdit field will select the whole paragraph (#1512).
- Added
Plot::x_grid_spacer
andPlot::y_grid_spacer
for custom grid spacing (#1180). - Added
Ui::spinner()
shortcut method (#1494). - Added
CursorIcon
s for resizing columns, rows, and the eight cardinal directions. - Added
Ui::toggle_value
. - Added ability to add any widgets to the header of a collapsing region (#1538).
Changed 🔧
- MSRV (Minimum Supported Rust Version) is now
1.60.0
(#1467). ClippedMesh
has been replaced withClippedPrimitive
(#1351).- Renamed
Frame::margin
toFrame::inner_margin
. - Renamed
AlphaImage
toFontImage
to discourage any other use for it (#1412). - Warnings will be painted on screen when there is an
Id
clash forGrid
,Plot
orScrollArea
(#1452). Checkbox
andRadioButton
with an empty label (""
) will now take up much less space (#1456).- Replaced
Memory::top_most_layer
with more flexibleMemory::layer_ids
. - Renamed the feature
convert_bytemuck
tobytemuck
(#1467). - Renamed the feature
serialize
toserde
(#1467). - Renamed
Painter::sub_region
toPainter::with_clip_rect
.
Fixed 🐛
- Fixed
ComboBox
es always being rendered left-aligned (#1304). - Fixed ui code that could lead to a deadlock (#1380).
- Text is darker and more readable in bright mode (#1412).
- Fixed a lot of broken/missing doclinks (#1419).
- Fixed
Ui::add_visible
sometimes leaving theUi
in a disabled state (#1436). - Added line breaking rules for Japanese text (#1498).
Deprecated ☢️
- Deprecated
CollapsingHeader::selectable
(#1538).
Removed 🔥
- Removed the
single_threaded/multi_threaded
flags - egui is now always thread-safe (#1390).
Contributors 🙏
- 4JX
- AlexxxRu
- ascclemens
- awaken1ng
- bigfarts
- bobyclaws
- Bromeon
- cloudhead
- collin-kemper
- cpterry
- dbuch
- DusterTheFirst
- Edgeworth
- elwerene
- follower
- Friz64
- Hunter522
- Jake-Shadle
- jean-airoldie
- JelNiSlaw
- juancampa
- LU15W1R7H
- mbillingr
- nicklasmoeller
- rukai
- tami5
- Titaniumtown
- trevyn
- waynr
- zam-5
0.17.0 - 2022-02-22 - Improved font selection and image handling
Added ⭐
- Much improved font selection (#1154):
- You can now select any font size and family using
RichText::size
amdRichText::family
and the newFontId
. - Easily change text styles with
Style::text_styles
. - Added
Ui::text_style_height
. - Added
TextStyle::resolve
. - Made the v-align and scale of user fonts tweakable (#1241).
- You can now select any font size and family using
- Plot:
- Added
Plot::x_axis_formatter
andPlot::y_axis_formatter
for custom axis labels (#1130). - Added
Plot::allow_boxed_zoom()
,Plot::boxed_zoom_pointer()
for boxed zooming on plots (#1188). - Added plot pointer coordinates with
Plot::coordinates_formatter
(#1235). - Added linked axis support for plots via
plot::LinkedAxisGroup
(#1184).
- Added
Context::load_texture
to convert an image into a texture which can be displayed using e.g.ui.image(texture, size)
(#1110).Ui::input_mut
to modify how subsequent widgets see theInputState
and a convenience methodInputState::consume_key
for shortcuts or hotkeys (#1212).- Added
Ui::add_visible
andUi::add_visible_ui
. - Added
CollapsingHeader::icon
to override the default open/close icon using a custom function. (1147). - Added
ui.data()
,ctx.data()
,ctx.options()
andctx.tessellation_options()
(#1175). - Added
Response::on_hover_text_at_pointer
as a convenience akin toResponse::on_hover_text
(1179). - Opt-in dependency on
tracing
crate for logging warnings (#1192). - Added
ui.weak(text)
. - Added
Slider::step_by
(1225). - Added
Context::move_to_top
andContext::top_most_layer
for managing the layer on the top (#1242). - Support a subset of macOS' emacs input field keybindings in
TextEdit
(#1243). - Added ability to scroll an UI into view without specifying an alignment (1247).
- Added
Ui::scroll_to_rect
(1252).
Changed 🔧
- ⚠️
Context::input
andUi::input
now locks a mutex. This can lead to a dead-lock is used in anif let
binding!if let Some(pos) = ui.input().pointer.latest_pos()
and similar must now be rewritten on two lines.- Search for this problem in your code using the regex
if let .*input
.
- Better contrast in the default light mode style (#1238).
- Renamed
CtxRef
toContext
(#1050). Context
can now be cloned and stored between frames (#1050).- Renamed
Ui::visible
toUi::is_visible
. - Split
Event::Text
intoEvent::Text
andEvent::Paste
(#1058). - Replaced
Style::body_text_style
with more genericStyle::text_styles
(#1154). TextStyle
is no longerCopy
(#1154).- Replaced
TextEdit::text_style
withTextEdit::font
(#1154). Plot::highlight
now takes abool
argument (#1159).ScrollArea::show
now returns aScrollAreaOutput
, so you might need to add.inner
after the call to it (#1166).- Replaced
corner_radius: f32
withrounding: Rounding
, allowing per-corner rounding settings (#1206). - Replaced Frame's
margin: Vec2
withmargin: Margin
, allowing for different margins on opposing sides (#1219). - Renamed
Plot::custom_label_func
toPlot::label_formatter
(#1235). Areas::layer_id_at
ignores non-interatable layers (i.e. Tooltips) (#1240).ScrollArea
s will not shrink below a certain minimum size, set bymin_scrolled_width/min_scrolled_height
(1255).- For integrations:
Output
has now been renamedPlatformOutput
andContext::run
now returns the newFullOutput
(#1292).FontImage
has been replaced byTexturesDelta
(found inFullOutput
), describing what textures were loaded and freed each frame (#1110).- The painter must support partial texture updates (#1149).
- Added
RawInput::max_texture_side
which should be filled in with e.g.GL_MAX_TEXTURE_SIZE
(#1154).
Fixed 🐛
- Plot
Orientation
was not public, although fields using this type were (#1130). - Context menus now respects the theme (#1043).
- Calling
Context::set_pixels_per_point
before the first frame will now work. - Tooltips that don't fit the window don't flicker anymore (#1240).
- Scroll areas now follow text cursor (#1252).
- Slider: correctly respond with drag and focus events when interacting with the value directly (1270).
Contributors 🙏
- 4JX
- 55nknown
- AlanRace
- AlexxxRu
- awaken1ng
- BctfN0HUK7Yg
- Bromeon
- cat-state
- danielkeller
- dvec
- Friz64
- Gordon01
- HackerFoo
- juancampa
- justinj
- lampsitter
- LordMZTE
- manuel-i
- Mingun
- niklaskorz
- nongiach
- parasyte
- psiphi75
- s-nie
- t18b219k
- terhechte
- xudesheng
- yusdacra
0.16.1 - 2021-12-31 - Add back CtxRef::begin_frame,end_frame
Added ⭐
- Added back
CtxRef::begin_frame,end_frame
as an alternative toCtxRef::run
.
0.16.0 - 2021-12-29 - Context menus and rich text
Added ⭐
- Added context menus: See
Ui::menu_button
andResponse::context_menu
(#543). - Most widgets containing text (
Label
,Button
etc) now supports rich text (#855). - Plots:
- You can now read and write the cursor of a
TextEdit
(#848). - When using a custom font you can now specify a font index (#873).
- Added vertical sliders with
Slider::new(…).vertical()
(#875). - Added
Button::image_and_text
(#832). - Added
CollapsingHeader::open
to control if it is open or collapsed (#1006). - Added
egui::widgets::color_picker::color_picker_color32
to show the color picker.
Changed 🔧
- MSRV (Minimum Supported Rust Version) is now
1.56.0
. ui.add(Button::new("…").text_color(…))
is nowui.button(RichText::new("…").color(…))
(same forLabel
)(#855).- Plots now provide a
show
method that has to be used to add items to and show the plot (#766). menu::menu(ui, ...)
is nowui.menu_button(...)
(#543)- Replaced
CtxRef::begin_frame
andend_frame
withCtxRef::run
(#872). - Replaced
scroll_delta
andzoom_delta
inRawInput
withEvent::Scroll
andEvent::Zoom
. - Unified the four
Memory
data buckets (data
,data_temp
,id_data
andid_data_temp
) into a singleMemory::data
, with a new interface (#836). - Replaced
Ui::__test
withegui::__run_test_ui
(#872).
Fixed 🐛
- Fixed
ComboBox
and other popups getting clipped to parent window (#885). - The color picker is now better at keeping the same hue even when saturation goes to zero (#886).
Removed 🔥
- Removed
egui::math
(useegui::emath
instead). - Removed
egui::paint
(useegui::epaint
instead).
Contributors 🙏
- 5225225: #849.
- aevyrie: #966.
- B-Reif: #875.
- Bromeon: #863, #918.
- d10sfan: #832.
- EmbersArc: #766, #892.
- Hperigo: #905.
- isegal: #934.
- mankinskin: #543.
- niladic: #499, #863.
- singalen: #973.
- sumibi-yakitori: #830, #870.
- t18b219k: #868, #888.
0.15.0 - 2021-10-24 - Syntax highlighting and hscroll

Added ⭐
- Added horizontal scrolling support to
ScrollArea
andWindow
(opt-in). TextEdit::layouter
: Add custom text layout for e.g. syntax highlighting or WYSIWYG.Fonts::layout_job
: New text layout engine allowing mixing fonts, colors and styles, with underlining and strikethrough.- Added
ui.add_enabled(bool, widget)
to easily add a possibly disabled widget. - Added
ui.add_enabled_ui(bool, |ui| …)
to create a possibly disabled UI section. - Added feature
"serialize"
separatedly from"persistence"
. - Added
egui::widgets::global_dark_light_mode_buttons
to easily add buttons for switching the egui theme. TextEdit
can now be used to show text which can be selected and copied, but not edited.- Added
Memory::caches
for caching things from one frame to the next.
Changed 🔧
- Change the default monospace font to Hack.
- Label text will now be centered, right-aligned and/or justified based on the layout of the
Ui
it is in. Hyperlink
will now word-wrap just like aLabel
.- All
Ui
s must now have a finitemax_rect
.- Deprecated:
max_rect_finite
,available_size_before_wrap_finite
andavailable_rect_before_wrap_finite
.
- Deprecated:
Painter
/Fonts
: text layout now expect a color when creating aGalley
. You may override that color withPainter::galley_with_color
.- MSRV (Minimum Supported Rust Version) is now
1.54.0
. - By default,
DragValue
s no longer show a tooltip when hovered. Change withStyle::explanation_tooltips
. - Smaller and nicer color picker.
ScrollArea
will auto-shrink to content size unless told otherwise usingScollArea::auto_shrink
.- By default,
Slider
'sclamp_to_range
is set to true. - Renamed
TextEdit::enabled
toTextEdit::interactive
. ui.label
(and friends) now takeimpl ToString
as argument instead ofimpl Into<Label>
.
Fixed 🐛
- Fixed wrongly sized multiline
TextEdit
in justified layouts. - Fixed clip rectangle of windows that don't fit the central area.
- Show tooltips above widgets on touch screens.
- Fixed popups sometimes getting clipped by panels.
Removed 🔥
- Replace
Button::enabled
withui.add_enabled
.
Contributors 🙏
- AlexApps99
- baysmith
- bpostlethwaite
- cwfitzgerald
- DrOptix
- JerzySpendel
- NiceneNerd
- parasyte
- spersson
- Stock84-dev
- sumibi-yakitori
- t18b219k
- TobTobXX
- zu1k
0.14.2 - 2021-08-28 - Window resize fix
Fixed 🐛
- Fixed window resize bug introduced in
0.14.1
.
0.14.1 - 2021-08-28 - Layout bug fixes
Added ⭐
- Added
Ui::horizontal_top
.
Fixed 🐛
- Fixed
set_width/set_min_width/set_height/set_min_height/expand_to_include_x/expand_to_include_y
. - Make minimum grid column width propagate properly.
- Make sure
TextEdit
contents expand to fill width if applicable. ProgressBar
: add a minimum width and fix for having it in an infinite layout.- Fixed sometimes not being able to click inside a combo box or popup menu.
0.14.0 - 2021-08-24 - Ui panels and bug fixes
Added ⭐
- Panels can now be added to any
Ui
. - Plot:
- Line styles.
- Added
show_background
andshow_axes
methods toPlot
.
- Progress bar.
Grid::num_columns
: allow the last column to take up the rest of the space of the parentUi
.- Added an API for dropping files into egui (see
RawInput
). CollapsingHeader
can now optionally be selectable.
Changed 🔧
- A single-line
TextEdit
will now clip text that doesn't fit in it, and scroll. - Return closure return value from
Area::show
,ComboBox::show_ui
,ComboBox::combo_box_with_label
,Window::show
,popup::*
,menu::menu
. - Only move/resize windows with primary mouse button.
- Tooltips are now moved to not cover the widget they are attached to.
Fixed 🐛
- Fixed custom font definitions getting replaced when
pixels_per_point
is changed. - Fixed
lost_focus
forTextEdit
. - Clicking the edge of a menu button will now properly open the menu.
- Fixed hover detection close to an
Area
. - Fixed case where
Plot
'smin_auto_bounds
could be ignored after the first call toPlot::ui
. - Fixed slow startup when using large font files.
Contributors 🙏
0.13.1 - 2021-06-28 - Plot fixes
Added ⭐
- Plot: you can now set the stroke of a
HLine/VLine
.
Changed 🔧
Plot::new
now takes anid_source: impl Hash
instead of aname: impl ToString
. Functionally it is the same.
0.13.0 - 2021-06-24 - Better panels, plots and new visual style
Added ⭐
- Plot:
- Panels:
- Added right and bottom panels (
SidePanel::right
andPanel::bottom
). - Panels can now be resized.
- Added an option to overwrite frame of a
Panel
.
- Added right and bottom panels (
- Improve accessibility / screen reader.
- Added
ScrollArea::show_rows
for efficient scrolling of huge UI:s. - Added
ScrollArea::enable_scrolling
to allow freezing scrolling when editing TextEdit widgets within it - Added
Ui::set_visible
as a way to hide widgets. - Added
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
. - Added support for cint under
cint
feature. - Added features
extra_asserts
andextra_debug_asserts
to enable additional checks. TextEdit
now supports edits on a generic buffer usingTextBuffer
.- Added
Context::set_debug_on_hover
andegui::trace!(ui)
Changed 🔧
- Minimum Rust version is now 1.51 (used to be 1.52)
- Tweaked the default visuals style.
- Plot: Renamed
Curve
toLine
. TopPanel::top
is nowTopBottomPanel::top
.SidePanel::left
no longet takes the default width by argument, but by a builder call.SidePanel::left
is resizable by default.
Fixed 🐛
- Fixed uneven lettering on non-integral device scales ("extortion lettering").
- Fixed 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 ⭐
- Added 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())
. - Added
Response::request_focus
andResponse::surrender_focus
. - Added
TextEdit::code_editor
(VERY basic). - Pan and zoom plots.
- Add plot legends.
- Users can now store custom state in
egui::Memory
. - Added
Response::on_disabled_hover_text
to show tooltip for disabled widgets. - Zoom input: ctrl-scroll and (on
eframe
web) trackpad-pinch gesture. - Support for raw multi touch events,
enabling zoom, rotate, and more. Works with
eframe
web on mobile devices, and should work withegui_glium
for certain touch devices/screens. - Added (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. - Renamed
ui.wrap
toui.scope
.
Fixed 🐛
- Fixed defocus-bug on touch screens.
- Fixed 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
- Added the option to restrict the dragging bounds of
Window
andArea
to a specified area usingdrag_bounds(rect)
. - Added support for small and raised text.
- Added
ui.set_row_height
. - Added
DebugOptions::show_widgets
to debug layouting by hovering widgets. - Added
ComboBox
to more easily customize combo boxes. - Added
Slider::new
andDragValue::new
to replace old type-specific constructors. - Added
TextEdit::password
to hide input characters.
Changed 🔧
ui.advance_cursor
is now calledui.add_space
.kb_focus
is now just calledfocus
.
Fixed 🐛
- Fixed some bugs related to centered layouts.
- Fixed secondary-click to open a menu.
- Fix panic for zero-range sliders and zero-speed drag values.
- Fixed false id clash error for wrapping text.
- Fixed 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 ⭐
- Added
egui::plot::Plot
to plot some 2D data. - Added
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.- Added
Response::changed()
to query if e.g. a slider was dragged, text was entered or a checkbox was clicked. - Added 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 ⭐
- Added support for secondary and middle mouse buttons.
- Added
Label
methods for code, strong, strikethrough, underline and italics. - Added
ui.group(|ui| { … })
to visually group some widgets within a frame. - Added
Ui
helpers for doing manual layout (ui.put
,ui.allocate_ui_at_rect
and more). - Added
ui.set_enabled(false)
to disable all widgets in aUi
(grayed out and non-interactive). - Added
TextEdit::hint_text
for showing a weak hint text when empty. egui::popup::popup_below_widget
: show a popup area below another widget.- Added
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
. - Added
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 whether 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!
- Renamed
PaintCmd
toShape
. - Replace tuple
(Rect, Shape)
with tuple-structClippedShape
. - Renamed 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 ⭐
- Added
ui.scroll_to_cursor
andresponse.scroll_to_me
(#81 by lucaspoffo). - Added
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
. - Added
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.- Added
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.- Renamed
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).- Added
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.
- Added 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 🐛
- Fixed 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
Earlier:
- 2020-08-10: renamed the project to "egui"
- 2020-05-30: first release on crates.io (0.1.0)
- 2020-04-01: serious work starts (pandemic project)
- 2019-03-12: gave a talk about what would later become egui: https://www.youtube.com/watch?v=-pmwLHw5Gbs
- 2018-12-23: initial commit
- 2018-11-04: started tinkering on a train