Skip to content

Latest commit

 

History

History
512 lines (395 loc) · 35.7 KB

CHANGELOG.md

File metadata and controls

512 lines (395 loc) · 35.7 KB

Changelog for eframe

All notable changes to the eframe crate.

NOTE: egui-winit, egui_glium, egui_glow,and egui-wgpu have their own changelogs!

This file is updated upon each release. Changes since the last release can be found at https://github.com/emilk/egui/compare/latest...HEAD or by running the scripts/generate_changelog.py script.

0.28.1 - 2024-07-05

0.28.0 - 2024-07-03 - Better integration of a eframe in a bigger website

✨ Highlights

The eframe web canvas now works properly when its a small part of a larger web page. Previously this caused a lot of weird bugs, such as the eframe canvas stealing focus, and resizing the canvas in annoying ways. Now it should all work seamlessly to have an eframe canvas as part of a web page, including having multiple different eframe apps next to each other. As part of that the eframe canvas can now be focused (or not), just like an <input> HTML element.

We've also implemented a better method for sizing and positioning the canvas so that it yields pixel-perfect rendering on all known browsers except for Desktop Safari. What this means is that text is much less likely to be blurry on web for users (#4536 by @jprochazk).

⭐ Added

🔧 Changed

🐛 Fixed

🧳 Migration

Wrap app creator in a Result

Applications can now return an error during the app creation (#4565 by @emilk), so you now need to wrap your Box<dyn App> in a Result like so:

- eframe::run_native("My App", options, Box::new(|cc| Box::new(MyApp::new(cc))));
+ eframe::run_native("My App", options, Box::new(|cc| Ok(Box::new(MyApp::new(cc)))));

Change web CSS

To make the eframe canvas fill the entire web browser, set its CSS to:

top: 0;
left: 0;
width: 100%;
height: 100%;

See index.html and #4536 for details.

Web canvas focus

If you are using eframe for a fullscreen app, you should call .focus() on your canvas during startup:

document.getElementById("the_canvas_id").focus();

0.27.2 - 2024-04-02

Desktop/Native

  • Fix continuous repaint on Wayland when TextEdit is focused or IME output is set #4269 (thanks @white-axe!)
  • Remove a bunch of unwrap() #4285

Web

  • Fix blurry rendering in some browsers #4299
  • Correctly identify if the browser tab has focus #4280

0.27.1 - 2024-03-29

0.27.0 - 2024-03-26

  • Update to document-features 0.2.8 #4003
  • Added App::raw_input_hook allows for the manipulation or filtering of raw input events #4008 (thanks @varphone!)

Desktop/Native

Web

  • Add webgpu feature by default to wgpu #4124 (thanks @ctaggart!)
  • Update kb modifiers from web mouse events #4156 (thanks @ming08108!)
  • Fix crash on request_animation_frame when destroying web runner #4169 (thanks @jprochazk!)
  • Fix bug parsing url query with escaped & or = #4172
  • Location::query_map: support repeated key #4183

0.26.2 - 2024-02-14

  • Add winuser feature to winapi to fix unresolved import #4037 (thanks @varphone!)

0.26.1 - 2024-02-11

  • Fix high CPU usage on Windows when app is minimized #3985 (thanks @rustbasic!)
  • Update to document-features 0.2.8 #4003

0.26.0 - 2024-02-05

  • 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.25.0 - 2024-01-08

  • If both glow and wgpu features are enabled, default to wgpu #3717

Desktop/Native

  • Update to winit 0.29 #3649 (thanks @fornwall!)
  • Make glow Send + Sync again #3646 (thanks @surban!)
  • Bug fix: framebuffer clear when using glow with multi-viewports #3713
  • Fix: Let accesskit process window events #3733 (thanks @DataTriny!)

Web

  • Fix building the wasm32 docs for docs.rs #3757

0.24.1 - 2023-11-30

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 - 2023-11-23

  • Multiple viewports/windows #3172 (thanks @konkitoman!)
  • Replace eframe::Frame commands and WindowInfo with egui #3564
  • Use egui::ViewportBuilder in eframe::NativeOptions #3572
  • Remove warm-starting #3574
  • Fix copy and cut on Safari #3513 (thanks @lunixbochs!)
  • Update puffin to 0.18 #3600
  • Update MSRV to Rust 1.72 #3595

Breaking changes:

Most settings in NativeOptions have been moved to NativeOptions::viewport, which uses the new egui::ViewportBuilder:

 let native_options = eframe::nativeOptions {
-    initial_window_size: Some(egui::vec2(320.0, 240.0)),
-    drag_and_drop_support: true,
+    viewport: egui::ViewportBuilder::default()
+        .with_inner_size([320.0, 240.0])
+        .with_drag_and_drop(true),
     ..Default::default()
 };

NativeOptions::fullsize_content has been replaced with four settings: ViewportBuilder::with_fullsize_content_view, with_title_shown, with_titlebar_shown, with_titlebar_buttons_shown

frame.info().window_info is gone, replaced with ctx.input(|i| i.viewport()).

frame.info().native_pixels_per_point is replaced with ctx.input(|i| i.raw.native_pixels_per_point).

Most commands in eframe::Frame has been replaced with egui::ViewportCommand, so So frame.close() becomes ctx.send_viewport_cmd(ViewportCommand::Close), etc.

App::on_close_event has been replaced with ctx.input(|i| i.viewport().close_requested()) and ctx.send_viewport_cmd(ViewportCommand::CancelClose).

eframe::IconData is now egui::IconData.

eframe::IconData::try_from_png_bytes is now eframe::icon_data::from_png_bytes.

App::post_rendering is gone. Screenshots are taken with ctx.send_viewport_cmd(ViewportCommand::Screenshots) and are returned in egui::Event which you can check with:

ui.input(|i| {
    for event in &i.raw.events {
        if let egui::Event::Screenshot { viewport_id, image } = event {
            // handle it here
        }
    }
});

0.23.0 - 2023-09-27

  • Update MSRV to Rust 1.70.0 #3310
  • Update to puffin 0.16 #3144
  • Update to wgpu 0.17.0 #3170 (thanks @Aaron1011!)
  • Improved wgpu callbacks #3253 (thanks @Wumpf!)
  • Improve documentation of eframe, especially for wasm32 #3295
  • eframe::Frame::info returns a reference #3301 (thanks @Barugon!)
  • Move App::persist_window to NativeOptions and App::max_size_points to WebOptions #3397

Desktop/Native

  • Only show on-screen-keyboard and IME when editing text #3362 (thanks @Barugon!)
  • Add eframe::storage_dir #3286
  • Add NativeOptions::window_builder for more customization #3390 (thanks @twop!)
  • Better restore Window position on Mac when on secondary monitor #3239
  • Fix iOS support in eframe #3241 (thanks @lucasmerlin!)
  • Speed up eframe state storage #3353 (thanks @sebbert!)
  • Allow users to opt-out of default winit features #3228
  • Expose Raw Window and Display Handles #3073 (thanks @bash!)
  • Use window title as fallback when app_id is not set #3107 (thanks @jacekpoz!)
  • Sleep a bit only when minimized #3139 (thanks @icedrocket!)
  • Prevent text from being cleared when selected due to winit IME #3376 (thanks @YgorSouza!)
  • Fix android app quit on resume with glow backend #3080 (thanks @tkkcc!)
  • Fix panic with persistence without window #3167 (thanks @sagebind!)
  • Only call run_return twice on Windows #3053 (thanks @pan93412!)
  • Gracefully catch error saving state to disk #3230
  • Recognize numpad enter/plus/minus #3285
  • Add more puffin profile scopes to eframe #3330 #3332

Web

  • Update to wasm-bindgen 0.2.87 #3237
  • Remove Function() invocation from eframe text_agent to bypass "unsafe-eval" restrictions in Chrome browser extensions. #3349 (thanks @aspect!)
  • Fix docs about web #3026 (thanks @kerryeon!)

0.22.0 - 2023-05-23

  • Fix: request_repaint_after works even when called from background thread #2939
  • Clear all keys and modifies on focus change #2857 #2933
  • Remove dark-light dependency #2929
  • Replace tracing with log #2928
  • Update accesskit to 0.11 #3012

Desktop/Native

  • Automatically change theme when system dark/light mode changes #2750 (thanks @bash!)
  • Enabled wayland feature for winit when running native #2751 (thanks @ItsEthra!)
  • Fix eframe window position bug (pixels vs points) #2763 (thanks @get200!)
  • Add Frame::request_screenshot and Frame::screenshot to communicate to the backend that a screenshot of the current frame should be exposed by Frame during App::post_rendering (#2676).
  • Add eframe::run_simple_native * a simple API for simple apps (#2453).
  • Add NativeOptions::app_id which allows to set the Wayland application ID under Linux (#1600).
  • Add NativeOptions::active #2813 (thanks @Dixeran!)
  • Remove android-activity dependency + add Activity backend features #2863 (thanks @rib!)
  • Fix bug where the eframe window is never destroyed on Linux when using run_and_return (#2892)
  • Fix state persisting when exiting on Linux #2895 (thanks @flukejones!)
  • Allow for requesting the user's attention to the window #2905 (thanks @TicClick!)
  • Read and request window focus #2900 (thanks @TicClick!)
  • Set app icon on Mac and Windows #2940
  • Set a default icon for all eframe apps: a white e on black background #2996
  • Add NativeOptions::app_id for the persistence location #3014 and for Wayland #3007 (thanks @thomaskrause!)
  • capture a screenshot using Frame::request_screenshot 870264b

Web

  • ⚠️ BREAKING: eframe::start_web has been replaced with eframe::WebRunner, which also installs a nice panic hook (no need for console_error_panic_hook).
  • ⚠️ BREAKING: WebGPU is now the default web renderer when using the wgpu feature of eframe. To use WebGL with wgpu, you need to add wgpu = { version = "0.16.0", features = ["webgl"] } to your own Cargo.toml. (#2945)
  • Add eframe::WebLogger for redirecting log calls to the web console (console.log).
  • Prefer the client width/height for the canvas parent #2804 (thanks @samitbasu!)
  • eframe web: Persist app state to local storage when leaving site #2927
  • Better panic handling #2942 #2992
  • Update wasm-bindgen to 0.2.86 #2995
  • Properly unsubscribe from events on destroy 4d360f6

0.21.3 - 2023-02-15

  • Fix typing the letter 'P' on web (#2740).

0.21.2 - 2023-02-12

  • Allow compiling eframe with --no-default-features (#2728).

0.21.1 - 2023-02-12

  • Fixed crash when native window position is in an invalid state, which could happen e.g. due to changes in monitor size or DPI (#2722).

0.21.0 - 2023-02-08 - Update to winit 0.28

  • ⚠️ BREAKING: App::clear_color now expects you to return a raw float array (#2666).
  • The screen_reader feature has now been renamed web_screen_reader and only work on web. On other platforms, use the accesskit feature flag instead (#2669).

Desktop/Native

  • eframe::run_native now returns a Result (#2433).
  • Update to winit 0.28, adding support for mac trackpad zoom (#2654).
  • Fix bug where the cursor could get stuck using the wrong icon.
  • NativeOptions::transparent now works with the wgpu backend (#2684).
  • Add Frame::set_minimized and set_maximized (#2292, #2672).
  • Fixed persistence of native window position on Windows OS (#2583).

Web

  • Prevent ctrl-P/cmd-P from opening the print dialog (#2598).

0.20.1 - 2022-12-11

0.20.0 - 2022-12-08 - AccessKit integration and wgpu web support

  • MSRV (Minimum Supported Rust Version) is now 1.65.0 (#2314).
  • Allow empty textures with the glow renderer.

Desktop/Native

  • Don't repaint when just moving window (#1980).
  • Added NativeOptions::event_loop_builder hook for apps to change platform specific event loop options (#1952).
  • Enabled deferred render state initialization to support Android (#1952).
  • Added shader_version to NativeOptions for cross compiling support on different target OpenGL | ES versions (on native glow renderer only) (#1993).
  • Fix: app state is now saved when user presses Cmd-Q on Mac (#2013).
  • Added center to NativeOptions and monitor_size to WindowInfo on desktop (#2035).
  • Improve IME support (#2046).
  • Added mouse-passthrough option (#2080).
  • Added NativeOptions::fullsize_content option on Mac to build titlebar-less windows with floating window controls (#2049).
  • Wgpu device/adapter/surface creation has now various configuration options exposed via NativeOptions/WebOptions::wgpu_options (#2207).
  • Fix: Make sure that native_pixels_per_point is updated (#2256).
  • Added optional, but enabled by default, integration with AccessKit for implementing platform accessibility APIs (#2294).
  • Fix: Less flickering on resize on Windows (#2280).

Web

  • ⚠️ BREAKING: start_web is a now async (#2107).
  • Web: You can now use WebGL on top of wgpu by enabling the wgpu feature (and disabling glow via disabling default features) (#2107).
  • Web: Add WebInfo::user_agent (#2202).
  • Web: you can access your application from JS using AppRunner::app_mut. See crates/egui_demo_app/src/lib.rs (#1886).

0.19.0 - 2022-08-20

  • MSRV (Minimum Supported Rust Version) is now 1.61.0 (#1846).
  • Added wgpu rendering backed (#1564):
    • Added features wgpu and glow.
    • Added NativeOptions::renderer to switch between the rendering backends.
  • egui_glow: remove calls to gl.get_error in release builds to speed up rendering (#1583).
  • Added App::post_rendering for e.g. reading the framebuffer (#1591).
  • Use Arc for glow::Context instead of Rc (#1640).
  • Fixed bug where the result returned from App::on_exit_event would sometimes be ignored (#1696).
  • Added NativeOptions::follow_system_theme and NativeOptions::default_theme (#1726).
  • Selectively expose parts of the API based on target arch (wasm32 or not) (#1867).

Desktop/Native

  • Fixed clipboard on Wayland (#1613).
  • Added ability to read window position and size with frame.info().window_info (#1617).
  • Allow running on native without hardware accelerated rendering. Change with NativeOptions::hardware_acceleration (#1681, #1693).
  • Fixed window position persistence (#1745).
  • Fixed mouse cursor change on Linux (#1747).
  • Added Frame::set_visible (#1808).
  • Added fullscreen support (#1866).
  • You can now continue execution after closing the native desktop window (#1889).
  • Frame::quit has been renamed to Frame::close and App::on_exit_event is now App::on_close_event (#1943).

Web

  • Added ability to stop/re-run web app from JavaScript. ⚠️ You need to update your CSS with html, body: { height: 100%; width: 100%; } (#1803).
  • Added WebOptions::follow_system_theme and WebOptions::default_theme (#1726).
  • Added option to select WebGL version (#1803).

0.18.0 - 2022-04-30

  • MSRV (Minimum Supported Rust Version) is now 1.60.0 (#1467).
  • Removed eframe::epi - everything is now in eframe (eframe::App, eframe::Frame etc) (#1545).
  • Removed Frame::request_repaint - just call egui::Context::request_repaint for the same effect (#1366).
  • Changed app creation/setup (#1363):
    • Removed App::setup and App::name.
    • Provide CreationContext when creating app with egui context, storage, integration info and glow context.
    • Change interface of run_native and start_web.
  • Added Frame::storage() and Frame::storage_mut() (#1418).
    • You can now load/save state in App::update
    • Changed App::update to take &mut Frame instead of &Frame.
    • Frame is no longer Clone or Sync.
  • Added glow (OpenGL) context to Frame (#1425).

Desktop/Native

  • Remove the egui_glium feature. eframe will now always use egui_glow as the native backend (#1357).
  • Change default for NativeOptions::drag_and_drop_support to true (#1329).
  • Added new NativeOptions: vsync, multisampling, depth_buffer, stencil_buffer.
  • dark-light (dark mode detection) is now an opt-in feature (#1437).
  • Fixed potential scale bug when DPI scaling changes (e.g. when dragging a window between different displays) (#1441).
  • Added new feature puffin to add puffin profiler scopes (#1483).
  • Moved app persistence to a background thread, allowing for smoother frame rates (on native).
  • Added Frame::set_window_pos (#1505).

Web

  • Use full browser width by default (#1378).
  • egui code will no longer be called after panic (#1306).

0.17.0 - 2022-02-22

  • Removed Frame::alloc_texture. Use egui::Context::load_texture instead (#1110).
  • Shift-scroll will now result in horizontal scrolling on all platforms (#1136).
  • Log using the tracing crate. Log to stdout by adding tracing_subscriber::fmt::init(); to your main (#1192).

Desktop/Native

  • The default native backend is now egui_glow (instead of egui_glium) (#1020).
  • Automatically detect and apply dark or light mode from system (#1045).
  • Fixed horizontal scrolling direction on Linux.
  • Added App::on_exit_event (#1038)
  • Added NativeOptions::initial_window_pos.
  • Fixed enable_drag for Windows OS (#1108).

Web

  • The default web painter is now egui_glow (instead of WebGL) (#1020).
  • Fixed glow failure on Chromium (#1092).
  • Updated eframe::IntegrationInfo::web_location_hash on hashchange event (#1140).
  • Expose all parts of the location/url in frame.info().web_info (#1258).

0.16.0 - 2021-12-29

  • Frame can now be cloned, saved, and passed to background threads (#999).
  • Added Frame::request_repaint to replace repaint_signal (#999).
  • Added Frame::alloc_texture/free_texture to replace tex_allocator (#999).

Web

0.15.0 - 2021-10-24

  • Frame now provides set_window_title to set window title dynamically (#828).
  • Frame now provides set_decorations to set whether to show window decorations.
  • Remove "http" feature (use https://github.com/emilk/ehttp instead!).
  • Added App::persist_native_window and App::persist_egui_memory to control what gets persisted.

Desktop/Native

  • Increase native scroll speed.
  • Added new backend egui_glow as an alternative to egui_glium. Enable with default-features = false, features = ["default_fonts", "egui_glow"].

Web

  • Implement eframe::NativeTexture trait for the WebGL painter.
  • Deprecate `Painter::register_webgl_texture.
  • Fixed multiline paste.
  • Fixed painting with non-opaque backgrounds.
  • Improve text input on mobile and for IME.

0.14.0 - 2021-08-24

  • Added dragging and dropping files into egui.
  • Improve http fetch API.
  • run_native now returns when the app is closed.
  • Web: Made text thicker and less pixelated.

0.13.1 - 2021-06-24

  • Fixed http feature flag and docs

0.13.0 - 2021-06-24

  • App::setup now takes a Frame and Storage by argument.
  • App::load has been removed. Implement App::setup instead.
  • Web: Default to light visuals unless the system reports a preference for dark mode.
  • Web: Improve alpha blending, making fonts look much better (especially in light mode)
  • Web: Fix double-paste bug

0.12.0 - 2021-05-10

  • Moved options out of trait App into new NativeOptions.
  • Added option for always_on_top.
  • Web: Scroll faster when scrolling with mouse wheel.

0.11.0 - 2021-04-05

  • You can now turn your window transparent with the App::transparent option.
  • You can now disable window decorations with the App::decorated option.
  • Web: Fix mobile and IME text input
  • Web: Hold down a modifier key when clicking a link to open it in a new tab.

Contributors: n2

0.10.0 - 2021-02-28

  • You can now set your own app icons.
  • You can control the initial size of the native window with App::initial_window_size.
  • You can control the maximum egui web canvas size with App::max_size_points.
  • Frame::tex_allocator() no longer returns an Option (there is always a texture allocator).

0.9.0 - 2021-02-07

  • Added support for HTTP body.
  • Web: Right-clicks will no longer open browser context menu.
  • Web: Fix a bug where one couldn't select items in a combo box on a touch screen.

0.8.0 - 2021-01-17

  • Simplify TextureAllocator interface.
  • WebGL2 is now supported, with improved texture sampler. WebGL1 will be used as a fallback.
  • Web: Slightly improved alpha-blending (work-around for non-existing linear-space blending).
  • Web: Call prevent_default for arrow keys when entering text

0.7.0 - 2021-01-04

  • Initial release of eframe