# egui changelog All notable changes to the `egui` crate will be documented in this file. NOTE: [`epaint`](epaint/CHANGELOG.md), [`eframe`](eframe/CHANGELOG.md), [`egui_web`](egui_web/CHANGELOG.md), [`egui-winit`](egui-winit/CHANGELOG.md), [`egui_glium`](egui_glium/CHANGELOG.md), and [`egui_glow`](egui_glow/CHANGELOG.md) have their own changelogs! ## Unreleased ### Added ⭐ * Added `Shape::Callback` for backend-specific painting, [with an example](https://github.com/emilk/egui/blob/master/eframe/examples/custom_3d_three-d.rs) ([#1351](https://github.com/emilk/egui/pull/1351)). * Added `Frame::canvas` ([#1362](https://github.com/emilk/egui/pull/1362)). * `Context::request_repaint` will wake up UI thread, if integrations has called `Context::set_request_repaint_callback` ([#1366](https://github.com/emilk/egui/pull/1366)). * Added `Plot::allow_scroll`, `Plot::allow_zoom` no longer affects scrolling ([#1382](https://github.com/emilk/egui/pull/1382)). * Added `Ui::push_id` to resolve id clashes ([#1374](https://github.com/emilk/egui/pull/1374)). * Added `Frame::outer_margin`. * Added `Painter::hline` and `Painter::vline`. ### Changed 🔧 * `ClippedMesh` has been replaced with `ClippedPrimitive` ([#1351](https://github.com/emilk/egui/pull/1351)). * Renamed `Frame::margin` to `Frame::inner_margin`. * Renamed `AlphaImage` to `FontImage` to discourage any other use for it ([#1412](https://github.com/emilk/egui/pull/1412)). * Warnings will pe painted on screen when there is an `Id` clash for `Grid`, `Plot` or `ScrollArea` ([#1452](https://github.com/emilk/egui/pull/1452)). * `Checkbox` and `RadioButton` with an empty label (`""`) will now take up much less space ([#1456](https://github.com/emilk/egui/pull/1456)). * Replaced `Memory::top_most_layer` with more flexible `Memory::layer_ids`. * MSRV (Minimum Supported Rust Version) is now `1.60.0` ([#1467](https://github.com/emilk/egui/pull/1467)). * Renamed the feature `convert_bytemuck` to `bytemuck` ([#1467](https://github.com/emilk/egui/pull/1467)). * Renamed the feature `serialize` to `serde` ([#1467](https://github.com/emilk/egui/pull/1467)). ### Fixed 🐛 * Fixed ComboBoxes always being rendered left-aligned ([#1304](https://github.com/emilk/egui/pull/1304)). * Fixed ui code that could lead to a deadlock ([#1380](https://github.com/emilk/egui/pull/1380)). * Text is darker and more readable in bright mode ([#1412](https://github.com/emilk/egui/pull/1412)). * Fixed `Ui::add_visible` sometimes leaving the `Ui` in a disabled state. ([#1436](https://github.com/emilk/egui/issues/1436)). ### Removed 🔥 * Removed the `single_threaded/multi_threaded` flags - egui is now always thread-safe ([#1390](https://github.com/emilk/egui/pull/1390)). ## 0.17.0 - 2022-02-22 - Improved font selection and image handling ### Added ⭐ * Much improved font selection ([#1154](https://github.com/emilk/egui/pull/1154)): * You can now select any font size and family using `RichText::size` amd `RichText::family` and the new `FontId`. * 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](https://github.com/emilk/egui/pull/1027)). * Plot: * Added `Plot::x_axis_formatter` and `Plot::y_axis_formatter` for custom axis labels ([#1130](https://github.com/emilk/egui/pull/1130)). * Added `Plot::allow_boxed_zoom()`, `Plot::boxed_zoom_pointer()` for boxed zooming on plots ([#1188](https://github.com/emilk/egui/pull/1188)). * Added plot pointer coordinates with `Plot::coordinates_formatter`. ([#1235](https://github.com/emilk/egui/pull/1235)). * Added linked axis support for plots via `plot::LinkedAxisGroup` ([#1184](https://github.com/emilk/egui/pull/1184)). * `Context::load_texture` to convert an image into a texture which can be displayed using e.g. `ui.image(texture, size)` ([#1110](https://github.com/emilk/egui/pull/1110)). * `Ui::input_mut` to modify how subsequent widgets see the `InputState` and a convenience method `InputState::consume_key` for shortcuts or hotkeys ([#1212](https://github.com/emilk/egui/pull/1212)). * Added `Ui::add_visible` and `Ui::add_visible_ui`. * Added `CollapsingHeader::icon` to override the default open/close icon using a custom function. ([1147](https://github.com/emilk/egui/pull/1147)). * Added `ui.data()`, `ctx.data()`, `ctx.options()` and `ctx.tessellation_options()` ([#1175](https://github.com/emilk/egui/pull/1175)). * Added `Response::on_hover_text_at_pointer` as a convenience akin to `Response::on_hover_text` ([1179](https://github.com/emilk/egui/pull/1179)). * Opt-in dependency on `tracing` crate for logging warnings ([#1192](https://github.com/emilk/egui/pull/1192)). * Added `ui.weak(text)`. * Added `Slider::step_by` ([1225](https://github.com/emilk/egui/pull/1225)). * Added `Context::move_to_top` and `Context::top_most_layer` for managing the layer on the top ([#1242](https://github.com/emilk/egui/pull/1242)). * Support a subset of macOS' emacs input field keybindings in `TextEdit` ([#1243](https://github.com/emilk/egui/pull/1243)). * Added ability to scroll an UI into view without specifying an alignment ([1247](https://github.com/emilk/egui/pull/1247)). * Added `Ui::scroll_to_rect` ([1252](https://github.com/emilk/egui/pull/1252)). ### Changed 🔧 * ⚠️ `Context::input` and `Ui::input` now locks a mutex. This can lead to a dead-lock is used in an `if 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](https://github.com/emilk/egui/pull/1238)). * Renamed `CtxRef` to `Context` ([#1050](https://github.com/emilk/egui/pull/1050)). * `Context` can now be cloned and stored between frames ([#1050](https://github.com/emilk/egui/pull/1050)). * Renamed `Ui::visible` to `Ui::is_visible`. * Split `Event::Text` into `Event::Text` and `Event::Paste` ([#1058](https://github.com/emilk/egui/pull/1058)). * Replaced `Style::body_text_style` with more generic `Style::text_styles` ([#1154](https://github.com/emilk/egui/pull/1154)). * `TextStyle` is no longer `Copy` ([#1154](https://github.com/emilk/egui/pull/1154)). * Replaced `TextEdit::text_style` with `TextEdit::font` ([#1154](https://github.com/emilk/egui/pull/1154)). * `Plot::highlight` now takes a `bool` argument ([#1159](https://github.com/emilk/egui/pull/1159)). * `ScrollArea::show` now returns a `ScrollAreaOutput`, so you might need to add `.inner` after the call to it ([#1166](https://github.com/emilk/egui/pull/1166)). * Replaced `corner_radius: f32` with `rounding: Rounding`, allowing per-corner rounding settings ([#1206](https://github.com/emilk/egui/pull/1206)). * Replaced Frame's `margin: Vec2` with `margin: Margin`, allowing for different margins on opposing sides ([#1219](https://github.com/emilk/egui/pull/1219)). * Renamed `Plot::custom_label_func` to `Plot::label_formatter` ([#1235](https://github.com/emilk/egui/pull/1235)). * `Areas::layer_id_at` ignores non-interatable layers (i.e. Tooltips) ([#1240](https://github.com/emilk/egui/pull/1240)). * `ScrollArea`:s will not shrink below a certain minimum size, set by `min_scrolled_width/min_scrolled_height` ([1255](https://github.com/emilk/egui/pull/1255)). * For integrations: * `Output` has now been renamed `PlatformOutput` and `Context::run` now returns the new `FullOutput` ([#1292](https://github.com/emilk/egui/pull/1292)). * `FontImage` has been replaced by `TexturesDelta` (found in `FullOutput`), describing what textures were loaded and freed each frame ([#1110](https://github.com/emilk/egui/pull/1110)). * The painter must support partial texture updates ([#1149](https://github.com/emilk/egui/pull/1149)). * Added `RawInput::max_texture_side` which should be filled in with e.g. `GL_MAX_TEXTURE_SIZE` ([#1154](https://github.com/emilk/egui/pull/1154)). ### Fixed 🐛 * Plot `Orientation` was not public, although fields using this type were ([#1130](https://github.com/emilk/egui/pull/1130)). * Context menus now respects the theme ([#1043](https://github.com/emilk/egui/pull/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](https://github.com/emilk/egui/pull/1240)). * Scroll areas now follow text cursor ([#1252](https://github.com/emilk/egui/pull/1252)). * Slider: correctly respond with drag and focus events when interacting with the value directly ([1270](https://github.com/emilk/egui/pull/1270)). ### Contributors 🙏 * [4JX](https://github.com/4JX) * [55nknown](https://github.com/55nknown) * [AlanRace](https://github.com/AlanRace) * [AlexxxRu](https://github.com/AlexxxRu) * [awaken1ng](https://github.com/awaken1ng) * [BctfN0HUK7Yg](https://github.com/BctfN0HUK7Yg) * [Bromeon](https://github.com/Bromeon) * [cat-state](https://github.com/cat) * [danielkeller](https://github.com/danielkeller) * [dvec](https://github.com/dvec) * [Friz64](https://github.com/Friz64) * [Gordon01](https://github.com/Gordon01) * [HackerFoo](https://github.com/HackerFoo) * [juancampa](https://github.com/juancampa) * [justinj](https://github.com/justinj) * [lampsitter](https://github.com/lampsitter) * [LordMZTE](https://github.com/LordMZTE) * [manuel-i](https://github.com/manuel) * [Mingun](https://github.com/Mingun) * [niklaskorz](https://github.com/niklaskorz) * [nongiach](https://github.com/nongiach) * [parasyte](https://github.com/parasyte) * [psiphi75](https://github.com/psiphi75) * [s-nie](https://github.com/s) * [t18b219k](https://github.com/t18b219k) * [terhechte](https://github.com/terhechte) * [xudesheng](https://github.com/xudesheng) * [yusdacra](https://github.com/yusdacra) ## 0.16.1 - 2021-12-31 - Add back `CtxRef::begin_frame,end_frame` ### Added ⭐ * Add back `CtxRef::begin_frame,end_frame` as an alternative to `CtxRef::run`. ## 0.16.0 - 2021-12-29 - Context menus and rich text ### Added ⭐ * Added context menus: See `Ui::menu_button` and `Response::context_menu` ([#543](https://github.com/emilk/egui/pull/543)). * Most widgets containing text (`Label`, `Button` etc) now supports rich text ([#855](https://github.com/emilk/egui/pull/855)). * Plots: * Added bar charts and box plots ([#863](https://github.com/emilk/egui/pull/863)). * You can now query information about the plot (e.g. get the mouse position in plot coordinates, or the plot bounds) while adding items. `Plot` ([#766](https://github.com/emilk/egui/pull/766) and [#892](https://github.com/emilk/egui/pull/892)). * You can now read and write the cursor of a `TextEdit` ([#848](https://github.com/emilk/egui/pull/848)). * When using a custom font you can now specify a font index ([#873](https://github.com/emilk/egui/pull/873)). * Added vertical sliders with `Slider::new(…).vertical()` ([#875](https://github.com/emilk/egui/pull/875)). * Added `Button::image_and_text` ([#832](https://github.com/emilk/egui/pull/832)). * Added `CollapsingHeader::open` to control if it is open or collapsed ([#1006](https://github.com/emilk/egui/pull/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 now `ui.button(RichText::new("…").color(…))` (same for `Label` )([#855](https://github.com/emilk/egui/pull/855)). * Plots now provide a `show` method that has to be used to add items to and show the plot ([#766](https://github.com/emilk/egui/pull/766)). * `menu::menu(ui, ...)` is now `ui.menu_button(...)` ([#543](https://github.com/emilk/egui/pull/543)) * Replaced `CtxRef::begin_frame` and `end_frame` with `CtxRef::run` ([#872](https://github.com/emilk/egui/pull/872)). * Replaced `scroll_delta` and `zoom_delta` in `RawInput` with `Event::Scroll` and `Event::Zoom`. * Unified the four `Memory` data buckets (`data`, `data_temp`, `id_data` and `id_data_temp`) into a single `Memory::data`, with a new interface ([#836](https://github.com/emilk/egui/pull/836)). * Replaced `Ui::__test` with `egui::__run_test_ui` ([#872](https://github.com/emilk/egui/pull/872)). ### Fixed 🐛 * Fixed `ComboBox` and other popups getting clipped to parent window ([#885](https://github.com/emilk/egui/pull/885)). * The color picker is now better at keeping the same hue even when saturation goes to zero ([#886](https://github.com/emilk/egui/pull/886)). ### Removed 🔥 * Removed `egui::math` (use `egui::emath` instead). * Removed `egui::paint` (use `egui::epaint` instead). ### Contributors 🙏 * [5225225](https://github.com/5225225): [#849](https://github.com/emilk/egui/pull/849). * [aevyrie](https://github.com/aevyrie): [#966](https://github.com/emilk/egui/pull/966). * [B-Reif](https://github.com/B-Reif): [#875](https://github.com/emilk/egui/pull/875). * [Bromeon](https://github.com/Bromeon): [#863](https://github.com/emilk/egui/pull/863), [#918](https://github.com/emilk/egui/pull/918). * [d10sfan](https://github.com/d10sfan): [#832](https://github.com/emilk/egui/pull/832). * [EmbersArc](https://github.com/EmbersArc): [#766](https://github.com/emilk/egui/pull/766), [#892](https://github.com/emilk/egui/pull/892). * [Hperigo](https://github.com/Hperigo): [#905](https://github.com/emilk/egui/pull/905). * [isegal](https://github.com/isegal): [#934](https://github.com/emilk/egui/pull/934). * [mankinskin](https://github.com/mankinskin): [#543](https://github.com/emilk/egui/pull/543). * [niladic](https://github.com/niladic): [#499](https://github.com/emilk/egui/pull/499), [#863](https://github.com/emilk/egui/pull/863). * [singalen](https://github.com/singalen): [#973](https://github.com/emilk/egui/pull/973). * [sumibi-yakitori](https://github.com/sumibi-yakitori): [#830](https://github.com/emilk/egui/pull/830), [#870](https://github.com/emilk/egui/pull/870). * [t18b219k](https://github.com/t18b219k): [#868](https://github.com/emilk/egui/pull/868), [#888](https://github.com/emilk/egui/pull/888). ## 0.15.0 - 2021-10-24 - Syntax highlighting and hscroll ### Added ⭐ * Add horizontal scrolling support to `ScrollArea` and `Window` (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. * Add `ui.add_enabled(bool, widget)` to easily add a possibly disabled widget. * Add `ui.add_enabled_ui(bool, |ui| …)` to create a possibly disabled UI section. * Add feature `"serialize"` separatedly from `"persistence"`. * Add `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. * Add `Memory::caches` for caching things from one frame to the next. ### Changed 🔧 * Change the default monospace font to [Hack](https://github.com/source-foundry/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 a `Label`. * All `Ui`:s must now have a finite `max_rect`. * Deprecated: `max_rect_finite`, `available_size_before_wrap_finite` and `available_rect_before_wrap_finite`. * `Painter`/`Fonts`: text layout now expect a color when creating a `Galley`. You may override that color with `Painter::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 with `Style::explanation_tooltips`. * Smaller and nicer color picker. * `ScrollArea` will auto-shrink to content size unless told otherwise using `ScollArea::auto_shrink`. * By default, `Slider`'s `clamp_to_range` is set to true. * Rename `TextEdit::enabled` to `TextEdit::interactive`. * `ui.label` (and friends) now take `impl ToString` as argument instead of `impl Into