# 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 ⭐ * 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 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`. * Opt-in dependency on `tracing` crate for logging warnings ([#1192](https://github.com/emilk/egui/pull/1192)). * 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)). * Added `ui.weak(text)`. * 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)). * Added `Slider::step_by` ([1225](https://github.com/emilk/egui/pull/1225)). * 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)). * For integrations: * `FontImage` has been replaced by `TexturesDelta` (found in `Output`), 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)). * 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)). * 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)). * `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)). * Renamed `Plot::custom_label_func` to `Plot::label_formatter` ([#1235](https://github.com/emilk/egui/pull/1235)). * Tooltips that don't fit the window don't flicker anymore ([#1240](https://github.com/emilk/egui/pull/1240)). * `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)). ### Fixed 🐛 * Context menus now respects the theme ([#1043](https://github.com/emilk/egui/pull/1043)). * Plot `Orientation` was not public, although fields using this type were ([#1130](https://github.com/emilk/egui/pull/1130)). * 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)). ### Contributors 🙏 * [AlexxxRu](https://github.com/alexxxru): [#1108](https://github.com/emilk/egui/pull/1108). * [danielkeller](https://github.com/danielkeller): [#1050](https://github.com/emilk/egui/pull/1050). * [juancampa](https://github.com/juancampa): [#1147](https://github.com/emilk/egui/pull/1147). ## 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