From 0ff1ee38934fe50773e4a6bb22742573e1b95d87 Mon Sep 17 00:00:00 2001 From: Robert Walter <26892280+RobWalt@users.noreply.github.com> Date: Wed, 16 Nov 2022 11:57:27 +0100 Subject: [PATCH 001/143] feat(combobox): implement text wrap for selected text (#2272) * feat(combobox): implement text wrap for selected text * chore(changelog): add line to changelog * feat(combobox-text-wrap): make wrap boolean - specifying a wrap width didn't really make sense so now it's boolean - the selected text will now use the maximum available width while still respecting the spacing and icon coming after it * feat(combobox-text-wrap): update changelog --- CHANGELOG.md | 1 + crates/egui/src/containers/combo_box.rs | 31 ++++++++++++++++++++++--- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dc4785b3..c937bf01 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ NOTE: [`epaint`](crates/epaint/CHANGELOG.md), [`eframe`](crates/eframe/CHANGELOG * Added `egui::gui_zoom` module with helpers for scaling the whole GUI of an app ([#2239](https://github.com/emilk/egui/pull/2239)). * You can now put one interactive widget on top of another, and only one will get interaction at a time ([#2244](https://github.com/emilk/egui/pull/2244)). * Added `ui.centered`. +* Added possibility to enable text wrap for the selected text of `egui::ComboBox` ([#2272](https://github.com/emilk/egui/pull/2244)) * Added `Area::constrain` and `Window::constrain` which constrains area to the screen bounds. ([#2270](https://github.com/emilk/egui/pull/2270)). * Added `Area::pivot` and `Window::pivot` which controls what part of the window to position. ([#2303](https://github.com/emilk/egui/pull/2303)). diff --git a/crates/egui/src/containers/combo_box.rs b/crates/egui/src/containers/combo_box.rs index 9c33002f..cb2665d5 100644 --- a/crates/egui/src/containers/combo_box.rs +++ b/crates/egui/src/containers/combo_box.rs @@ -36,6 +36,7 @@ pub struct ComboBox { selected_text: WidgetText, width: Option, icon: Option, + wrap_enabled: bool, } impl ComboBox { @@ -47,6 +48,7 @@ impl ComboBox { selected_text: Default::default(), width: None, icon: None, + wrap_enabled: false, } } @@ -59,6 +61,7 @@ impl ComboBox { selected_text: Default::default(), width: None, icon: None, + wrap_enabled: false, } } @@ -70,6 +73,7 @@ impl ComboBox { selected_text: Default::default(), width: None, icon: None, + wrap_enabled: false, } } @@ -124,6 +128,12 @@ impl ComboBox { self } + /// Controls whether text wrap is used for the selected text + pub fn wrap(mut self, wrap: bool) -> Self { + self.wrap_enabled = wrap; + self + } + /// Show the combo box, with the given ui code for the menu contents. /// /// Returns `InnerResponse { inner: None }` if the combo box is closed. @@ -146,6 +156,7 @@ impl ComboBox { selected_text, width, icon, + wrap_enabled, } = self; let button_id = ui.make_persistent_id(id_source); @@ -154,7 +165,14 @@ impl ComboBox { if let Some(width) = width { ui.spacing_mut().slider_width = width; // yes, this is ugly. Will remove later. } - let mut ir = combo_box_dyn(ui, button_id, selected_text, menu_contents, icon); + let mut ir = combo_box_dyn( + ui, + button_id, + selected_text, + menu_contents, + icon, + wrap_enabled, + ); if let Some(label) = label { ir.response .widget_info(|| WidgetInfo::labeled(WidgetType::ComboBox, label.text())); @@ -221,6 +239,7 @@ fn combo_box_dyn<'c, R>( selected_text: WidgetText, menu_contents: Box R + 'c>, icon: Option, + wrap_enabled: bool, ) -> InnerResponse> { let popup_id = button_id.with("popup"); @@ -244,10 +263,16 @@ fn combo_box_dyn<'c, R>( let button_response = button_frame(ui, button_id, is_popup_open, Sense::click(), |ui| { // We don't want to change width when user selects something new - let full_minimum_width = ui.spacing().slider_width; + let full_minimum_width = wrap_enabled + .then(|| ui.available_width() - ui.spacing().item_spacing.x * 2.0) + .unwrap_or_else(|| ui.spacing().slider_width); let icon_size = Vec2::splat(ui.spacing().icon_width); + let wrap_width = wrap_enabled + .then(|| ui.available_width() - ui.spacing().item_spacing.x - icon_size.x) + .unwrap_or(f32::INFINITY); - let galley = selected_text.into_galley(ui, Some(false), f32::INFINITY, TextStyle::Button); + let galley = + selected_text.into_galley(ui, Some(wrap_enabled), wrap_width, TextStyle::Button); let width = galley.size().x + ui.spacing().item_spacing.x + icon_size.x; let width = width.at_least(full_minimum_width); From 9268f43896e2a98889a57eeb2edab3d45a7cc2dd Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Wed, 16 Nov 2022 12:17:41 +0100 Subject: [PATCH 002/143] eframe: make RequestRepaintEvent into an enum UserEvent (#2311) Preparation for https://github.com/emilk/egui/pull/2294 to make that a smaller diff. --- crates/eframe/src/epi.rs | 4 +-- crates/eframe/src/native/run.rs | 56 +++++++++++++++++---------------- 2 files changed, 31 insertions(+), 29 deletions(-) diff --git a/crates/eframe/src/epi.rs b/crates/eframe/src/epi.rs index 372a8d2b..5fdcb33b 100644 --- a/crates/eframe/src/epi.rs +++ b/crates/eframe/src/epi.rs @@ -10,7 +10,7 @@ use std::any::Any; #[cfg(not(target_arch = "wasm32"))] -pub use crate::native::run::RequestRepaintEvent; +pub use crate::native::run::UserEvent; #[cfg(not(target_arch = "wasm32"))] pub use winit::event_loop::EventLoopBuilder; @@ -20,7 +20,7 @@ pub use winit::event_loop::EventLoopBuilder; /// You can configure any platform specific details required on top of the default configuration /// done by `EFrame`. #[cfg(not(target_arch = "wasm32"))] -pub type EventLoopBuilderHook = Box)>; +pub type EventLoopBuilderHook = Box)>; /// This is how your app is created. /// diff --git a/crates/eframe/src/native/run.rs b/crates/eframe/src/native/run.rs index fb1e5125..5d28e3ea 100644 --- a/crates/eframe/src/native/run.rs +++ b/crates/eframe/src/native/run.rs @@ -13,7 +13,9 @@ use super::epi_integration::{self, EpiIntegration}; use crate::epi; #[derive(Debug)] -pub struct RequestRepaintEvent; +pub enum UserEvent { + RequestRepaint, +} // ---------------------------------------------------------------------------- @@ -45,14 +47,14 @@ trait WinitApp { fn paint(&mut self) -> EventResult; fn on_event( &mut self, - event_loop: &EventLoopWindowTarget, - event: &winit::event::Event<'_, RequestRepaintEvent>, + event_loop: &EventLoopWindowTarget, + event: &winit::event::Event<'_, UserEvent>, ) -> EventResult; } fn create_event_loop_builder( native_options: &mut epi::NativeOptions, -) -> EventLoopBuilder { +) -> EventLoopBuilder { let mut event_loop_builder = winit::event_loop::EventLoopBuilder::with_user_event(); if let Some(hook) = std::mem::take(&mut native_options.event_loop_builder) { @@ -68,10 +70,10 @@ fn create_event_loop_builder( /// multiple times. This is just a limitation of winit. fn with_event_loop( mut native_options: epi::NativeOptions, - f: impl FnOnce(&mut EventLoop, NativeOptions), + f: impl FnOnce(&mut EventLoop, NativeOptions), ) { use std::cell::RefCell; - thread_local!(static EVENT_LOOP: RefCell>> = RefCell::new(None)); + thread_local!(static EVENT_LOOP: RefCell>> = RefCell::new(None)); EVENT_LOOP.with(|event_loop| { // Since we want to reference NativeOptions when creating the EventLoop we can't @@ -84,7 +86,7 @@ fn with_event_loop( }); } -fn run_and_return(event_loop: &mut EventLoop, mut winit_app: impl WinitApp) { +fn run_and_return(event_loop: &mut EventLoop, mut winit_app: impl WinitApp) { use winit::platform::run_return::EventLoopExtRunReturn as _; tracing::debug!("event_loop.run_return"); @@ -110,7 +112,7 @@ fn run_and_return(event_loop: &mut EventLoop, mut winit_app winit_app.paint() } - winit::event::Event::UserEvent(RequestRepaintEvent) + winit::event::Event::UserEvent(UserEvent::RequestRepaint) | winit::event::Event::NewEvents(winit::event::StartCause::ResumeTimeReached { .. }) => EventResult::RepaintNext, @@ -176,10 +178,7 @@ fn run_and_return(event_loop: &mut EventLoop, mut winit_app }); } -fn run_and_exit( - event_loop: EventLoop, - mut winit_app: impl WinitApp + 'static, -) -> ! { +fn run_and_exit(event_loop: EventLoop, mut winit_app: impl WinitApp + 'static) -> ! { tracing::debug!("event_loop.run"); let mut next_repaint_time = Instant::now(); @@ -200,7 +199,7 @@ fn run_and_exit( winit_app.paint() } - winit::event::Event::UserEvent(RequestRepaintEvent) + winit::event::Event::UserEvent(UserEvent::RequestRepaint) | winit::event::Event::NewEvents(winit::event::StartCause::ResumeTimeReached { .. }) => EventResult::RepaintNext, @@ -299,7 +298,7 @@ mod glow_integration { } struct GlowWinitApp { - repaint_proxy: Arc>>, + repaint_proxy: Arc>>, app_name: String, native_options: epi::NativeOptions, running: Option, @@ -313,7 +312,7 @@ mod glow_integration { impl GlowWinitApp { fn new( - event_loop: &EventLoop, + event_loop: &EventLoop, app_name: &str, native_options: epi::NativeOptions, app_creator: epi::AppCreator, @@ -330,7 +329,7 @@ mod glow_integration { #[allow(unsafe_code)] fn create_glutin_windowed_context( - event_loop: &EventLoopWindowTarget, + event_loop: &EventLoopWindowTarget, storage: Option<&dyn epi::Storage>, title: &String, native_options: &NativeOptions, @@ -372,7 +371,7 @@ mod glow_integration { (gl_window, gl) } - fn init_run_state(&mut self, event_loop: &EventLoopWindowTarget) { + fn init_run_state(&mut self, event_loop: &EventLoopWindowTarget) { let storage = epi_integration::create_storage(&self.app_name); let (gl_window, gl) = Self::create_glutin_windowed_context( @@ -409,7 +408,10 @@ mod glow_integration { { let event_loop_proxy = self.repaint_proxy.clone(); integration.egui_ctx.set_request_repaint_callback(move || { - event_loop_proxy.lock().send_event(RequestRepaintEvent).ok(); + event_loop_proxy + .lock() + .send_event(UserEvent::RequestRepaint) + .ok(); }); } @@ -552,8 +554,8 @@ mod glow_integration { fn on_event( &mut self, - event_loop: &EventLoopWindowTarget, - event: &winit::event::Event<'_, RequestRepaintEvent>, + event_loop: &EventLoopWindowTarget, + event: &winit::event::Event<'_, UserEvent>, ) -> EventResult { match event { winit::event::Event::Resumed => { @@ -697,7 +699,7 @@ mod wgpu_integration { } struct WgpuWinitApp { - repaint_proxy: Arc>>, + repaint_proxy: Arc>>, app_name: String, native_options: epi::NativeOptions, app_creator: Option, @@ -711,7 +713,7 @@ mod wgpu_integration { impl WgpuWinitApp { fn new( - event_loop: &EventLoop, + event_loop: &EventLoop, app_name: &str, native_options: epi::NativeOptions, app_creator: epi::AppCreator, @@ -728,7 +730,7 @@ mod wgpu_integration { } fn create_window( - event_loop: &EventLoopWindowTarget, + event_loop: &EventLoopWindowTarget, storage: Option<&dyn epi::Storage>, title: &String, native_options: &NativeOptions, @@ -764,7 +766,7 @@ mod wgpu_integration { fn init_run_state( &mut self, - event_loop: &EventLoopWindowTarget, + event_loop: &EventLoopWindowTarget, storage: Option>, window: winit::window::Window, ) { @@ -803,7 +805,7 @@ mod wgpu_integration { event_loop_proxy .lock() .unwrap() - .send_event(RequestRepaintEvent) + .send_event(UserEvent::RequestRepaint) .ok(); }); } @@ -934,8 +936,8 @@ mod wgpu_integration { fn on_event( &mut self, - event_loop: &EventLoopWindowTarget, - event: &winit::event::Event<'_, RequestRepaintEvent>, + event_loop: &EventLoopWindowTarget, + event: &winit::event::Event<'_, UserEvent>, ) -> EventResult { match event { winit::event::Event::Resumed => { From f7019926dcc3ccef59e228c14fae98c08c727ae6 Mon Sep 17 00:00:00 2001 From: Clement Rey Date: Wed, 16 Nov 2022 18:03:57 +0100 Subject: [PATCH 003/143] wgpu backend: do not try to render zero-sized surfaces (#2313) * wgpu backend: do not try to render zero-sized surfaces * reverse if Co-authored-by: Emil Ernerfeldt --- crates/eframe/src/web/web_painter_wgpu.rs | 113 ++++++++++++---------- 1 file changed, 62 insertions(+), 51 deletions(-) diff --git a/crates/eframe/src/web/web_painter_wgpu.rs b/crates/eframe/src/web/web_painter_wgpu.rs index b1d835e4..09413e53 100644 --- a/crates/eframe/src/web/web_painter_wgpu.rs +++ b/crates/eframe/src/web/web_painter_wgpu.rs @@ -102,6 +102,8 @@ impl WebPainter for WebPainterWgpu { pixels_per_point: f32, textures_delta: &egui::TexturesDelta, ) -> Result<(), JsValue> { + let size_in_pixels = [self.canvas.width(), self.canvas.height()]; + let render_state = if let Some(render_state) = &self.render_state { render_state } else { @@ -110,32 +112,6 @@ impl WebPainter for WebPainterWgpu { )); }; - // Resize surface if needed - let size_in_pixels = [self.canvas.width(), self.canvas.height()]; - if size_in_pixels[0] != self.surface_configuration.width - || size_in_pixels[1] != self.surface_configuration.height - { - self.surface_configuration.width = size_in_pixels[0]; - self.surface_configuration.height = size_in_pixels[1]; - self.surface - .configure(&render_state.device, &self.surface_configuration); - } - - let frame = match self.surface.get_current_texture() { - Ok(frame) => frame, - #[allow(clippy::single_match_else)] - Err(e) => match (*self.on_surface_error)(e) { - SurfaceErrorAction::RecreateSurface => { - self.surface - .configure(&render_state.device, &self.surface_configuration); - return Ok(()); - } - SurfaceErrorAction::SkipFrame => { - return Ok(()); - } - }, - }; - let mut encoder = render_state .device @@ -169,31 +145,63 @@ impl WebPainter for WebPainterWgpu { ) }; - { - let renderer = render_state.renderer.read(); - let frame_view = frame - .texture - .create_view(&wgpu::TextureViewDescriptor::default()); - let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { - color_attachments: &[Some(wgpu::RenderPassColorAttachment { - view: &frame_view, - resolve_target: None, - ops: wgpu::Operations { - load: wgpu::LoadOp::Clear(wgpu::Color { - r: clear_color.r() as f64, - g: clear_color.g() as f64, - b: clear_color.b() as f64, - a: clear_color.a() as f64, - }), - store: true, - }, - })], - depth_stencil_attachment: None, - label: Some("egui_render"), - }); + // Resize surface if needed + let is_zero_sized_surface = size_in_pixels[0] == 0 || size_in_pixels[1] == 0; + let frame = if is_zero_sized_surface { + None + } else { + if size_in_pixels[0] != self.surface_configuration.width + || size_in_pixels[1] != self.surface_configuration.height + { + self.surface_configuration.width = size_in_pixels[0]; + self.surface_configuration.height = size_in_pixels[1]; + self.surface + .configure(&render_state.device, &self.surface_configuration); + } - renderer.render(&mut render_pass, clipped_primitives, &screen_descriptor); - } + let frame = match self.surface.get_current_texture() { + Ok(frame) => frame, + #[allow(clippy::single_match_else)] + Err(e) => match (*self.on_surface_error)(e) { + SurfaceErrorAction::RecreateSurface => { + self.surface + .configure(&render_state.device, &self.surface_configuration); + return Ok(()); + } + SurfaceErrorAction::SkipFrame => { + return Ok(()); + } + }, + }; + + { + let renderer = render_state.renderer.read(); + let frame_view = frame + .texture + .create_view(&wgpu::TextureViewDescriptor::default()); + let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { + color_attachments: &[Some(wgpu::RenderPassColorAttachment { + view: &frame_view, + resolve_target: None, + ops: wgpu::Operations { + load: wgpu::LoadOp::Clear(wgpu::Color { + r: clear_color.r() as f64, + g: clear_color.g() as f64, + b: clear_color.b() as f64, + a: clear_color.a() as f64, + }), + store: true, + }, + })], + depth_stencil_attachment: None, + label: Some("egui_render"), + }); + + renderer.render(&mut render_pass, clipped_primitives, &screen_descriptor); + } + + Some(frame) + }; { let mut renderer = render_state.renderer.write(); @@ -208,7 +216,10 @@ impl WebPainter for WebPainterWgpu { .into_iter() .chain(std::iter::once(encoder.finish())), ); - frame.present(); + + if let Some(frame) = frame { + frame.present(); + } Ok(()) } From eca5e6a4d20bc5b5ba272a8a031596c6dbfd2db7 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Wed, 16 Nov 2022 19:08:03 +0100 Subject: [PATCH 004/143] Update to Rust 1.65 (#2314) * Update to Rust 1.65 Because then you can use dynamic linking on Linux * Fix a bunch of clippy lints * Update changelogs * More clippy fixes --- .github/workflows/rust.yml | 8 +- CHANGELOG.md | 1 + Cranky.toml | 215 ++++++++++--------- crates/eframe/CHANGELOG.md | 1 + crates/eframe/Cargo.toml | 2 +- crates/eframe/src/native/epi_integration.rs | 4 +- crates/eframe/src/web/events.rs | 6 +- crates/egui-wgpu/Cargo.toml | 2 +- crates/egui-wgpu/src/winit.rs | 2 +- crates/egui-winit/Cargo.toml | 2 +- crates/egui-winit/src/window_settings.rs | 2 +- crates/egui/Cargo.toml | 2 +- crates/egui/src/memory.rs | 2 +- crates/egui/src/menu.rs | 4 +- crates/egui/src/widgets/drag_value.rs | 2 +- crates/egui/src/widgets/label.rs | 4 +- crates/egui/src/widgets/plot/items/mod.rs | 8 +- crates/egui/src/widgets/plot/items/values.rs | 2 +- crates/egui/src/widgets/plot/legend.rs | 2 +- crates/egui/src/widgets/text_edit/builder.rs | 10 +- crates/egui_demo_app/Cargo.toml | 25 +-- crates/egui_demo_app/src/frame_history.rs | 2 +- crates/egui_demo_app/src/lib.rs | 6 +- crates/egui_demo_lib/Cargo.toml | 6 +- crates/egui_extras/Cargo.toml | 6 +- crates/egui_extras/src/datepicker/button.rs | 4 +- crates/egui_extras/src/datepicker/popup.rs | 2 +- crates/egui_glium/Cargo.toml | 2 +- crates/egui_glow/Cargo.toml | 2 +- crates/emath/Cargo.toml | 2 +- crates/epaint/Cargo.toml | 2 +- crates/epaint/src/mutex.rs | 6 +- examples/confirm_exit/Cargo.toml | 2 +- examples/custom_3d_glow/Cargo.toml | 2 +- examples/custom_3d_three-d/Cargo.toml | 6 +- examples/custom_3d_three-d/src/lib.rs | 2 + examples/custom_font/Cargo.toml | 2 +- examples/custom_font_style/Cargo.toml | 2 +- examples/custom_window_frame/Cargo.toml | 2 +- examples/download_image/Cargo.toml | 2 +- examples/file_dialog/Cargo.toml | 2 +- examples/hello_world/Cargo.toml | 2 +- examples/puffin_profiler/Cargo.toml | 2 +- examples/retained_image/Cargo.toml | 2 +- examples/screenshot/Cargo.toml | 2 +- examples/serial_windows/Cargo.toml | 2 +- examples/svg/Cargo.toml | 2 +- rust-toolchain | 2 +- 48 files changed, 195 insertions(+), 187 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 563a78ed..e0ba2ffb 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -19,7 +19,7 @@ jobs: - uses: actions-rs/toolchain@v1 with: profile: default - toolchain: 1.64.0 + toolchain: 1.65.0 override: true - name: Install packages (Linux) if: runner.os == 'Linux' @@ -84,7 +84,7 @@ jobs: - uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: 1.64.0 + toolchain: 1.65.0 target: wasm32-unknown-unknown override: true @@ -136,7 +136,7 @@ jobs: - uses: actions/checkout@v2 - uses: EmbarkStudios/cargo-deny-action@v1 with: - rust-version: "1.62.0" + rust-version: "1.65.0" android: name: android @@ -146,7 +146,7 @@ jobs: - uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: 1.64.0 + toolchain: 1.65.0 target: aarch64-linux-android override: true - name: Set up cargo cache diff --git a/CHANGELOG.md b/CHANGELOG.md index c937bf01..c2ba1e13 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ NOTE: [`epaint`](crates/epaint/CHANGELOG.md), [`eframe`](crates/eframe/CHANGELOG ## Unreleased +* MSRV (Minimum Supported Rust Version) is now `1.65.0` ([#2314](https://github.com/emilk/egui/pull/2314)). * ⚠️ BREAKING: egui now expects integrations to do all color blending in gamma space ([#2071](https://github.com/emilk/egui/pull/2071)). * ⚠️ BREAKING: if you have overlapping interactive widgets, only the top widget (last added) will be interactive ([#2244](https://github.com/emilk/egui/pull/2244)). diff --git a/Cranky.toml b/Cranky.toml index ce6c9e57..28bb35fc 100644 --- a/Cranky.toml +++ b/Cranky.toml @@ -1,115 +1,122 @@ # https://github.com/ericseppanen/cargo-cranky # cargo install cargo-cranky && cargo cranky -deny = [ - "unsafe_code", -] +deny = ["unsafe_code"] warn = [ - "clippy::all", - "clippy::await_holding_lock", - "clippy::char_lit_as_u8", - "clippy::checked_conversions", - "clippy::dbg_macro", - "clippy::debug_assert_with_mut_call", - "clippy::disallowed_methods", - "clippy::disallowed_script_idents", - "clippy::doc_markdown", - "clippy::empty_enum", - "clippy::enum_glob_use", - "clippy::equatable_if_let", - "clippy::exit", - "clippy::expl_impl_clone_on_copy", - "clippy::explicit_deref_methods", - "clippy::explicit_into_iter_loop", - "clippy::explicit_iter_loop", - "clippy::fallible_impl_from", - "clippy::filter_map_next", - "clippy::flat_map_option", - "clippy::float_cmp_const", - "clippy::fn_params_excessive_bools", - "clippy::fn_to_numeric_cast_any", - "clippy::from_iter_instead_of_collect", - "clippy::if_let_mutex", - "clippy::implicit_clone", - "clippy::imprecise_flops", - "clippy::index_refutable_slice", - "clippy::inefficient_to_string", - "clippy::invalid_upcast_comparisons", - "clippy::iter_not_returning_iterator", - "clippy::large_digit_groups", - "clippy::large_stack_arrays", - "clippy::large_types_passed_by_value", - "clippy::let_unit_value", - "clippy::linkedlist", - "clippy::lossy_float_literal", - "clippy::macro_use_imports", - "clippy::manual_assert", - "clippy::manual_ok_or", - "clippy::map_err_ignore", - "clippy::map_flatten", - "clippy::map_unwrap_or", - "clippy::match_on_vec_items", - "clippy::match_same_arms", - "clippy::match_wild_err_arm", - "clippy::match_wildcard_for_single_variants", - "clippy::mem_forget", - "clippy::mismatched_target_os", - "clippy::missing_enforced_import_renames", - "clippy::missing_errors_doc", - "clippy::missing_safety_doc", - "clippy::mut_mut", - "clippy::mutex_integer", - "clippy::needless_borrow", - "clippy::needless_continue", - "clippy::needless_for_each", - "clippy::needless_pass_by_value", - "clippy::negative_feature_names", - "clippy::nonstandard_macro_braces", - "clippy::option_option", - "clippy::path_buf_push_overwrite", - "clippy::ptr_as_ptr", - "clippy::rc_mutex", - "clippy::ref_option_ref", - "clippy::rest_pat_in_fully_bound_structs", - "clippy::same_functions_in_if_condition", - "clippy::semicolon_if_nothing_returned", - "clippy::single_match_else", - "clippy::str_to_string", - "clippy::string_add_assign", - "clippy::string_add", - "clippy::string_lit_as_bytes", - "clippy::string_to_string", - "clippy::todo", - "clippy::trailing_empty_array", - "clippy::trait_duplication_in_bounds", - "clippy::unimplemented", - "clippy::unnecessary_wraps", - "clippy::unnested_or_patterns", - "clippy::unused_self", - "clippy::useless_transmute", - "clippy::verbose_file_reads", - "clippy::zero_sized_map_values", - "elided_lifetimes_in_paths", - "future_incompatible", - "nonstandard_style", - "rust_2018_idioms", - "rust_2021_prelude_collisions", - "rustdoc::missing_crate_level_docs", - "semicolon_in_expressions_from_macros", - "trivial_numeric_casts", - "unused_extern_crates", - "unused_import_braces", - "unused_lifetimes", - # "clippy::cloned_instead_of_copied", - # "clippy::mod_module_files", - # "trivial_casts", - # "unused_qualifications", + "clippy::all", + "clippy::await_holding_lock", + "clippy::bool_to_int_with_if", + "clippy::char_lit_as_u8", + "clippy::checked_conversions", + "clippy::dbg_macro", + "clippy::debug_assert_with_mut_call", + "clippy::disallowed_methods", + "clippy::disallowed_script_idents", + "clippy::doc_link_with_quotes", + "clippy::doc_markdown", + "clippy::empty_enum", + "clippy::enum_glob_use", + "clippy::equatable_if_let", + "clippy::exit", + "clippy::expl_impl_clone_on_copy", + "clippy::explicit_deref_methods", + "clippy::explicit_into_iter_loop", + "clippy::explicit_iter_loop", + "clippy::fallible_impl_from", + "clippy::filter_map_next", + "clippy::flat_map_option", + "clippy::float_cmp_const", + "clippy::fn_params_excessive_bools", + "clippy::fn_to_numeric_cast_any", + "clippy::from_iter_instead_of_collect", + "clippy::if_let_mutex", + "clippy::implicit_clone", + "clippy::imprecise_flops", + "clippy::index_refutable_slice", + "clippy::inefficient_to_string", + "clippy::invalid_upcast_comparisons", + "clippy::iter_not_returning_iterator", + "clippy::iter_on_empty_collections", + "clippy::iter_on_single_items", + "clippy::large_digit_groups", + "clippy::large_stack_arrays", + "clippy::large_types_passed_by_value", + "clippy::let_unit_value", + "clippy::linkedlist", + "clippy::lossy_float_literal", + "clippy::macro_use_imports", + "clippy::manual_assert", + "clippy::manual_instant_elapsed", + "clippy::manual_ok_or", + "clippy::manual_string_new", + "clippy::map_err_ignore", + "clippy::map_flatten", + "clippy::map_unwrap_or", + "clippy::match_on_vec_items", + "clippy::match_same_arms", + "clippy::match_wild_err_arm", + "clippy::match_wildcard_for_single_variants", + "clippy::mem_forget", + "clippy::mismatched_target_os", + "clippy::mismatching_type_param_order", + "clippy::missing_enforced_import_renames", + "clippy::missing_errors_doc", + "clippy::missing_safety_doc", + "clippy::mut_mut", + "clippy::mutex_integer", + "clippy::needless_borrow", + "clippy::needless_continue", + "clippy::needless_for_each", + "clippy::needless_pass_by_value", + "clippy::negative_feature_names", + "clippy::nonstandard_macro_braces", + "clippy::option_option", + "clippy::path_buf_push_overwrite", + "clippy::ptr_as_ptr", + "clippy::rc_mutex", + "clippy::ref_option_ref", + "clippy::rest_pat_in_fully_bound_structs", + "clippy::same_functions_in_if_condition", + "clippy::semicolon_if_nothing_returned", + "clippy::single_match_else", + "clippy::str_to_string", + "clippy::string_add_assign", + "clippy::string_add", + "clippy::string_lit_as_bytes", + "clippy::string_to_string", + "clippy::todo", + "clippy::trailing_empty_array", + "clippy::trait_duplication_in_bounds", + "clippy::unimplemented", + "clippy::unnecessary_wraps", + "clippy::unnested_or_patterns", + "clippy::unused_peekable", + "clippy::unused_rounding", + "clippy::unused_self", + "clippy::useless_transmute", + "clippy::verbose_file_reads", + "clippy::zero_sized_map_values", + "elided_lifetimes_in_paths", + "future_incompatible", + "nonstandard_style", + "rust_2018_idioms", + "rust_2021_prelude_collisions", + "rustdoc::missing_crate_level_docs", + "semicolon_in_expressions_from_macros", + "trivial_numeric_casts", + "unused_extern_crates", + "unused_import_braces", + "unused_lifetimes", ] allow = [ + # TODO(emilk): enable more lints + "clippy::cloned_instead_of_copied", "clippy::derive_partial_eq_without_eq", "clippy::type_complexity", - "clippy::unnecessary_lazy_evaluations", - "clippy::let-and-return" + "clippy::undocumented_unsafe_blocks", + "trivial_casts", + "unsafe_op_in_unsafe_fn", # `unsafe_op_in_unsafe_fn` may become the default in future Rust versions: https://github.com/rust-lang/rust/issues/71668 + "unused_qualifications", ] diff --git a/crates/eframe/CHANGELOG.md b/crates/eframe/CHANGELOG.md index 31f81715..6402ee2a 100644 --- a/crates/eframe/CHANGELOG.md +++ b/crates/eframe/CHANGELOG.md @@ -5,6 +5,7 @@ NOTE: [`egui-winit`](../egui-winit/CHANGELOG.md), [`egui_glium`](../egui_glium/C ## Unreleased +* MSRV (Minimum Supported Rust Version) is now `1.65.0` ([#2314](https://github.com/emilk/egui/pull/2314)). * Added `NativeOptions::fullsize_content` option on Mac to build titlebar-less windows with floating window controls ([#2049](https://github.com/emilk/egui/pull/2049)). * Added `NativeOptions::event_loop_builder` hook for apps to change platform specific event loop options ([#1952](https://github.com/emilk/egui/pull/1952)). * Enabled deferred render state initialization to support Android ([#1952](https://github.com/emilk/egui/pull/1952)). diff --git a/crates/eframe/Cargo.toml b/crates/eframe/Cargo.toml index c4202f19..596e6d72 100644 --- a/crates/eframe/Cargo.toml +++ b/crates/eframe/Cargo.toml @@ -4,7 +4,7 @@ version = "0.19.0" authors = ["Emil Ernerfeldt "] description = "egui framework - write GUI apps that compiles to web and/or natively" edition = "2021" -rust-version = "1.62" +rust-version = "1.65" homepage = "https://github.com/emilk/egui/tree/master/crates/eframe" license = "MIT OR Apache-2.0" readme = "README.md" diff --git a/crates/eframe/src/native/epi_integration.rs b/crates/eframe/src/native/epi_integration.rs index a27cb738..2d75d998 100644 --- a/crates/eframe/src/native/epi_integration.rs +++ b/crates/eframe/src/native/epi_integration.rs @@ -165,7 +165,7 @@ pub fn handle_app_output( } if let Some(fullscreen) = fullscreen { - window.set_fullscreen(fullscreen.then(|| winit::window::Fullscreen::Borderless(None))); + window.set_fullscreen(fullscreen.then_some(winit::window::Fullscreen::Borderless(None))); } if let Some(window_title) = window_title { @@ -328,7 +328,7 @@ impl EpiIntegration { handle_app_output(window, self.egui_ctx.pixels_per_point(), app_output); } - let frame_time = (std::time::Instant::now() - frame_start).as_secs_f64() as f32; + let frame_time = frame_start.elapsed().as_secs_f64() as f32; self.frame.info.cpu_usage = Some(frame_time); full_output diff --git a/crates/eframe/src/web/events.rs b/crates/eframe/src/web/events.rs index b3030e0d..02cfdead 100644 --- a/crates/eframe/src/web/events.rs +++ b/crates/eframe/src/web/events.rs @@ -308,7 +308,7 @@ pub fn install_canvas_events(runner_container: &mut AppRunnerContainer) -> Resul modifiers, }); - push_touches(&mut *runner_lock, egui::TouchPhase::Start, &event); + push_touches(&mut runner_lock, egui::TouchPhase::Start, &event); runner_lock.needs_repaint.repaint_asap(); event.stop_propagation(); event.prevent_default(); @@ -330,7 +330,7 @@ pub fn install_canvas_events(runner_container: &mut AppRunnerContainer) -> Resul .events .push(egui::Event::PointerMoved(pos)); - push_touches(&mut *runner_lock, egui::TouchPhase::Move, &event); + push_touches(&mut runner_lock, egui::TouchPhase::Move, &event); runner_lock.needs_repaint.repaint_asap(); event.stop_propagation(); event.prevent_default(); @@ -357,7 +357,7 @@ pub fn install_canvas_events(runner_container: &mut AppRunnerContainer) -> Resul // Then remove hover effect: runner_lock.input.raw.events.push(egui::Event::PointerGone); - push_touches(&mut *runner_lock, egui::TouchPhase::End, &event); + push_touches(&mut runner_lock, egui::TouchPhase::End, &event); runner_lock.needs_repaint.repaint_asap(); event.stop_propagation(); event.prevent_default(); diff --git a/crates/egui-wgpu/Cargo.toml b/crates/egui-wgpu/Cargo.toml index dad6ce7a..31009aa3 100644 --- a/crates/egui-wgpu/Cargo.toml +++ b/crates/egui-wgpu/Cargo.toml @@ -8,7 +8,7 @@ authors = [ "Emil Ernerfeldt ", ] edition = "2021" -rust-version = "1.62" +rust-version = "1.65" homepage = "https://github.com/emilk/egui/tree/master/crates/egui-wgpu" license = "MIT OR Apache-2.0" readme = "README.md" diff --git a/crates/egui-wgpu/src/winit.rs b/crates/egui-wgpu/src/winit.rs index 8eb788dc..707f24f7 100644 --- a/crates/egui-wgpu/src/winit.rs +++ b/crates/egui-wgpu/src/winit.rs @@ -46,7 +46,7 @@ impl Painter { Self { configuration, msaa_samples, - depth_format: (depth_bits > 0).then(|| wgpu::TextureFormat::Depth32Float), + depth_format: (depth_bits > 0).then_some(wgpu::TextureFormat::Depth32Float), depth_texture_view: None, instance, diff --git a/crates/egui-winit/Cargo.toml b/crates/egui-winit/Cargo.toml index 70cb6f52..4667646c 100644 --- a/crates/egui-winit/Cargo.toml +++ b/crates/egui-winit/Cargo.toml @@ -4,7 +4,7 @@ version = "0.19.0" authors = ["Emil Ernerfeldt "] description = "Bindings for using egui with winit" edition = "2021" -rust-version = "1.62" +rust-version = "1.65" homepage = "https://github.com/emilk/egui/tree/master/crates/egui-winit" license = "MIT OR Apache-2.0" readme = "README.md" diff --git a/crates/egui-winit/src/window_settings.rs b/crates/egui-winit/src/window_settings.rs index 78aeace0..104d9041 100644 --- a/crates/egui-winit/src/window_settings.rs +++ b/crates/egui-winit/src/window_settings.rs @@ -68,7 +68,7 @@ impl WindowSettings { }) .with_fullscreen( self.fullscreen - .then(|| winit::window::Fullscreen::Borderless(None)), + .then_some(winit::window::Fullscreen::Borderless(None)), ) } else { window diff --git a/crates/egui/Cargo.toml b/crates/egui/Cargo.toml index cf13c969..3e8e3ccc 100644 --- a/crates/egui/Cargo.toml +++ b/crates/egui/Cargo.toml @@ -4,7 +4,7 @@ version = "0.19.0" authors = ["Emil Ernerfeldt "] description = "An easy-to-use immediate mode GUI that runs on both web and native" edition = "2021" -rust-version = "1.62" +rust-version = "1.65" homepage = "https://github.com/emilk/egui" license = "MIT OR Apache-2.0" readme = "../../README.md" diff --git a/crates/egui/src/memory.rs b/crates/egui/src/memory.rs index a588bf87..1d94601b 100644 --- a/crates/egui/src/memory.rs +++ b/crates/egui/src/memory.rs @@ -293,7 +293,7 @@ impl Focus { self.id_next_frame = self.last_interested; // frame-delay so gained_focus works self.pressed_shift_tab = false; } - } else if self.pressed_tab && self.id == None && !self.give_to_next { + } else if self.pressed_tab && self.id.is_none() && !self.give_to_next { // nothing has focus and the user pressed tab - give focus to the first widgets that wants it: self.id = Some(id); self.pressed_tab = false; diff --git a/crates/egui/src/menu.rs b/crates/egui/src/menu.rs index 2c50c192..db32d14c 100644 --- a/crates/egui/src/menu.rs +++ b/crates/egui/src/menu.rs @@ -443,7 +443,7 @@ impl SubMenuButton { let (rect, response) = ui.allocate_at_least(desired_size, sense); response.widget_info(|| { - crate::WidgetInfo::labeled(crate::WidgetType::Button, &text_galley.text()) + crate::WidgetInfo::labeled(crate::WidgetType::Button, text_galley.text()) }); if ui.is_rect_visible(rect) { @@ -491,7 +491,7 @@ impl SubMenu { add_contents: impl FnOnce(&mut Ui) -> R, ) -> InnerResponse> { let sub_id = ui.id().with(self.button.index); - let button = self.button.show(ui, &*self.parent_state.read(), sub_id); + let button = self.button.show(ui, &self.parent_state.read(), sub_id); self.parent_state .write() .submenu_button_interaction(ui, sub_id, &button); diff --git a/crates/egui/src/widgets/drag_value.rs b/crates/egui/src/widgets/drag_value.rs index d750041f..55ea13e9 100644 --- a/crates/egui/src/widgets/drag_value.rs +++ b/crates/egui/src/widgets/drag_value.rs @@ -464,7 +464,7 @@ impl<'a> Widget for DragValue<'a> { // Since we round the value being dragged, we need to store the full precision value in memory: let stored_value = (drag_state.last_dragged_id == Some(response.id)) - .then(|| drag_state.last_dragged_value) + .then_some(drag_state.last_dragged_value) .flatten(); let stored_value = stored_value.unwrap_or(value); let stored_value = stored_value + delta_value; diff --git a/crates/egui/src/widgets/label.rs b/crates/egui/src/widgets/label.rs index 3bf9f628..153a119f 100644 --- a/crates/egui/src/widgets/label.rs +++ b/crates/egui/src/widgets/label.rs @@ -110,7 +110,7 @@ impl Label { if let Some(first_section) = text_job.job.sections.first_mut() { first_section.leading_space = first_row_indentation; } - let text_galley = text_job.into_galley(&*ui.fonts()); + let text_galley = text_job.into_galley(&ui.fonts()); let pos = pos2(ui.max_rect().left(), ui.cursor().top()); assert!( @@ -143,7 +143,7 @@ impl Label { text_job.job.justify = ui.layout().horizontal_justify(); }; - let text_galley = text_job.into_galley(&*ui.fonts()); + let text_galley = text_job.into_galley(&ui.fonts()); let (rect, response) = ui.allocate_exact_size(text_galley.size(), self.sense); let pos = match text_galley.galley.job.halign { Align::LEFT => rect.left_top(), diff --git a/crates/egui/src/widgets/plot/items/mod.rs b/crates/egui/src/widgets/plot/items/mod.rs index 6e106bf3..aa24e60a 100644 --- a/crates/egui/src/widgets/plot/items/mod.rs +++ b/crates/egui/src/widgets/plot/items/mod.rs @@ -406,7 +406,7 @@ impl Line { /// a horizontal line at the given y-coordinate. fn y_intersection(p1: &Pos2, p2: &Pos2, y: f32) -> Option { ((p1.y > y && p2.y < y) || (p1.y < y && p2.y > y)) - .then(|| ((y * (p1.x - p2.x)) - (p1.x * p2.y - p1.y * p2.x)) / (p1.y - p2.y)) + .then_some(((y * (p1.x - p2.x)) - (p1.x * p2.y - p1.y * p2.x)) / (p1.y - p2.y)) } impl PlotItem for Line { @@ -844,7 +844,7 @@ impl PlotItem for Points { let default_stroke = Stroke::new(stroke_size, *color); let mut stem_stroke = default_stroke; let stroke = (!filled) - .then(|| default_stroke) + .then_some(default_stroke) .unwrap_or_else(Stroke::none); let fill = filled.then(|| *color).unwrap_or_default(); @@ -1644,7 +1644,7 @@ fn add_rulers_and_text( let corner_value = elem.corner_value(); shapes.push(Shape::text( - &*plot.ui.fonts(), + &plot.ui.fonts(), plot.transform.position_from_point(&corner_value) + vec2(3.0, -2.0), Align2::LEFT_BOTTOM, text, @@ -1701,7 +1701,7 @@ pub(super) fn rulers_at_value( let font_id = TextStyle::Body.resolve(plot.ui.style()); shapes.push(Shape::text( - &*plot.ui.fonts(), + &plot.ui.fonts(), pointer + vec2(3.0, -2.0), Align2::LEFT_BOTTOM, text, diff --git a/crates/egui/src/widgets/plot/items/values.rs b/crates/egui/src/widgets/plot/items/values.rs index d39947d1..739490dc 100644 --- a/crates/egui/src/widgets/plot/items/values.rs +++ b/crates/egui/src/widgets/plot/items/values.rs @@ -299,7 +299,7 @@ impl PlotPoints { ) -> Option> { let start = range1.start().max(*range2.start()); let end = range1.end().min(*range2.end()); - (start < end).then(|| start..=end) + (start < end).then_some(start..=end) } pub(super) fn bounds(&self) -> PlotBounds { diff --git a/crates/egui/src/widgets/plot/legend.rs b/crates/egui/src/widgets/plot/legend.rs index a0a8ad99..216f14b9 100644 --- a/crates/egui/src/widgets/plot/legend.rs +++ b/crates/egui/src/widgets/plot/legend.rs @@ -189,7 +189,7 @@ impl LegendWidget { LegendEntry::new(color, checked) }); }); - (!entries.is_empty()).then(|| Self { + (!entries.is_empty()).then_some(Self { rect, entries, config, diff --git a/crates/egui/src/widgets/text_edit/builder.rs b/crates/egui/src/widgets/text_edit/builder.rs index 6d83389c..11cd7be1 100644 --- a/crates/egui/src/widgets/text_edit/builder.rs +++ b/crates/egui/src/widgets/text_edit/builder.rs @@ -490,7 +490,7 @@ impl<'t> TextEdit<'t> { if response.hovered() && ui.input().pointer.any_pressed() { ui.memory().request_focus(id); if ui.input().modifiers.shift { - if let Some(mut cursor_range) = state.cursor_range(&*galley) { + if let Some(mut cursor_range) = state.cursor_range(&galley) { cursor_range.primary = cursor_at_pointer; state.set_cursor_range(Some(cursor_range)); } else { @@ -502,7 +502,7 @@ impl<'t> TextEdit<'t> { } else if ui.input().pointer.any_down() && response.is_pointer_button_down_on() { // drag to select text: - if let Some(mut cursor_range) = state.cursor_range(&*galley) { + if let Some(mut cursor_range) = state.cursor_range(&galley) { cursor_range.primary = cursor_at_pointer; state.set_cursor_range(Some(cursor_range)); } @@ -516,7 +516,7 @@ impl<'t> TextEdit<'t> { } let mut cursor_range = None; - let prev_cursor_range = state.cursor_range(&*galley); + let prev_cursor_range = state.cursor_range(&galley); if ui.memory().has_focus(id) && interactive { ui.memory().lock_focus(id, lock_focus); @@ -595,7 +595,7 @@ impl<'t> TextEdit<'t> { } if ui.memory().has_focus(id) { - if let Some(cursor_range) = state.cursor_range(&*galley) { + if let Some(cursor_range) = state.cursor_range(&galley) { // We paint the cursor on top of the text, in case // the text galley has backgrounds (as e.g. `code` snippets in markup do). paint_cursor_selection(ui, &painter, text_draw_pos, &galley, &cursor_range); @@ -703,7 +703,7 @@ fn events( password: bool, default_cursor_range: CursorRange, ) -> (bool, CursorRange) { - let mut cursor_range = state.cursor_range(&*galley).unwrap_or(default_cursor_range); + let mut cursor_range = state.cursor_range(galley).unwrap_or(default_cursor_range); // We feed state to the undoer both before and after handling input // so that the undoer creates automatic saves even when there are no events for a while. diff --git a/crates/egui_demo_app/Cargo.toml b/crates/egui_demo_app/Cargo.toml index 0a73c2e4..e8bb5617 100644 --- a/crates/egui_demo_app/Cargo.toml +++ b/crates/egui_demo_app/Cargo.toml @@ -4,7 +4,7 @@ version = "0.19.0" authors = ["Emil Ernerfeldt "] license = "MIT OR Apache-2.0" edition = "2021" -rust-version = "1.62" +rust-version = "1.65" publish = false default-run = "egui_demo_app" @@ -19,18 +19,9 @@ crate-type = ["cdylib", "rlib"] default = ["glow", "persistence"] http = ["ehttp", "image", "poll-promise", "egui_extras/image"] -persistence = [ - "eframe/persistence", - "egui/persistence", - "serde", -] -screen_reader = ["eframe/screen_reader"] # experimental -serde = [ - "dep:serde", - "egui_demo_lib/serde", - "egui_extras/serde", - "egui/serde", -] +persistence = ["eframe/persistence", "egui/persistence", "serde"] +screen_reader = ["eframe/screen_reader"] # experimental +serde = ["dep:serde", "egui_demo_lib/serde", "egui_extras/serde", "egui/serde"] syntax_highlighting = ["egui_demo_lib/syntax_highlighting"] glow = ["eframe/glow"] @@ -40,8 +31,12 @@ wgpu = ["eframe/wgpu", "bytemuck"] [dependencies] chrono = { version = "0.4", features = ["js-sys", "wasmbind"] } eframe = { version = "0.19.0", path = "../eframe", default-features = false } -egui = { version = "0.19.0", path = "../egui", features = ["extra_debug_asserts"] } -egui_demo_lib = { version = "0.19.0", path = "../egui_demo_lib", features = ["chrono"] } +egui = { version = "0.19.0", path = "../egui", features = [ + "extra_debug_asserts", +] } +egui_demo_lib = { version = "0.19.0", path = "../egui_demo_lib", features = [ + "chrono", +] } tracing = "0.1" # Optional dependencies: diff --git a/crates/egui_demo_app/src/frame_history.rs b/crates/egui_demo_app/src/frame_history.rs index 25ddd3fc..26d8370c 100644 --- a/crates/egui_demo_app/src/frame_history.rs +++ b/crates/egui_demo_app/src/frame_history.rs @@ -96,7 +96,7 @@ impl FrameHistory { let cpu_usage = to_screen.inverse().transform_pos(pointer_pos).y; let text = format!("{:.1} ms", 1e3 * cpu_usage); shapes.push(Shape::text( - &*ui.fonts(), + &ui.fonts(), pos2(rect.left(), y), egui::Align2::LEFT_BOTTOM, text, diff --git a/crates/egui_demo_app/src/lib.rs b/crates/egui_demo_app/src/lib.rs index 002def1b..5693c380 100644 --- a/crates/egui_demo_app/src/lib.rs +++ b/crates/egui_demo_app/src/lib.rs @@ -59,15 +59,13 @@ pub fn init_wasm_hooks() { #[wasm_bindgen] pub async fn start_separate(canvas_id: &str) -> Result { let web_options = eframe::WebOptions::default(); - let handle = eframe::start_web( + eframe::start_web( canvas_id, web_options, Box::new(|cc| Box::new(WrapApp::new(cc))), ) .await - .map(|handle| WebHandle { handle }); - - handle + .map(|handle| WebHandle { handle }) } /// This is the entry-point for all the web-assembly. diff --git a/crates/egui_demo_lib/Cargo.toml b/crates/egui_demo_lib/Cargo.toml index 7a379630..07792422 100644 --- a/crates/egui_demo_lib/Cargo.toml +++ b/crates/egui_demo_lib/Cargo.toml @@ -4,7 +4,7 @@ version = "0.19.0" authors = ["Emil Ernerfeldt "] description = "Example library for egui" edition = "2021" -rust-version = "1.62" +rust-version = "1.65" homepage = "https://github.com/emilk/egui/tree/master/crates/egui_demo_lib" license = "MIT OR Apache-2.0" readme = "README.md" @@ -41,7 +41,9 @@ chrono = { version = "0.4", optional = true, features = ["js-sys", "wasmbind"] } ## Enable this when generating docs. document-features = { version = "0.2", optional = true } serde = { version = "1", optional = true, features = ["derive"] } -syntect = { version = "5", optional = true, default-features = false, features = ["default-fancy"] } +syntect = { version = "5", optional = true, default-features = false, features = [ + "default-fancy", +] } [dev-dependencies] diff --git a/crates/egui_extras/Cargo.toml b/crates/egui_extras/Cargo.toml index 83b8d082..4926febc 100644 --- a/crates/egui_extras/Cargo.toml +++ b/crates/egui_extras/Cargo.toml @@ -8,7 +8,7 @@ authors = [ ] description = "Extra functionality and widgets for the egui GUI library" edition = "2021" -rust-version = "1.62" +rust-version = "1.65" homepage = "https://github.com/emilk/egui" license = "MIT OR Apache-2.0" readme = "README.md" @@ -67,4 +67,6 @@ usvg = { version = "0.23", optional = true } serde = { version = "1", features = ["derive"], optional = true } # feature "tracing" -tracing = { version = "0.1", optional = true, default-features = false, features = ["std"] } +tracing = { version = "0.1", optional = true, default-features = false, features = [ + "std", +] } diff --git a/crates/egui_extras/src/datepicker/button.rs b/crates/egui_extras/src/datepicker/button.rs index dd9632e1..23ccbd5b 100644 --- a/crates/egui_extras/src/datepicker/button.rs +++ b/crates/egui_extras/src/datepicker/button.rs @@ -63,7 +63,7 @@ impl<'a> DatePickerButton<'a> { impl<'a> Widget for DatePickerButton<'a> { fn ui(self, ui: &mut Ui) -> egui::Response { - let id = ui.make_persistent_id(&self.id_source); + let id = ui.make_persistent_id(self.id_source); let mut button_state = ui .memory() .data @@ -104,7 +104,7 @@ impl<'a> Widget for DatePickerButton<'a> { let InnerResponse { inner: saved, response: area_response, - } = Area::new(ui.make_persistent_id(&self.id_source)) + } = Area::new(ui.make_persistent_id(self.id_source)) .order(Order::Foreground) .fixed_pos(pos) .show(ui.ctx(), |ui| { diff --git a/crates/egui_extras/src/datepicker/popup.rs b/crates/egui_extras/src/datepicker/popup.rs index b5331bb2..445e2d6f 100644 --- a/crates/egui_extras/src/datepicker/popup.rs +++ b/crates/egui_extras/src/datepicker/popup.rs @@ -67,7 +67,7 @@ impl<'a> DatePickerPopup<'a> { ) .sizes( Size::exact((spacing + height) * (weeks.len() + 1) as f32), - if self.calendar { 1 } else { 0 }, + self.calendar as usize, ) .size(Size::exact(height)) .vertical(|mut strip| { diff --git a/crates/egui_glium/Cargo.toml b/crates/egui_glium/Cargo.toml index 62883542..2aaa986c 100644 --- a/crates/egui_glium/Cargo.toml +++ b/crates/egui_glium/Cargo.toml @@ -4,7 +4,7 @@ version = "0.19.0" authors = ["Emil Ernerfeldt "] description = "Bindings for using egui natively using the glium library" edition = "2021" -rust-version = "1.62" +rust-version = "1.65" homepage = "https://github.com/emilk/egui/tree/master/crates/egui_glium" license = "MIT OR Apache-2.0" readme = "README.md" diff --git a/crates/egui_glow/Cargo.toml b/crates/egui_glow/Cargo.toml index fcda408d..1f09feeb 100644 --- a/crates/egui_glow/Cargo.toml +++ b/crates/egui_glow/Cargo.toml @@ -4,7 +4,7 @@ version = "0.19.0" authors = ["Emil Ernerfeldt "] description = "Bindings for using egui natively using the glow library" edition = "2021" -rust-version = "1.62" +rust-version = "1.65" homepage = "https://github.com/emilk/egui/tree/master/crates/egui_glow" license = "MIT OR Apache-2.0" readme = "README.md" diff --git a/crates/emath/Cargo.toml b/crates/emath/Cargo.toml index 4ca98c12..9afc9a58 100644 --- a/crates/emath/Cargo.toml +++ b/crates/emath/Cargo.toml @@ -4,7 +4,7 @@ version = "0.19.0" authors = ["Emil Ernerfeldt "] description = "Minimal 2D math library for GUI work" edition = "2021" -rust-version = "1.62" +rust-version = "1.65" homepage = "https://github.com/emilk/egui/tree/master/crates/emath" license = "MIT OR Apache-2.0" readme = "README.md" diff --git a/crates/epaint/Cargo.toml b/crates/epaint/Cargo.toml index b66527a5..c8c19648 100644 --- a/crates/epaint/Cargo.toml +++ b/crates/epaint/Cargo.toml @@ -4,7 +4,7 @@ version = "0.19.0" authors = ["Emil Ernerfeldt "] description = "Minimal 2D graphics library for GUI work" edition = "2021" -rust-version = "1.62" +rust-version = "1.65" homepage = "https://github.com/emilk/egui/tree/master/crates/epaint" license = "MIT OR Apache-2.0" readme = "README.md" diff --git a/crates/epaint/src/mutex.rs b/crates/epaint/src/mutex.rs index 80475991..19cf59b5 100644 --- a/crates/epaint/src/mutex.rs +++ b/crates/epaint/src/mutex.rs @@ -183,7 +183,7 @@ mod rw_lock_impl { type Target = T; fn deref(&self) -> &Self::Target { - &**self.guard.as_ref().unwrap() + self.guard.as_ref().unwrap() } } @@ -222,13 +222,13 @@ mod rw_lock_impl { type Target = T; fn deref(&self) -> &Self::Target { - &**self.guard.as_ref().unwrap() + self.guard.as_ref().unwrap() } } impl<'a, T> DerefMut for RwLockWriteGuard<'a, T> { fn deref_mut(&mut self) -> &mut Self::Target { - &mut **self.guard.as_mut().unwrap() + self.guard.as_mut().unwrap() } } diff --git a/examples/confirm_exit/Cargo.toml b/examples/confirm_exit/Cargo.toml index 9346a3b3..8393aae6 100644 --- a/examples/confirm_exit/Cargo.toml +++ b/examples/confirm_exit/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" authors = ["Emil Ernerfeldt "] license = "MIT OR Apache-2.0" edition = "2021" -rust-version = "1.62" +rust-version = "1.65" publish = false diff --git a/examples/custom_3d_glow/Cargo.toml b/examples/custom_3d_glow/Cargo.toml index afe8b919..f124b901 100644 --- a/examples/custom_3d_glow/Cargo.toml +++ b/examples/custom_3d_glow/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" authors = ["Emil Ernerfeldt "] license = "MIT OR Apache-2.0" edition = "2021" -rust-version = "1.62" +rust-version = "1.65" publish = false diff --git a/examples/custom_3d_three-d/Cargo.toml b/examples/custom_3d_three-d/Cargo.toml index 4c6e662b..9ce3f9fd 100644 --- a/examples/custom_3d_three-d/Cargo.toml +++ b/examples/custom_3d_three-d/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" authors = ["Emil Ernerfeldt "] license = "MIT OR Apache-2.0" edition = "2021" -rust-version = "1.62" +rust-version = "1.65" publish = false [lib] @@ -17,6 +17,6 @@ glow = "0.11" three-d = { version = "0.13", default-features = false } [target.'cfg(target_arch = "wasm32")'.dependencies] # Web dependencies -wasm-bindgen = "0.2" # Core bindings -wasm-bindgen-futures = "0.4" # Core bindings console_error_panic_hook = "0.1" # For logging +wasm-bindgen = "0.2" # Core bindings +wasm-bindgen-futures = "0.4" # Core bindings diff --git a/examples/custom_3d_three-d/src/lib.rs b/examples/custom_3d_three-d/src/lib.rs index ff2e4fd1..9d081b17 100644 --- a/examples/custom_3d_three-d/src/lib.rs +++ b/examples/custom_3d_three-d/src/lib.rs @@ -1,3 +1,5 @@ +#![allow(special_module_name)] + mod main; // Entry point for wasm diff --git a/examples/custom_font/Cargo.toml b/examples/custom_font/Cargo.toml index 9b2637c1..29868ea2 100644 --- a/examples/custom_font/Cargo.toml +++ b/examples/custom_font/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" authors = ["Emil Ernerfeldt "] license = "MIT OR Apache-2.0" edition = "2021" -rust-version = "1.62" +rust-version = "1.65" publish = false diff --git a/examples/custom_font_style/Cargo.toml b/examples/custom_font_style/Cargo.toml index c6f86a7e..4db0565e 100644 --- a/examples/custom_font_style/Cargo.toml +++ b/examples/custom_font_style/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" authors = ["tami5 "] license = "MIT OR Apache-2.0" edition = "2021" -rust-version = "1.62" +rust-version = "1.65" publish = false diff --git a/examples/custom_window_frame/Cargo.toml b/examples/custom_window_frame/Cargo.toml index 1c7f30d1..5f5ea2c6 100644 --- a/examples/custom_window_frame/Cargo.toml +++ b/examples/custom_window_frame/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" authors = ["Emil Ernerfeldt "] license = "MIT OR Apache-2.0" edition = "2021" -rust-version = "1.62" +rust-version = "1.65" publish = false diff --git a/examples/download_image/Cargo.toml b/examples/download_image/Cargo.toml index 88f03f47..87e0a8eb 100644 --- a/examples/download_image/Cargo.toml +++ b/examples/download_image/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" authors = ["Emil Ernerfeldt "] license = "MIT OR Apache-2.0" edition = "2021" -rust-version = "1.62" +rust-version = "1.65" publish = false diff --git a/examples/file_dialog/Cargo.toml b/examples/file_dialog/Cargo.toml index 6c3b005e..6ac88b00 100644 --- a/examples/file_dialog/Cargo.toml +++ b/examples/file_dialog/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" authors = ["Emil Ernerfeldt "] license = "MIT OR Apache-2.0" edition = "2021" -rust-version = "1.62" +rust-version = "1.65" publish = false diff --git a/examples/hello_world/Cargo.toml b/examples/hello_world/Cargo.toml index 45570bc0..d0c07a05 100644 --- a/examples/hello_world/Cargo.toml +++ b/examples/hello_world/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" authors = ["Emil Ernerfeldt "] license = "MIT OR Apache-2.0" edition = "2021" -rust-version = "1.62" +rust-version = "1.65" publish = false diff --git a/examples/puffin_profiler/Cargo.toml b/examples/puffin_profiler/Cargo.toml index fefb311f..d27c68eb 100644 --- a/examples/puffin_profiler/Cargo.toml +++ b/examples/puffin_profiler/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" authors = ["Emil Ernerfeldt "] license = "MIT OR Apache-2.0" edition = "2021" -rust-version = "1.62" +rust-version = "1.65" publish = false diff --git a/examples/retained_image/Cargo.toml b/examples/retained_image/Cargo.toml index 91742b36..d09bfae4 100644 --- a/examples/retained_image/Cargo.toml +++ b/examples/retained_image/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" authors = ["Emil Ernerfeldt "] license = "MIT OR Apache-2.0" edition = "2021" -rust-version = "1.62" +rust-version = "1.65" publish = false diff --git a/examples/screenshot/Cargo.toml b/examples/screenshot/Cargo.toml index 3cdddbbe..3be923e6 100644 --- a/examples/screenshot/Cargo.toml +++ b/examples/screenshot/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" authors = ["René Rössler "] license = "MIT OR Apache-2.0" edition = "2021" -rust-version = "1.62" +rust-version = "1.65" publish = false diff --git a/examples/serial_windows/Cargo.toml b/examples/serial_windows/Cargo.toml index 48ac2cad..16a90ec7 100644 --- a/examples/serial_windows/Cargo.toml +++ b/examples/serial_windows/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" authors = ["Emil Ernerfeldt "] license = "MIT OR Apache-2.0" edition = "2021" -rust-version = "1.62" +rust-version = "1.65" publish = false diff --git a/examples/svg/Cargo.toml b/examples/svg/Cargo.toml index 5c9cfdab..4bc9682d 100644 --- a/examples/svg/Cargo.toml +++ b/examples/svg/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" authors = ["Emil Ernerfeldt "] license = "MIT OR Apache-2.0" edition = "2021" -rust-version = "1.62" +rust-version = "1.65" publish = false diff --git a/rust-toolchain b/rust-toolchain index 89a25898..0e334035 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -5,6 +5,6 @@ # to the user in the error, instead of "error: invalid channel name '[toolchain]'". [toolchain] -channel = "1.64.0" +channel = "1.65.0" components = [ "rustfmt", "clippy" ] targets = [ "wasm32-unknown-unknown" ] From dfc1f2c4703d54b7a7c9fd40e636f434569942b2 Mon Sep 17 00:00:00 2001 From: Clement Rey Date: Thu, 17 Nov 2022 17:07:42 +0100 Subject: [PATCH 005/143] add plot_secondary_clicked to plot_ui (#2318) --- crates/egui/src/widgets/plot/mod.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/crates/egui/src/widgets/plot/mod.rs b/crates/egui/src/widgets/plot/mod.rs index a0d72dba..33331d11 100644 --- a/crates/egui/src/widgets/plot/mod.rs +++ b/crates/egui/src/widgets/plot/mod.rs @@ -1055,6 +1055,11 @@ impl PlotUi { self.response.clicked() } + /// Returns `true` if the plot was clicked by the secondary button. + pub fn plot_secondary_clicked(&self) -> bool { + self.response.secondary_clicked() + } + /// The pointer position in plot coordinates. Independent of whether the pointer is in the plot area. pub fn pointer_coordinate(&self) -> Option { // We need to subtract the drag delta to keep in sync with the frame-delayed screen transform: From f4d8ab97795f8d6fe804a26be128e20c3f6e2ebd Mon Sep 17 00:00:00 2001 From: Lukas Hermann Date: Mon, 21 Nov 2022 01:08:24 -0800 Subject: [PATCH 006/143] [wgpu] Add depth stencil initialization to `Painter` (#2316) --- crates/egui-wgpu/CHANGELOG.md | 1 + crates/egui-wgpu/src/winit.rs | 50 ++++++++++++++++++++--------------- 2 files changed, 30 insertions(+), 21 deletions(-) diff --git a/crates/egui-wgpu/CHANGELOG.md b/crates/egui-wgpu/CHANGELOG.md index c5499396..2236a0c2 100644 --- a/crates/egui-wgpu/CHANGELOG.md +++ b/crates/egui-wgpu/CHANGELOG.md @@ -13,6 +13,7 @@ All notable changes to the `egui-wgpu` integration will be noted in this file. * Only a single vertex & index buffer is now created and resized when necessary (previously, vertex/index buffers were allocated for every mesh) ([#2148](https://github.com/emilk/egui/pull/2148)). * `Renderer::update_texture` no longer creates a new `wgpu::Sampler` with every new texture ([#2198](https://github.com/emilk/egui/pull/2198)) * `Painter`'s instance/device/adapter/surface creation is now configurable via `WgpuConfiguration` ([#2207](https://github.com/emilk/egui/pull/2207)) +* Fix panic on using a depth buffer ([#2316](https://github.com/emilk/egui/pull/2316)) ## 0.19.0 - 2022-08-20 * Enables deferred render + surface state initialization for Android ([#1634](https://github.com/emilk/egui/pull/1634)). diff --git a/crates/egui-wgpu/src/winit.rs b/crates/egui-wgpu/src/winit.rs index 707f24f7..ff0b1903 100644 --- a/crates/egui-wgpu/src/winit.rs +++ b/crates/egui-wgpu/src/winit.rs @@ -176,7 +176,7 @@ impl Painter { width, height, }); - self.configure_surface(width, height); + self.resize_and_generate_depth_texture_view(width, height); } None => { self.surface_state = None; @@ -195,28 +195,36 @@ impl Painter { .map(|rs| rs.device.limits().max_texture_dimension_2d as usize) } + pub fn resize_and_generate_depth_texture_view( + &mut self, + width_in_pixels: u32, + height_in_pixels: u32, + ) { + self.configure_surface(width_in_pixels, height_in_pixels); + let device = &self.render_state.as_ref().unwrap().device; + self.depth_texture_view = self.depth_format.map(|depth_format| { + device + .create_texture(&wgpu::TextureDescriptor { + label: Some("egui_depth_texture"), + size: wgpu::Extent3d { + width: width_in_pixels, + height: height_in_pixels, + depth_or_array_layers: 1, + }, + mip_level_count: 1, + sample_count: 1, + dimension: wgpu::TextureDimension::D2, + format: depth_format, + usage: wgpu::TextureUsages::RENDER_ATTACHMENT + | wgpu::TextureUsages::TEXTURE_BINDING, + }) + .create_view(&wgpu::TextureViewDescriptor::default()) + }); + } + pub fn on_window_resized(&mut self, width_in_pixels: u32, height_in_pixels: u32) { if self.surface_state.is_some() { - self.configure_surface(width_in_pixels, height_in_pixels); - let device = &self.render_state.as_ref().unwrap().device; - self.depth_texture_view = self.depth_format.map(|depth_format| { - device - .create_texture(&wgpu::TextureDescriptor { - label: Some("egui_depth_texture"), - size: wgpu::Extent3d { - width: width_in_pixels, - height: height_in_pixels, - depth_or_array_layers: 1, - }, - mip_level_count: 1, - sample_count: 1, - dimension: wgpu::TextureDimension::D2, - format: depth_format, - usage: wgpu::TextureUsages::RENDER_ATTACHMENT - | wgpu::TextureUsages::TEXTURE_BINDING, - }) - .create_view(&wgpu::TextureViewDescriptor::default()) - }); + self.resize_and_generate_depth_texture_view(width_in_pixels, height_in_pixels); } else { error!("Ignoring window resize notification with no surface created via Painter::set_window()"); } From 1c8cf9e3d59d8aee4c073b9e17695ee85c40bdbf Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Mon, 21 Nov 2022 14:14:33 +0100 Subject: [PATCH 007/143] Move egui::util::History to emath::History (#2329) * Move egui::util::History to emath::History It is a nice thing to use outside of egui, and it is more math-related than gui-related. * Fix doctest --- crates/egui/src/util/mod.rs | 3 +-- crates/{egui/src/util => emath/src}/history.rs | 4 ++-- crates/emath/src/lib.rs | 2 ++ 3 files changed, 5 insertions(+), 4 deletions(-) rename crates/{egui/src/util => emath/src}/history.rs (98%) diff --git a/crates/egui/src/util/mod.rs b/crates/egui/src/util/mod.rs index ea83ea61..55e93eb0 100644 --- a/crates/egui/src/util/mod.rs +++ b/crates/egui/src/util/mod.rs @@ -2,11 +2,10 @@ pub mod cache; pub(crate) mod fixed_cache; -mod history; pub mod id_type_map; pub mod undoer; -pub use history::History; pub use id_type_map::IdTypeMap; +pub use epaint::emath::History; pub use epaint::util::{hash, hash_with}; diff --git a/crates/egui/src/util/history.rs b/crates/emath/src/history.rs similarity index 98% rename from crates/egui/src/util/history.rs rename to crates/emath/src/history.rs index 26e9443d..482db925 100644 --- a/crates/egui/src/util/history.rs +++ b/crates/emath/src/history.rs @@ -41,7 +41,7 @@ where { /// Example: /// ``` - /// # use egui::util::History; + /// # use emath::History; /// # fn now() -> f64 { 0.0 } /// // Drop events that are older than one second, /// // as long we keep at least two events. Never keep more than a hundred events. @@ -125,7 +125,7 @@ where /// Values must be added with a monotonically increasing time, or at least not decreasing. pub fn add(&mut self, now: f64, value: T) { if let Some((last_time, _)) = self.values.back() { - crate::egui_assert!(now >= *last_time, "Time shouldn't move backwards"); + crate::emath_assert!(now >= *last_time, "Time shouldn't move backwards"); } self.total_count += 1; self.values.push_back((now, value)); diff --git a/crates/emath/src/lib.rs b/crates/emath/src/lib.rs index 016e3e8d..7b679cbf 100644 --- a/crates/emath/src/lib.rs +++ b/crates/emath/src/lib.rs @@ -27,6 +27,7 @@ use std::ops::{Add, Div, Mul, RangeInclusive, Sub}; // ---------------------------------------------------------------------------- pub mod align; +mod history; mod numeric; mod pos2; mod rect; @@ -37,6 +38,7 @@ mod vec2; pub use { align::{Align, Align2}, + history::History, numeric::*, pos2::*, rect::*, From 8671aa26e1f65340c41f6b2c6f3ef2d6d80a6567 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Mon, 21 Nov 2022 17:33:23 +0100 Subject: [PATCH 008/143] Added support for thin space https://en.wikipedia.org/wiki/Thin_space --- CHANGELOG.md | 1 + crates/epaint/CHANGELOG.md | 3 ++- crates/epaint/src/text/font.rs | 17 +++++++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c2ba1e13..80ed7f1a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ NOTE: [`epaint`](crates/epaint/CHANGELOG.md), [`eframe`](crates/eframe/CHANGELOG * Added possibility to enable text wrap for the selected text of `egui::ComboBox` ([#2272](https://github.com/emilk/egui/pull/2244)) * Added `Area::constrain` and `Window::constrain` which constrains area to the screen bounds. ([#2270](https://github.com/emilk/egui/pull/2270)). * Added `Area::pivot` and `Window::pivot` which controls what part of the window to position. ([#2303](https://github.com/emilk/egui/pull/2303)). +* Added support for [thin space](https://en.wikipedia.org/wiki/Thin_space). ### Changed 🔧 * Panels always have a separator line, but no stroke on other sides. Their spacing has also changed slightly ([#2261](https://github.com/emilk/egui/pull/2261)). diff --git a/crates/epaint/CHANGELOG.md b/crates/epaint/CHANGELOG.md index 1bf8fb01..a5b06d8e 100644 --- a/crates/epaint/CHANGELOG.md +++ b/crates/epaint/CHANGELOG.md @@ -5,7 +5,8 @@ All notable changes to the epaint crate will be documented in this file. ## Unreleased * ⚠️ BREAKING: Fix text being too small ([#2069](https://github.com/emilk/egui/pull/2069)). * ⚠️ BREAKING: epaint now expects integrations to do all color blending in gamma space ([#2071](https://github.com/emilk/egui/pull/2071)). -* Add `Fonts::has_glyph(s)` for querying if a glyph is supported ([#2202](https://github.com/emilk/egui/pull/2202)). +* Added `Fonts::has_glyph(s)` for querying if a glyph is supported ([#2202](https://github.com/emilk/egui/pull/2202)). +* Added support for [thin space](https://en.wikipedia.org/wiki/Thin_space). ## 0.19.0 - 2022-08-20 diff --git a/crates/epaint/src/text/font.rs b/crates/epaint/src/text/font.rs index ee0574ae..e93356ab 100644 --- a/crates/epaint/src/text/font.rs +++ b/crates/epaint/src/text/font.rs @@ -156,6 +156,23 @@ impl FontImpl { } } + if c == '\u{2009}' { + // Thin space, often used as thousands deliminator: 1 234 567 890 + // https://www.compart.com/en/unicode/U+2009 + // https://en.wikipedia.org/wiki/Thin_space + + if let Some(space) = self.glyph_info(' ') { + let em = self.height_in_points; // TODO(emilk): is this right? + let advance_width = f32::min(em / 6.0, space.advance_width * 0.5); + let glyph_info = GlyphInfo { + advance_width, + ..GlyphInfo::default() + }; + self.glyph_info_cache.write().insert(c, glyph_info); + return Some(glyph_info); + } + } + // Add new character: use ab_glyph::Font as _; let glyph_id = self.ab_glyph_font.glyph_id(c); From 8602326af5884b988e69dc22a090d13882d1aac2 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Tue, 22 Nov 2022 13:42:52 +0100 Subject: [PATCH 009/143] Plot: round hlines, vlines, and grid lines to pixels to avoid aliasing --- crates/egui/src/widgets/plot/items/mod.rs | 24 +++++++++++++++++------ crates/egui/src/widgets/plot/mod.rs | 3 +++ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/crates/egui/src/widgets/plot/items/mod.rs b/crates/egui/src/widgets/plot/items/mod.rs index aa24e60a..3be7e9f1 100644 --- a/crates/egui/src/widgets/plot/items/mod.rs +++ b/crates/egui/src/widgets/plot/items/mod.rs @@ -176,7 +176,7 @@ impl HLine { } impl PlotItem for HLine { - fn shapes(&self, _ui: &mut Ui, transform: &ScreenTransform, shapes: &mut Vec) { + fn shapes(&self, ui: &mut Ui, transform: &ScreenTransform, shapes: &mut Vec) { let HLine { y, stroke, @@ -184,9 +184,15 @@ impl PlotItem for HLine { style, .. } = self; + + // Round to minimize aliasing: let points = vec![ - transform.position_from_point(&PlotPoint::new(transform.bounds().min[0], *y)), - transform.position_from_point(&PlotPoint::new(transform.bounds().max[0], *y)), + ui.ctx().round_pos_to_pixels( + transform.position_from_point(&PlotPoint::new(transform.bounds().min[0], *y)), + ), + ui.ctx().round_pos_to_pixels( + transform.position_from_point(&PlotPoint::new(transform.bounds().max[0], *y)), + ), ]; style.style_line(points, *stroke, *highlight, shapes); } @@ -286,7 +292,7 @@ impl VLine { } impl PlotItem for VLine { - fn shapes(&self, _ui: &mut Ui, transform: &ScreenTransform, shapes: &mut Vec) { + fn shapes(&self, ui: &mut Ui, transform: &ScreenTransform, shapes: &mut Vec) { let VLine { x, stroke, @@ -294,9 +300,15 @@ impl PlotItem for VLine { style, .. } = self; + + // Round to minimize aliasing: let points = vec![ - transform.position_from_point(&PlotPoint::new(*x, transform.bounds().min[1])), - transform.position_from_point(&PlotPoint::new(*x, transform.bounds().max[1])), + ui.ctx().round_pos_to_pixels( + transform.position_from_point(&PlotPoint::new(*x, transform.bounds().min[1])), + ), + ui.ctx().round_pos_to_pixels( + transform.position_from_point(&PlotPoint::new(*x, transform.bounds().max[1])), + ), ]; style.style_line(points, *stroke, *highlight, shapes); } diff --git a/crates/egui/src/widgets/plot/mod.rs b/crates/egui/src/widgets/plot/mod.rs index 33331d11..8367d9ab 100644 --- a/crates/egui/src/widgets/plot/mod.rs +++ b/crates/egui/src/widgets/plot/mod.rs @@ -1416,6 +1416,9 @@ impl PreparedPlot { let mut p1 = pos_in_gui; p0[1 - axis] = transform.frame().min[1 - axis]; p1[1 - axis] = transform.frame().max[1 - axis]; + // Round to avoid aliasing + p0 = ui.ctx().round_pos_to_pixels(p0); + p1 = ui.ctx().round_pos_to_pixels(p1); shapes.push(Shape::line_segment([p0, p1], Stroke::new(1.0, line_color))); } From bde47c99579556c5a19173c131c24bab79e5ea4a Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Tue, 22 Nov 2022 13:44:01 +0100 Subject: [PATCH 010/143] epaint: cover default fonts in the license field (#2327) --- crates/epaint/Cargo.toml | 4 +++- deny.toml | 27 ++++++++++++++------------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/crates/epaint/Cargo.toml b/crates/epaint/Cargo.toml index c8c19648..dda4127e 100644 --- a/crates/epaint/Cargo.toml +++ b/crates/epaint/Cargo.toml @@ -6,7 +6,7 @@ description = "Minimal 2D graphics library for GUI work" edition = "2021" rust-version = "1.65" homepage = "https://github.com/emilk/egui/tree/master/crates/epaint" -license = "MIT OR Apache-2.0" +license = "(MIT OR Apache-2.0) AND OFL-1.1 AND LicenseRef-UFL-1.0" # OFL and UFL used by default_fonts. See https://github.com/emilk/egui/issues/2321 readme = "README.md" repository = "https://github.com/emilk/egui/tree/master/crates/epaint" categories = ["graphics", "gui"] @@ -18,6 +18,8 @@ include = [ "Cargo.toml", "fonts/*.ttf", "fonts/*.txt", + "fonts/OFL.txt", + "fonts/UFL.txt", ] [package.metadata.docs.rs] diff --git a/deny.toml b/deny.toml index b904cd53..e6eeeb9f 100644 --- a/deny.toml +++ b/deny.toml @@ -36,7 +36,7 @@ skip = [ { name = "ttf-parser" }, # different versions pulled in by ab_glyph and usvg ] skip-tree = [ - { name = "criterion" }, # dev-dependnecy + { name = "criterion" }, # dev-dependency { name = "glium" }, # legacy crate, lots of old dependencies { name = "rfd" }, # example dependency { name = "three-d" }, # example dependency @@ -49,18 +49,19 @@ allow-osi-fsf-free = "neither" confidence-threshold = 0.92 # We want really high confidence when inferring licenses from text copyleft = "deny" allow = [ - # "Apache-2.0 WITH LLVM-exception", # https://spdx.org/licenses/LLVM-exception.html - "Apache-2.0", # https://tldrlegal.com/license/apache-license-2.0-(apache-2.0) - "BSD-2-Clause", # https://tldrlegal.com/license/bsd-2-clause-license-(freebsd) - "BSD-3-Clause", # https://tldrlegal.com/license/bsd-3-clause-license-(revised) - "BSL-1.0", # https://tldrlegal.com/license/boost-software-license-1.0-explained - "CC0-1.0", # https://creativecommons.org/publicdomain/zero/1.0/ - "ISC", # https://tldrlegal.com/license/-isc-license - "MIT", # https://tldrlegal.com/license/mit-license - "MPL-2.0", # https://www.mozilla.org/en-US/MPL/2.0/FAQ/ - see Q11 - "OpenSSL", # https://www.openssl.org/source/license.html - "Unicode-DFS-2016", # https://spdx.org/licenses/Unicode-DFS-2016.html - "Zlib", # https://tldrlegal.com/license/zlib-libpng-license-(zlib) + "Apache-2.0", # https://tldrlegal.com/license/apache-license-2.0-(apache-2.0) + "BSD-2-Clause", # https://tldrlegal.com/license/bsd-2-clause-license-(freebsd) + "BSD-3-Clause", # https://tldrlegal.com/license/bsd-3-clause-license-(revised) + "BSL-1.0", # https://tldrlegal.com/license/boost-software-license-1.0-explained + "CC0-1.0", # https://creativecommons.org/publicdomain/zero/1.0/ + "ISC", # https://tldrlegal.com/license/-isc-license + "LicenseRef-UFL-1.0", # https://tldrlegal.com/license/ubuntu-font-license,-1.0 - no official SPDX, see https://github.com/emilk/egui/issues/2321 + "MIT", # https://tldrlegal.com/license/mit-license + "MPL-2.0", # https://www.mozilla.org/en-US/MPL/2.0/FAQ/ - see Q11 + "OFL-1.1", # https://spdx.org/licenses/OFL-1.1.html + "OpenSSL", # https://www.openssl.org/source/license.html + "Unicode-DFS-2016", # https://spdx.org/licenses/Unicode-DFS-2016.html + "Zlib", # https://tldrlegal.com/license/zlib-libpng-license-(zlib) ] [[licenses.clarify]] From f3633534e76874bc560a2f18da4270c3fa69bca1 Mon Sep 17 00:00:00 2001 From: Felix Zwettler Date: Tue, 22 Nov 2022 15:05:23 +0100 Subject: [PATCH 011/143] add set_plot_bounds method, giving users the ability to set the plot bounds themselves. (#2320) * add set_plot_bounds method * call it from_min_max for consistency with Rect Co-authored-by: Emil Ernerfeldt --- crates/egui/src/widgets/plot/mod.rs | 5 +++++ crates/egui/src/widgets/plot/transform.rs | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/crates/egui/src/widgets/plot/mod.rs b/crates/egui/src/widgets/plot/mod.rs index 8367d9ab..a31b1dc7 100644 --- a/crates/egui/src/widgets/plot/mod.rs +++ b/crates/egui/src/widgets/plot/mod.rs @@ -1040,6 +1040,11 @@ impl PlotUi { *self.last_screen_transform.bounds() } + /// Set the plot bounds. Can be useful for implementing alternative plot navigation methods. + pub fn set_plot_bounds(&mut self, plot_bounds: PlotBounds) { + self.last_screen_transform.set_bounds(plot_bounds); + } + /// Move the plot bounds. Can be useful for implementing alternative plot navigation methods. pub fn translate_bounds(&mut self, delta_pos: Vec2) { self.last_screen_transform.translate_bounds(delta_pos); diff --git a/crates/egui/src/widgets/plot/transform.rs b/crates/egui/src/widgets/plot/transform.rs index 6abfe261..51c63e89 100644 --- a/crates/egui/src/widgets/plot/transform.rs +++ b/crates/egui/src/widgets/plot/transform.rs @@ -18,6 +18,10 @@ impl PlotBounds { max: [-f64::INFINITY; 2], }; + pub fn from_min_max(min: [f64; 2], max: [f64; 2]) -> Self { + Self { min, max } + } + pub fn min(&self) -> [f64; 2] { self.min } From 7d8154971bae6df8af00e0e19c62ef852d223091 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Thu, 24 Nov 2022 10:09:32 +0100 Subject: [PATCH 012/143] Update ndk-sys v0.4.0 -> v0.4.1+23.1.7779620 (#2340) Closes https://github.com/emilk/egui/issues/2336 --- Cargo.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 99b1d4b0..a4c7b627 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2291,7 +2291,7 @@ checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" dependencies = [ "bitflags", "jni-sys", - "ndk-sys 0.4.0", + "ndk-sys 0.4.1+23.1.7779620", "num_enum", "raw-window-handle 0.5.0", "thiserror", @@ -2329,7 +2329,7 @@ dependencies = [ "ndk 0.7.0", "ndk-context", "ndk-macro", - "ndk-sys 0.4.0", + "ndk-sys 0.4.1+23.1.7779620", "once_cell", "parking_lot", ] @@ -2358,9 +2358,9 @@ dependencies = [ [[package]] name = "ndk-sys" -version = "0.4.0" +version = "0.4.1+23.1.7779620" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21d83ec9c63ec5bf950200a8e508bdad6659972187b625469f58ef8c08e29046" +checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3" dependencies = [ "jni-sys", ] From f9066ff2854ae7b0d4434b3dfefdf7ef759de107 Mon Sep 17 00:00:00 2001 From: Lukas Hermann Date: Thu, 24 Nov 2022 11:40:53 -0800 Subject: [PATCH 013/143] [WGPU] Allow for depth buffer in web target (#2335) * Add depth stencil initialization to `Painter` * Move depth stencil initialization into `resize_and_generate_depth_texture_view`, and call it in `set_window` and `on_window_resized` * Allow for depth texture in WASM builds * change `map` to `if let` statement * use reference for render state * Clean up descriptors and move texture generation to on resize events * remove unused field from WebOptions --- crates/eframe/src/web/web_painter_wgpu.rs | 49 ++++++++++++++++++++++- crates/egui-wgpu/src/lib.rs | 3 ++ 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/crates/eframe/src/web/web_painter_wgpu.rs b/crates/eframe/src/web/web_painter_wgpu.rs index 09413e53..5e0055a6 100644 --- a/crates/eframe/src/web/web_painter_wgpu.rs +++ b/crates/eframe/src/web/web_painter_wgpu.rs @@ -18,6 +18,8 @@ pub(crate) struct WebPainterWgpu { limits: wgpu::Limits, render_state: Option, on_surface_error: Arc SurfaceErrorAction>, + depth_format: Option, + depth_texture_view: Option, } impl WebPainterWgpu { @@ -26,6 +28,32 @@ impl WebPainterWgpu { self.render_state.clone() } + pub fn generate_depth_texture_view( + &self, + render_state: &RenderState, + width_in_pixels: u32, + height_in_pixels: u32, + ) -> Option { + let device = &render_state.device; + self.depth_format.map(|depth_format| { + device + .create_texture(&wgpu::TextureDescriptor { + label: Some("egui_depth_texture"), + size: wgpu::Extent3d { + width: width_in_pixels, + height: height_in_pixels, + depth_or_array_layers: 1, + }, + mip_level_count: 1, + sample_count: 1, + dimension: wgpu::TextureDimension::D2, + format: depth_format, + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + }) + .create_view(&wgpu::TextureViewDescriptor::default()) + }) + } + #[allow(unused)] // only used if `wgpu` is the only active feature. pub async fn new(canvas_id: &str, options: &WebOptions) -> Result { tracing::debug!("Creating wgpu painter"); @@ -55,7 +83,8 @@ impl WebPainterWgpu { let target_format = egui_wgpu::preferred_framebuffer_format(&surface.get_supported_formats(&adapter)); - let renderer = egui_wgpu::Renderer::new(&device, target_format, None, 1); + let depth_format = options.wgpu_options.depth_format; + let renderer = egui_wgpu::Renderer::new(&device, target_format, depth_format, 1); let render_state = RenderState { device: Arc::new(device), queue: Arc::new(queue), @@ -80,6 +109,8 @@ impl WebPainterWgpu { render_state: Some(render_state), surface, surface_configuration, + depth_format, + depth_texture_view: None, limits: options.wgpu_options.device_descriptor.limits.clone(), on_surface_error: options.wgpu_options.on_surface_error.clone(), }) @@ -157,6 +188,11 @@ impl WebPainter for WebPainterWgpu { self.surface_configuration.height = size_in_pixels[1]; self.surface .configure(&render_state.device, &self.surface_configuration); + self.depth_texture_view = self.generate_depth_texture_view( + render_state, + size_in_pixels[0], + size_in_pixels[1], + ); } let frame = match self.surface.get_current_texture() { @@ -193,7 +229,16 @@ impl WebPainter for WebPainterWgpu { store: true, }, })], - depth_stencil_attachment: None, + depth_stencil_attachment: self.depth_texture_view.as_ref().map(|view| { + wgpu::RenderPassDepthStencilAttachment { + view, + depth_ops: Some(wgpu::Operations { + load: wgpu::LoadOp::Clear(1.0), + store: false, + }), + stencil_ops: None, + } + }), label: Some("egui_render"), }); diff --git a/crates/egui-wgpu/src/lib.rs b/crates/egui-wgpu/src/lib.rs index d4381fe1..2ebd4576 100644 --- a/crates/egui-wgpu/src/lib.rs +++ b/crates/egui-wgpu/src/lib.rs @@ -55,6 +55,8 @@ pub struct WgpuConfiguration { /// Callback for surface errors. pub on_surface_error: Arc SurfaceErrorAction>, + + pub depth_format: Option, } impl Default for WgpuConfiguration { @@ -68,6 +70,7 @@ impl Default for WgpuConfiguration { backends: wgpu::Backends::PRIMARY | wgpu::Backends::GL, present_mode: wgpu::PresentMode::AutoVsync, power_preference: wgpu::PowerPreference::HighPerformance, + depth_format: None, on_surface_error: Arc::new(|err| { if err == wgpu::SurfaceError::Outdated { From 502e1aa22952aeae48dadff9fa916a94114276e8 Mon Sep 17 00:00:00 2001 From: Nagy Tibor Date: Fri, 25 Nov 2022 22:23:56 +0100 Subject: [PATCH 014/143] Do not emit changed responses on unchanged values in selectable_value/radio_value (#2343) --- crates/egui/src/ui.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/egui/src/ui.rs b/crates/egui/src/ui.rs index 73b8681c..cb4b9021 100644 --- a/crates/egui/src/ui.rs +++ b/crates/egui/src/ui.rs @@ -1447,7 +1447,7 @@ impl Ui { text: impl Into, ) -> Response { let mut response = self.radio(*current_value == alternative, text); - if response.clicked() { + if response.clicked() && *current_value != alternative { *current_value = alternative; response.mark_changed(); } @@ -1475,7 +1475,7 @@ impl Ui { text: impl Into, ) -> Response { let mut response = self.selectable_label(*current_value == selected_value, text); - if response.clicked() { + if response.clicked() && *current_value != selected_value { *current_value = selected_value; response.mark_changed(); } From d2f70cdcd1411c370718739d14a528ec6244d3fa Mon Sep 17 00:00:00 2001 From: Erlend Walstad <96946613+lampsitter@users.noreply.github.com> Date: Sun, 27 Nov 2022 13:15:18 +0100 Subject: [PATCH 015/143] Make it easier to convert strings to Id (#2350) --- crates/egui/src/id.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/crates/egui/src/id.rs b/crates/egui/src/id.rs index 94184e0a..682818f9 100644 --- a/crates/egui/src/id.rs +++ b/crates/egui/src/id.rs @@ -85,6 +85,13 @@ impl From<&'static str> for Id { } } +impl From for Id { + #[inline] + fn from(string: String) -> Self { + Self::new(string) + } +} + // ---------------------------------------------------------------------------- // Idea taken from the `nohash_hasher` crate. From c5e6def65eeb5c999bbee09f5bc02620ccebbda5 Mon Sep 17 00:00:00 2001 From: Erlend Walstad <96946613+lampsitter@users.noreply.github.com> Date: Sun, 27 Nov 2022 17:22:45 +0100 Subject: [PATCH 016/143] Only update pixels_per_point when it has changed (#2352) --- crates/egui/src/context.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/crates/egui/src/context.rs b/crates/egui/src/context.rs index 31455702..8449ca30 100644 --- a/crates/egui/src/context.rs +++ b/crates/egui/src/context.rs @@ -827,9 +827,8 @@ impl Context { pub fn set_pixels_per_point(&self, pixels_per_point: f32) { if pixels_per_point != self.pixels_per_point() { self.request_repaint(); + self.memory().new_pixels_per_point = Some(pixels_per_point); } - - self.memory().new_pixels_per_point = Some(pixels_per_point); } /// Useful for pixel-perfect rendering From a3f1e5961f66d2c0acdf5575eb058eb352d5f6d4 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Sun, 27 Nov 2022 22:03:42 +0100 Subject: [PATCH 017/143] Fix bug in keyboard shortcut formatting --- crates/egui/src/data/input.rs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/crates/egui/src/data/input.rs b/crates/egui/src/data/input.rs index d87caec2..bc5dcffe 100644 --- a/crates/egui/src/data/input.rs +++ b/crates/egui/src/data/input.rs @@ -546,7 +546,7 @@ impl<'a> ModifierNames<'a> { append_if(modifiers.alt, self.alt); append_if(modifiers.mac_cmd || modifiers.command, self.mac_cmd); } else { - append_if(modifiers.ctrl, self.ctrl); + append_if(modifiers.ctrl || modifiers.command, self.ctrl); append_if(modifiers.alt, self.alt); append_if(modifiers.shift, self.shift); } @@ -789,6 +789,21 @@ impl KeyboardShortcut { } } +#[test] +fn format_kb_shortcut() { + let cmd_shift_f = KeyboardShortcut::new(Modifiers::COMMAND | Modifiers::SHIFT, Key::F); + assert_eq!( + cmd_shift_f.format(&ModifierNames::NAMES, false), + "Ctrl+Shift+F" + ); + assert_eq!( + cmd_shift_f.format(&ModifierNames::NAMES, true), + "Shift+Cmd+F" + ); + assert_eq!(cmd_shift_f.format(&ModifierNames::SYMBOLS, false), "^⇧F"); + assert_eq!(cmd_shift_f.format(&ModifierNames::SYMBOLS, true), "⇧⌘F"); +} + // ---------------------------------------------------------------------------- impl RawInput { From 975cbac83ae8422201f7f219e660430084943dec Mon Sep 17 00:00:00 2001 From: Fotis Gimian Date: Wed, 30 Nov 2022 01:04:17 +1100 Subject: [PATCH 018/143] Update the glow example to avoid a white flash when the app starts. (#2345) --- crates/egui_glow/examples/pure_glow.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/crates/egui_glow/examples/pure_glow.rs b/crates/egui_glow/examples/pure_glow.rs index 1ef40f2f..54d94dd1 100644 --- a/crates/egui_glow/examples/pure_glow.rs +++ b/crates/egui_glow/examples/pure_glow.rs @@ -53,6 +53,7 @@ fn main() { // draw things on top of egui here gl_window.swap_buffers().unwrap(); + gl_window.window().set_visible(true); } }; @@ -111,7 +112,8 @@ fn create_display( width: 800.0, height: 600.0, }) - .with_title("egui_glow example"); + .with_title("egui_glow example") + .with_visible(false); // Keep hidden until we've painted something. See https://github.com/emilk/egui/pull/2279 let gl_window = unsafe { glutin::ContextBuilder::new() From 0336816faf9f361e59ca77f99c19fcfa2bf7c993 Mon Sep 17 00:00:00 2001 From: Matt Campbell Date: Tue, 29 Nov 2022 08:27:14 -0600 Subject: [PATCH 019/143] Fix keyboard support in `DragValue` (#2342) * Enable incrementing and decrementing `DragValue` with the keyboard * As soon as a DragValue is focused, render it in edit mode * Simpler, more reliable approach to managing the drag value's edit string * Add changelog entry * Update doc comment Co-authored-by: Emil Ernerfeldt * Add comment explaining why we don't listen for left/right arrow Co-authored-by: Emil Ernerfeldt --- CHANGELOG.md | 1 + crates/egui/src/input_state.rs | 15 ++++--- crates/egui/src/memory.rs | 7 ++- crates/egui/src/widgets/drag_value.rs | 65 ++++++++++++++++----------- 4 files changed, 55 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 80ed7f1a..8d3ebfc9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,7 @@ NOTE: [`epaint`](crates/epaint/CHANGELOG.md), [`eframe`](crates/eframe/CHANGELOG * Improved text rendering ([#2071](https://github.com/emilk/egui/pull/2071)). * Less jitter when calling `Context::set_pixels_per_point` ([#2239](https://github.com/emilk/egui/pull/2239)). * Fixed popups and color edit going outside the screen. +* Fixed keyboard support in `DragValue`. ([#2342](https://github.com/emilk/egui/pull/2342)). ## 0.19.0 - 2022-08-20 diff --git a/crates/egui/src/input_state.rs b/crates/egui/src/input_state.rs index 1140bb16..ab0d321d 100644 --- a/crates/egui/src/input_state.rs +++ b/crates/egui/src/input_state.rs @@ -245,9 +245,9 @@ impl InputState { self.pointer.wants_repaint() || self.scroll_delta != Vec2::ZERO || !self.events.is_empty() } - /// Check for a key press. If found, `true` is returned and the key pressed is consumed, so that this will only return `true` once. - pub fn consume_key(&mut self, modifiers: Modifiers, key: Key) -> bool { - let mut match_found = false; + /// Count presses of a key. If non-zero, the presses are consumed, so that this will only return non-zero once. + pub fn count_and_consume_key(&mut self, modifiers: Modifiers, key: Key) -> usize { + let mut count = 0usize; self.events.retain(|event| { let is_match = matches!( @@ -259,12 +259,17 @@ impl InputState { } if *ev_key == key && ev_mods.matches(modifiers) ); - match_found |= is_match; + count += is_match as usize; !is_match }); - match_found + count + } + + /// Check for a key press. If found, `true` is returned and the key pressed is consumed, so that this will only return `true` once. + pub fn consume_key(&mut self, modifiers: Modifiers, key: Key) -> bool { + self.count_and_consume_key(modifiers, key) > 0 } /// Check if the given shortcut has been pressed. diff --git a/crates/egui/src/memory.rs b/crates/egui/src/memory.rs index 1d94601b..73544655 100644 --- a/crates/egui/src/memory.rs +++ b/crates/egui/src/memory.rs @@ -400,8 +400,13 @@ impl Memory { /// Register this widget as being interested in getting keyboard focus. /// This will allow the user to select it with tab and shift-tab. + /// This is normally done automatically when handling interactions, + /// but it is sometimes useful to pre-register interest in focus, + /// e.g. before deciding which type of underlying widget to use, + /// as in the [`crate::DragValue`] widget, so a widget can be focused + /// and rendered correctly in a single frame. #[inline(always)] - pub(crate) fn interested_in_focus(&mut self, id: Id) { + pub fn interested_in_focus(&mut self, id: Id) { self.interaction.focus.interested_in_focus(id); } diff --git a/crates/egui/src/widgets/drag_value.rs b/crates/egui/src/widgets/drag_value.rs index 55ea13e9..13e727d7 100644 --- a/crates/egui/src/widgets/drag_value.rs +++ b/crates/egui/src/widgets/drag_value.rs @@ -371,18 +371,49 @@ impl<'a> Widget for DragValue<'a> { let shift = ui.input().modifiers.shift_only(); let is_slow_speed = shift && ui.memory().is_being_dragged(ui.next_auto_id()); + let kb_edit_id = ui.next_auto_id(); + // The following call ensures that when a `DragValue` receives focus, + // it is immediately rendered in edit mode, rather than being rendered + // in button mode for just one frame. This is important for + // screen readers. + ui.memory().interested_in_focus(kb_edit_id); + let is_kb_editing = ui.memory().has_focus(kb_edit_id); + let old_value = get(&mut get_set_value); - let value = clamp_to_range(old_value, clamp_range.clone()); - if old_value != value { - set(&mut get_set_value, value); - } + let mut value = old_value; let aim_rad = ui.input().aim_radius() as f64; let auto_decimals = (aim_rad / speed.abs()).log10().ceil().clamp(0.0, 15.0) as usize; let auto_decimals = auto_decimals + is_slow_speed as usize; - let max_decimals = max_decimals.unwrap_or(auto_decimals + 2); let auto_decimals = auto_decimals.clamp(min_decimals, max_decimals); + + if is_kb_editing { + let mut input = ui.input_mut(); + // This deliberately doesn't listen for left and right arrow keys, + // because when editing, these are used to move the caret. + // This behavior is consistent with other editable spinner/stepper + // implementations, such as Chromium's (for HTML5 number input). + // It is also normal for such controls to go directly into edit mode + // when they receive keyboard focus, and some screen readers + // assume this behavior, so having a separate mode for incrementing + // and decrementing, that supports all arrow keys, would be + // problematic. + let change = input.count_and_consume_key(Modifiers::NONE, Key::ArrowUp) as f64 + - input.count_and_consume_key(Modifiers::NONE, Key::ArrowDown) as f64; + + if change != 0.0 { + value += speed * change; + value = emath::round_to_decimals(value, auto_decimals); + } + } + + value = clamp_to_range(value, clamp_range.clone()); + if old_value != value { + set(&mut get_set_value, value); + ui.memory().drag_value.edit_string = None; + } + let value_text = match custom_formatter { Some(custom_formatter) => custom_formatter(value, auto_decimals..=max_decimals), None => { @@ -394,9 +425,6 @@ impl<'a> Widget for DragValue<'a> { } }; - let kb_edit_id = ui.next_auto_id(); - let is_kb_editing = ui.memory().has_focus(kb_edit_id); - let mut response = if is_kb_editing { let button_width = ui.spacing().interact_size.x; let mut value_text = ui @@ -419,14 +447,10 @@ impl<'a> Widget for DragValue<'a> { let parsed_value = clamp_to_range(parsed_value, clamp_range); set(&mut get_set_value, parsed_value); } - if ui.input().key_pressed(Key::Enter) { - ui.memory().surrender_focus(kb_edit_id); - ui.memory().drag_value.edit_string = None; - } else { - ui.memory().drag_value.edit_string = Some(value_text); - } + ui.memory().drag_value.edit_string = Some(value_text); response } else { + ui.memory().drag_value.edit_string = None; let button = Button::new( RichText::new(format!("{}{}{}", prefix, value_text, suffix)).monospace(), ) @@ -448,7 +472,6 @@ impl<'a> Widget for DragValue<'a> { if response.clicked() { ui.memory().request_focus(kb_edit_id); - ui.memory().drag_value.edit_string = None; // Filled in next frame } else if response.dragged() { ui.output().cursor_icon = CursorIcon::ResizeHorizontal; @@ -483,18 +506,6 @@ impl<'a> Widget for DragValue<'a> { drag_state.last_dragged_value = Some(stored_value); ui.memory().drag_value = drag_state; } - } else if response.has_focus() { - let change = ui.input().num_presses(Key::ArrowUp) as f64 - + ui.input().num_presses(Key::ArrowRight) as f64 - - ui.input().num_presses(Key::ArrowDown) as f64 - - ui.input().num_presses(Key::ArrowLeft) as f64; - - if change != 0.0 { - let new_value = value + speed * change; - let new_value = emath::round_to_decimals(new_value, auto_decimals); - let new_value = clamp_to_range(new_value, clamp_range); - set(&mut get_set_value, new_value); - } } response From 2dc2a5540d7968ad8b1926468431c51e52e28c5e Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Wed, 30 Nov 2022 19:56:06 +0100 Subject: [PATCH 020/143] `egui_extras::Table` improvements (#2369) * Use simple `ui.interact` for the resize line * Introduce TableReizeState * Simplify some code * Add striped options to table demo * Auto-size table columns by double-clicking the resize line * Table: add option to auto-size the columns * Table: don't let column width gets too small, unless clipping is on * egui_extras: always use serde Otherwise using `get_persisted` etc is impossible, and working around that tedious. * Avoid clipping last column in a resizable table * Some better naming * Table: Use new `Column` for setting column sizes and properties Also make `clip` a per-column property * All Table:s store state for auto-sizing purposes * Customize each column wether or not it is resizable * fix some auto-sizing bugs * Fix shrinkage of adaptive column content * Rename `scroll` to `vscroll` for clarity * Add Table::scroll_to_row * scroll_to_row takes alignment * Fix bug in table sizing * Strip: turn clipping OFF by default, because it is dangerous and sucks * Add TableBody::mac_rect helper * Table: add options to control the scroll area height. * Docstring fixes * Cleanup --- crates/egui/src/containers/scroll_area.rs | 18 +- crates/egui_demo_app/Cargo.toml | 4 +- crates/egui_demo_lib/src/demo/table_demo.rs | 123 +-- crates/egui_extras/Cargo.toml | 8 +- crates/egui_extras/src/datepicker/button.rs | 3 +- crates/egui_extras/src/datepicker/popup.rs | 15 +- crates/egui_extras/src/layout.rs | 66 +- crates/egui_extras/src/strip.rs | 27 +- crates/egui_extras/src/table.rs | 803 +++++++++++++++----- 9 files changed, 742 insertions(+), 325 deletions(-) diff --git a/crates/egui/src/containers/scroll_area.rs b/crates/egui/src/containers/scroll_area.rs index 64345cbe..98bb959f 100644 --- a/crates/egui/src/containers/scroll_area.rs +++ b/crates/egui/src/containers/scroll_area.rs @@ -66,6 +66,10 @@ pub struct ScrollAreaOutput { /// The current state of the scroll area. pub state: State, + /// The size of the content. If this is larger than [`Self::inner_rect`], + /// then there was need for scrolling. + pub content_size: Vec2, + /// Where on the screen the content is (excludes scroll bars). pub inner_rect: Rect, } @@ -198,6 +202,8 @@ impl ScrollArea { /// Set the horizontal and vertical scroll offset position. /// + /// Positive offset means scrolling down/right. + /// /// See also: [`Self::vertical_scroll_offset`], [`Self::horizontal_scroll_offset`], /// [`Ui::scroll_to_cursor`](crate::ui::Ui::scroll_to_cursor) and /// [`Response::scroll_to_me`](crate::Response::scroll_to_me) @@ -209,6 +215,8 @@ impl ScrollArea { /// Set the vertical scroll offset position. /// + /// Positive offset means scrolling down. + /// /// See also: [`Self::scroll_offset`], [`Ui::scroll_to_cursor`](crate::ui::Ui::scroll_to_cursor) and /// [`Response::scroll_to_me`](crate::Response::scroll_to_me) pub fn vertical_scroll_offset(mut self, offset: f32) -> Self { @@ -218,6 +226,8 @@ impl ScrollArea { /// Set the horizontal scroll offset position. /// + /// Positive offset means scrolling right. + /// /// See also: [`Self::scroll_offset`], [`Ui::scroll_to_cursor`](crate::ui::Ui::scroll_to_cursor) and /// [`Response::scroll_to_me`](crate::Response::scroll_to_me) pub fn horizontal_scroll_offset(mut self, offset: f32) -> Self { @@ -541,18 +551,20 @@ impl ScrollArea { let id = prepared.id; let inner_rect = prepared.inner_rect; let inner = add_contents(&mut prepared.content_ui, prepared.viewport); - let state = prepared.end(ui); + let (content_size, state) = prepared.end(ui); ScrollAreaOutput { inner, id, state, + content_size, inner_rect, } } } impl Prepared { - fn end(self, ui: &mut Ui) -> State { + /// Returns content size and state + fn end(self, ui: &mut Ui) -> (Vec2, State) { let Prepared { id, mut state, @@ -847,7 +859,7 @@ impl Prepared { state.store(ui.ctx(), id); - state + (content_size, state) } } diff --git a/crates/egui_demo_app/Cargo.toml b/crates/egui_demo_app/Cargo.toml index e8bb5617..21b9bab7 100644 --- a/crates/egui_demo_app/Cargo.toml +++ b/crates/egui_demo_app/Cargo.toml @@ -20,8 +20,8 @@ default = ["glow", "persistence"] http = ["ehttp", "image", "poll-promise", "egui_extras/image"] persistence = ["eframe/persistence", "egui/persistence", "serde"] -screen_reader = ["eframe/screen_reader"] # experimental -serde = ["dep:serde", "egui_demo_lib/serde", "egui_extras/serde", "egui/serde"] +screen_reader = ["eframe/screen_reader"] # experimental +serde = ["dep:serde", "egui_demo_lib/serde", "egui/serde"] syntax_highlighting = ["egui_demo_lib/syntax_highlighting"] glow = ["eframe/glow"] diff --git a/crates/egui_demo_lib/src/demo/table_demo.rs b/crates/egui_demo_lib/src/demo/table_demo.rs index 09b4cef4..01e0bdd9 100644 --- a/crates/egui_demo_lib/src/demo/table_demo.rs +++ b/crates/egui_demo_lib/src/demo/table_demo.rs @@ -10,20 +10,22 @@ enum DemoType { #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] pub struct TableDemo { demo: DemoType, + striped: bool, resizable: bool, num_rows: usize, - row_to_scroll_to: i32, - vertical_scroll_offset: Option, + scroll_to_row_slider: usize, + scroll_to_row: Option, } impl Default for TableDemo { fn default() -> Self { Self { demo: DemoType::Manual, + striped: true, resizable: true, num_rows: 10_000, - row_to_scroll_to: 0, - vertical_scroll_offset: None, + scroll_to_row_slider: 0, + scroll_to_row: None, } } } @@ -45,16 +47,15 @@ impl super::Demo for TableDemo { } } -fn scroll_offset_for_row(ui: &egui::Ui, row: i32) -> f32 { - let text_height = egui::TextStyle::Body.resolve(ui.style()).size; - let row_item_spacing = ui.spacing().item_spacing.y; - row as f32 * (text_height + row_item_spacing) -} +const NUM_MANUAL_ROWS: usize = 32; impl super::View for TableDemo { fn ui(&mut self, ui: &mut egui::Ui) { ui.vertical(|ui| { - ui.checkbox(&mut self.resizable, "Resizable columns"); + ui.horizontal(|ui| { + ui.checkbox(&mut self.striped, "Striped"); + ui.checkbox(&mut self.resizable, "Resizable columns"); + }); ui.label("Table type:"); ui.radio_value(&mut self.demo, DemoType::Manual, "Few, manual rows"); @@ -77,16 +78,20 @@ impl super::View for TableDemo { ); } - if self.demo == DemoType::ManyHomogenous { - ui.add( - egui::Slider::new(&mut self.row_to_scroll_to, 0..=self.num_rows as i32) + { + let max_rows = if self.demo == DemoType::Manual { + NUM_MANUAL_ROWS + } else { + self.num_rows + }; + + let slider_response = ui.add( + egui::Slider::new(&mut self.scroll_to_row_slider, 0..=max_rows) .logarithmic(true) .text("Row to scroll to"), ); - - if ui.button("Scroll to row").clicked() { - self.vertical_scroll_offset - .replace(scroll_offset_for_row(ui, self.row_to_scroll_to)); + if slider_response.changed() { + self.scroll_to_row = Some(self.scroll_to_row_slider); } } }); @@ -113,37 +118,45 @@ impl super::View for TableDemo { impl TableDemo { fn table_ui(&mut self, ui: &mut egui::Ui) { - use egui_extras::{Size, TableBuilder}; + use egui_extras::{Column, TableBuilder}; let text_height = egui::TextStyle::Body.resolve(ui.style()).size; let mut table = TableBuilder::new(ui) - .striped(true) + .striped(self.striped) .cell_layout(egui::Layout::left_to_right(egui::Align::Center)) - .column(Size::initial(60.0).at_least(40.0)) - .column(Size::initial(60.0).at_least(40.0)) - .column(Size::remainder().at_least(60.0)) - .resizable(self.resizable); + .column(Column::auto()) + .column(Column::initial(100.0).range(40.0..=300.0).resizable(true)) + .column( + Column::initial(100.0) + .at_least(40.0) + .resizable(true) + .clip(true), + ) + .column(Column::remainder()); - if let Some(y_scroll) = self.vertical_scroll_offset.take() { - table = table.vertical_scroll_offset(y_scroll); + if let Some(row_nr) = self.scroll_to_row.take() { + table = table.scroll_to_row(row_nr, None); } table .header(20.0, |mut header| { header.col(|ui| { - ui.heading("Row"); + ui.strong("Row"); }); header.col(|ui| { - ui.heading("Clock"); + ui.strong("Expanding content"); }); header.col(|ui| { - ui.heading("Content"); + ui.strong("Clipped text"); + }); + header.col(|ui| { + ui.strong("Content"); }); }) .body(|mut body| match self.demo { DemoType::Manual => { - for row_index in 0..20 { + for row_index in 0..NUM_MANUAL_ROWS { let is_thick = thick_row(row_index); let row_height = if is_thick { 30.0 } else { 18.0 }; body.row(row_height, |mut row| { @@ -151,7 +164,10 @@ impl TableDemo { ui.label(row_index.to_string()); }); row.col(|ui| { - ui.label(clock_emoji(row_index)); + expanding_content(ui); + }); + row.col(|ui| { + ui.label(long_text(row_index)); }); row.col(|ui| { ui.style_mut().wrap = Some(false); @@ -170,7 +186,10 @@ impl TableDemo { ui.label(row_index.to_string()); }); row.col(|ui| { - ui.label(clock_emoji(row_index)); + expanding_content(ui); + }); + row.col(|ui| { + ui.label(long_text(row_index)); }); row.col(|ui| { ui.add( @@ -191,24 +210,21 @@ impl TableDemo { (0..self.num_rows).into_iter().map(row_thickness), |row_index, mut row| { row.col(|ui| { - ui.centered_and_justified(|ui| { - ui.label(row_index.to_string()); - }); + ui.label(row_index.to_string()); }); row.col(|ui| { - ui.centered_and_justified(|ui| { - ui.label(clock_emoji(row_index)); - }); + expanding_content(ui); }); row.col(|ui| { - ui.centered_and_justified(|ui| { - ui.style_mut().wrap = Some(false); - if thick_row(row_index) { - ui.heading("Extra thick row"); - } else { - ui.label("Normal row"); - } - }); + ui.label(long_text(row_index)); + }); + row.col(|ui| { + ui.style_mut().wrap = Some(false); + if thick_row(row_index) { + ui.heading("Extra thick row"); + } else { + ui.label("Normal row"); + } }); }, ); @@ -217,10 +233,19 @@ impl TableDemo { } } -fn clock_emoji(row_index: usize) -> String { - char::from_u32(0x1f550 + row_index as u32 % 24) - .unwrap() - .to_string() +fn expanding_content(ui: &mut egui::Ui) { + let width = ui.available_width().clamp(20.0, 200.0); + let height = ui.available_height(); + let (rect, _response) = ui.allocate_exact_size(egui::vec2(width, height), egui::Sense::hover()); + ui.painter().hline( + rect.x_range(), + rect.center().y, + (1.0, ui.visuals().text_color()), + ); +} + +fn long_text(row_index: usize) -> String { + format!("Row {row_index} has some long text that you may want to clip, or it will take up too much horizontal space!") } fn thick_row(row_index: usize) -> bool { diff --git a/crates/egui_extras/Cargo.toml b/crates/egui_extras/Cargo.toml index 4926febc..f3a1b8e1 100644 --- a/crates/egui_extras/Cargo.toml +++ b/crates/egui_extras/Cargo.toml @@ -29,9 +29,6 @@ default = [] ## Enable [`DatePickerButton`] widget. datepicker = ["chrono"] -## Allow serialization using [`serde`](https://docs.rs/serde). -serde = ["dep:serde"] - ## Support loading svg images. svg = ["resvg", "tiny-skia", "usvg"] @@ -42,6 +39,8 @@ tracing = ["dep:tracing", "egui/tracing"] [dependencies] egui = { version = "0.19.0", path = "../egui", default-features = false } +serde = { version = "1", features = ["derive"] } + #! ### Optional dependencies # Date operations needed for datepicker widget @@ -63,9 +62,6 @@ resvg = { version = "0.23", optional = true } tiny-skia = { version = "0.6", optional = true } # must be updated in lock-step with resvg usvg = { version = "0.23", optional = true } -# feature "serde": -serde = { version = "1", features = ["derive"], optional = true } - # feature "tracing" tracing = { version = "0.1", optional = true, default-features = false, features = [ "std", diff --git a/crates/egui_extras/src/datepicker/button.rs b/crates/egui_extras/src/datepicker/button.rs index 23ccbd5b..d6dcbfe2 100644 --- a/crates/egui_extras/src/datepicker/button.rs +++ b/crates/egui_extras/src/datepicker/button.rs @@ -2,8 +2,7 @@ use super::popup::DatePickerPopup; use chrono::{Date, Utc}; use egui::{Area, Button, Frame, InnerResponse, Key, Order, RichText, Ui, Widget}; -#[derive(Default, Clone)] -#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] +#[derive(Default, Clone, serde::Deserialize, serde::Serialize)] pub(crate) struct DatePickerButtonState { pub picker_visible: bool, } diff --git a/crates/egui_extras/src/datepicker/popup.rs b/crates/egui_extras/src/datepicker/popup.rs index 445e2d6f..637dfccf 100644 --- a/crates/egui_extras/src/datepicker/popup.rs +++ b/crates/egui_extras/src/datepicker/popup.rs @@ -1,10 +1,12 @@ -use super::{button::DatePickerButtonState, month_data}; -use crate::{Size, StripBuilder, TableBuilder}; use chrono::{Date, Datelike, NaiveDate, Utc, Weekday}; + use egui::{Align, Button, Color32, ComboBox, Direction, Id, Layout, RichText, Ui, Vec2}; -#[derive(Default, Clone)] -#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] +use super::{button::DatePickerButtonState, month_data}; + +use crate::{Column, Size, StripBuilder, TableBuilder}; + +#[derive(Default, Clone, serde::Deserialize, serde::Serialize)] struct DatePickerPopupState { year: i32, month: u32, @@ -243,9 +245,8 @@ impl<'a> DatePickerPopup<'a> { strip.cell(|ui| { ui.spacing_mut().item_spacing = Vec2::new(1.0, 2.0); TableBuilder::new(ui) - .scroll(false) - .clip(false) - .columns(Size::remainder(), if self.calendar_week { 8 } else { 7 }) + .vscroll(false) + .columns(Column::remainder(), if self.calendar_week { 8 } else { 7 }) .header(height, |mut header| { if self.calendar_week { header.col(|ui| { diff --git a/crates/egui_extras/src/layout.rs b/crates/egui_extras/src/layout.rs index 56ae547d..932594bf 100644 --- a/crates/egui_extras/src/layout.rs +++ b/crates/egui_extras/src/layout.rs @@ -31,19 +31,15 @@ pub struct StripLayout<'l> { pub(crate) ui: &'l mut Ui, direction: CellDirection, pub(crate) rect: Rect, - cursor: Pos2, + pub(crate) cursor: Pos2, + /// Keeps track of the max used position, + /// so we know how much space we used. max: Pos2, - pub(crate) clip: bool, cell_layout: egui::Layout, } impl<'l> StripLayout<'l> { - pub(crate) fn new( - ui: &'l mut Ui, - direction: CellDirection, - clip: bool, - cell_layout: egui::Layout, - ) -> Self { + pub(crate) fn new(ui: &'l mut Ui, direction: CellDirection, cell_layout: egui::Layout) -> Self { let rect = ui.available_rect_before_wrap(); let pos = rect.left_top(); @@ -53,7 +49,6 @@ impl<'l> StripLayout<'l> { rect, cursor: pos, max: pos, - clip, cell_layout, } } @@ -92,34 +87,41 @@ impl<'l> StripLayout<'l> { self.set_pos(self.cell_rect(&width, &height)); } + /// This is the innermost part of [`crate::Table`] and [`crate::Strip`]. + /// + /// Return the used space (`min_rect`) plus the [`Response`] of the whole cell. pub(crate) fn add( &mut self, + clip: bool, + striped: bool, width: CellSize, height: CellSize, - add_contents: impl FnOnce(&mut Ui), - ) -> Response { - let rect = self.cell_rect(&width, &height); - let used_rect = self.cell(rect, add_contents); - self.set_pos(rect); - self.ui.allocate_rect(rect.union(used_rect), Sense::hover()) - } + add_cell_contents: impl FnOnce(&mut Ui), + ) -> (Rect, Response) { + let max_rect = self.cell_rect(&width, &height); - pub(crate) fn add_striped( - &mut self, - width: CellSize, - height: CellSize, - add_contents: impl FnOnce(&mut Ui), - ) -> Response { - let rect = self.cell_rect(&width, &height); + if striped { + // Make sure we don't have a gap in the stripe background: + let stripe_rect = max_rect.expand2(0.5 * self.ui.spacing().item_spacing); - // Make sure we don't have a gap in the stripe background: - let rect = rect.expand2(0.5 * self.ui.spacing().item_spacing); + self.ui + .painter() + .rect_filled(stripe_rect, 0.0, self.ui.visuals().faint_bg_color); + } - self.ui - .painter() - .rect_filled(rect, 0.0, self.ui.visuals().faint_bg_color); + let used_rect = self.cell(clip, max_rect, add_cell_contents); - self.add(width, height, add_contents) + self.set_pos(max_rect); + + let allocation_rect = if clip { + max_rect + } else { + max_rect.union(used_rect) + }; + + let response = self.ui.allocate_rect(allocation_rect, Sense::hover()); + + (used_rect, response) } /// only needed for layouts with multiple lines, like [`Table`](crate::Table). @@ -144,17 +146,17 @@ impl<'l> StripLayout<'l> { self.ui.allocate_rect(rect, Sense::hover()); } - fn cell(&mut self, rect: Rect, add_contents: impl FnOnce(&mut Ui)) -> Rect { + fn cell(&mut self, clip: bool, rect: Rect, add_cell_contents: impl FnOnce(&mut Ui)) -> Rect { let mut child_ui = self.ui.child_ui(rect, self.cell_layout); - if self.clip { + if clip { let margin = egui::Vec2::splat(self.ui.visuals().clip_rect_margin); let margin = margin.min(0.5 * self.ui.spacing().item_spacing); let clip_rect = rect.expand2(margin); child_ui.set_clip_rect(clip_rect.intersect(child_ui.clip_rect())); } - add_contents(&mut child_ui); + add_cell_contents(&mut child_ui); child_ui.min_rect() } diff --git a/crates/egui_extras/src/strip.rs b/crates/egui_extras/src/strip.rs index ac33ed18..9c091859 100644 --- a/crates/egui_extras/src/strip.rs +++ b/crates/egui_extras/src/strip.rs @@ -56,11 +56,11 @@ impl<'a> StripBuilder<'a> { ui, sizing: Default::default(), cell_layout, - clip: true, + clip: false, } } - /// Should we clip the contents of each cell? Default: `true`. + /// Should we clip the contents of each cell? Default: `false`. pub fn clip(mut self, clip: bool) -> Self { self.clip = clip; self @@ -98,15 +98,11 @@ impl<'a> StripBuilder<'a> { self.ui.available_rect_before_wrap().width(), self.ui.spacing().item_spacing.x, ); - let mut layout = StripLayout::new( - self.ui, - CellDirection::Horizontal, - self.clip, - self.cell_layout, - ); + let mut layout = StripLayout::new(self.ui, CellDirection::Horizontal, self.cell_layout); strip(Strip { layout: &mut layout, direction: CellDirection::Horizontal, + clip: self.clip, sizes: widths, size_index: 0, }); @@ -125,15 +121,11 @@ impl<'a> StripBuilder<'a> { self.ui.available_rect_before_wrap().height(), self.ui.spacing().item_spacing.y, ); - let mut layout = StripLayout::new( - self.ui, - CellDirection::Vertical, - self.clip, - self.cell_layout, - ); + let mut layout = StripLayout::new(self.ui, CellDirection::Vertical, self.cell_layout); strip(Strip { layout: &mut layout, direction: CellDirection::Vertical, + clip: self.clip, sizes: heights, size_index: 0, }); @@ -146,6 +138,7 @@ impl<'a> StripBuilder<'a> { pub struct Strip<'a, 'b> { layout: &'b mut StripLayout<'a>, direction: CellDirection, + clip: bool, sizes: Vec, size_index: usize, } @@ -172,7 +165,9 @@ impl<'a, 'b> Strip<'a, 'b> { /// Add cell contents. pub fn cell(&mut self, add_contents: impl FnOnce(&mut Ui)) { let (width, height) = self.next_cell_size(); - self.layout.add(width, height, add_contents); + let striped = false; + self.layout + .add(self.clip, striped, width, height, add_contents); } /// Add an empty cell. @@ -183,7 +178,7 @@ impl<'a, 'b> Strip<'a, 'b> { /// Add a strip as cell. pub fn strip(&mut self, strip_builder: impl FnOnce(StripBuilder<'_>)) { - let clip = self.layout.clip; + let clip = self.clip; self.cell(|ui| { strip_builder(StripBuilder::new(ui).clip(clip)); }); diff --git a/crates/egui_extras/src/table.rs b/crates/egui_extras/src/table.rs index 3fc302e4..91aeb219 100644 --- a/crates/egui_extras/src/table.rs +++ b/crates/egui_extras/src/table.rs @@ -3,47 +3,187 @@ //! | fixed size | all available space/minimum | 30% of available width | fixed size | //! Takes all available height, so if you want something below the table, put it in a strip. +use egui::{Align, NumExt as _, Rect, Response, Ui, Vec2}; + use crate::{ layout::{CellDirection, CellSize}, - sizing::Sizing, - Size, StripLayout, + StripLayout, }; -use egui::{Rect, Response, Ui, Vec2}; +// -----------------------------------------------------------------=---------- + +#[derive(Clone, Copy, Debug, PartialEq)] +enum InitialColumnSize { + /// Absolute size in points + Absolute(f32), + + /// Base on content + Automatic(f32), + + /// Take all available space + Remainder, +} + +/// Specifies the properties of a column, like its width range. +#[derive(Clone, Copy, Debug, PartialEq)] +pub struct Column { + initial_width: InitialColumnSize, + width_range: (f32, f32), + /// Clip contents if too narrow? + clip: bool, + + resizable: Option, +} + +impl Column { + /// Automatically sized based on content. + /// + /// If you have many thousands of rows and are therefore using [`TableBody::rows`] + /// or [`TableBody::heterogeneous_rows`], then the automatic size will only be based + /// on the currently visible rows. + pub fn auto() -> Self { + Self::auto_with_initial_suggestion(100.0) + } + + /// Automatically sized. + /// + /// The given fallback is a loose suggestion, that may be used to wrap + /// cell contents, if they contain a wrapping layout. + /// In most cases though, the given value is ignored. + pub fn auto_with_initial_suggestion(suggested_width: f32) -> Self { + Self::new(InitialColumnSize::Automatic(suggested_width)) + } + + /// With this initial width. + pub fn initial(width: f32) -> Self { + Self::new(InitialColumnSize::Absolute(width)) + } + + /// Always this exact width, never shrink or grow. + pub fn exact(width: f32) -> Self { + Self::new(InitialColumnSize::Absolute(width)) + .range(width..=width) + .clip(true) + } + + /// Take all the space remaining after the other columns have + /// been sized. + /// + /// If you have multiple [`Column::remainder`] they all + /// share the remaining space equally. + pub fn remainder() -> Self { + Self::new(InitialColumnSize::Remainder) + } + + fn new(initial_width: InitialColumnSize) -> Self { + Self { + initial_width, + width_range: (0.0, f32::INFINITY), + resizable: None, + clip: false, + } + } + + /// Can this column be resized by dragging the column separator? + /// + /// If you don't call this, the fallback value of + /// [`TableBuilder::resizable`] is used (which by default is `false`). + pub fn resizable(mut self, resizable: bool) -> Self { + self.resizable = Some(resizable); + self + } + + /// If `true`: Allow the column to shrink enough to clip the contents. + /// If `false`: The column will always be wide enough to contain all its content. + /// + /// Clipping can make sense if you expect a column to contain a lot of things, + /// and you don't want it too take up too much space. + /// If you turn on clipping you should also consider calling [`Self::at_least`]. + /// + /// Default: `false`. + pub fn clip(mut self, clip: bool) -> Self { + self.clip = clip; + self + } + + /// Won't shrink below this width (in points). + /// + /// Default: 0.0 + pub fn at_least(mut self, minimum: f32) -> Self { + self.width_range.0 = minimum; + self + } + + /// Won't grow above this width (in points). + /// + /// Default: [`f32::INFINITY`] + pub fn at_most(mut self, maximum: f32) -> Self { + self.width_range.1 = maximum; + self + } + + /// Allowed range of movement (in points), if in a resizable [`Table`](crate::table::Table). + pub fn range(mut self, range: std::ops::RangeInclusive) -> Self { + self.width_range = (*range.start(), *range.end()); + self + } + + fn is_auto(&self) -> bool { + match self.initial_width { + InitialColumnSize::Automatic(_) => true, + InitialColumnSize::Absolute(_) | InitialColumnSize::Remainder => false, + } + } +} + +fn to_sizing(columns: &[Column]) -> crate::sizing::Sizing { + use crate::Size; + + let mut sizing = crate::sizing::Sizing::default(); + for column in columns { + let size = match column.initial_width { + InitialColumnSize::Absolute(width) => Size::exact(width), + InitialColumnSize::Automatic(suggested_width) => Size::initial(suggested_width), + InitialColumnSize::Remainder => Size::remainder(), + } + .at_least(column.width_range.0) + .at_most(column.width_range.1); + sizing.add(size); + } + sizing +} + +// -----------------------------------------------------------------=---------- /// Builder for a [`Table`] with (optional) fixed header and scrolling body. /// -/// Cell widths are precalculated so we can have tables like this: -/// -/// | fixed size | all available space/minimum | 30% of available width | fixed size | -/// -/// In contrast to normal egui behavior, columns/rows do *not* grow with its children! -/// Takes all available height, so if you want something below the table, put it in a strip. -/// /// You must pre-allocate all columns with [`Self::column`]/[`Self::columns`]. /// +/// If you have multiple [`Table`]:s in the same [`Ui`] +/// you will need to give them unique id:s by surrounding them with [`Ui::push_id`]. +/// /// ### Example /// ``` /// # egui::__run_test_ui(|ui| { -/// use egui_extras::{TableBuilder, Size}; +/// use egui_extras::{TableBuilder, Column}; /// TableBuilder::new(ui) -/// .column(Size::remainder().at_least(100.0)) -/// .column(Size::exact(40.0)) +/// .column(Column::auto().resizable(true)) +/// .column(Column::remainder()) /// .header(20.0, |mut header| { /// header.col(|ui| { -/// ui.heading("Growing"); +/// ui.heading("First column"); /// }); /// header.col(|ui| { -/// ui.heading("Fixed"); +/// ui.heading("Second column"); /// }); /// }) /// .body(|mut body| { /// body.row(30.0, |mut row| { /// row.col(|ui| { -/// ui.label("first row growing cell"); +/// ui.label("Hello"); /// }); /// row.col(|ui| { -/// ui.button("action"); +/// ui.button("world!"); /// }); /// }); /// }); @@ -51,14 +191,18 @@ use egui::{Rect, Response, Ui, Vec2}; /// ``` pub struct TableBuilder<'a> { ui: &'a mut Ui, - sizing: Sizing, - scroll: bool, + columns: Vec, striped: bool, resizable: bool, - clip: bool, - stick_to_bottom: bool, - scroll_offset_y: Option, cell_layout: egui::Layout, + + // Scroll stuff: + vscroll: bool, + stick_to_bottom: bool, + scroll_to_row: Option<(usize, Option)>, + scroll_offset_y: Option, + min_scrolled_height: f32, + max_scroll_height: f32, } impl<'a> TableBuilder<'a> { @@ -66,24 +210,21 @@ impl<'a> TableBuilder<'a> { let cell_layout = *ui.layout(); Self { ui, - sizing: Default::default(), - scroll: true, + columns: Default::default(), striped: false, resizable: false, - clip: true, - stick_to_bottom: false, - scroll_offset_y: None, cell_layout, + + vscroll: true, + stick_to_bottom: false, + scroll_to_row: None, + scroll_offset_y: None, + min_scrolled_height: 200.0, + max_scroll_height: 800.0, } } - /// Enable scrollview in body (default: true) - pub fn scroll(mut self, scroll: bool) -> Self { - self.scroll = scroll; - self - } - - /// Enable striped row background (default: false) + /// Enable striped row background for improved readability (default: `false`) pub fn striped(mut self, striped: bool) -> Self { self.striped = striped; self @@ -91,24 +232,30 @@ impl<'a> TableBuilder<'a> { /// Make the columns resizable by dragging. /// - /// If the _last_ column is [`Size::Remainder`], then it won't be resizable + /// You can set this for individual columns with [`Column::resizable`]. + /// [`Self::resizable`] is used as a fallback for any column for which you don't call + /// [`Column::resizable`]. + /// + /// If the _last_ column is [`Column::remainder`], then it won't be resizable /// (and instead use up the remainder). /// /// Default is `false`. - /// - /// If you have multiple [`Table`]:s in the same [`Ui`] - /// you will need to give them unique id:s with [`Ui::push_id`]. pub fn resizable(mut self, resizable: bool) -> Self { self.resizable = resizable; self } - /// Should we clip the contents of each cell? Default: `true`. - pub fn clip(mut self, clip: bool) -> Self { - self.clip = clip; + /// Enable vertical scrolling in body (default: `true`) + pub fn vscroll(mut self, vscroll: bool) -> Self { + self.vscroll = vscroll; self } + #[deprecated = "Renamed to vscroll"] + pub fn scroll(self, vscroll: bool) -> Self { + self.vscroll(vscroll) + } + /// Should the scroll handle stick to the bottom position even as the content size changes /// dynamically? The scroll handle remains stuck until manually changed, and will become stuck /// once again when repositioned to the bottom. Default: `false`. @@ -117,12 +264,46 @@ impl<'a> TableBuilder<'a> { self } - /// Set the vertical scroll offset position. + /// Set a row to scroll to. + /// + /// `align` specifies if the row should be positioned in the top, center, or bottom of the view + /// (using [`Align::TOP`], [`Align::Center`] or [`Align::BOTTOM`]). + /// If `align` is `None`, the table will scroll just enough to bring the cursor into view. + /// + /// See also: [`Self::vertical_scroll_offset`]. + pub fn scroll_to_row(mut self, row: usize, align: Option) -> Self { + self.scroll_to_row = Some((row, align)); + self + } + + /// Set the vertical scroll offset position, in points. + /// + /// See also: [`Self::scroll_to_row`]. pub fn vertical_scroll_offset(mut self, offset: f32) -> Self { self.scroll_offset_y = Some(offset); self } + /// The minimum height of a vertical scroll area which requires scroll bars. + /// + /// The scroll area will only become smaller than this if the content is smaller than this + /// (and so we don't require scroll bars). + /// + /// Default: `200.0`. + pub fn min_scrolled_height(mut self, min_scrolled_height: f32) -> Self { + self.min_scrolled_height = min_scrolled_height; + self + } + + /// Don't make the scroll area higher than this (add scroll-bars instead!). + /// + /// In other words: add scroll-bars when this height is reached. + /// Default: `800.0`. + pub fn max_scroll_height(mut self, max_scroll_height: f32) -> Self { + self.max_scroll_height = max_scroll_height; + self + } + /// What layout should we use for the individual cells? pub fn cell_layout(mut self, cell_layout: egui::Layout) -> Self { self.cell_layout = cell_layout; @@ -130,22 +311,22 @@ impl<'a> TableBuilder<'a> { } /// Allocate space for one column. - pub fn column(mut self, width: Size) -> Self { - self.sizing.add(width); + pub fn column(mut self, column: Column) -> Self { + self.columns.push(column); self } /// Allocate space for several columns at once. - pub fn columns(mut self, size: Size, count: usize) -> Self { + pub fn columns(mut self, column: Column, count: usize) -> Self { for _ in 0..count { - self.sizing.add(size); + self.columns.push(column); } self } fn available_width(&self) -> f32 { self.ui.available_rect_before_wrap().width() - - if self.scroll { + - if self.vscroll { self.ui.spacing().item_spacing.x + self.ui.spacing().scroll_bar_width } else { 0.0 @@ -153,58 +334,74 @@ impl<'a> TableBuilder<'a> { } /// Create a header row which always stays visible and at the top - pub fn header(self, height: f32, header: impl FnOnce(TableRow<'_, '_>)) -> Table<'a> { + pub fn header(self, height: f32, add_header_row: impl FnOnce(TableRow<'_, '_>)) -> Table<'a> { let available_width = self.available_width(); let Self { ui, - sizing, - scroll, + columns, striped, resizable, - clip, - stick_to_bottom, - scroll_offset_y, cell_layout, + + vscroll, + stick_to_bottom, + scroll_to_row, + scroll_offset_y, + min_scrolled_height, + max_scroll_height, } = self; - let resize_id = resizable.then(|| ui.id().with("__table_resize")); + let state_id = ui.id().with("__table_state"); - let default_widths = sizing.to_lengths(available_width, ui.spacing().item_spacing.x); - let widths = read_persisted_widths(ui, default_widths, resize_id); + let initial_widths = + to_sizing(&columns).to_lengths(available_width, ui.spacing().item_spacing.x); + let mut max_used_widths = vec![0.0; initial_widths.len()]; + let (had_state, state) = TableState::load(ui, initial_widths, state_id); + let is_first_frame = !had_state; + let first_frame_auto_size_columns = is_first_frame && columns.iter().any(|c| c.is_auto()); let table_top = ui.cursor().top(); - { - let mut layout = StripLayout::new(ui, CellDirection::Horizontal, clip, cell_layout); - header(TableRow { + // Hide first-frame-jitters when auto-sizing. + ui.add_visible_ui(!first_frame_auto_size_columns, |ui| { + let mut layout = StripLayout::new(ui, CellDirection::Horizontal, cell_layout); + add_header_row(TableRow { layout: &mut layout, - widths: &widths, - width_index: 0, + columns: &columns, + widths: &state.column_widths, + max_used_widths: &mut max_used_widths, + col_index: 0, striped: false, height, }); layout.allocate_rect(); - } + }); Table { ui, table_top, - resize_id, - sizing, + state_id, + columns, available_width, - widths, - scroll, + state, + max_used_widths, + first_frame_auto_size_columns, + resizable, striped, - clip, - stick_to_bottom, - scroll_offset_y, cell_layout, + + vscroll, + stick_to_bottom, + scroll_to_row, + scroll_offset_y, + min_scrolled_height, + max_scroll_height, } } /// Create table body without a header row - pub fn body(self, body: F) + pub fn body(self, add_body_contents: F) where F: for<'b> FnOnce(TableBody<'b>), { @@ -212,169 +409,259 @@ impl<'a> TableBuilder<'a> { let Self { ui, - sizing, - scroll, + columns, striped, resizable, - clip, - stick_to_bottom, - scroll_offset_y, cell_layout, + + vscroll, + stick_to_bottom, + scroll_to_row, + scroll_offset_y, + min_scrolled_height, + max_scroll_height, } = self; - let resize_id = resizable.then(|| ui.id().with("__table_resize")); + let state_id = ui.id().with("__table_state"); - let default_widths = sizing.to_lengths(available_width, ui.spacing().item_spacing.x); - let widths = read_persisted_widths(ui, default_widths, resize_id); + let initial_widths = + to_sizing(&columns).to_lengths(available_width, ui.spacing().item_spacing.x); + let max_used_widths = vec![0.0; initial_widths.len()]; + let (had_state, state) = TableState::load(ui, initial_widths, state_id); + let is_first_frame = !had_state; + let first_frame_auto_size_columns = is_first_frame && columns.iter().any(|c| c.is_auto()); let table_top = ui.cursor().top(); Table { ui, table_top, - resize_id, - sizing, + state_id, + columns, available_width, - widths, - scroll, + state, + max_used_widths, + first_frame_auto_size_columns, + resizable, striped, - clip, - stick_to_bottom, - scroll_offset_y, cell_layout, + + vscroll, + stick_to_bottom, + scroll_to_row, + scroll_offset_y, + min_scrolled_height, + max_scroll_height, } - .body(body); + .body(add_body_contents); } } -fn read_persisted_widths( - ui: &egui::Ui, - default_widths: Vec, - resize_id: Option, -) -> Vec { - if let Some(resize_id) = resize_id { +// ---------------------------------------------------------------------------- + +#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)] +struct TableState { + column_widths: Vec, +} + +impl TableState { + /// Returns `true` if it did load. + fn load(ui: &egui::Ui, default_widths: Vec, state_id: egui::Id) -> (bool, Self) { let rect = Rect::from_min_size(ui.available_rect_before_wrap().min, Vec2::ZERO); - ui.ctx().check_for_id_clash(resize_id, rect, "Table"); - if let Some(persisted) = ui.data().get_persisted::>(resize_id) { + ui.ctx().check_for_id_clash(state_id, rect, "Table"); + + if let Some(state) = ui.data().get_persisted::(state_id) { // make sure that the stored widths aren't out-dated - if persisted.len() == default_widths.len() { - return persisted; + if state.column_widths.len() == default_widths.len() { + return (true, state); } } + + ( + false, + Self { + column_widths: default_widths, + }, + ) } - default_widths + fn store(self, ui: &egui::Ui, state_id: egui::Id) { + ui.data().insert_persisted(state_id, self); + } } +// ---------------------------------------------------------------------------- + /// Table struct which can construct a [`TableBody`]. /// /// Is created by [`TableBuilder`] by either calling [`TableBuilder::body`] or after creating a header row with [`TableBuilder::header`]. pub struct Table<'a> { ui: &'a mut Ui, table_top: f32, - resize_id: Option, - sizing: Sizing, + state_id: egui::Id, + columns: Vec, available_width: f32, - widths: Vec, - scroll: bool, + state: TableState, + /// Accumulated maximum used widths for each column. + max_used_widths: Vec, + first_frame_auto_size_columns: bool, + resizable: bool, striped: bool, - clip: bool, - stick_to_bottom: bool, - scroll_offset_y: Option, cell_layout: egui::Layout, + + // Scroll stuff: + vscroll: bool, + stick_to_bottom: bool, + scroll_to_row: Option<(usize, Option)>, + scroll_offset_y: Option, + min_scrolled_height: f32, + max_scroll_height: f32, } impl<'a> Table<'a> { /// Create table body after adding a header row - pub fn body(self, body: F) + pub fn body(self, add_body_contents: F) where F: for<'b> FnOnce(TableBody<'b>), { let Table { ui, table_top, - resize_id, - sizing, + state_id, + columns, + resizable, mut available_width, - widths, - scroll, + mut state, + mut max_used_widths, + first_frame_auto_size_columns, + vscroll, striped, - clip, - stick_to_bottom, - scroll_offset_y, cell_layout, + + stick_to_bottom, + scroll_to_row, + scroll_offset_y, + min_scrolled_height, + max_scroll_height, } = self; let avail_rect = ui.available_rect_before_wrap(); - let mut new_widths = widths.clone(); - - let mut scroll_area = egui::ScrollArea::new([false, scroll]) + let mut scroll_area = egui::ScrollArea::new([false, vscroll]) .auto_shrink([true; 2]) - .stick_to_bottom(stick_to_bottom); + .stick_to_bottom(stick_to_bottom) + .min_scrolled_height(min_scrolled_height) + .max_height(max_scroll_height); if let Some(scroll_offset_y) = scroll_offset_y { scroll_area = scroll_area.vertical_scroll_offset(scroll_offset_y); } - scroll_area.show(ui, move |ui| { - let layout = StripLayout::new(ui, CellDirection::Horizontal, clip, cell_layout); + let columns_ref = &columns; + let widths_ref = &state.column_widths; + let max_used_widths_ref = &mut max_used_widths; - body(TableBody { - layout, - widths, - striped, - row_nr: 0, - start_y: avail_rect.top(), - end_y: avail_rect.bottom(), + scroll_area.show(ui, move |ui| { + let mut scroll_to_y_range = None; + + // Hide first-frame-jitters when auto-sizing. + ui.add_visible_ui(!first_frame_auto_size_columns, |ui| { + let layout = StripLayout::new(ui, CellDirection::Horizontal, cell_layout); + + add_body_contents(TableBody { + layout, + columns: columns_ref, + widths: widths_ref, + max_used_widths: max_used_widths_ref, + striped, + row_nr: 0, + start_y: avail_rect.top(), + end_y: avail_rect.bottom(), + scroll_to_row: scroll_to_row.map(|(r, _)| r), + scroll_to_y_range: &mut scroll_to_y_range, + }); + + if scroll_to_row.is_some() && scroll_to_y_range.is_none() { + // TableBody::row didn't find the right row, so scroll to the bottom: + scroll_to_y_range = Some((f32::INFINITY, f32::INFINITY)); + } }); + + if let Some((min_y, max_y)) = scroll_to_y_range { + let x = 0.0; // ignored, we only have vertical scrolling + let rect = egui::Rect::from_min_max(egui::pos2(x, min_y), egui::pos2(x, max_y)); + let align = scroll_to_row.and_then(|(_, a)| a); + ui.scroll_to_rect(rect, align); + } }); let bottom = ui.min_rect().bottom(); - // TODO(emilk): fix frame-delay by interacting before laying out (but painting later). - if let Some(resize_id) = resize_id { - let spacing_x = ui.spacing().item_spacing.x; - let mut x = avail_rect.left() - spacing_x * 0.5; - for (i, width) in new_widths.iter_mut().enumerate() { - x += *width + spacing_x; + let spacing_x = ui.spacing().item_spacing.x; + let mut x = avail_rect.left() - spacing_x * 0.5; + for (i, column_width) in state.column_widths.iter_mut().enumerate() { + let column = &columns[i]; + let column_is_resizable = column.resizable.unwrap_or(resizable); + let (min_width, max_width) = column.width_range; - // If the last column is Size::Remainder, then let it fill the remainder! - let last_column = i + 1 == sizing.sizes.len(); - if last_column { - if let Size::Remainder { range: (min, max) } = sizing.sizes[i] { - let eps = 0.1; // just to avoid some rounding errors. - *width = (available_width - eps).clamp(min, max); - break; - } - } + if !column.clip { + // Unless we clip we don't want to shrink below the + // size that was actually used: + *column_width = column_width.at_least(max_used_widths[i]); + } + *column_width = column_width.clamp(min_width, max_width); - let resize_id = ui.id().with("__panel_resize").with(i); + let is_last_column = i + 1 == columns.len(); + + if is_last_column && column.initial_width == InitialColumnSize::Remainder { + // If the last column is 'remainder', then let it fill the remainder! + let eps = 0.1; // just to avoid some rounding errors. + *column_width = available_width - eps; + *column_width = column_width.at_least(max_used_widths[i]); + *column_width = column_width.clamp(min_width, max_width); + break; + } + + x += *column_width + spacing_x; + + if column.is_auto() && (first_frame_auto_size_columns || !column_is_resizable) { + *column_width = max_used_widths[i]; + *column_width = column_width.clamp(min_width, max_width); + } else if column_is_resizable { + let column_resize_id = ui.id().with("resize_column").with(i); let mut p0 = egui::pos2(x, table_top); let mut p1 = egui::pos2(x, bottom); let line_rect = egui::Rect::from_min_max(p0, p1) .expand(ui.style().interaction.resize_grab_radius_side); - let mouse_over_resize_line = ui.rect_contains_pointer(line_rect); - let any_pressed_and_down = { - let pointer = &ui.input().pointer; - pointer.any_pressed() && pointer.any_down() - }; - if any_pressed_and_down && mouse_over_resize_line { - ui.memory().set_dragged_id(resize_id); - } - let is_resizing = ui.memory().is_being_dragged(resize_id); - if is_resizing { + let resize_response = + ui.interact(line_rect, column_resize_id, egui::Sense::click_and_drag()); + + if resize_response.double_clicked() { + // Resize to the minimum of what is needed. + + *column_width = max_used_widths[i].clamp(min_width, max_width); + } else if resize_response.dragged() { if let Some(pointer) = ui.ctx().pointer_latest_pos() { - let new_width = *width + pointer.x - x; - let (min, max) = sizing.sizes[i].range(); - let new_width = new_width.clamp(min, max); - let x = x - *width + new_width; - p0.x = x; - p1.x = x; + let mut new_width = *column_width + pointer.x - x; + if !column.clip { + // Unless we clip we don't want to shrink below the + // size that was actually used. + // However, we still want to allow content that shrinks when you try + // to make the column less wide, so we allow some small shrinkage each frame: + // big enough to allow shrinking over time, small enough not to look ugly when + // shrinking fails. This is a bit of a HACK around immediate mode. + let max_shrinkage_per_frame = 8.0; + new_width = + new_width.at_least(max_used_widths[i] - max_shrinkage_per_frame); + } + new_width = new_width.clamp(min_width, max_width); - *width = new_width; + let x = x - *column_width + new_width; + (p0.x, p1.x) = (x, x); + + *column_width = new_width; } } @@ -382,13 +669,13 @@ impl<'a> Table<'a> { let pointer = &ui.input().pointer; pointer.any_down() || pointer.any_pressed() }; - let resize_hover = mouse_over_resize_line && !dragging_something_else; + let resize_hover = resize_response.hovered() && !dragging_something_else; - if resize_hover || is_resizing { + if resize_hover || resize_response.dragged() { ui.output().cursor_icon = egui::CursorIcon::ResizeColumn; } - let stroke = if is_resizing { + let stroke = if resize_response.dragged() { ui.style().visuals.widgets.active.bg_stroke } else if resize_hover { ui.style().visuals.widgets.hovered.bg_stroke @@ -396,28 +683,52 @@ impl<'a> Table<'a> { // ui.visuals().widgets.inactive.bg_stroke ui.visuals().widgets.noninteractive.bg_stroke }; + ui.painter().line_segment([p0, p1], stroke); + }; - available_width -= *width + spacing_x; - } - - ui.data().insert_persisted(resize_id, new_widths); + available_width -= *column_width + spacing_x; } + + state.store(ui, state_id); } } /// The body of a table. +/// /// Is created by calling `body` on a [`Table`] (after adding a header row) or [`TableBuilder`] (without a header row). pub struct TableBody<'a> { layout: StripLayout<'a>, - widths: Vec, + + columns: &'a [Column], + + /// Current column widths. + widths: &'a [f32], + + /// Accumulated maximum used widths for each column. + max_used_widths: &'a mut [f32], + striped: bool, row_nr: usize, start_y: f32, end_y: f32, + + /// Look for this row to scroll to. + scroll_to_row: Option, + + /// If we find the correct row to scroll to, + /// this is set to the y-range of the row. + scroll_to_y_range: &'a mut Option<(f32, f32)>, } impl<'a> TableBody<'a> { + /// Where in screen-space is the table body? + pub fn max_rect(&self) -> Rect { + self.layout + .rect + .translate(egui::vec2(0.0, self.scroll_offset_y())) + } + fn scroll_offset_y(&self) -> f32 { self.start_y - self.layout.rect.top() } @@ -428,20 +739,28 @@ impl<'a> TableBody<'a> { /// heights are expected to according to the width of one or more cells -- for example, if text /// is wrapped rather than clipped within the cell. pub fn widths(&self) -> &[f32] { - &self.widths + self.widths } /// Add a single row with the given height. /// /// If you have many thousands of row it can be more performant to instead use [`Self::rows`] or [`Self::heterogeneous_rows`]. - pub fn row(&mut self, height: f32, row: impl FnOnce(TableRow<'a, '_>)) { - row(TableRow { + pub fn row(&mut self, height: f32, add_row_content: impl FnOnce(TableRow<'a, '_>)) { + let top_y = self.layout.cursor.y; + add_row_content(TableRow { layout: &mut self.layout, - widths: &self.widths, - width_index: 0, + columns: self.columns, + widths: self.widths, + max_used_widths: self.max_used_widths, + col_index: 0, striped: self.striped && self.row_nr % 2 == 0, height, }); + let bottom_y = self.layout.cursor.y; + + if Some(self.row_nr) == self.scroll_to_row { + *self.scroll_to_y_range = Some((top_y, bottom_y)); + } self.row_nr += 1; } @@ -455,9 +774,9 @@ impl<'a> TableBody<'a> { /// ### Example /// ``` /// # egui::__run_test_ui(|ui| { - /// use egui_extras::{TableBuilder, Size}; + /// use egui_extras::{TableBuilder, Column}; /// TableBuilder::new(ui) - /// .column(Size::remainder().at_least(100.0)) + /// .column(Column::remainder().at_least(100.0)) /// .body(|mut body| { /// let row_height = 18.0; /// let num_rows = 10_000; @@ -473,11 +792,19 @@ impl<'a> TableBody<'a> { mut self, row_height_sans_spacing: f32, total_rows: usize, - mut row: impl FnMut(usize, TableRow<'_, '_>), + mut add_row_content: impl FnMut(usize, TableRow<'_, '_>), ) { let spacing = self.layout.ui.spacing().item_spacing; let row_height_with_spacing = row_height_sans_spacing + spacing.y; + if let Some(scroll_to_row) = self.scroll_to_row { + let scroll_to_row = scroll_to_row.at_most(total_rows.saturating_sub(1)) as f32; + *self.scroll_to_y_range = Some(( + self.layout.cursor.y + scroll_to_row * row_height_with_spacing, + self.layout.cursor.y + (scroll_to_row + 1.0) * row_height_with_spacing, + )); + } + let scroll_offset_y = self .scroll_offset_y() .min(total_rows as f32 * row_height_with_spacing); @@ -494,12 +821,14 @@ impl<'a> TableBody<'a> { let max_row = max_row.min(total_rows); for idx in min_row..max_row { - row( + add_row_content( idx, TableRow { layout: &mut self.layout, - widths: &self.widths, - width_index: 0, + columns: self.columns, + widths: self.widths, + max_used_widths: self.max_used_widths, + col_index: 0, striped: self.striped && idx % 2 == 0, height: row_height_sans_spacing, }, @@ -517,15 +846,15 @@ impl<'a> TableBody<'a> { /// This takes a very slight performance hit compared to [`TableBody::rows`] due to the need to /// iterate over all row heights in to calculate the virtual table height above and below the /// visible region, but it is many orders of magnitude more performant than adding individual - /// heterogenously-sized rows using [`TableBody::row`] at the cost of the additional complexity + /// heterogeneously-sized rows using [`TableBody::row`] at the cost of the additional complexity /// that comes with pre-calculating row heights and representing them as an iterator. /// /// ### Example /// ``` /// # egui::__run_test_ui(|ui| { - /// use egui_extras::{TableBuilder, Size}; + /// use egui_extras::{TableBuilder, Column}; /// TableBuilder::new(ui) - /// .column(Size::remainder().at_least(100.0)) + /// .column(Column::remainder().at_least(100.0)) /// .body(|mut body| { /// let row_heights: Vec = vec![60.0, 18.0, 31.0, 240.0]; /// body.heterogeneous_rows(row_heights.into_iter(), |row_index, mut row| { @@ -542,7 +871,7 @@ impl<'a> TableBody<'a> { pub fn heterogeneous_rows( mut self, heights: impl Iterator, - mut populate_row: impl FnMut(usize, TableRow<'_, '_>), + mut add_row_content: impl FnMut(usize, TableRow<'_, '_>), ) { let spacing = self.layout.ui.spacing().item_spacing; let mut enumerated_heights = heights.enumerate(); @@ -550,39 +879,66 @@ impl<'a> TableBody<'a> { let max_height = self.end_y - self.start_y; let scroll_offset_y = self.scroll_offset_y() as f64; + let scroll_to_y_range_offset = self.layout.cursor.y as f64; + let mut cursor_y: f64 = 0.0; // Skip the invisible rows, and populate the first non-virtual row. for (row_index, row_height) in &mut enumerated_heights { let old_cursor_y = cursor_y; cursor_y += (row_height + spacing.y) as f64; + + if Some(row_index) == self.scroll_to_row { + *self.scroll_to_y_range = Some(( + (scroll_to_y_range_offset + old_cursor_y) as f32, + (scroll_to_y_range_offset + cursor_y) as f32, + )); + } + if cursor_y >= scroll_offset_y { // This row is visible: - self.add_buffer(old_cursor_y as f32); - let tr = TableRow { - layout: &mut self.layout, - widths: &self.widths, - width_index: 0, - striped: self.striped && row_index % 2 == 0, - height: row_height, - }; - populate_row(row_index, tr); + self.add_buffer(old_cursor_y as f32); // skip all the invisible rows + + add_row_content( + row_index, + TableRow { + layout: &mut self.layout, + columns: self.columns, + widths: self.widths, + max_used_widths: self.max_used_widths, + col_index: 0, + striped: self.striped && row_index % 2 == 0, + height: row_height, + }, + ); break; } } // populate visible rows: for (row_index, row_height) in &mut enumerated_heights { - let tr = TableRow { - layout: &mut self.layout, - widths: &self.widths, - width_index: 0, - striped: self.striped && row_index % 2 == 0, - height: row_height, - }; - populate_row(row_index, tr); + let top_y = cursor_y; + add_row_content( + row_index, + TableRow { + layout: &mut self.layout, + columns: self.columns, + widths: self.widths, + max_used_widths: self.max_used_widths, + col_index: 0, + striped: self.striped && row_index % 2 == 0, + height: row_height, + }, + ); cursor_y += (row_height + spacing.y) as f64; + if Some(row_index) == self.scroll_to_row { + *self.scroll_to_y_range = Some(( + (scroll_to_y_range_offset + top_y) as f32, + (scroll_to_y_range_offset + cursor_y) as f32, + )); + } + if cursor_y > scroll_offset_y + max_height as f64 { break; } @@ -590,9 +946,27 @@ impl<'a> TableBody<'a> { // calculate height below the visible table range: let mut height_below_visible: f64 = 0.0; - for (_, height) in enumerated_heights { - height_below_visible += height as f64; + for (row_index, row_height) in enumerated_heights { + height_below_visible += (row_height + spacing.y) as f64; + + let top_y = cursor_y; + cursor_y += (row_height + spacing.y) as f64; + if Some(row_index) == self.scroll_to_row { + *self.scroll_to_y_range = Some(( + (scroll_to_y_range_offset + top_y) as f32, + (scroll_to_y_range_offset + cursor_y) as f32, + )); + } } + + if self.scroll_to_row.is_some() && self.scroll_to_y_range.is_none() { + // Catch desire to scroll past the end: + *self.scroll_to_y_range = Some(( + (scroll_to_y_range_offset + cursor_y) as f32, + (scroll_to_y_range_offset + cursor_y) as f32, + )); + } + if height_below_visible > 0.0 { // we need to add a buffer to allow the table to // accurately calculate the scrollbar position @@ -617,17 +991,26 @@ impl<'a> Drop for TableBody<'a> { /// Is created by [`TableRow`] for each created [`TableBody::row`] or each visible row in rows created by calling [`TableBody::rows`]. pub struct TableRow<'a, 'b> { layout: &'b mut StripLayout<'a>, + columns: &'b [Column], widths: &'b [f32], - width_index: usize, + /// grows during building with the maximum widths + max_used_widths: &'b mut [f32], + col_index: usize, striped: bool, height: f32, } impl<'a, 'b> TableRow<'a, 'b> { /// Add the contents of a column. - pub fn col(&mut self, add_contents: impl FnOnce(&mut Ui)) -> Response { - let width = if let Some(width) = self.widths.get(self.width_index) { - self.width_index += 1; + /// + /// Return the used space (`min_rect`) plus the [`Response`] of the whole cell. + pub fn col(&mut self, add_cell_contents: impl FnOnce(&mut Ui)) -> (Rect, Response) { + let col_index = self.col_index; + + let clip = self.columns.get(col_index).map_or(false, |c| c.clip); + + let width = if let Some(width) = self.widths.get(col_index) { + self.col_index += 1; *width } else { crate::log_or_panic!( @@ -640,11 +1023,15 @@ impl<'a, 'b> TableRow<'a, 'b> { let width = CellSize::Absolute(width); let height = CellSize::Absolute(self.height); - if self.striped { - self.layout.add_striped(width, height, add_contents) - } else { - self.layout.add(width, height, add_contents) + let (used_rect, response) = + self.layout + .add(clip, self.striped, width, height, add_cell_contents); + + if let Some(max_w) = self.max_used_widths.get_mut(col_index) { + *max_w = max_w.max(used_rect.width()); } + + (used_rect, response) } } From 85f8eeb9d5ca4be14c99740ac31052a9d246c773 Mon Sep 17 00:00:00 2001 From: JP Date: Wed, 30 Nov 2022 19:40:11 +0000 Subject: [PATCH 021/143] Fix key pressed event (#2334) * Fix key press event * Add example with key presses * Changelog line for key_press fix * PR review improvements * Add PR link in changelog Co-authored-by: Emil Ernerfeldt --- CHANGELOG.md | 1 + Cargo.lock | 8 +++++ crates/egui/src/input_state.rs | 42 +++++++++++++----------- examples/keyboard_events/Cargo.toml | 13 ++++++++ examples/keyboard_events/README.md | 3 ++ examples/keyboard_events/src/main.rs | 48 ++++++++++++++++++++++++++++ 6 files changed, 97 insertions(+), 18 deletions(-) create mode 100644 examples/keyboard_events/Cargo.toml create mode 100644 examples/keyboard_events/README.md create mode 100644 examples/keyboard_events/src/main.rs diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d3ebfc9..8f5f3402 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ NOTE: [`epaint`](crates/epaint/CHANGELOG.md), [`eframe`](crates/eframe/CHANGELOG * MSRV (Minimum Supported Rust Version) is now `1.65.0` ([#2314](https://github.com/emilk/egui/pull/2314)). * ⚠️ BREAKING: egui now expects integrations to do all color blending in gamma space ([#2071](https://github.com/emilk/egui/pull/2071)). * ⚠️ BREAKING: if you have overlapping interactive widgets, only the top widget (last added) will be interactive ([#2244](https://github.com/emilk/egui/pull/2244)). +* Keyboard press events are only present at the frame when the key was pressed, consistent with how key releases work ([#2334](https://github.com/emilk/egui/pull/2334)). ### Added ⭐ * Added helper functions for animating panels that collapse/expand ([#2190](https://github.com/emilk/egui/pull/2190)). diff --git a/Cargo.lock b/Cargo.lock index a4c7b627..a822a3e5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2070,6 +2070,14 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "keyboard_events" +version = "0.1.0" +dependencies = [ + "eframe", + "tracing-subscriber", +] + [[package]] name = "khronos-egl" version = "4.1.0" diff --git a/crates/egui/src/input_state.rs b/crates/egui/src/input_state.rs index ab0d321d..b5938612 100644 --- a/crates/egui/src/input_state.rs +++ b/crates/egui/src/input_state.rs @@ -138,7 +138,11 @@ impl Default for InputState { impl InputState { #[must_use] - pub fn begin_frame(mut self, new: RawInput, requested_repaint_last_frame: bool) -> InputState { + pub fn begin_frame( + mut self, + mut new: RawInput, + requested_repaint_last_frame: bool, + ) -> InputState { let time = new.time.unwrap_or(self.time + new.predicted_dt as f64); let unstable_dt = (time - self.time) as f32; @@ -160,24 +164,26 @@ impl InputState { let mut keys_down = self.keys_down; let mut scroll_delta = Vec2::ZERO; let mut zoom_factor_delta = 1.0; - for event in &new.events { - match event { - Event::Key { key, pressed, .. } => { - if *pressed { - keys_down.insert(*key); - } else { - keys_down.remove(key); - } + new.events.retain(|event| match event { + Event::Key { key, pressed, .. } => { + if *pressed { + // We only retain presses that are novel (i.e. the first Press event, not those generated by key-repeat) + keys_down.insert(*key) + } else { + keys_down.remove(key); + true } - Event::Scroll(delta) => { - scroll_delta += *delta; - } - Event::Zoom(factor) => { - zoom_factor_delta *= *factor; - } - _ => {} } - } + Event::Scroll(delta) => { + scroll_delta += *delta; + true + } + Event::Zoom(factor) => { + zoom_factor_delta *= *factor; + true + } + _ => true, + }); InputState { pointer, touch_states: self.touch_states, @@ -285,7 +291,7 @@ impl InputState { self.num_presses(desired_key) > 0 } - /// How many times were the given key pressed this frame? + /// How many times was the given key pressed this frame? pub fn num_presses(&self, desired_key: Key) -> usize { self.events .iter() diff --git a/examples/keyboard_events/Cargo.toml b/examples/keyboard_events/Cargo.toml new file mode 100644 index 00000000..f2230942 --- /dev/null +++ b/examples/keyboard_events/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "keyboard_events" +version = "0.1.0" +authors = ["Jose Palazon "] +license = "MIT OR Apache-2.0" +edition = "2021" +rust-version = "1.65" +publish = false + + +[dependencies] +eframe = { path = "../../crates/eframe" } +tracing-subscriber = "0.3" diff --git a/examples/keyboard_events/README.md b/examples/keyboard_events/README.md new file mode 100644 index 00000000..d528b1bc --- /dev/null +++ b/examples/keyboard_events/README.md @@ -0,0 +1,3 @@ +```sh +cargo run -p hello_world +``` diff --git a/examples/keyboard_events/src/main.rs b/examples/keyboard_events/src/main.rs new file mode 100644 index 00000000..ab1e8ec8 --- /dev/null +++ b/examples/keyboard_events/src/main.rs @@ -0,0 +1,48 @@ +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release + +use eframe::egui; +use egui::*; +fn main() { + // Log to stdout (if you run with `RUST_LOG=debug`). + tracing_subscriber::fmt::init(); + + let options = eframe::NativeOptions::default(); + eframe::run_native( + "Keyboard events", + options, + Box::new(|_cc| Box::new(Content::default())), + ); +} + +#[derive(Default)] +struct Content { + text: String, +} + +impl eframe::App for Content { + fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { + egui::CentralPanel::default().show(ctx, |ui| { + ui.heading("Press/Hold/Release example. Press A to test."); + if ui.button("Clear").clicked() { + self.text.clear(); + } + ScrollArea::vertical() + .auto_shrink([false; 2]) + .stick_to_bottom(true) + .show(ui, |ui| { + ui.label(&self.text); + }); + + if ctx.input().key_pressed(Key::A) { + self.text.push_str("\nPressed"); + } + if ctx.input().key_down(Key::A) { + self.text.push_str("\nHeld"); + ui.ctx().request_repaint(); // make sure we note the holding. + } + if ctx.input().key_released(Key::A) { + self.text.push_str("\nReleased"); + } + }); + } +} From 7133818c59269fee8cff8d182e776bda8858a727 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Wed, 30 Nov 2022 22:58:00 +0100 Subject: [PATCH 022/143] Make sure scroll bars are always visible (#2371) * Nicer debug rectangles * Move scrollbars into the clip-rect so they are always visible * Improve table demo * Add options for controlling inner and outer margin of the scroll bars * Add line to changelog * Update egui_extras changelog with recent Table improvements * Refactor Table:s scroll options * Add Table::auto_size * Rename it auto_shrink --- CHANGELOG.md | 3 +- crates/egui/src/containers/scroll_area.rs | 46 +++---- crates/egui/src/painter.rs | 7 +- crates/egui/src/style.rs | 19 ++- crates/egui_demo_lib/src/demo/scrolling.rs | 10 ++ crates/egui_demo_lib/src/demo/table_demo.rs | 11 +- crates/egui_extras/CHANGELOG.md | 15 +++ crates/egui_extras/src/table.rs | 128 ++++++++++---------- 8 files changed, 147 insertions(+), 92 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8f5f3402..45278cb3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,7 +34,8 @@ NOTE: [`epaint`](crates/epaint/CHANGELOG.md), [`eframe`](crates/eframe/CHANGELOG * Improved text rendering ([#2071](https://github.com/emilk/egui/pull/2071)). * Less jitter when calling `Context::set_pixels_per_point` ([#2239](https://github.com/emilk/egui/pull/2239)). * Fixed popups and color edit going outside the screen. -* Fixed keyboard support in `DragValue`. ([#2342](https://github.com/emilk/egui/pull/2342)). +* Fixed keyboard support in `DragValue` ([#2342](https://github.com/emilk/egui/pull/2342)). +* If you nest `ScrollAreas` inside each other, the inner area will now move its scroll bar so it is always visible ([#2371](https://github.com/emilk/egui/pull/2371)). ## 0.19.0 - 2022-08-20 diff --git a/crates/egui/src/containers/scroll_area.rs b/crates/egui/src/containers/scroll_area.rs index 98bb959f..d4676957 100644 --- a/crates/egui/src/containers/scroll_area.rs +++ b/crates/egui/src/containers/scroll_area.rs @@ -635,23 +635,7 @@ impl Prepared { }; } - let mut inner_rect = Rect::from_min_size(inner_rect.min, inner_size); - - // The window that egui sits in can't be expanded by egui, so we need to respect it: - for d in 0..2 { - if !has_bar[d] { - // HACK for when we have a vertical-only scroll area in a top level panel, - // and that panel is not wide enough for the contents. - // This code ensures we still see the scroll bar! - let max = ui.input().screen_rect().max[d] - - current_bar_use[d] - - ui.spacing().item_spacing[d]; - inner_rect.max[d] = inner_rect.max[d].at_most(max); - // TODO(emilk): maybe auto-enable horizontal/vertical scrolling if this limit is reached - } - } - - inner_rect + Rect::from_min_size(inner_rect.min, inner_size) }; let outer_rect = Rect::from_min_size(inner_rect.min, inner_rect.size() + current_bar_use); @@ -703,13 +687,29 @@ impl Prepared { continue; } - // margin between contents and scroll bar - let margin = animation_t * ui.spacing().item_spacing.x; - let min_cross = inner_rect.max[1 - d] + margin; // left of vertical scroll (d == 1) - let max_cross = outer_rect.max[1 - d]; // right of vertical scroll (d == 1) + // margin on either side of the scroll bar + let inner_margin = animation_t * ui.spacing().scroll_bar_inner_margin; + let outer_margin = animation_t * ui.spacing().scroll_bar_outer_margin; + let mut min_cross = inner_rect.max[1 - d] + inner_margin; // left of vertical scroll (d == 1) + let mut max_cross = outer_rect.max[1 - d] - outer_margin; // right of vertical scroll (d == 1) let min_main = inner_rect.min[d]; // top of vertical scroll (d == 1) let max_main = inner_rect.max[d]; // bottom of vertical scroll (d == 1) + if ui.clip_rect().max[1 - d] < max_cross + outer_margin { + // Move the scrollbar so it is visible. This is needed in some cases. + // For instance: + // * When we have a vertical-only scroll area in a top level panel, + // and that panel is not wide enough for the contents. + // * When one ScrollArea is nested inside another, and the outer + // is scrolled so that the scroll-bars of the inner ScrollArea (us) + // is outside the clip rectangle. + // Really this should use the tighter clip_rect that ignores clip_rect_margin, but we don't store that. + // clip_rect_margin is quite a hack. It would be nice to get rid of it. + let width = max_cross - min_cross; + max_cross = ui.clip_rect().max[1 - d] - outer_margin; + min_cross = max_cross - width; + } + let outer_scroll_rect = if d == 0 { Rect::from_min_max( pos2(inner_rect.left(), min_cross), @@ -865,5 +865,7 @@ impl Prepared { /// Width of a vertical scrollbar, or height of a horizontal scroll bar fn max_scroll_bar_width_with_margin(ui: &Ui) -> f32 { - ui.spacing().item_spacing.x + ui.spacing().scroll_bar_width + ui.spacing().scroll_bar_inner_margin + + ui.spacing().scroll_bar_width + + ui.spacing().scroll_bar_outer_margin } diff --git a/crates/egui/src/painter.rs b/crates/egui/src/painter.rs index df3a5d95..13cb6046 100644 --- a/crates/egui/src/painter.rs +++ b/crates/egui/src/painter.rs @@ -208,7 +208,12 @@ impl Painter { impl Painter { #[allow(clippy::needless_pass_by_value)] pub fn debug_rect(&self, rect: Rect, color: Color32, text: impl ToString) { - self.rect_stroke(rect, 0.0, (1.0, color)); + self.rect( + rect, + 0.0, + color.additive().linear_multiply(0.015), + (1.0, color), + ); self.text( rect.min, Align2::LEFT_TOP, diff --git a/crates/egui/src/style.rs b/crates/egui/src/style.rs index 195577fa..a4cd8817 100644 --- a/crates/egui/src/style.rs +++ b/crates/egui/src/style.rs @@ -292,6 +292,11 @@ pub struct Spacing { pub combo_height: f32, pub scroll_bar_width: f32, + + /// Margin between contents and scroll bar. + pub scroll_bar_inner_margin: f32, + /// Margin between scroll bar and the outer container (e.g. right of a vertical scroll bar). + pub scroll_bar_outer_margin: f32, } impl Spacing { @@ -658,6 +663,8 @@ impl Default for Spacing { tooltip_width: 600.0, combo_height: 200.0, scroll_bar_width: 8.0, + scroll_bar_inner_margin: 4.0, + scroll_bar_outer_margin: 0.0, indent_ends_with_horizontal_line: false, } } @@ -941,6 +948,8 @@ impl Spacing { indent_ends_with_horizontal_line, combo_height, scroll_bar_width, + scroll_bar_inner_margin, + scroll_bar_outer_margin, } = self; ui.add(slider_vec2(item_spacing, 0.0..=20.0, "Item spacing")); @@ -1021,7 +1030,15 @@ impl Spacing { }); ui.horizontal(|ui| { ui.add(DragValue::new(scroll_bar_width).clamp_range(0.0..=32.0)); - ui.label("Scroll-bar width width"); + ui.label("Scroll-bar width"); + }); + ui.horizontal(|ui| { + ui.add(DragValue::new(scroll_bar_inner_margin).clamp_range(0.0..=32.0)); + ui.label("Scroll-bar inner margin"); + }); + ui.horizontal(|ui| { + ui.add(DragValue::new(scroll_bar_outer_margin).clamp_range(0.0..=32.0)); + ui.label("Scroll-bar outer margin"); }); ui.horizontal(|ui| { diff --git a/crates/egui_demo_lib/src/demo/scrolling.rs b/crates/egui_demo_lib/src/demo/scrolling.rs index b375223b..8eda4152 100644 --- a/crates/egui_demo_lib/src/demo/scrolling.rs +++ b/crates/egui_demo_lib/src/demo/scrolling.rs @@ -7,6 +7,7 @@ enum ScrollDemo { ManyLines, LargeCanvas, StickToEnd, + Bidirectional, } impl Default for ScrollDemo { @@ -55,6 +56,7 @@ impl super::View for Scrolling { "Scroll a large canvas", ); ui.selectable_value(&mut self.demo, ScrollDemo::StickToEnd, "Stick to end"); + ui.selectable_value(&mut self.demo, ScrollDemo::Bidirectional, "Bidirectional"); }); ui.separator(); match self.demo { @@ -70,6 +72,14 @@ impl super::View for Scrolling { ScrollDemo::StickToEnd => { self.scroll_stick_to.ui(ui); } + ScrollDemo::Bidirectional => { + egui::ScrollArea::both().show(ui, |ui| { + ui.style_mut().wrap = Some(false); + for _ in 0..100 { + ui.label(crate::LOREM_IPSUM); + } + }); + } } } } diff --git a/crates/egui_demo_lib/src/demo/table_demo.rs b/crates/egui_demo_lib/src/demo/table_demo.rs index 01e0bdd9..03f2d07b 100644 --- a/crates/egui_demo_lib/src/demo/table_demo.rs +++ b/crates/egui_demo_lib/src/demo/table_demo.rs @@ -47,7 +47,7 @@ impl super::Demo for TableDemo { } } -const NUM_MANUAL_ROWS: usize = 32; +const NUM_MANUAL_ROWS: usize = 20; impl super::View for TableDemo { fn ui(&mut self, ui: &mut egui::Ui) { @@ -101,11 +101,13 @@ impl super::View for TableDemo { // Leave room for the source code link after the table demo: use egui_extras::{Size, StripBuilder}; StripBuilder::new(ui) - .size(Size::remainder()) // for the table + .size(Size::remainder().at_least(100.0)) // for the table .size(Size::exact(10.0)) // for the source code link .vertical(|mut strip| { strip.cell(|ui| { - self.table_ui(ui); + egui::ScrollArea::horizontal().show(ui, |ui| { + self.table_ui(ui); + }); }); strip.cell(|ui| { ui.vertical_centered(|ui| { @@ -133,7 +135,8 @@ impl TableDemo { .resizable(true) .clip(true), ) - .column(Column::remainder()); + .column(Column::remainder()) + .min_scrolled_height(0.0); if let Some(row_nr) = self.scroll_to_row.take() { table = table.scroll_to_row(row_nr, None); diff --git a/crates/egui_extras/CHANGELOG.md b/crates/egui_extras/CHANGELOG.md index 2e9fd663..56752e8d 100644 --- a/crates/egui_extras/CHANGELOG.md +++ b/crates/egui_extras/CHANGELOG.md @@ -5,6 +5,21 @@ All notable changes to the `egui_extras` integration will be noted in this file. ## Unreleased * Added `TableBuilder::vertical_scroll_offset`: method to set vertical scroll offset position for a table ([#1946](https://github.com/emilk/egui/pull/1946)). * Added `RetainedImage::from_svg_bytes_with_size` to be able to specify a size for SVGs to be rasterized at. +* Big `Table` improvements ([#2369](https://github.com/emilk/egui/pull/2369)): + * Double-click column separators to auto-size the column. + * All `Table` now store state. You may see warnings about reused table ids. Use `ui.push_id` to fix this. + * `TableBuilder::column` takes a `Column` instead of a `Size`. + * `Column` controls default size, size range, resizing, and clipping of columns. + * `Column::auto` will pick a size automatically + * Added `Table::scroll_to_row`. + * Added `Table::min_scrolled_height` and `Table::max_scroll_height`. + * Added `TableBody::max_size`. + * `Table::scroll` renamed to `Table::vscroll`. + * `egui_extras::Strip` now has `clip: false` by default. + * Fix bugs when putting `Table` inside of a horizontal `ScrollArea`. + * Many other bug fixes. +* Add `Table::auto_shrink` - set to `false` to expand table to fit its containing `Ui` ([#2371](https://github.com/emilk/egui/pull/2371)). + ## 0.19.0 - 2022-08-20 * MSRV (Minimum Supported Rust Version) is now `1.61.0` ([#1846](https://github.com/emilk/egui/pull/1846)). diff --git a/crates/egui_extras/src/table.rs b/crates/egui_extras/src/table.rs index 91aeb219..aea2a290 100644 --- a/crates/egui_extras/src/table.rs +++ b/crates/egui_extras/src/table.rs @@ -3,7 +3,7 @@ //! | fixed size | all available space/minimum | 30% of available width | fixed size | //! Takes all available height, so if you want something below the table, put it in a strip. -use egui::{Align, NumExt as _, Rect, Response, Ui, Vec2}; +use egui::{Align, NumExt as _, Rect, Response, ScrollArea, Ui, Vec2}; use crate::{ layout::{CellDirection, CellSize}, @@ -155,6 +155,32 @@ fn to_sizing(columns: &[Column]) -> crate::sizing::Sizing { // -----------------------------------------------------------------=---------- +struct TableScrollOptions { + vscroll: bool, + stick_to_bottom: bool, + scroll_to_row: Option<(usize, Option)>, + scroll_offset_y: Option, + min_scrolled_height: f32, + max_scroll_height: f32, + auto_shrink: [bool; 2], +} + +impl Default for TableScrollOptions { + fn default() -> Self { + Self { + vscroll: true, + stick_to_bottom: false, + scroll_to_row: None, + scroll_offset_y: None, + min_scrolled_height: 200.0, + max_scroll_height: 800.0, + auto_shrink: [true; 2], + } + } +} + +// -----------------------------------------------------------------=---------- + /// Builder for a [`Table`] with (optional) fixed header and scrolling body. /// /// You must pre-allocate all columns with [`Self::column`]/[`Self::columns`]. @@ -195,14 +221,7 @@ pub struct TableBuilder<'a> { striped: bool, resizable: bool, cell_layout: egui::Layout, - - // Scroll stuff: - vscroll: bool, - stick_to_bottom: bool, - scroll_to_row: Option<(usize, Option)>, - scroll_offset_y: Option, - min_scrolled_height: f32, - max_scroll_height: f32, + scroll_options: TableScrollOptions, } impl<'a> TableBuilder<'a> { @@ -214,13 +233,7 @@ impl<'a> TableBuilder<'a> { striped: false, resizable: false, cell_layout, - - vscroll: true, - stick_to_bottom: false, - scroll_to_row: None, - scroll_offset_y: None, - min_scrolled_height: 200.0, - max_scroll_height: 800.0, + scroll_options: Default::default(), } } @@ -247,7 +260,7 @@ impl<'a> TableBuilder<'a> { /// Enable vertical scrolling in body (default: `true`) pub fn vscroll(mut self, vscroll: bool) -> Self { - self.vscroll = vscroll; + self.scroll_options.vscroll = vscroll; self } @@ -260,7 +273,7 @@ impl<'a> TableBuilder<'a> { /// dynamically? The scroll handle remains stuck until manually changed, and will become stuck /// once again when repositioned to the bottom. Default: `false`. pub fn stick_to_bottom(mut self, stick: bool) -> Self { - self.stick_to_bottom = stick; + self.scroll_options.stick_to_bottom = stick; self } @@ -272,7 +285,7 @@ impl<'a> TableBuilder<'a> { /// /// See also: [`Self::vertical_scroll_offset`]. pub fn scroll_to_row(mut self, row: usize, align: Option) -> Self { - self.scroll_to_row = Some((row, align)); + self.scroll_options.scroll_to_row = Some((row, align)); self } @@ -280,7 +293,7 @@ impl<'a> TableBuilder<'a> { /// /// See also: [`Self::scroll_to_row`]. pub fn vertical_scroll_offset(mut self, offset: f32) -> Self { - self.scroll_offset_y = Some(offset); + self.scroll_options.scroll_offset_y = Some(offset); self } @@ -291,7 +304,7 @@ impl<'a> TableBuilder<'a> { /// /// Default: `200.0`. pub fn min_scrolled_height(mut self, min_scrolled_height: f32) -> Self { - self.min_scrolled_height = min_scrolled_height; + self.scroll_options.min_scrolled_height = min_scrolled_height; self } @@ -300,7 +313,19 @@ impl<'a> TableBuilder<'a> { /// In other words: add scroll-bars when this height is reached. /// Default: `800.0`. pub fn max_scroll_height(mut self, max_scroll_height: f32) -> Self { - self.max_scroll_height = max_scroll_height; + self.scroll_options.max_scroll_height = max_scroll_height; + self + } + + /// For each axis (x,y): + /// * If true, add blank space outside the table, keeping the table small. + /// * If false, add blank space inside the table, expanding the table to fit the containing ui. + /// + /// Default: `[true; 2]`. + /// + /// See [`ScrollArea::auto_shrink`] for more. + pub fn auto_shrink(mut self, auto_shrink: [bool; 2]) -> Self { + self.scroll_options.auto_shrink = auto_shrink; self } @@ -326,8 +351,10 @@ impl<'a> TableBuilder<'a> { fn available_width(&self) -> f32 { self.ui.available_rect_before_wrap().width() - - if self.vscroll { - self.ui.spacing().item_spacing.x + self.ui.spacing().scroll_bar_width + - if self.scroll_options.vscroll { + self.ui.spacing().scroll_bar_inner_margin + + self.ui.spacing().scroll_bar_width + + self.ui.spacing().scroll_bar_outer_margin } else { 0.0 } @@ -343,13 +370,7 @@ impl<'a> TableBuilder<'a> { striped, resizable, cell_layout, - - vscroll, - stick_to_bottom, - scroll_to_row, - scroll_offset_y, - min_scrolled_height, - max_scroll_height, + scroll_options, } = self; let state_id = ui.id().with("__table_state"); @@ -390,13 +411,7 @@ impl<'a> TableBuilder<'a> { resizable, striped, cell_layout, - - vscroll, - stick_to_bottom, - scroll_to_row, - scroll_offset_y, - min_scrolled_height, - max_scroll_height, + scroll_options, } } @@ -413,13 +428,7 @@ impl<'a> TableBuilder<'a> { striped, resizable, cell_layout, - - vscroll, - stick_to_bottom, - scroll_to_row, - scroll_offset_y, - min_scrolled_height, - max_scroll_height, + scroll_options, } = self; let state_id = ui.id().with("__table_state"); @@ -445,13 +454,7 @@ impl<'a> TableBuilder<'a> { resizable, striped, cell_layout, - - vscroll, - stick_to_bottom, - scroll_to_row, - scroll_offset_y, - min_scrolled_height, - max_scroll_height, + scroll_options, } .body(add_body_contents); } @@ -509,13 +512,7 @@ pub struct Table<'a> { striped: bool, cell_layout: egui::Layout, - // Scroll stuff: - vscroll: bool, - stick_to_bottom: bool, - scroll_to_row: Option<(usize, Option)>, - scroll_offset_y: Option, - min_scrolled_height: f32, - max_scroll_height: f32, + scroll_options: TableScrollOptions, } impl<'a> Table<'a> { @@ -534,24 +531,29 @@ impl<'a> Table<'a> { mut state, mut max_used_widths, first_frame_auto_size_columns, - vscroll, striped, cell_layout, + scroll_options, + } = self; + let TableScrollOptions { + vscroll, stick_to_bottom, scroll_to_row, scroll_offset_y, min_scrolled_height, max_scroll_height, - } = self; + auto_shrink, + } = scroll_options; let avail_rect = ui.available_rect_before_wrap(); - let mut scroll_area = egui::ScrollArea::new([false, vscroll]) + let mut scroll_area = ScrollArea::new([false, vscroll]) .auto_shrink([true; 2]) .stick_to_bottom(stick_to_bottom) .min_scrolled_height(min_scrolled_height) - .max_height(max_scroll_height); + .max_height(max_scroll_height) + .auto_shrink(auto_shrink); if let Some(scroll_offset_y) = scroll_offset_y { scroll_area = scroll_area.vertical_scroll_offset(scroll_offset_y); From e6133158664672bbbcb01cfa2a3a601d9f425671 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Fri, 2 Dec 2022 09:51:21 +0100 Subject: [PATCH 023/143] Improve issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- .github/ISSUE_TEMPLATE/feature_request.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 8cd58413..66c17862 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -8,7 +8,7 @@ assignees: '' --- From c8771cd13e301100b8e335e8fbcd2a01301758ec Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Fri, 2 Dec 2022 09:52:26 +0100 Subject: [PATCH 024/143] Add some minor improvements for debugging id clashes --- crates/egui/src/containers/panel.rs | 3 ++ crates/egui/src/context.rs | 54 ++++++++++++++++++++--------- crates/egui/src/painter.rs | 2 +- 3 files changed, 41 insertions(+), 18 deletions(-) diff --git a/crates/egui/src/containers/panel.rs b/crates/egui/src/containers/panel.rs index 9b74da3a..a94f7b21 100644 --- a/crates/egui/src/containers/panel.rs +++ b/crates/egui/src/containers/panel.rs @@ -215,6 +215,7 @@ impl SidePanel { } width = clamp_to_range(width, width_range.clone()).at_most(available_rect.width()); side.set_rect_width(&mut panel_rect, width); + ui.ctx().check_for_id_clash(id, panel_rect, "SidePanel"); } let mut resize_hover = false; @@ -642,6 +643,8 @@ impl TopBottomPanel { }; height = clamp_to_range(height, height_range.clone()).at_most(available_rect.height()); side.set_rect_height(&mut panel_rect, height); + ui.ctx() + .check_for_id_clash(id, panel_rect, "TopBottomPanel"); } let mut resize_hover = false; diff --git a/crates/egui/src/context.rs b/crates/egui/src/context.rs index 8449ca30..6a2fed5b 100644 --- a/crates/egui/src/context.rs +++ b/crates/egui/src/context.rs @@ -279,16 +279,45 @@ impl Context { return; } - let show_error = |pos: Pos2, text: String| { + let show_error = |widget_rect: Rect, text: String| { + let text = format!("🔥 {}", text); + let color = self.style().visuals.error_fg_color; let painter = self.debug_painter(); - let rect = painter.error(pos, text); + painter.rect_stroke(widget_rect, 0.0, (1.0, color)); + + let below = widget_rect.bottom() + 32.0 < self.input().screen_rect.bottom(); + + let text_rect = if below { + painter.debug_text( + widget_rect.left_bottom() + vec2(0.0, 2.0), + Align2::LEFT_TOP, + color, + text, + ) + } else { + painter.debug_text( + widget_rect.left_top() - vec2(0.0, 2.0), + Align2::LEFT_BOTTOM, + color, + text, + ) + }; + if let Some(pointer_pos) = self.pointer_hover_pos() { - if rect.contains(pointer_pos) { + if text_rect.contains(pointer_pos) { + let tooltip_pos = if below { + text_rect.left_bottom() + vec2(2.0, 4.0) + } else { + text_rect.left_top() + vec2(2.0, -4.0) + }; + painter.error( - rect.left_bottom() + vec2(2.0, 4.0), - "ID clashes happens when things like Windows or CollapsingHeaders share names,\n\ + tooltip_pos, + format!("Widget is {} this text.\n\n\ + ID clashes happens when things like Windows or CollapsingHeaders share names,\n\ or when things like Plot and Grid:s aren't given unique id_source:s.\n\n\ Sometimes the solution is to use ui.push_id.", + if below { "above" } else { "below" }) ); } } @@ -297,19 +326,10 @@ impl Context { let id_str = id.short_debug_format(); if prev_rect.min.distance(new_rect.min) < 4.0 { - show_error( - new_rect.min, - format!("Double use of {} ID {}", what, id_str), - ); + show_error(new_rect, format!("Double use of {} ID {}", what, id_str)); } else { - show_error( - prev_rect.min, - format!("First use of {} ID {}", what, id_str), - ); - show_error( - new_rect.min, - format!("Second use of {} ID {}", what, id_str), - ); + show_error(prev_rect, format!("First use of {} ID {}", what, id_str)); + show_error(new_rect, format!("Second use of {} ID {}", what, id_str)); } } } diff --git a/crates/egui/src/painter.rs b/crates/egui/src/painter.rs index 13cb6046..76a6d669 100644 --- a/crates/egui/src/painter.rs +++ b/crates/egui/src/painter.rs @@ -243,7 +243,7 @@ impl Painter { self.add(Shape::rect_filled( frame_rect, 0.0, - Color32::from_black_alpha(240), + Color32::from_black_alpha(150), )); self.galley(rect.min, galley); frame_rect From ec0b2d8e9af24fe589dd06b766fdd38fc680f013 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Sun, 4 Dec 2022 10:16:37 +0100 Subject: [PATCH 025/143] Deprecate ui.centered It didn't do what it advertised to do, and there is no simple way of doing that right now. --- crates/egui/src/layout.rs | 16 ++-------------- crates/egui/src/ui.rs | 6 ++++-- 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/crates/egui/src/layout.rs b/crates/egui/src/layout.rs index 81fd5ec4..275c57b8 100644 --- a/crates/egui/src/layout.rs +++ b/crates/egui/src/layout.rs @@ -229,22 +229,10 @@ impl Layout { } } - /// For when you want to add a single widget to a layout, and that widget - /// should be centered horizontally and vertically. - #[inline(always)] - pub fn centered(main_dir: Direction) -> Self { - Self { - main_dir, - main_wrap: false, - main_align: Align::Center, - main_justify: false, - cross_align: Align::Center, - cross_justify: false, - } - } - /// For when you want to add a single widget to a layout, and that widget /// should use up all available space. + /// + /// Only one widget may be added to the inner `Ui`! #[inline(always)] pub fn centered_and_justified(main_dir: Direction) -> Self { Self { diff --git a/crates/egui/src/ui.rs b/crates/egui/src/ui.rs index cb4b9021..27f772f7 100644 --- a/crates/egui/src/ui.rs +++ b/crates/egui/src/ui.rs @@ -2007,12 +2007,14 @@ impl Ui { InnerResponse::new(inner, self.interact(rect, child_ui.id, Sense::hover())) } - /// This will make the next added widget centered in the available space. + #[deprecated = "Use ui.vertical_centered instead"] pub fn centered(&mut self, add_contents: impl FnOnce(&mut Self) -> R) -> InnerResponse { - self.with_layout_dyn(Layout::centered(Direction::TopDown), Box::new(add_contents)) + self.vertical_centered(add_contents) } /// This will make the next added widget centered and justified in the available space. + /// + /// Only one widget may be added to the inner `Ui`! pub fn centered_and_justified( &mut self, add_contents: impl FnOnce(&mut Self) -> R, From b774159fc8fbd4181cd0b47f4ac750e7412e4e26 Mon Sep 17 00:00:00 2001 From: winne42 Date: Sun, 4 Dec 2022 15:39:55 +0100 Subject: [PATCH 026/143] let monospace text style be monospaced (#2201) * let monospace text style be monospaced * use monospace shortcut --- examples/custom_font_style/README.md | 1 + .../custom_font_style/custom_font_style.png | Bin 0 -> 76832 bytes examples/custom_font_style/src/main.rs | 6 +++--- 3 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 examples/custom_font_style/custom_font_style.png diff --git a/examples/custom_font_style/README.md b/examples/custom_font_style/README.md index d337602c..8b3575f6 100644 --- a/examples/custom_font_style/README.md +++ b/examples/custom_font_style/README.md @@ -1,3 +1,4 @@ ```sh cargo run -p custom_font_style ``` +![custom_font_style example](custom_font_style.png) \ No newline at end of file diff --git a/examples/custom_font_style/custom_font_style.png b/examples/custom_font_style/custom_font_style.png new file mode 100644 index 0000000000000000000000000000000000000000..3baabb7386517bc8e9294d5ffebb72991eea4744 GIT binary patch literal 76832 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 literal 0 HcmV?d00001 diff --git a/examples/custom_font_style/src/main.rs b/examples/custom_font_style/src/main.rs index ba8a9c1f..43c482e8 100644 --- a/examples/custom_font_style/src/main.rs +++ b/examples/custom_font_style/src/main.rs @@ -14,7 +14,7 @@ fn heading3() -> TextStyle { } fn configure_text_styles(ctx: &egui::Context) { - use FontFamily::Proportional; + use FontFamily::{Monospace, Proportional}; let mut style = (*ctx.style()).clone(); style.text_styles = [ @@ -22,7 +22,7 @@ fn configure_text_styles(ctx: &egui::Context) { (heading2(), FontId::new(22.0, Proportional)), (heading3(), FontId::new(19.0, Proportional)), (TextStyle::Body, FontId::new(16.0, Proportional)), - (TextStyle::Monospace, FontId::new(12.0, Proportional)), + (TextStyle::Monospace, FontId::new(12.0, Monospace)), (TextStyle::Button, FontId::new(12.0, Proportional)), (TextStyle::Small, FontId::new(8.0, Proportional)), ] @@ -36,7 +36,7 @@ fn content(ui: &mut egui::Ui) { ui.label(LOREM_IPSUM); ui.add_space(15.); ui.label(RichText::new("Sub Heading").text_style(heading2()).strong()); - ui.label(LOREM_IPSUM); + ui.monospace(LOREM_IPSUM); ui.add_space(15.); ui.label(RichText::new("Context").text_style(heading3()).strong()); ui.add_space(5.); From 48666e1d7a99c711cd892acef20cbf477d87a222 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Sun, 4 Dec 2022 17:27:40 +0100 Subject: [PATCH 027/143] Automatically generate screenshots for all examples (#2379) --- Cargo.lock | 1 + crates/eframe/Cargo.toml | 7 +++ crates/eframe/src/lib.rs | 6 +++ crates/eframe/src/native/run.rs | 41 +++++++++++++++--- crates/egui_glow/src/painter.rs | 32 ++++++++++++++ examples/confirm_exit/Cargo.toml | 4 +- examples/confirm_exit/README.md | 4 ++ examples/confirm_exit/screenshot.png | Bin 0 -> 3109 bytes examples/confirm_exit/src/main.rs | 5 ++- examples/custom_3d_glow/Cargo.toml | 4 +- examples/custom_3d_glow/README.md | 2 + examples/custom_3d_glow/screenshot.png | Bin 0 -> 34270 bytes examples/custom_3d_three-d/Cargo.toml | 4 +- examples/custom_3d_three-d/README.md | 2 + examples/custom_3d_three-d/screenshot.png | Bin 0 -> 52939 bytes examples/custom_font/Cargo.toml | 4 +- examples/custom_font/README.md | 4 ++ examples/custom_font/screenshot.png | Bin 0 -> 5591 bytes examples/custom_font/src/main.rs | 5 ++- examples/custom_font_style/Cargo.toml | 4 +- examples/custom_font_style/README.md | 5 ++- .../custom_font_style/custom_font_style.png | Bin 76832 -> 0 bytes examples/custom_font_style/screenshot.png | Bin 0 -> 60383 bytes examples/custom_window_frame/Cargo.toml | 4 +- examples/custom_window_frame/README.md | 4 ++ examples/custom_window_frame/screenshot.png | Bin 0 -> 8369 bytes examples/custom_window_frame/src/main.rs | 1 + examples/download_image/Cargo.toml | 4 +- examples/download_image/README.md | 4 ++ examples/download_image/screenshot.png | Bin 0 -> 361536 bytes examples/file_dialog/Cargo.toml | 4 +- examples/file_dialog/README.md | 2 + examples/file_dialog/screenshot.png | Bin 0 -> 3884 bytes examples/file_dialog/src/main.rs | 1 + examples/hello_world/Cargo.toml | 4 +- examples/hello_world/README.md | 4 ++ examples/hello_world/screenshot.png | Bin 0 -> 7671 bytes examples/hello_world/src/main.rs | 5 ++- examples/keyboard_events/Cargo.toml | 4 +- examples/keyboard_events/README.md | 2 + examples/keyboard_events/screenshot.png | Bin 0 -> 7505 bytes examples/puffin_profiler/Cargo.toml | 4 +- examples/puffin_profiler/README.md | 2 + examples/puffin_profiler/screenshot.png | Bin 0 -> 20791 bytes examples/retained_image/Cargo.toml | 4 +- examples/retained_image/README.md | 4 ++ examples/retained_image/screenshot.png | Bin 0 -> 151711 bytes examples/retained_image/src/main.rs | 2 +- examples/screenshot/Cargo.toml | 4 +- examples/screenshot/README.md | 4 ++ examples/screenshot/screenshot.png | Bin 0 -> 6645 bytes examples/screenshot/src/main.rs | 10 +++-- examples/serial_windows/Cargo.toml | 4 +- examples/serial_windows/README.md | 2 + examples/serial_windows/screenshot.png | Bin 0 -> 1680 bytes examples/serial_windows/src/main.rs | 1 + examples/svg/Cargo.toml | 4 +- examples/svg/README.md | 3 +- examples/svg/screenshot.png | Bin 0 -> 60851 bytes sh/generate_example_screenshots.sh | 11 +++++ 60 files changed, 206 insertions(+), 30 deletions(-) create mode 100644 examples/confirm_exit/screenshot.png create mode 100644 examples/custom_3d_glow/screenshot.png create mode 100644 examples/custom_3d_three-d/screenshot.png create mode 100644 examples/custom_font/screenshot.png delete mode 100644 examples/custom_font_style/custom_font_style.png create mode 100644 examples/custom_font_style/screenshot.png create mode 100644 examples/custom_window_frame/screenshot.png create mode 100644 examples/download_image/screenshot.png create mode 100644 examples/file_dialog/screenshot.png create mode 100644 examples/hello_world/screenshot.png create mode 100644 examples/keyboard_events/screenshot.png create mode 100644 examples/puffin_profiler/screenshot.png create mode 100644 examples/retained_image/screenshot.png create mode 100644 examples/screenshot/screenshot.png create mode 100644 examples/serial_windows/screenshot.png create mode 100644 examples/svg/screenshot.png create mode 100755 sh/generate_example_screenshots.sh diff --git a/Cargo.lock b/Cargo.lock index a822a3e5..66dcdb9f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1147,6 +1147,7 @@ dependencies = [ "egui_glow", "glow", "glutin", + "image", "js-sys", "percent-encoding", "puffin", diff --git a/crates/eframe/Cargo.toml b/crates/eframe/Cargo.toml index 596e6d72..a0021a34 100644 --- a/crates/eframe/Cargo.toml +++ b/crates/eframe/Cargo.toml @@ -52,6 +52,10 @@ puffin = ["dep:puffin", "egui_glow?/puffin", "egui-wgpu?/puffin"] ## Enable screen reader support (requires `ctx.options().screen_reader = true;`) screen_reader = ["egui-winit/screen_reader", "tts"] +## If set, eframe will look for the env-var `EFRAME_SCREENSHOT_TO` and write a screenshot to that location, and then quit. +## This is used to generate images for the examples. +__screenshot = ["dep:image"] + ## Use [`wgpu`](https://docs.rs/wgpu) for painting (via [`egui-wgpu`](https://github.com/emilk/egui/tree/master/crates/egui-wgpu)). ## This overrides the `glow` feature. wgpu = ["dep:wgpu", "dep:egui-wgpu"] @@ -89,6 +93,9 @@ directories-next = { version = "2", optional = true } egui-wgpu = { version = "0.19.0", path = "../egui-wgpu", optional = true, features = [ "winit", ] } +image = { version = "0.24", optional = true, default-features = false, features = [ + "png", +] } puffin = { version = "0.14", optional = true } wgpu = { version = "0.14", optional = true } diff --git a/crates/eframe/src/lib.rs b/crates/eframe/src/lib.rs index b8e2ba2e..3fa6be93 100644 --- a/crates/eframe/src/lib.rs +++ b/crates/eframe/src/lib.rs @@ -168,6 +168,12 @@ mod native; pub fn run_native(app_name: &str, native_options: NativeOptions, app_creator: AppCreator) { let renderer = native_options.renderer; + #[cfg(not(feature = "__screenshot"))] + assert!( + std::env::var("EFRAME_SCREENSHOT_TO").is_err(), + "EFRAME_SCREENSHOT_TO found without compiling with the '__screenshot' feature" + ); + match renderer { #[cfg(feature = "glow")] Renderer::Glow => { diff --git a/crates/eframe/src/native/run.rs b/crates/eframe/src/native/run.rs index 5d28e3ea..27987687 100644 --- a/crates/eframe/src/native/run.rs +++ b/crates/eframe/src/native/run.rs @@ -241,7 +241,7 @@ fn run_and_exit(event_loop: EventLoop, mut winit_app: impl WinitApp + }) } -fn centere_window_pos( +fn center_window_pos( monitor: Option, native_options: &mut epi::NativeOptions, ) { @@ -308,6 +308,8 @@ mod glow_integration { // suspends and resumes. app_creator: Option, is_focused: bool, + + frame_nr: u64, } impl GlowWinitApp { @@ -324,6 +326,7 @@ mod glow_integration { running: None, app_creator: Some(app_creator), is_focused: true, + frame_nr: 0, } } @@ -517,6 +520,26 @@ mod glow_integration { integration.post_present(window); + #[cfg(feature = "__screenshot")] + // give it time to settle: + if self.frame_nr == 2 { + if let Ok(path) = std::env::var("EFRAME_SCREENSHOT_TO") { + assert!( + path.ends_with(".png"), + "Expected EFRAME_SCREENSHOT_TO to end with '.png', got {path:?}" + ); + let [w, h] = screen_size_in_pixels; + let pixels = painter.read_screen_rgba(screen_size_in_pixels); + let image = image::RgbaImage::from_vec(w, h, pixels).unwrap(); + let image = image::imageops::flip_vertical(&image); + image.save(&path).unwrap_or_else(|err| { + panic!("Failed to save screenshot to {path:?}: {err}"); + }); + eprintln!("Screenshot saved to {path:?}."); + std::process::exit(0); + } + } + let control_flow = if integration.should_close() { EventResult::Exit } else if repaint_after.is_zero() { @@ -546,6 +569,8 @@ mod glow_integration { std::thread::sleep(std::time::Duration::from_millis(10)); } + self.frame_nr += 1; + control_flow } else { EventResult::Wait @@ -659,7 +684,7 @@ mod glow_integration { if native_options.run_and_return { with_event_loop(native_options, |event_loop, mut native_options| { if native_options.centered { - centere_window_pos(event_loop.available_monitors().next(), &mut native_options); + center_window_pos(event_loop.available_monitors().next(), &mut native_options); } let glow_eframe = @@ -670,7 +695,7 @@ mod glow_integration { let event_loop = create_event_loop_builder(&mut native_options).build(); if native_options.centered { - centere_window_pos(event_loop.available_monitors().next(), &mut native_options); + center_window_pos(event_loop.available_monitors().next(), &mut native_options); } let glow_eframe = GlowWinitApp::new(&event_loop, app_name, native_options, app_creator); @@ -718,6 +743,12 @@ mod wgpu_integration { native_options: epi::NativeOptions, app_creator: epi::AppCreator, ) -> Self { + #[cfg(feature = "__screenshot")] + assert!( + std::env::var("EFRAME_SCREENSHOT_TO").is_err(), + "EFRAME_SCREENSHOT_TO not yet implemented for wgpu backend" + ); + Self { repaint_proxy: Arc::new(std::sync::Mutex::new(event_loop.create_proxy())), app_name: app_name.to_owned(), @@ -1050,7 +1081,7 @@ mod wgpu_integration { if native_options.run_and_return { with_event_loop(native_options, |event_loop, mut native_options| { if native_options.centered { - centere_window_pos(event_loop.available_monitors().next(), &mut native_options); + center_window_pos(event_loop.available_monitors().next(), &mut native_options); } let wgpu_eframe = @@ -1061,7 +1092,7 @@ mod wgpu_integration { let event_loop = create_event_loop_builder(&mut native_options).build(); if native_options.centered { - centere_window_pos(event_loop.available_monitors().next(), &mut native_options); + center_window_pos(event_loop.available_monitors().next(), &mut native_options); } let wgpu_eframe = WgpuWinitApp::new(&event_loop, app_name, native_options, app_creator); diff --git a/crates/egui_glow/src/painter.rs b/crates/egui_glow/src/painter.rs index 84f2eda1..27f5571c 100644 --- a/crates/egui_glow/src/painter.rs +++ b/crates/egui_glow/src/painter.rs @@ -605,6 +605,38 @@ impl Painter { } } + pub fn read_screen_rgba(&self, [w, h]: [u32; 2]) -> Vec { + let mut pixels = vec![0_u8; (w * h * 4) as usize]; + unsafe { + self.gl.read_pixels( + 0, + 0, + w as _, + h as _, + glow::RGBA, + glow::UNSIGNED_BYTE, + glow::PixelPackData::Slice(&mut pixels), + ); + } + pixels + } + + pub fn read_screen_rgb(&self, [w, h]: [u32; 2]) -> Vec { + let mut pixels = vec![0_u8; (w * h * 3) as usize]; + unsafe { + self.gl.read_pixels( + 0, + 0, + w as _, + h as _, + glow::RGB, + glow::UNSIGNED_BYTE, + glow::PixelPackData::Slice(&mut pixels), + ); + } + pixels + } + unsafe fn destroy_gl(&self) { self.gl.delete_program(self.program); for tex in self.textures.values() { diff --git a/examples/confirm_exit/Cargo.toml b/examples/confirm_exit/Cargo.toml index 8393aae6..f9340a99 100644 --- a/examples/confirm_exit/Cargo.toml +++ b/examples/confirm_exit/Cargo.toml @@ -9,4 +9,6 @@ publish = false [dependencies] -eframe = { path = "../../crates/eframe" } +eframe = { path = "../../crates/eframe", features = [ + "__screenshot", # __screenshot is so we can dump a ascreenshot using EFRAME_SCREENSHOT_TO +] } diff --git a/examples/confirm_exit/README.md b/examples/confirm_exit/README.md index b159db58..846d0bae 100644 --- a/examples/confirm_exit/README.md +++ b/examples/confirm_exit/README.md @@ -1,3 +1,7 @@ +Example how to show a confirm dialog before exiting an application. + ```sh cargo run -p confirm_exit ``` + +![](screenshot.png) diff --git a/examples/confirm_exit/screenshot.png b/examples/confirm_exit/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..062cd88ed0f97a38dc9b66fe55cff1fbbc7a0273 GIT binary patch literal 3109 zcmeHJ>o?o!7LL-C9<(!^snS+2+R~#Kx27hyPMMOrb((3N45Fq8l?YN)B4~@w^n%uX z1*uka; z#vF93HPnB9BYHd)bZ8M5Gnsk{wB^XD)NIi2#iVAp9FmWAO@1-Oyt%HfPO2E2Qo(vo zIKs=GyK(|AigtHgVg#_tbgaS?H6SY#XiKQU=|?AY^mC7bZq(`>Jf9EJYyUd+G-k_A zD^HN|sm=9e+6zYGb1KuRIAJug>yuxQ2%#ZD)ss22$Z8Ig3cefpqh^n^(@}tr7sU-I zg))RjRwn`c2y~lLLW77Yq|9?@zQ~Pws`GyKJeN|p+zo9IFwG~J{3y1(Usl^;E3f;r zW2zu%l+fW%ar66Bal?mldlGKtxjYihj@3b z?}y*sA0H0HVJa^Mdd5KUgEeK8rv9jI&>Ph#Wtg{D6wNp4f{2rPM@Ry={DlopSQ{!2 z%KseydY-Ep;?*ce8Rb#T8)Ii z11W1qRVx6_BE=DnOPQxW|HjC4*{xlZR=-rhR>y9!$zdGc+U$$?w(tohYL@kJ4c+n> zJa)7opl4sgNK99Pm^!fa7vrXN2w$?V&mirGmVG2I((JR!lLCYWuepjYqQItd(L=bs zPsf|nO|XN-*LqN*^RUoKPNtK%Z6)9NRJ{$#@e;Gz_n3K0fvc)HWO^|NM^0q}~L;b1yd8PN^U&WI9@R+hy7 z;x_=4%2scv#KXRwg+!r2ew83PwV2fHB09OpFk3H~`PY*y#L!lc%o}Ne2T}{LNiTsa>6jZ@brNmkH%hpEh?^<>|uTst2!RIr}2i zA?%O}NOng2+pQ)}0EzDG5VYFIEYNrbXxGL-hXz#pxhuZ9DGP76(M*DpUT(a=ohQ|6IDPtKan4ni81uor%O~3eLYWYQ`P`q?bQT&nro7 z#q~T1fv#sF>zOCTa#h$6lVomzuXe(sR!^vz!OcHb0-T;C@q4ge#3OhOc~# zT6H>S=7t!6Fi>6>F5OH4CP#GTyzOqq*KZ7Hh}6Tbn|9pQ$I{`<>bl!X5xh@V|BT zxSS^C&rP+*MoqL9k+}{>I$?t~D_jR&Zk^VORq`wM1{8%!MC#;d^zGQPT1l#|aX50( z_c)Yu&pEQ+DH3ds$!E2G$j$N25OdP=OHw=66b|EEb5LA4%g`T5O;a#-}8 z1;2P@&G`E-kLFJA!(I0)Z7`eYhf*Yud$F}A;Ao>J!>>pnY|`Qfk$k7Ydtr$7m}{$H zo`ry9hk+^j(1E{6`g6FJ*;v1*Z`(M8qG{8kQ`54P58wJ-bESJ^)zEj&Q+~U}$wsxe z!?RfJL!Jvy6CQvEDRZpp#wm44m1nto?D}F$gCGnN1@*dG7V19tX9u%AJsrRXZ|}2M zetpZt@1#2ej2oU7LvTn%hHlJ5Y7Z@J14F)4pY^P5;pnzWA&xHENGMJNhUi7(E!d4B zFfI6+B!8@DJ3E3@?OvI$*XuW8Z+=AJNOH*4#fnil)+{|F~`<>bi32 zm)u*0^c3`M@|tD{PwmCPMZ?ol`8){0($Kq68=9)sM^%Izc=bZmYJ MKl->a&Ro9vUlAX(h5!Hn literal 0 HcmV?d00001 diff --git a/examples/confirm_exit/src/main.rs b/examples/confirm_exit/src/main.rs index aa0e372a..f909ede5 100644 --- a/examples/confirm_exit/src/main.rs +++ b/examples/confirm_exit/src/main.rs @@ -3,7 +3,10 @@ use eframe::egui; fn main() { - let options = eframe::NativeOptions::default(); + let options = eframe::NativeOptions { + initial_window_size: Some(egui::vec2(320.0, 240.0)), + ..Default::default() + }; eframe::run_native( "Confirm exit", options, diff --git a/examples/custom_3d_glow/Cargo.toml b/examples/custom_3d_glow/Cargo.toml index f124b901..8e7a630d 100644 --- a/examples/custom_3d_glow/Cargo.toml +++ b/examples/custom_3d_glow/Cargo.toml @@ -9,6 +9,8 @@ publish = false [dependencies] -eframe = { path = "../../crates/eframe", features = ["glow"] } +eframe = { path = "../../crates/eframe", features = [ + "__screenshot", # __screenshot is so we can dump a ascreenshot using EFRAME_SCREENSHOT_TO +] } egui_glow = { path = "../../crates/egui_glow" } glow = "0.11" diff --git a/examples/custom_3d_glow/README.md b/examples/custom_3d_glow/README.md index 41a5e12b..08f46367 100644 --- a/examples/custom_3d_glow/README.md +++ b/examples/custom_3d_glow/README.md @@ -13,3 +13,5 @@ If you are content of having egui sit on top of a 3D background, take a look at: ```sh cargo run -p custom_3d_glow ``` + +![](screenshot.png) diff --git a/examples/custom_3d_glow/screenshot.png b/examples/custom_3d_glow/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..cb33155b2bdc59d61606c06915b2add56a49ea8c GIT binary patch literal 34270 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 Na?Y~6zkTxgzX931`_cda literal 0 HcmV?d00001 diff --git a/examples/custom_3d_three-d/Cargo.toml b/examples/custom_3d_three-d/Cargo.toml index 9ce3f9fd..20527808 100644 --- a/examples/custom_3d_three-d/Cargo.toml +++ b/examples/custom_3d_three-d/Cargo.toml @@ -11,7 +11,9 @@ publish = false crate-type = ["cdylib", "rlib"] [dependencies] -eframe = { path = "../../crates/eframe", features = ["glow"] } +eframe = { path = "../../crates/eframe", features = [ + "__screenshot", # __screenshot is so we can dump a ascreenshot using EFRAME_SCREENSHOT_TO +] } egui_glow = { path = "../../crates/egui_glow" } glow = "0.11" three-d = { version = "0.13", default-features = false } diff --git a/examples/custom_3d_three-d/README.md b/examples/custom_3d_three-d/README.md index 58c6d23f..c708a692 100644 --- a/examples/custom_3d_three-d/README.md +++ b/examples/custom_3d_three-d/README.md @@ -18,3 +18,5 @@ cargo run -p custom_3d_three-d ``` wasm-pack build examples/custom_3d_three-d --target web ``` + +![](screenshot.png) diff --git a/examples/custom_3d_three-d/screenshot.png b/examples/custom_3d_three-d/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..bdff41024874a61738775d05d512ef64c0feca9a GIT binary patch literal 52939 zcmeFZX*`r|{5O1ESE)|DqAXzEmEWiZT7*HB_i95Z5ZZiMMQR4i%{9J#aLz{ z3`x@~53VBhh5 zfBf;sftxoB?*8$|U-ICu)8Bi*E6lz8I)D7plW@~O|9)`h{5GP>b<|>M2@qx(~?1%5it}LHs8=*b!kF>c^+HVzhRAmL$ z?NAaT>bAFUw050?&#AiFdJW|=+cy8x4YV!|)MBcwWQrZ81_L9}@3-rC_+}{-C zB~}-OgVT93zc$5?=1wr4=Ww4;{IHBE7t_9rrtr{SZTY?IrcgcZSNo*)?KlLRky5A| z_mTH7Z@rKQ=lx#ub-dn^GVu?EuhN&Qlu}g$)xjsb7g}G~rV&Gz8do4RJZ2t0z2v}& zCU9*cCg29c7Y2VWG06&g2v!klwM@kvIVs%HL!B{4ZNiS{(2wQl zbKB|ROZ3GRx2da>K4Gn?$|xot>(5dwLya-e(v0Ju4`m(-?o6D?05_-hOzA7%@(`qN z;Pk>-nFLlQ#h$ck-x0Xl7d+CJeH}|EV|SJ*k=Wg&1~zAjt2?}lW~dq>xGnn~zM+Mg zVUoVES>~(@E`?0uddLU^wdKg=FdVs!s4qxd-1Y`zay^tp!ERTm+GKC6`4HTJoBA%c zKHDtHgfvVXz*lxibu=9+!zv%wG9GNz`K{rYh)6@Z%w2eGs*&fsJp6*xx97 zQOkRyEOqI^dVYwq^$^uuR|GSI)PNkV2^(c-W0~4`3O+Rzf}y`gNHBf4Yd((QOb9B` z2G0oeSr5dEh4qRFD&x)BE#^ujx+F<|WqDZ|MHfqT+$bS+(lm9M7G>5P8fwe_ejM`x zmNU0f#LZjUTF0Zl_jC**i8v)Lh09p~sDh`VHX>aAgs*b8Qc=u2y|3)4CGMY}J;&_d z;+8KBVz)l!*m6>rHiPa5AvYBrG0=MMCS#pDw*Kb7PE#Rye}>>fm# zj(4&cs$2$T_E!-;D4Z5_K4dO9wi&KFXG5?J2k-J{#c}C+Dg+dViHq&JyiQDf(GGla zNGUFC-Z@p3GpSlo2h)SBK^kXF@fkmS(C)!$2z(B^gMkertgDnE)+#%C2sPl&t}=Jo z)TQll1|fVoB4vp?oMS(}At;?~FT%Q@8m3mAW5;0~;VF8d(j)`R0H zdRqierIJ7SyYBq=l;#mG2g_YDFbOo^bULyWZK`Sy`|YLWY*(V%+GW3MUtaXXFJUOk z_$BOW3I5(VD=XEJlSO(T0>^M^<5fE0TbP>*Z`zqdav{B2m?cJ-9VW4 z{G>QLY&@l4*^bHQ8qbq1J;4&E$Bpjd?hM!kHUPbqr%JJ^Yhy7Kb9D#pIW|ug-cY z<&uRq;W_M^_{tnc5@iovTX%6Gm83IOd1>7NQ-N$ULI&$rG73o6q-GBu1Zh73i(oy| z+jvGPO z9&lGl+`TS%MoSH9o-wMlrn8QqKl|zvHu{S)r#mr~f?d(uCg2I|k+OSUJWq~h?5#dW zHxK15lD6v+c*-28)>PESAppoc146Y=<9vgr^tc2rJXdn@+YwN&s9L0eKt>!ZEzSnB zS%lR>OM5i>eTQiEP;ue&I0kgQ*>wEHPZDPol`;El3KG7w&iwOUkRb<4;_kxxY;&ZQ z^t#clh8;N6a&!uo9fVDu*RU!Z!y=hh;fQQ*m{q9~mYJdl<;?1_jqq6R+ZBMQh-${EI<7*nZ;g4-NF0Yc6;AEp zyhCiyIbzxC+-;Qk%8x1U4#!Os)FYNTw~y=30stv|){WU;s2hOTszGg06i^I>j-EK~ zsqHc>b#*sRZ% zIRGU&rxw38{GM5AY}gK4SJqn>$Ho&%bpFv8yvL!CtgZRud9dBR@cr7?bBK?0^SJHX zMfLkRcJf%@%sO@ncD3dxVxxAr`9tt=ACbm6;hZn*Z-mB2=r=3PA3zDBO%b00m2>qMIdnr6m_)J%~Cd9S}B#2W}mLOo-l@i za;Eg=#}arA>nmBR|CY{#7%CV|^P+JDGNRiWeGp7WtRBlJl6NEO+EjCR8}F%)((B{K z)pmaQKW+NU@5JOe(rcIRLea1noQa7iNXZ%oQmUOrv6Pycn2ZlOD9xFW#^?ZGJ{jVx zBScu&bX*%x%&9{5(2za++cSFGg~#ku03NQt zL-``7Bf?K_4{vafvhy7`^YK$s>lzgi*>>An-m5I)EO?sq)WmPg?C%JUc6Mt$X0Bd^ zhxAcW8ela9{8kvl(cvJXxzFJWcbd7Ofcgzvnj*abJcHWvyFfsg`)C8T4M2t=2|68K zIA^1!WtP`IkA=Bw5PUkY+oRY=AfRv&8FmN^jdD|U zBY2bN&iLO2q2rt!TGZ$iM|yVqr|P!QaBS!z+Kn|G$C+khS)3+mw!Y|j?0P5`*IvP6 zG58{f)z6eH5-aQ8R?iZ&|g`RA?~>FMOwHD z*HII6rlm%97lFOMG9?B}3&qf2+ncMDLeyqqsx&KJ`hA^JS@>#EYEVdFP^X`6&Jrto zsl!=JYTbKj&D#Lahyb;IENDCimrX+u2sBsKP#X?545>T7K7P>8s0kj@#|AK=r-Y@8 zWA#_(aT(H6?>9yqnCXLLiBwfbhw$|v6ofmE>ZWfvllqvtdp#q#k|kMd)vODvomQCh z^%5NEOXESLu>0$DZoqI&FsBu}A?Bhez4kylCFcS*4u@Hyg<&QKk(Eosl$uZ?V}6jU z2TTq^ZEB}FZkKZX(EhAW#-BON!IaRP)t4g}Q5kjy%9Ylt!< zz4aPDH9obST7=pdmDpOl4|v|9#G?M8eLfNn(~a>6XVyj>X*+Oc^vYrdU_)#JQI&u` zEiz|o$uWF;5OsNTo5T$}i)XNDdU_B@To_JO@?6Ls%O-3|C z7SRLGu4MDb3*(;N>OJ(aZUXI|F6AEJy{n(_1g?%47t;6$L0S(ZQ6$GFB##c$8VL2- z1Odm5W(s)FcB=Gtue5#mnj0z*F*-VaJwQ4q8se0b>R6VeiNFORjjs2EH-zj*oW^|R zF`ll;pW-z>8OV{su#w==sj8(JM9wqERPF(b?I4{w&n>b!hpc3bROu&Oan`3#W9!cqlnI;$tXTl1xcpl7dMhcx zu)~Mju17($Ct)P*hOM7qC{Xa@yL`IgSQsy}dJ{;NSh5M`lvt2Y-S`{M8t6DNN@%r4 z`fDHP_~OF2_kZB7&GuR+ako(BRo~O=_Z8m3c1L5?^cEhO;}5h=VYpk^oY_qzW+NJ_ zLHI8I4qMF);*Ozep!I>Tdjs_SA|cMS92!C_4#l3T6jp0lHF#ueSIDKCw9{(DiDg@RKOEZTih)72YV?f zYX>@Nn?q4sVpl1NW^(bQ^6+kk*%J4C%;f-9Hh1@zt|3e;Z8u_5C10juR`L<`zn8e%SVH?ut> zYS7cca7^;j%&p52&S2GOKq%8PCRpa*X^0|H5P`-FJ4dQ?Cf53KhsHF>oSH^gkm=h* z#xB%CV*46GLLjcMEqvV#lM#+fbYyK(7-4a;fY74hh#xs>ng>XK`Qq7)<8zJe-m!2( zG`4%I$;jsxt(Ej~JEkcD*&abI&)%MQlWtTSn`LIxFQ{R>ew(f+OBe1* zstjd_cJ88d>wzBUJU;UYuYGw=-DN9NJ+OU=y@9n|44tgc+O)bF9>=~7=ef5_WaY~; zZ&Dog;I_xH+Z!6E4$y1D=W0^GxHy&)FcG2bxHU3JEtvKh;-G0Z8xM?7+Tmk!4ypEg z_4+0wE)kmHTSJ_O3$(Lc+w3P0UApRh_BpEF#$N7kBB6d+RWF;fQb8))nFgLF?n&LhXs80}Lzt2Q~wIM{<_MJz*+r4*NguKl$%BZC9Y9(0-~ zkMuIgj{J>eIn|E!R=$jSNW@0r497K=$yPikb|gHEwvCbgPMc)Ma9AN->lmW>_%3jI+U*;!X|bXa+|5 z2ye6XwmtD%$Yw`q_L`t$IkA>I%NSC)9ERq6t)VJw=-u9qfWC~V@ig;WwOjyQa~T;{WP198B|zvij-?(nq7M2SHjj3B!IN2X6xFvLO0!eKEpO4_fqzak*j^#dZ-qPbY-V>%WwYlg z<2cMNpE9;~#cH|q-%HCFRr^xM&{4)-?6P$Gnx^OcVZD_QLh@EcBrB0*hb>ewiw#5Z zY*Ubmf6-ysgndqj1o?QV2sN-ci71BoQS`Rv(jc{&?8API)$h+-4;=txSO*5B)^uYV zh=v;(HCVx|!Xl2dZIBR+H9~y5ypZvbqC=|OVNX+~BmYA|otR&?EzEWVknWP7|6dKt zmv8I{m))mV_;`oLE;geSJ5m2K<0lIQ5)1XVXIMsM?4Xmpe=9)OFOxPH+zPU(Pe>o* zhA*|b1$C@nFTWV|zUn{X8|}FL%h5i2y@5s<6Xq@yMr2&jbH2;{>puY|NEPGBxDobY zs_Vtg{}v>BQ}xz=w?6kDWq*_|aP9xT^xqiqe?9SkbK?KU)uEYKgm?UK4NT~9fAAD- z>f^=jXndoJ87OF}KSLh;yx9E-8di_3B?h_LloF#$u`hwx(EZ(nSKpdhxb0R-C&d-r z)l6O}TQ3EGa7b_GHm9v}mc>%G7ST=3Ybl1J{TnP4|4yK1?xB@4GjbjUqf%kq8^~ve}1)VF73Fia_fh)D)u4b)>8UKQ|7rH z2sHDZ$>KKG*}?cH)@wB;7BWK@8_OH|R`m!m0O%t2s%V1SX_sQ6>*eru=k(W42b%Qf zE8-bz^XU!St5z2(fw}J^OaQEQ$C{XLGL?*j1tMx-j7vRA<0I&n(vEr}DMuZ=Y2v*Y zSoi)?%xI2dkjalBgG_-4ar8F~0AeL87<>HzsNkr zoAg}_x{zv})^DfLDVfkdCfINv(LnC$Xv8zBivF{M*9xdA)R9ordb!i}r;L&$6Br5F z@~>+A$0s_AQi5tZXM2XgLx2Bf0JH7!eOzHt`NgDL0>Y*HLPSq~hDll|cQ)@X_hgJ) zZK?VLM=$%{Jlap@dEcAiX>iXxi(;|a_fjyLQn(SxMyVNoLz8&t=4P4X`_hUbilkqg7h4{+bJ628~?HXH?SH;j$C>F3(e@vKrqU%-c^GqstM2mB15^VI|& zD4noDrPTNhWC>BcZ=BIS5rdxo*m@Ju^6O;y={Y$|?Zxy4e6rQ*PD%f*A_o?A02-R& zGx6nKMTcR8*uNVe0{qS^TOOp?K@!;!W-Ie4?=mpD z`dWP;=ROscW}#aqKaj8HL+OFBTw1t!9s3opS4LrOS34R(epD5k3Hh}6crqwPlzbLE! z)^4^J7N1MHzZlu&a9$PdoLlM1D7A7Z*ZIT)1Wg5p9N>m)=(Ws%I|+RJ=;(N7jLPk` zsmi3W1XHObd!b2%}|0tp$Bi3h#Vhd#K`TI>@Q%b?>WJOk1E&`aQFU+r3h4>ZW+jVhyE z!^tn#`eQAA0=wdoU2C8m{%$_AF?F@-%hhG!PxnR+Y@&_{?mGX)T4bL;!3*Z^# z+vx)4;qPjIw%X4N7Q)RQ{e&g`#0W~LN0_nb=Q!`D1?(1CX z4$AfRLWiFTkD}#meSoHI=nt*e6171OlK5}=e+)Xbd-E^aX{hL&WVBlgx=s8`-T3&` zZ`X**^+GhGrOs!<#qfDdGPj@u#z#--5hx4al?djPwFw~rhgsk9#lkK}Cy37{ogg*e zY4I3S)(>VV$DY+)k?9FL=yxLe&~pWqJ5wDkvO%W7+O!v`J3QcK?JZCQ_3#Bl(r+UO zW4u^(c0M+#OTUp6q^{B97JmRH0qA=l!VO6RBS6UE%)^Lux& zWN&aI$g@kdpV1ia8oQ@Nk&amY&Z{!Ej>{qbO1dl8vhD_5vC@rnfGJhqw9$Wm$QG0R z?os-~h}1|hWjU9IEf1=4^!|qD5Cm-L-u%&tH_5A_ucK35EBzv z@x$k&!mP@r>k{P}!(=dnb5->jlw$Qqm@|X)^2bo%aR@Q0wR9jNk zlI&*zbfH_P87(>~Spu;d58X-+I%i**j2t4?(GP1Ylztp%cH%+X)&z;)9fEcTKA`-J z#`c72N5@+Xi|A9T+QmX(uEo>2nkrcz(Hi<8Q998nrtspfF-f)9$fA_71fhC))kPk> zUTSavh$#+RkaL6tn#}Gh^Ap{Fjcjw|1bpCVOGb={eN}62-_PEkHroCHpfcuP{ib$m zRGaF^h@Os2{*?$;0pn4ET@J@V@g6|8G(QgwSzN%p5m^rxmEHL8S-k#A6!gP%{&zO$ zpv3KuI`mU;*LkxJ>&VkNd!^`PS)Ne*&-6Z;aR+}S6s@AF{flBusAmO|gakyylo2LIJYYUPpQws`j4%f4>9&s> zECu1YpwhVFIjlTUB2KouSXVFBhGzL3_n}x@wdMCQ7vlkoZM{u^dB&SR7L87btntr=u_*X^ zJXl|}Z8*hCJKq@!pp5-*R9zaAGXF6jF!sL&4>x{%9%@q4X?;v_DuJcsDHxq(TfCp1 zV&=c}n&LXhW1NeY4dJ|8@m&zX1)5mDlQ<1QiYlu>S7hcYi)Dh&oh{q&9c-!9sTNY# zn#}4-rXRLCo~2Oj5$lHj=`=|GWaZEXjJg5xWOVuN58#z=`Bt@d731|`6Df*I%zW~0 zBZ_sD%6U*e`j3rFj7%>7ZkwBQu@F_v=yJ2sJ{x3`R4+HX58O(GM+SrB9KM5l{f0W< zfvF1o%W_0mj1R3QppCoO!W9lD%d!Lwn^JoCBBm=niv5+W+9E1+$;pNOY4wv%d~5x9 zRlDo~FhRfvCtLw22=wGzmD@ERAclTb9f27l+*J#;&*F}Zy}ut*mcYu^c&_>b^n%u3Jo;LHK;=)d&H@F(L9^hsL0-W{VHkwlt%KlMOosH48xYcOLzvawAaZY}-1+v@N3AqRK|6VpbR%^thRJP%(@{=)C4coyz3NA*` z*5<`#M&bz3eOl-z4(i$?>GvFkkNbIC6CEheWAI;)JCBL=$6B|FajNjDa-br-n@q0s zT@*_)DdTu7b~n8Eeqg-Dz0)G_^rftgzTXMV*pBi9#3Q`@gO(bo+R@(jncWbTw}gto z&$XK^Ce%vnv<>e2?_1XM=}2{b&_Z`LurmtKksy@kIb%XF$KqEPrQ%Qf%u_<0dfuOM zZoewwkE9qsnfJ$he3(;5M(1K2myOXPUQ=&K5zrAjshBDeV(e$4M=;YapNFm3K z&t8M%UpvXghvBX0AKr=rP2K?BWL>^d+&>M2>&ds7B=8BqBAQ=x`g#n!mYqBveHND} z3yz(~Q7-H^hP@LN#Cq@3vK%8GyPG$ad?IO;>|b>q^{z0$QM zRStnfJ5^eKdLm0eRGyeB0$Cgpr1NRx?e~c(g(S6hJ}H(By5w(BUN6!Um3SyVE=hG5FYbpdsNVI~pO5)C|K<%2@{1eM(^uBuf>`2} zg7)#U0I%5WlXwg$(r>>GZFN$FwB=Vt%>qq~ z$wOxTAgFS67g{Bv`tn~|LNklcO9_ZhYE)dpkLXBAQX^niyVrw*ZsaQWq>Ticj@JXG zNsVorvj@5R$KYSX%KDr~%R|cgAz+NPFvY%w-k#2OG}CBO>WxX}S1#YDm79NEJbUp^ zFpg##3EE8w*i$?Xu*9^a1Gg1#0`L*0Q^qfL=XL!$+@f&x2(y4daGQM&TH7_Q()a>romc2G`TU1eV@o`isInBtw)1c5WutVgL z7T>2&ujtjgw$lvsZpYH*ULi;Kur8SyD4+bgII78+S&kUzibw#`l69RoKi{FwMxa^~ zcwuIlNO)8ZWUR?EBQq)|UvB?HK7gvFU0cjNMM{!5W@I-nF-IAAnQ)=y266z37Yl|S zv+BCTdRXh6JEV@tQQRq&lbC)mIv$}@GYt9t&S;;!u?{lFw7Wc#eUZ0JLIqwE67{fn zPYbo`7bO2gNXt{h@*7cvbPt>MB%)wbN&U6+iq7pC+~wo-^3vlxOvX)Amp)22iYk(B z^5zH8z7*^8%b@MF_MulJZ&>e(b58m&HZj4z7wgaNPxQ%^Q{}UNqCVoMXBxBj*)H_8 z1kLtLpSIh&KD;$ex_3~#`2P@?F*#(L5z0QLl^mrX~-_EL^qc`InF~live#qQ>itqOx@0%?LQZts{ zAfmj@2Ojn&D@{jeS=JQ9Jc>W18ozfJpKaSii-jK+PGSlQu3_zxf<*g-$RXP^>aC?w zC|x!tb%$#lY1nhgl==76fpo`}N)sW$EvFS~BlgBbTXZqyr780200gZVKl0&oa?z^* z9<~2_$R+dmdFc^GjN$}(@AmCnAI4m!>%#2;6Y4c&9#Q{J8;eTsX15nPngQ;x5UV-| zq!9fIyQd89iCc@&=S~imTlin2%GF)A$w-b3G@zA;y`-MKssH%(*H^7Kl`V5$;UOi_ zM?aXu9;Z~>EG8s%;Q;T(wdhH%Rmv}o^3rZ}D&Px9yTd*WtF$ITM4&#Ncu{&ICf+qZxFMRX25DXy2zWga*&bS5Ba zvj92%+&)n+U=@EFV3_ul5f120&q0o0AEW2J`91$2HBV%xJ94Jl#nn6omay8ry=G-a zk8Z6r`T;03P<2Q!Zt7K$3hb_0O3B}3Y$`d8JhiWe>Y z)I+iOM(3XwYqT-NAQ7Mc=F}~w_}27z^LNJnjaW!X`kW#elYr4r6gCVyG_v)W-_IbX1TbO~|9HAmoeZouVmfJ5RK>FYQTchRHWiN~fsDwJ!)WKX zg=WzZN}BAB{|7ATZ{#pGRFxYsvY7WOW=L(CtmvIQXJn@m(2$3%2*bGPq?-~Kf!FOt+VZdb)_ghe^RxfQbC$V^!$elqW%Co8 z@^f;`tc`R8!Q@!k5~>7!e(n1gj1iT~^yPKC1)kze73A44Q)hQIlaO*6OjqJ+UJ7;X zwFY9x>aU#f%d;H+k_a~JO$%E)p~q5*$BvyRk<)0gsZ?ZiR_OiFjg63>3;6U-$W4-q z=`pwc=+IniIz6zb0@=?Kl+pI|d;qxLV^pg^O_f1LY;g9dz^BGtoJF=*uWs5v;Bs$4-?y74tqNBkjdrXjQ7Ii*$ zNR3X2SfyaZ@muyNwL`pecsYm#<#4?;d?i&S^+!1&<;P*jeec?MKQIoY0xEvWXXuk6 z<8Gk*rEWOY`Yqu2Xxvg%y0aj{1!~-L@yLoSEK_vHZ=Jy@^(P}%`+sb{mZN6O>sfH` z3}Tajm{cR)5Cc+6gKik83c0t%&68}8srypER#eBha;6GA3CwWuo>WR+8Hyk9%^Kl`Bw$MIGGE)a z+WO5PV}H-ZR|ajb(o(F~Uy2_~oj&Q*o9H9tm6GLrmhQ1@>SqkXpr$XLFWT=>XO@+~ z`-D|BH~5@7p<%Yu7R04AW=zJf@RX)Qr<*AdwcViHe|kniP@WDpfuQVZ1Hfvkw=%18 z(;zd$Z$<|V<~&&+at8!aX(l=INyc98D<;aRN<}BI;?l(j$9oUFRn$^HXZf`6yu-dt zc~8MdbvHkSRyUi3YSPp4tpBWoPr8}v*6{$mMg;R5*l~2ZwR(M6h};vo3iKQ2C^%d$ z7DVK3T~*f4-u~m)bL}8MEFMfd8KVC=^L8nU?^Xw&xj|TagTZ10c)uN?cEo8e|8sKj znJJrrr23Pxq{;rf6-o ziz54j3Js3gU9bcyp58rf`TDvWAZLM1sop@kR>ORW4gYEoj}s|}*f=Zsfl2w~l#snk zjDfi+7`W?<=l|M+PP@|kZ*@!$yo^|((8uALqILq!wc1X_pgkA zi@4b?iRlKxzN?u%wi3ej!o_lRoel!2Dz^_H10s@c7@+zYXyqVY@0D>vp_TbO{1h4E zoa6(QY10p@v?MQTO?TD-7{;0OXqrj|-H(-_1!F+8;xy|{eswVR`Z?~09IFW5-lGjZ z^0R%rEq6Y9quVI_?=_p9{_DLLIm0tdEzqR4oLVXO%DODW+ocQXQvj;f9dw$f-riRP z{OZu92GRl5FLzD7_b-eNygy_7f-Y~{BPm#T?`fY|?EC%=UDqeg>&6hEn9Rrg7W8A> z>=;wK1Lihjwdy32H}dlIyhAdWcWWG>h#}jHxb}>BI-daOk3dV{)u+7A+S z20++}j#M24FmcLi_{_0-IpR_DUTQ046ascPc#$glpJ1tElxXJih4q78!E4!7?}e>1 zlUN?6=1zX1UC~FXYre>Qwfvm!T^bWNa4AdM4cC&D$ad{1Fj-88ZlCNSUF*rct-HJ%*|Wf)^gaVfEByh?}%R?H|~P4 z>3>;FK~BJ4WW3Xs>&y~zgjzd|oYfjJ^XFM8qiuUCHseQgreg1*xwD5gE*Z?+N_&Hl zGuF2L(B)Kqx3l?0`uVsR5x>{s1Y^l#shL5!FIRrrAizwnt#DSYUOs$)EL<8cLjY2G z^h>NB5E)PSijf_>pN=o7WWe{Xb7;*iY43&o#-_Wc{6ovbZA+)mrjl#B0(Om@oxSj> zw>LJDE7?`(qHWJa3cRx^!|{{ltJEyj$A}>?!_4Exu{`@M+s@X@N{HE$V6CWkn*v#G z_KT7rEhBgA`xCY*jP*r7uO%P|QzeyF@Nt)YR9D%hY!Eiqy&aOF5uQ{_n0wo;4k|KjP6lY5jVLtKmMMa@z!n_>~`; zN)c8KlL6YY7{6ly*v$N+!j5s%@msD-n9S=jq0FyhMmwPc$r&%HEQE8ZR5z-+QQW(y zZ9wSXOG&YO#!)Xiuf6XR)fYqu(2gF8mo6%NDM7+3NOq42HZg648j_IroB~bRD5*77 zf8BE4NPcyq8f>8N{kLA4BL^n?$T5+(l-EDSy<7bZC9D9DbeE^Yon2!Z9w`__nNUy9 z#hK1r0sy?&X^2O=wWco2DU951eXK~Z{z7hn zM!noC$wVa8U@XWP!JU(CK?5o2@8E^U=~Pkri$pMYhb%rfxR;r6rb5(c{M_rj@8FY~ zmT>Qw2L1Yt+kq-~-Q!PLwd@j3s=G8a`G&RY4Nd7S4Vtkgl^PtW17>q|asxUr zP0_Osb_+aJ3Kp>&WI__yJ|;U(H*k~1)_B-?xFP%!cxdg`9aNO_eCZ9SVCd9+Fq9Uy zdh{4|HCpucp8Nz|A>XJvEt!6^G(-~aFX9I8oAqUO54!(OK<%N6%9%NP;&Ja%pxq@19Vc4BCmZxTK4-o*C`yIOz4Z}1yb4)mkodoaVtQt?HfmpW`a*qNOO1sm~6sIJ2q zb?~wm!r*a<(-^&fnVhjx^Kf7S@?PMLORiF-cijeCus>M;^7Ji%Cxbr<9`)e2u)f=m z`C$sD>Q8w@&pos)4;ZtBO1?&;c6>Zy7WnRr_Q;zoxcjx4BktG0Xj(b#T@WydDNgNj zEB@4|RjxiVB4g{}`NcyuB3?ij=6`YRYy<%y+mRwXvd5r&giYo>&PdYXm1$q*-XIed zy{#7Ip+QG@QyP&^$D#M>(JnWYXDNS3ATjPMXB{sYlvY|EpES z-&fh}g$f?J@%gJloec9@uVkNAttyzs+`r$>S8SSq!bSX(kauCdcNnG$PG#O&>C8rJ zE2Udt7mc3tiA&xh-2l@}-V4=MuzAz`%bdlg=n}gd3rcq!57fa0H#8cJiv8Mo@S>}cctzeq(m}7Iw$U+efVxY+@*c1yrmliL z6x$>F-!Sk0h}ZO5IASfJW$f@&v#>;Rq{!#IrL*AE*tTMgZMRuH3WwkbWC8zWv2P%& ze$N(q0}?P)>%)px7dUJXLkTZv__IRgeH++Bid?i-s#8CB^Rdw=fo3fW!rTb$Iv}h4 z{?fC5 zyyoNYq=Dltt!_KC`_40PBH*H%-}XJ-xKNRLxsQQ2COb34;SIwqr{+L)LnFJLYZRTE zw_so-5L%v_ci^m5(;vNofVuu>w^>Pt*}y}a3|G_cG)0^MT>XR;iwZZhW17mo6wKR! zs{Zk(yJtL<%!umfwLMQkB|q921DM=byZOmyh@{*!c4k5a=wY@!~_% z%C;NSbV)BV)7t4R%og^kK}zxd6|dXsZ|7R${Y>(mtyR1G;m3V-;d8q@$yLdk<`G_) z)C&Zi@{`hPpt;SuccH$OYxv#Ctvw(9J6TMLfZ;r);1*f>`#@{EyKxtQ@{v;1S>SXE z&YQnFQanADvM03``X7w^*APml-LC~!wZ~qn3M?`V6sCgFUFCeXVU2=k#vb{M^KJ>% zU~uw#@bRZtuHnp)miZ%Oou_?k@DD|OPUy>gs7MQ8PbQ>fK zK=kvX9Nu_XLSITb>=v=xtz`1@;}#%m=Uopvig$=+k>1OIfJpTmLd+-HKKa9yDSybCxw{qPsqjUpeLjW~rO=HKl~FHq z3cIIlmL0}o@rJp$a}B#eEw{Zk54()LSZ~)X@IpLIHN|Fp+Fe$qup~F{e_snwu;p`owy68K_C|IhPS*Pi2 zdGHEdHcA!9CI`Vc_#f4LXgQ!1`?suTRrU2NyfpuRoggu6p(0XLZKqt3ajtLy$U~{q zFS|_q^N$?-LQbYP)OwSN-(3S7CIE7LnM zN$x8Rmjb*hZnr~FM#09MlEE@K5wF46*Wz5g;}kOEHqgMVZ=&FQB8+c!`; zyYG4oHP}*AN`f{i8&^K_GaxgaOBbGUkjsIySUm3wZ3sP1f9M2+DI9~ZLczzQ_IzC5 z4)p<<4knKOF27zO*^#sL2c{x59zPN7HEesOa$W^MoH>{R&MEOdGu6b&GZWD1Y8EqZ zrhsPkXO6QWFq@QQz1))FeTJ&%A*!4)d+iJRic(qQW(cp|y@O}eP47Xs{l(Oriz=(sn>flG@ z3F`Qf;zpd#8+BJ`Cz4#APmW1WP;^qKwRH~J_QVx6YW@7B-1_(lI0?y$98(OC~!qpIqAUm!34$_^IxTKM50 zIdhi2CatP{s#fcc5wo;oXIDpOe!0Rk9q4p*(L#&*#H0qXGma-Z#Vth@l=E`P3t zcGC;kdt!@T+5F||En#7AQPO5XsblHrjWCY?j|-x0d-B^YX65D*?`DvZym?g0uCrXO z%`7HE(Ydf%7R}Q7Q++P~no@rF3D3^j zBxLjb{A;m&mVbAx{;MFSLoe7X63W-YibEHP=S`H}z7uG+XqQ5RE*)yV1fHx~Ux1!N zZyr-IE*KLcibb4^i93Y;$xAz5F@=nRG>RF~wv~0j-UuG1dc94(#>IPVh($M5zvQ3Y z;1a82-V;p?nQ5u5xU?g=CF4Fx)SS_D7W9J|E|!O)OV74-XBB1?mQs&qX+Ml;(THuM znU)^T8+2F#JL*8T3>m!`bQz+%9RL6)rp^0iRQlope1@ab5t2t}x~E8LQDfScbX*D0 z5hT50#FC4uM^9wqgcO~Ds+bD!zv+tC(d+&mraxZ3Kc04ib{2>(ko^`DwV$23%=Ej! z*6qR9&Oag_v`nWsl|^Q_)wtXXH1XB*WMnE5b{24S!gb(c5X4IFnIZpTbkml3pveZG zruHcVliuPPuo zHd4@k$<^;Ed+(s`c1f8XXX>&ZPkV?s?%-_-4}yPx!5>sJpYnV0W!Go>gSg2XabHKW zskW^Yk7xwB#V_FS+?;*T>pbPSueG!B<&1*QX@UR`V+0Smze0%!w`_a(3MrMtI*jw@O+=8^9Yc3F78888BRh06bl0;-alt=RdD$Pz=c z++2RlnYqNSdq$zmH|Wkx)2X8_nRHX?K%OS#dQ`7N7@P^fNUn!=(>FO?(|G%QtiPTQ z5ZFJc zs=fxUQ23i3)cmhI9@NwIa`#FZDF+pYY0z*7UK{%UhiYX3S{u#l2Wm>UELl%)C)qqd zK@=D9asm`8Ww)6ZK5wo2d;FoV%ElIb!vQt>@$c8<@o z?q-~`cmedstA@uEoyF9dlh<7zQqNB8UVcNrpBF$`{`L?PJDKbyI z0ecwbJmJ#bKnB=TrgVr{UdzCnQm}i+yp|}k058+=K`gG)z_ zT|kOTdePcrQ_@?e-Sy+9-5y#8>lT6GD9_ z9N;3MMwM`d!eTomTyzL(K*mvnpPVGWB03A_wS0DhzGk_%#7MtZ=&ly5*UrrY1@OtM zlV-{jTcltODv)k_+-t(-yjP8jZPJ(1zr%&srN~d4B=EJ~C2f=7*p%DAd8qA~v2D`^O2L!6x~rA6mMx0^v3~oo zhJ57{ID$N+&MNlI=>|uebdCgjd4olW=X8TFVKf2w6i--}^|2feeR<)MffbzRj>2Cp zwc*Y=o^3-TUi9)hGx1eKk3;eFbu%M7g3Qf-@TTTng8Qm0;F4|Zr+#pCxFTZGUpUhW z*>IBJijQjxrcP0#46XX_je?e?bT=*aXln^C9Jd2aOLb~^GLg*FRI5JXWw7@^bAZ8W zT;PVas-S1P4L>mxXgd#(<797%NL!Wrf+e-?cvr`R;#X%b>G^OlS?r!MdQf54erSn`l`&FlQr^fOw-QhyzQh;ni7Tuf0dS3DUw2rrDP9H3^Pnr zmZ@wZOAKO4c4o#lnY3pg*<~%tZlr7@lrWQJ23fOah8cS?$&%`K&FlR=zt1^Nr$0KU zr|Wq=ug7+~->(>)pYa#DXJeDCmD#gaDz&zGx@BLkC5hLv{iicv7-%rW1if}7vb^^v z8xnWaX~ui+v}>m~x?J*#a9qZD}@rV@J`yeMIEo>rcl_ zwx{$f9Ut_OVn{VyGb`A!rrkOqo$-*<1=-vKUSm>Z2`Vapu{qQi{3a8Ms(KOV1$atcNj$ykdvhd6--qxbdQc z-2NW}x0heN5FBH0@PEIPW&SowFpk;>>H8fQR)>+R@9(fEzLe$HzZi@4249PC5a;qh zCAY1EgcReayueg-N!$P9{lsg@wnR_ng^{a-od({oEE*wo<)x9U?za)w>HAr!07)Kn zwK3RHk#YG>hmDA|qbkdzqNZ&nF$Rb{y5EiPUefgyxdF`(Br3#2i@@!5D(Xq(t%DXi z@aBI9Xv-@%x!VJvK(>irjOJ4JYsMEEx$aUq#_P5j#_T!yEXLi~>mKMidV&6-be#6# zkr%Q1a_pONYY})_i7B1!hUBR=0a@)_g zj30jVtDT3Or2I4L_&6Aze!AjWa(~S15ADC9J{?n6t=>3kqx_vLc#7B`* zNg|iBNFqNX!QVh9qw4cWIozCAj+aHr*00yO#AFC#s-k8u~t9Gpn=_4%)iW zL(>J6e9DTBsQhAbfCgerb>+zn-MCgOtST=1zg1~Pt}?WbaSEQOV7#dYj;bTf650TQ zsT1tcDcOlM@=-l8RBptMwqF`Z-sG(b_-7;~@BzmTm|?nG=5L&`m2r=-5=B-f(oqMq zBab&JVO?Xbteus#yGONNQK%)_(vNN)-L5y`>B;s+^Y$r*H*7iAaBG9_uIT}eyrJ$~ z@9npz2rd11;lbVjKonYzBJs8M2!PGS7YyH~4j?e`Al7038)6G(-a-pGTDKpqq?|E7 zNFc77p=b*9P4F-eapw4BC_dR<2-TYZgo+KF4+V3Ck%H(>o3@z}CI~TKc;mDFzufN& zc@Y*}-{uZ>f78rkLO(W8OHHD2c6mY|kBT6#p}5YpyIZ>#Jby$c2&0)p>5Don+7e= zeD@|L|Cx=uKME&nPj$cli|7;_=Sl<04x!$V3=Cy%jH|j@ex$ejdZfQ7gizHM8Tr&1 zA59AWe5<$jbMHsAu-WdNyb@0D$p4kFppaFOy{9^OLT7}e+S@;}^ogjM)Ng*jU_Yl+ z*-tB-%Wais5hH8dUPtkcIo?kaPOVv3dbZ4gqHp>|?l`F%2a9zMX`Ez$slnqk^S&`c zog+^A{ooc~c%9<25VMOG(TvGf3pgfE1sfaj1)+5#dGJL$z!H6mxvFc=j<{49t-H5BT?{f>Ds6E zKPbV^8#DAZyXY5o>026nQKd+8BED_f=>-t}tnqroj`!0n!2^wj{w}PDIqV0SP23NCPe_Dr%}iuIo*-b|CXvfy>upr1Y5ju=2b zch1ojiPeeSK3(7|Su=2=`S-}fCZ%dV8`WjOWX_0Yu-TRHjg8~PKPjC5pt+q*L;!j+ z`@y_Q>neewEk44CZx;w0VI;K9c^p%T^<4RwE+TDO>1xR9Y#MB9F~(t}LEWW-hr=t8 z@aoU0w+`5lyRs`XQEbH(d7AZTG6Ye;hE{7o2@L8R#w3srJEERpNT58tiZw(Ioe9C& zVA;MUbwsCu6Ch9RMOUh35S|4m7i-?_z9eo5B+ zF)Gekw}~0l9%*rR?YDGm7FOvM0!;_8Ttmlqmr$G+Ut}xtcp}T^bt)L!_U`wK02z4- z^lF(?CWW5MVt&L4??%C_CdUh$IQHAR?c=iK{=sUDq`1q zEE6^)z=Y(JT45+{3nwARQ3-2Dva%h!qwWUTD~IzrDW70UXJHOx>;AOYWIVK*)SRb& zf>&c!?w7{q=fhqKR;naAAfl7HOaA_afO?p)&KtC6?XCC%L~sFXYZYfF{r2HybwHF#d4sqB!2n}A;u^q>us{3VSPTKOh;YS1xJ7~&a zok7nWXidA(tA|XUA0PUdS}y>}DS2hiiy_ zv)JxJKYA`>!`~-XR52?K8sC>K`a@n z`c%IJ`*^)8U2tFRN~;7Xy70!MEEQ}$UBG+#sIEKGE0huA;a#|^qVk$e4ELcXXzXy~ z%jOi9e~tsu>sD>}$m+xOZAH*CESxd{BZ;sv)v5a2l$!N_?!Jz1|3%H2^(egjUkDco zlv@cDGnWv{wc+LdN7Fiwe3P_5#SHpAOt0zidy*yc%KG_D@<@QF>!OI5KX0y$@#?Z+ zU$m2T_sI$AOUF5MmHIwEvFXSTQn7wGCON{(Af8|?~?pLg8^r+Uuf{9o&dYf=m9Rr>6a#GGMcxz zoX%v|u$BF%0vfvo-wuT@^Py(WvWjNsn{-WnTnlEX(k@W?H?3N$t?K(5rWPU@o5KRa zUN4xq<75n*6~{qPGlDp~+!ows?Po+he&L&m{K7p}D#*RQSqhat&F;sfp(o9?Ph}m$ z3tVcLVwsdtll~!G&~d;$MBbG&LFHgNw0l3(s|{}Mzy+YgXD@GGcgKDdoa5(S1FM$G zh_?g+ibF1EfKMy;9GInjjiMl&vRyK+$ur)sEnz zV;wkQ_xj?GYljOv(OD7DI77QRNQ*{V;5n=6O1%J7>5^)Fi1wQ?W*R)LJy1HG`RW*)J9^UF0>R z(7JqaDe;DY6exuO*w_7jO9^S*rx^hh9TZkaf(N;#ei0h z#OM1Zw##F!brkKBPS@;U1(|6jBDqHNm9umhGegwQdNGu(!V$m1HF5~D%%S*SbSD*4363D#(F)lgV;S4>#znfBd>h?MO`!r zaZws~fO7g+%u!K=Q>Me17-^=a)5GF$o=NG@BJejUqHmz_@TScgB<)0 zSM~n@7{DcUUe09f?1zdmw6nth_;@-m-*?=&4eo2B`cFqf%!5;6?sS+N$EdZqSe0Dw z7j9pHe&(o6BF!kS6ij!B&9z%nyL!b8iv4*MW~nuXlZQ)5ho(@b!(bRA2nyzJOOKI` z9omk4v3guoN~h#;BsTnCoA4`2a}9epFHC@B%3a#|gc<%9HpQr&0-Aqu?pJSkA^~d*H*SU(D#8jP*Co3AEY#Ggb0fA z;Sr_bQ}?+Z4_kvjL7lYtW#z^2J?+Eadd*p35!*TL=!8;ADn$p^1wS!S>YF33tY09m z67O|BFVZ{Va0ty1C|fz|xm_5TnFgTr*gqdV<~`S}hk_BRg>o%GSiGrSB1vyPGc3QC zPJ?LDU|MYRH?|mTb(<6?tH^Dv(t~8uf5yTWJHVP93j$nJxkPElz^8=DH#rcwiDalZ zSUDj_RQ+Wi$vA`uiSO^qwtrD+qgWEAde?q0&?@xke=4=l8Rk&maqAUT&<&D;>W|oX z(Ks#m{Z8j9m6x0^PMH8gRz>QEUwaPz;qb|NZD9wrRtx~QC4IYKFAhFd4G`dU3_V__ zmCYgjTZ7wV2DLMAV$FVfGq9TBj4Yw#>g zW@P{QIFQ9!Jq&GPZ;fcHCoI^Ea(z$XnqTA_NV}OU#T*rp2ksF-;H>SuR13TvW*=X| zJ7U-3a=Y>#d2h+zy%(>vE}`kBGg7R!^%RVEj`ya_GWNk$5x(&y2jlCYO8yQTIW-Pc zlYVCO@XEEpGX_39_0uaoPd-&u!Lp?*i_!)xFWmB^y`gu}m*ZCP`R;IFA zH~e#w3bQeTwC$hZcUU$1Z{v@PKg^Cj+;~wV-LR&PlP@el{rN{F{P|=ZFGD@j)cHlT zRxsBE*p~EBDmIQCzPs5^p-q3RkY*2m$;0PFk&F%(nn-e{SnT{Jz-MOUhjmHWv}n+t zszGz0#dYW!dpwzTviD{Tj271-;vEsxeZTxrEK)L<)bM?*D$B)1l>giX#}}Gz7qk5A z)4LsGu{%fhS&foROi_+6a?(ku#Dn*SIpo3`Le4|dNxe?&adPFVu-kdu+!ouz)iv>b z55@nQ-t3=sm+-GSxiUaXDB&V*hIf2AepqeUnU(zj)Hj7w+)7b1{S#IP=jz5lpbh)OVCF%>~fNwgcz#-1gNn5{60@bR3YYa?6(v+FU z@$bJCi5)*b58gRK;K)yQUfxGs`^KrrFU4^gC`VmQuZxpO-(dqow`bq32FH=mXBG72 zCmHAc8+dXdS?70|?4Muba;t!tdR61(t?-(cM2j&M`6!S}LLvg5jn~gs1y(sVxgu{U z%xE~$5uii(9IdPt(HFnsZ8$pQw@inUNCQd!m1jb7c(fnyFmCM#O(M)wGfT+q%6{!v zO~p(&X1oVMEe^Gr!XW z>;L>YlEGenl4jV4CX&N3RD{>d(9C}Eo|rG0hZWw%dDha2XpMD>BV z@qql2aSJty^HZMi2>{Hvm(Rv2uV)boK!H>mjpd+tL8B%WdKDIA>l7a;X{Ug51Faex z-XE4($P?yG?S$fdFr_U|G7P^P1api0VkXW?^3XNC!j2-#7}sjc!&N0!$0xGPidPyI zyj8kCVuF*~_K7d&?c!aQP6I$76a`-g-4C9Shd-_bR!!vrd=WrmdCjRFu%^Ac9l$`XmDe&Ztx!Fo zm$2~aA<>_F2E~P>5I~&s>Nf#%3iB8fd^r=>ZO4&@RoS&feA2KDSDe2cmr~&tn)ug= zwE5I-GO^URt>YJe#oZI<`^Fl-pYh1xC-Dn+N!wP8JJV# z2f8OIPV4K_^t^Gr{9RQ)pxXlAFYg3h1kCWRl�Pp}5+YNQb+TjqFl{ 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 Y)XoP{U$7dWZvbCfPxaNRRGx?aAL^i!g8%>k literal 0 HcmV?d00001 diff --git a/examples/custom_font/Cargo.toml b/examples/custom_font/Cargo.toml index 29868ea2..58adfbec 100644 --- a/examples/custom_font/Cargo.toml +++ b/examples/custom_font/Cargo.toml @@ -9,4 +9,6 @@ publish = false [dependencies] -eframe = { path = "../../crates/eframe" } +eframe = { path = "../../crates/eframe", features = [ + "__screenshot", # __screenshot is so we can dump a ascreenshot using EFRAME_SCREENSHOT_TO +] } diff --git a/examples/custom_font/README.md b/examples/custom_font/README.md index 20258b58..735098af 100644 --- a/examples/custom_font/README.md +++ b/examples/custom_font/README.md @@ -1,3 +1,7 @@ +Example of how to use custom fonts. + ```sh cargo run -p custom_font ``` + +![](screenshot.png) diff --git a/examples/custom_font/screenshot.png b/examples/custom_font/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..abf60ca15460246c5f0f5caa9420445cb7adeed0 GIT binary patch literal 5591 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 diff --git a/examples/custom_font_style/screenshot.png b/examples/custom_font_style/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..5ab1a298d33771d6ba65b9232f4554e0e1f84e40 GIT binary patch literal 60383 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%0DAc7`n2&kX^$d5r543^|@*8k`1j-3N z&zrz?=<$lm9X#*5GmaUh4B91E_#rBibM-wB>0{;0>ao{}6)kXbNSyS7ay>73eZ9@b zCm)UD$mnjo(9(v;tBk@}h+|3&Jr__cXdbT1DQRp)ui$K-1;2aHIF;V?B!pi_49r>t zE~|U4sapgh>5efUB}LHgN$gr)!o>?cqN_eY>IEoG#b_hGprD|WUr3A=ju|Za^`Q;{ zkDKZp`+dj-#~@Gpvv_yjKY|x?hTMN+Z1C5W2;@f`T!Ytyh>`8bU};jiWA|jM{u=}@ zWa)4zx!P6~y^L#HKkPeN*5H!dcL5_L7WVBt*-!$KIG~u$FVNOqZxhQ?s7^<-NCCI_1az;v2oBMFjf1a0E8{iL$6f_=Z8aW+oT6KtCc#B}^f*t!BjRwnS8EKFR zPDFSI&fdl5=8rA4hVYNh1k*#|G>BC=R=og49wEE^x2{D*G_?`OO56Zm$b=Ff_*ClZ zbS*)*#IvWXlR{XCOH!(+`!UEm$eFz@VxS=x3f!et~JvX%HtX`h! z@BeC!*{*cDUm%W6)@^;tY{&}lV0|@=Ym@I!&gwJbN1p*5U0@6Pz#=I+w#uu?fw}QU z>oaG(A+F8EdP(DcMLbqrk%(C9JnSWJ#${Y*RHQY>z7mB{ctE>$oUEBF7g2!rrjd

y~)UCZKZ92*$j$Tqwi}v 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%0A&*e=G)w2~5?x@UGN<8`w?d{R|L0N^I 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%0DUMN)SU=6ksrG88@xgQ>U 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 z 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

1n80mEK64;z%h-eH;vB(8e=pFn zGHo7k?Ng*GM+b;?#C7?Iv+eR?XoG!|ws#*kl-Z8-xf>N6ZTkj!)6up$Jju;p>x=Rx zxa9P)&9Uj zX;_o1xn$0^>7fYZI*_9aq^(d_E;zDA-`}sc=r?7oO0|>unfpz((LGVG7P@M3KXYVW z@;P07_FnPuZ6j}JhYpVV3#8vReAf|=jNCvW1sX-%tQc z)ULEYr*}SNsSO+KiQ)m!CDdA?qi++JUN#&3~xB%Zbh zC^=V8-8OytUM{tXrW_Y>+sTHyk(quJy7e_%;IrCFc>>)geZe>FvT+-EH953(I~G4s zoVMkk|CHN!B{fEC+-|txh9Ac_Z$S29k9_*E$}ZR{_bG@nbQll$8D3A zm>y9xd0guF$Y~R(%hUd#+BYNn6CC@HFH(k=xH-V*2>K(OaJI*`@Ii8DBudhB++G`< z3_GDVB-3~HYmXJnUA|1AKzy z>sR#iYf9C<@2Rsc*l$xOa*{IcVy$0Pkwb~aC7621|Bt{y``YdPWv+*n)o}xB9=j+# zBG>BL9w9zDL;sH`+%stB0{Ju=31?ilRpxC$U9`(diB9mV4%->V4sgV0erEgRFO^ul zJ}1-jOS8s-GVnzg=-4!O>0Q|1+drX=dXBGzFh6jS{!5=q@y*)nJikQ>{K#y9?eu77J|3YyXAH@;zdE z^F^SJm`GjZ>sHoB@=!jAFQ|)voycVWlxXeHrA)%gbhLb`oo=riTXN=8+5asWN|x8miENdU6W69{>|GinBLqyc7XaiOvi9frt+zdg~P$` z;tWR?2iaq8acNr$9tk)yDl1y`D9x1WmoRy*L8|EkWBm-fH6SYE3;}WA9BhWPZlp1wVGn% zzw3ScZQV$Csx=n~?K3BLkasn^@UF8#Y`Q$!&)Lg$bonnXc8)=;F4H*mW{*#Qib$RP zzIoFlu5>AaJmlr;JBb4v83T4$@yf08CVg$>vlcJ=x(P8pk7@7kKD707zKvYA=5Rg_ z)$?~8ovvqJe*F01?$-}p?92sRZAAWdLr(Iy4?cA=lgr&hH>u5Me)nG<@7^{bY>$nV zdEPF(`_evo+fZ{HU0u`C}Nx9a7XQ~herPk-ngPjy2b$Bkp^-P?DKP_KLu z$ms~jY}@Dz{kw!RI$(vnL^|ytc_<&zNVTcoN&a4J{F2`ow{FIoB-8dsYehDF#fy|z zWGwSZs($`~9<)c^f0Hw4ZBQSvBlC-&O_s|3zN5hoxwYxWuy%@A88>E)efzmh{_U@H z##=jl%x4v?LE6~llQSTL{ZoK8p}Ew@Tr(Cfbi5qLzG~wufAH|RcAK5-8PcRHR-;wj z59tb5Zf#bfQu309s}2>vI9_U6?be9AAg`Lv0D9=)i0w)TpV@0aG?#OH8;k#r2g&SA$oLOs-Gaw5wMZG3)To8|MR zb)ildFS*wYQ0IsexqGahHe&H&G=@Go)wVipZY1#r*pw>w`W+<=vGpF10hf~t_qF3g z<9p-e8tdm!8V^toGVV-$MO;UQC)2yjh)z5lIe#m& zi8EB)sncDJxi-3z9m?im+^74_2MsKnah-jf{N|x!YwC2yP9FOK)}u8?i{E}P)Ij@3 zC~s;e#_4KGTg7zD#@elAk*-mSIz}pI%6IvJ{VYzcH^$_|6E{an#jYNrY%j*MkAGto zt@@#uZ#q}_6sW@T>6o0hA`hG%dZ47AH{5W;kE503by&RCBIdidI9fk@IFx?byL5}l zd$HRmbC`oSU}Q9iksaVJ5S^HikJ9(??Flj6eY#vj{s|TUb&+;9U-nL>$p|c-6`pcK zRTv#8_YP+ti?Ap6BF>?s(3H}26k>*A;o+Wwd7U@IU zbo-yG`MStlylANQous{Js@=8*73xb}tbHc|uK6FJjKEyk(C!=mnZI_#XeV}pDYAa2 z``Ag#$%>q3Ek@lZN9zj@OUhSPe%6sZ~=fL?a#$g$Ha%vzg6ynt-gLp_t=;` zetFxx?S`Z_-raXo-o>YUj6ow&*@^8;&WX$mC?rJbl*2F^^C5QEoP81}kT#nm`Ru+{J!K59osQ7v*qU=~ z^J$+}r{~i7wEx;SZqCfv`}oqS+!*yD>hFDHSBNQ_5B{ELj+UYYT~| zPaET(&R2G}4d;vW4X1+(o{fFv1C+(x9Bmng%{R2cjs{X}{<+YV6FpK70j{1;W-E;S z3CT(ga|2NRz2=?YradlXe3z|Pd5(-==PCqYWw04>bl^ z$L^wfEoRAGu)@d@;4V(JB+rTi`k@SBCJwg{)01(~9~Ur+XPtO$)<{*3XLBMUR+u+p ztLaV@W0_4T{=<-dQ4%rEWW_Nza9b;{d*T3|qQ|EC1G1;*-ayL`_Hx=#~92-ZtF>Pd{KL^I- z>!>d?0r=@1j_4LyI~*(G@G&PErfA7a-#n;}K5k+k#LVwTD#1ljW8J=+@oD_FtPXnn z_%HE%%dKLxY;xHleVQ<03iA=47haC|=ezgm^GlvrZbg|~eX?u+mq{1A>Bhp|{_VA5 zlA0UYOSH|&C-&(>H#hO#r`(HRzVc1hW(tLZr>y@;iTPv#oNnSoxg_M%g`IMi-sMu< z?sZ46K5mW}6Mexq!Jbe4rU2-VBwvtYyDY3&hz@WBw$=*eJ+@y%A;OASqn>O$5Z&fzV~-6TyE31-*RviBStxYX2n9 zx{{ucT99ebE-T9NdEys$v5dFov_N*j*2RVe(_%qC{wD&wckQ+C zw6JLxf%@dN5aSlVl`r7v8hSv#eGz&07bT6}$MJ}Y)Z7G>K36BX1%M}Jn9MgoBN;By^G8>b#fiwZd1~MC)w|t-~RT=e*X2>U+;eV z?bn(Ae*V+f`aX4Iarf!h`mugR%WSBX;p@BD-I>IGtBKEVKh#$3)la*m?DOpgr9OCK zUV!ZBx=VZLMrr10^&LC5UP-LG%e9`q(^R-^Yy`IS%uRyL0u4kY34E{}OxmY8~)Z5Bf$YWuw+U+C+~d z`||DMFH_$I)9}U^*G!e;&5jqwNNyP$PyJ|rb)3ybW92oE>r3mP@xGsOF_MLu`Q04Q zx6##S{)3KZs5|A+KCXfr0RJ<_4{I1dec+`|){ceKKAXJLMV~9X!Syv6paXt+5V%MA zl;0rrv{^f!P{-SS<%yHCegS!djKtR;@i*uY;Kri&g%7a3MlXS0yKNc)%=QwwL~X*@ zBgY5OlfQH^4stiPsR!)p;DDp$m)vWEA8gLPv1NRu_*0BX9kkK%*F0)|q}zI&uX>0~ zhpZ!Ra7RuLxSCCy@&6j}+qBD@gJYx-o3iyT7DQg8Y~5*l_xRQ);_KM*wJYo9d<&s9 z%qP3nvbU|L1?XrSn5Qh{<0l}SoXBtlp6Ys{F$eI8;K(f)IP!6>g%0_yy&DEMAj%Itomu5|fnnin zGbbB$uPNg!OrQ-=pN#e*xN{|=RkzwFKHwY6q4)B^T|mvnNQ;__)VWYO(4gyBPqaKq z{Pg)lG13i*U;cHY)p3gY<-}9?`juWEb9RBeq22jfNNnUFA2?nB(73>ug*Qw&yQfsf zP#t9amdA?6cEsF(d})g0G>dsqZ)3|YY{qG@bjo7xu`n0JXqt?^_sHx$^UI^p64ve* zoAL0U>`uMK7@Ke6)2IOrg zS)WqmnXZ#e)ty{%CrwzJ?o{LGfU*lkSAeQswe9#^!jX=n|vJ{-r0(dFGd#vXqKnAF`SMA3wB@lYJ6` zT&&|&j`HMh)9AQqr~^@B61U&2CH9evpZPy5jg{lVF>T#2x6NJahWYXM_^#?pHf|Fq zY7$P1l9ZeAq_3%g^&nHEAJZd+=4m;XFTFL8W$cZMI5||eHL*3)exEq$>ge+8_35Mi zrd!(0ZjN-^`1^@maxIo|OsM9?jIa$oquu1U+dzmjjf}OzvbT; z1RT*%R{+5+4D#r8bq;+Pz?6+Tw#ZRf34@2 zZ_bMPzS~^q=#;@H;gIWK+G{jm8|r zadL-k2X;$AI^1I5Se%3QfDYGX3oaI5mvM`jiw27>`=+;#Z@VyT(dz_kp=u2rA5Z;p zi{jLu#h_q8d0s7GUh|aWfSsFsci!4Mg8mxf@7~Cv%o+!tBlR<2+ER{}WboaK> zDsPw*8}vTCnLiS2{?uX)_syqnHs1Zxy-7D5Z-2Ubc$@tAFVUKF#!g+a$e`^~eA=IG zypc~n-oJMf@@qF9zux`pzy9mp|M@@v>+Zw*e{>Q0kM`$7C*9x5)gSJP(lJy?Ff-u( zOP_?aukC+)e$MyH+q=gGp%iM%99j8n+GQtH9MOTCj&Q^N64XI3bsMK6_Sj!Sn{0^( z@I_^t$LZ6Wic43mnj!iTfrd`kgZA~K9NQ;n-xPNK>>Hm>wf~|Fvv2%@on!q?b=a*9 z_7fY9w(R1?g_2L1<^rl$%~sxXyZ*FwW9T>#cP{Wsa`fed6nurwcuzS6=3zptV*9c> z=0%(Im3{55j?N#==V#vd+c|$+@1K79L?!2{($(L}A0wZpG&1>!TsytM@i8|^-Ke;D z^FU_C>SULf@*1k@mn$xZG*R37*ft;IwB|58wuaQ3lYK#5^TIkc;~(k6jO$6pf$!kN z<$_?wwIiZyzSx4+;~)eJL_e~ROhhqO&%1>k1RMQ^w#;yO|pHQH1s8Z zbJ#H^?!5BxX~aH9rzzG5_3Kn`x-g0p2=vX{a^|NW##&|l$dFF|5>L=~sOfI_TdCru zQhg0Bm{V@@Gu5TWqdx2BjBIh)$CxZ-{U8tBaKjBhjMGZ;bvR*p%Ij+jDnw)KLfYfh>Y99*_%*&5;u>dsT-ovWSY+LQz{AyNp-rb+&CR zTMJRS$`2iJT?XmXZ#vd}NLKC<^^66bF?x9Df+Lyk{=SRNo;teW;OZhlo{dOl3jL`# zSmP#7K4b)R=t~!>4eH2%i{s>y*uvUa*;LP0Jb=#{vs#T?WYb2MapZzknistLslnf% zS|JxI7r8p;ToG(O$giG`ZstlRvR@SPUEIgUY3cQE#gGpoUqU~O*&?ysRN*cr!AZvr zhp+C`QvCkzr=NbRFaOfbZ8sk8I-&NI+=<3KGv~x~(M4yDRjrd`^S=wforC>p{^M>! z{_&50-2LO<|9SU6{-6Kv-M{>=|Igh&|LuR@{rkWF@3|5A?bm-B?xIu{9XZoiCuzf9 zb8|B6yx)aZb0)oCN@DZ%1HTHU|A3$AT-JXa9r59}mG2ST2j5idliNV~)XyV!-=Dw_ z(z7U0)w2kXvZV^OQwQ~l4!PO%bu%*L(O5){`^}M^r$gw-n5Ov z*jDZ+#nd5h0vC5rayO(tb@4SU`et%e-i-&$Co%cz6F81On}dy~acA4$ql^ZPZ_Qso zKEM~1Vzgw$E-ol<&>wNMZIo5pGgcb28IX1@Ici5-Ts%4)k+%)#5IxQY=HdD~Kct27 zsO(8RpQEq3Wb@8AvL!KOJ%he&YHg`Yj%}Rm>r-}Z)Moq34T_sl^>IH8vmsX7{BsVD z5u){^4rFiiS{wPvsUxUz$Br9|ZY11HJa*Hezi+$ge|YOt;>xo|#?#Nb*)gd78Mnru z7N+cz*DtM)=6}sL!y1?L*7fC+<|Ml*0rliu&3UEijnbCq5mQPJ>h+GQYxuSyZbYon zAmJ7Ci^BLwp^; zEh@_K-cg$q9Gq~i>m98F*TU!^SGGWGnv03}nU=k^;AB&`axv7!fqY5npH`QJrC&O^ zZTc2`b>xU$2RAmx!6NL!l&lTJE_cM{Zw5SpT;LO{UXdc@7Q|_by!96O%1J4ElUnHG zXDUo*8SNO4@h^;jf>#Oydf5Kj0{W#(8I19kap`$xOFj}z=+nkmwP1>0!RI3J%exa& zzLD{AQU0L|xYKpj=!_lUOA5&goj@bG>$7~wo9q9b6KOXf_mAm2Df08=+zrTMCskj; znv2=D>FYC6SKEBeu^Q}MtkWUl0@jJuezf21)1QBSd-uyPKc~CzDgD3P{qw*7KX?EB zZ~tp&)5qVMGd?MMpN#rc zqW%A+hZhxweEMRNxEX1s$=28vGE9wcJw-36I7e;iyfH2VBLS!?9!MHS7rT6B9=Z+KGj& z(+7P7I(0U-eq-B;GW&wvn9{EGHhmZ{v9ISC+K(c}8b= zD!HNV@>#y>Bj4k8LF!~A2jrqe`R?xh$oc`fw{U*G^9xI^%o?S}b;Vm3m)cK93^f_# zJ=-{HKn9#vpN}UNzk}asXRA)Kd`_kPZVgSB4Z#zSD)eqq?*iqgpVq~m*xJ~TFIuqw zzX7iKcm9mU8wel68$bUu!^tI9xwz>(Ijh<9)vK~Pz1tse)0cbsyI7ao^sn4-Ck{Rj zJxPD;1|(G%wv9>UckevW>(h_s+6>{NKeTLKHMi7tV=_0nm20v*^7-8DK@E%l=~F)M zx_Il;KwrP}>Ci8~bmQ^s>|MS1!{rkUEPX70Q`|o%E_VfR^`^UfjuRbaH zx4U0I|DWbaPrkdz^c5XHOKd*hy)yq)UYh1TA}?&IQ(Ts&92@UT(Sh865*P;}6k8UvHusLWOIlkZYboJd& zUF;+~UT`)lMT5@QpTWgv(wN{ME|@3ahOas9PlFv_9^iOb&(?Hrh0BLie5~uwU&0cEE(_Eh&nk|uZJ1=`|8!`5HvPEF|rmXq>rUj z_mYlKPU?=)F4B5+=9+^Ve8f67o4kRH zoXi~5=t=INpM~y3^lm`L)mp;xt$!EbdyVq~w`_86{fbr}iq>W= zo*8?`=>oC!uTp(z7;E+JL)+2ZzndG3E<5fXT7^G%A<^Y(qurD4^ezV88LKXUEz1_` zg!#$WYsgW5VDVL6wAyp?W?xJ{(pyk{{fIX|0*+wu{ATej^U6m8+&`)E^(7bk6~k;s zp0VhixF{u_(0Gk>0bdp1p~q9TjqX;m>HX#Iy(_u+KA8-JN>oPe{F*@JUj7{H+f`ot zO*a|7O5jruH;{(+?YlLvoMhGSnk(g-%AIJ_s|)7YjthJ@-qyVR=j&H~74GeqK2_-i z_wdg*cR#(q@6(P>=07(-+tof@neS8=|4sb<{gXKte}4EU6j@9sZ7m5meG904-&>s|6D1D_IVn)$W}!DCVXO{>I!5-hDTK{?Vc`l517tYi)2b z^ya4(XW5HYUbA*o9v!OhMV{DD7*-UeKog>Sy>#u{^8jXHQ!pmuOqy+jkBTR z>jjQo`=M~fj8}GpYV7#8v-@P@%iVwbt#z}DCi92>?az;un@hi*eogJuZ+BmQsf}(v zKECfpr5n|!pM7raU7y5?|BqNV&V8adH?nCbmpav6&#xxG6uX-qV_^+77e0OJqOs$x zLNQvIKKyp~whK);z3tOLcxyfErqt(^X|qgpFZ`OF*%X= zNy{%xZR=fmS1s@e8J{sV3-r@iD&F4ix>ZtQA5u3YV?eXOsC z`bX^c`M~zm=7vv;wjQ6*S4{BcjeLg=x;wf zuyJ!TbH8JxBk^N>wS`cAzP$etI|K^|q79 z`z|8<3Xmu3vp5&~vBlGcgA)hJb%NvfU1+=n?I6$(GRhKf>^tGv4_V{sN5z(hO)y5p zUA8DMYK+s3KJuFP$o0LjPj-ltN_Sw~+U=ubL-ndxJ{33Kc9Eiw`=pT2a3n``&62yG zw=Fqxfta#4%L-KJPQv+=lze6^dYK!_`ZByvKs>E8kEV}eWb=uLld5`tVW>griBlr0(F5K#)?G`tUz_*YU9_d@2Ioyr5xW6tyncH3_U<3Q{BrkiJ+c3(CyUyA z_mBI#fBo10-4pNTh5g#`J|Kr7yRRUdUkq!HUFzv zFB1nYVC)6;*^&4ur>!&zjc@WpeCz?A7oJ%g6(@&Pt3vw-_o8=f8{>-6Y$l(ECg@wo zEx(>rl8rqs_IOXZeNvsz@yEu_iQWaynzQW1Y#-TAZyL+7N6KOyY2tPqtA_wbu(?kO zVbxi7@-^BO>9aLYz>PpEfqF;&D7LXO7v>@?{`u$i6&3rzSDM~*Gw}Fsm8}PEJl_7) zr>4p8f9_#LHyR&5{oE%Y?X@n3uv|9sk&J{;8u^pUAbT1C{exZI(}2b(x<> zsX6eQ0DXM*mYPY>a5vG6EJ{RHoW?WrRyFv7KnC6c2 z23wxRU$KuIf!q-6W5sbJ)_v=hwa?#wxWRaMqCN#~fg8C`Bpr8dN<2hKS^XZ8)T5bW zHRA?D-`!Ardh?-q(%h;YpWsa&n!9gmr>v%Ld%pU+KXbcXTDkqwyr$1wOuBkk0SCNy zWaQS^mVtq6{HqtK*vu-2^2-jmx;Qch&L3|(N9?loYSy4+=Q95a7lD$a>k{Uvgw_r5ssXnd9KmVIQuI}cv6YW3$@vmJ>{Ij{y6Yef3#N_+gPMeFDa%(g5W#p*gz?)h5G?op> zyh_hkY1rCkuWKDg>g&f)vhq-UpT0i)+|6Yd6WQrYV&n?L>4r}7j9KxGDXuKe+$hN= zAHdb0i;GllB8+j$^5C!DqBhmd)cA}0xntXLuRfjiz>U4KeT1i&oWw+Q6Dw?nOeQ#dW7y0{D9_#0uZW!LQ zPTYO0op$P*K7D)O*VE^R55@k}81?Dd{1I;#nr={W7j_?-BW^&_RPJeX^;$&6?rE_3 zjYxUYcwO1WU`cLrYfn3KwVT$=@$v?mHZ>36Z-c@Yq)lR72)v1MLQ&+#L zS-2HmmLbzCPEBFtuC6nVsWHiDJUFkddgOGecRQ$3tHTh?WM!kFt@mS{nK z$XKA4U{2Q^C7ez;>F_v!fO*2u)6L1UxO;t$e`u!^hQuR%<)9Y6TP$1dK}DL*!c ze7a*!_~oerRpGtx3;DsUox%9YU3>djaU8j+FrR%&JfC)SbK$3}Jt)JUZa{`wOXF|) zSl1_p{EO25Ut{MR5$4HbW98F>d-J$sL7x8h$@#7$d(LnAv*)Xu>o={TjmG5tv16nU zGlICOs$=c&z(hTL&@0E2`R1Vp?mW{7Ijq`YtNf)0g4PK3Cyq|C2d4fJE!a=SWl=tr zA&-3PSpHKt9Zs0iyxZJx!wo--brimaIqDsdEfyA?7ThFjZ0dN&V5h+;J3iMzT$xw= z>447Y#$+AnY-?ek1u^ne#zN>qY!=9LPV~y2`0}kvaaR3lc+kadi(1i=PswT*zrb}l z?-tL6ax317vHip^ijJj{@1XYeNe*V6_7c6fh z7d3RA4Dr8)b_CScyc!c@nI>Jfuy|#!<0L7a30=w@Jz;ri`?sFQ5##U+vK* zxkB2dU(`6He&}KhGXyqME^yZK;9+ZFRwlO^K5z>O_5GUmG}&jCw{7n)|As~W2?J)lQ}a$P%DqG1)I zPJOxD7uCXZ3~x}Mv}((9zg*vi|H^t9m;C)&6!F-?6YX8{YgON{P?YYnF4{kC6 zXyQD;k{&7Ia~Wsz&9i3D<97@n)3nD&$A|7ljeQl$VvT<+mqfv~8%H1++;6pvdp3aZzMkcXW=E5MhfGuuYpSUb z4}mvj{0c?|r9EufM|;K}KoIL?Ax$|TdCB!=2+A|BVYbW&P}c8yNs`{K#q3CVWE)Qk zOJA=YEJ?DsHq;4kvuS?Z>UUvE-dkAs9_)l6PY)t@@^jM8pA`*k=2AVzyOn9l&e?KL zz?_~w51Hes1!sPPd6*skdP6b%UHYf(CC&0F%lQj~S*4yHVk7k452A*v16tqp+5BHHRHN(zlSbQgooDqF>$r_5o zb^OAQpx!5pI$}NVTCj^IhYNQm|9aSbS?VSy08D7tSna0B{oG`onu!%`i8L|(20Ql4 zxlQl>XQE?}l3U%W$5=^`;q@NBiQqIK&LH{V;FOYq6iNHc3m5ABOB&>BX+hw;q8sE0 zG~)=pKuP~er%U||A?BMTpwL~RqJ+un2_CB1EqC{;5mwPW*D(0SLLrE3$-Op_Ii+EU> z#5Z+o{CV%vf-KcM<01Z?sI*~OS-BZG>8L*> z&3Z?D!8QK&UiCYsGc(p9q#K;0fVh`WSe}0V)~+-oO2zrC?kw@*?Ur+;FCM+P2ot~YIveqAZM)dZXmjOtCqHne3X9TM z$LR@hieF91^W!=%c9DnsX%YTw(^PM{1wN#Io4OU$$>6ZEuW<|1HKsjeTOvn21NDMm ze7pKhHWU#q*h*XQkCB`*toxf&W?V`sfifyR(w$jUxE=l{q51S<>AE1|VH4>J=H144 zi}+xj_=G{1{jTFx8JvJ-WnNj9uDf%H_;b2w@tc67G2ga-FAg7H2!~LJ<0?-heiidO zAq*nj>l5`Loc!12Bmz|5oX1|~?Y$|d_3F?QMkr{u$s18?l-e%_okJr%rS#MGg;Riw z`Y)D;e%dbudTcLNx(2QV%PfPH23VM{+ZPcT;&uhonoU9t$znzB1fl(cEhZwa+(t%3 zJ1xqiR@0YBCK^z1*$qYM34mwphW*`+T0@;%W{vt4INL-j9Ov~>ydxTYY04F|aNf43_9Vkaa0$Y91R|5U{M&Fc zJzc)wQ2*-hW^fL?=+UHsskr45^?5no$tR`G(P-~mI#6=WOvJM4`}?~)^c5rQ&}NwxDfZ(=*IF~sN_8hmUEZC zKSmMG4#|-3o32;)@AfYY6}>7hFWrdSnVD8wb6R;}YW7|eGx`v&?Ua9xTQv}Pf!OUj zM}w$*Fil^!?%(PdK<0TO8JN*rPX^%9+!Qx-d69zLvpqlnY^%ENED2I!Ni zAst4h=43dw^4gliC&sig4$kM*oIQ+*8-P!cX%n&D zL^S+8<4E|%aWkSAon(Pm5c>ed0pXyW|7L?az@aCIR^>|%{;A_@4o1qpHmb%+CUJc043TB z7>e`?cHGx%=eMtpgZlgGf28np)TXnWMGdPE*Kl8_E{y9C5;rs@XQfN6XJ|EZ-aN?P z_vZyFGZBMNona?-AGOtjASMHX=qw*UUK!Pp3|`yIH&EF3lgi3o=Sfw=5`zfl_XakfHkPp+KbIHNe?4;-@WBM!;yF5qlK>Dr7L z)G>mq_+rGtcm@O7&3RI`>mBhM$Fq6+wqwGh!~NUG++xecERi(T!$b&$JYdfG4Kp|U zInl;@%tur}wHGkG&o~@jq=YGK^tKBPw6D@z42l&XXoU~BzaKa2X2Pq3f8_uz!ze?6}_Fi*EOYmP?a?;cD0oKL zfb1_*d{k=P_qWYzjngx|;*#vKHgiz`IM89;*tZ|yXb+K&-WI(@3M#&i&l0)Wv2f(5OkmRq=w*bj`JTb^J+NwwdxL6D=X9xN-*kWRuSX z?A+Awv7&`n&$FMcFPPFtiPn?os}ignFBuY^=Qg8uzxX>I^09+T;<3@)x;f={C! z(aVAg?>S*lD*oHa#h4fvv<4Vm&--GSR&HmlUHJiy*PIU3D=x2vB}DLIZ0JvF4S}B) zbw!1r)f$eTD2Hq&K9@5k+>Yd;PH%Mwoz)D72^ko|1NB5DxP(YyLvw|QCFG<$hHt|F z%4r=W$ud~XldJS)!A&U$@+J?n{f4yW&gR>kDmxl`K24BqyaJ?eu2&uAC{JO-K_0$& zzl6fqZe!|=cd(;mCMaSjVUn(fVMF8YxLt#1UX7APlZ0$H<@A2nqx04+lY6Q3y`c5V zivB!0`?Iate<#Y8@tgtQitRy9UM^Rx??fqNHu7ql??oL1S#di#@?O0wSVq2iQeaV7 zqQJ#3%dZSRc2`v+AJJpt#sEx`%tr-r#}g!qw$CaIcf=gK(JF*RWliw^Vy;Bi!NTWBR+MgGP2A8y#J# zG_U{UP>`eE;B%#OVETVWba@Emz}Cz|X39?Hax^~wbO4{YsAmRm)bE*n0tnH~->W)( zdLZr1U|U#ecRj8VLJBXc@0SQR=tgw^h|b}PmT1kGt0Vn)F7c-ZIsH@9#^0lG?SM#B zrn+5=JMqtDSrRP1P$8yKz3IYXvky|4uiWD`Pz}x2T&y{nOc_u&#EwifT3!4DllKT7 zR8vk$47sgN={q{QH{-M~ihqUaG}&(zf6JZ9>;5X_#FLz_8{7KQfG=7*!r8YYZK)(#<0OCfuV-k*&tLhz%@yDm%-Ff zr-PBFET_9YM~~JTS2KGc_*Jq#2ppRQB@vMGnGG*T6cC1sEkt!UqF&qA}2J7CZsYZ`1RjSKCkqyHfk=ASC^$nif1$3x3JPr6nu zt1+|~3wc}T(!ZIGu_J*V^V;8mkiRQki>ty%0F^_bgK+bCMK8mpaTb<;}5~yL6QMLLfI=K-K_1_I5*bD1N>uyEKtv1CfJ+rRV3eS8ZeEOqP z-UhCB@STA`oX|G$+bIC;7iryEpvl&edgotS_`PYVcFY4Gnz>P@q~)Cd!Y|i8o$`Jl z^4>HK%_%i5L?+CU1$g3@5mA6RQ+Y7=j63&gu>aa{Jn_zrZ&Oafp6*QvlF@RRNftL9-ZKI)-Zo~1xQiAOdEbmMa$xR+(i@(o5?cD|Ob*W6izmBG1h>NNI_Z2Perb>Up!aJs;E z8NCIsE9}0m4K--y3Eu9kwqzT2`zw8FlrJWFNPD1bjg}|kUlw8qhk6J-SnV#*X!3;g zMxeVlwNYtDY9YYPVIh`L$*Dyau2Z(Pqe4cPCF+@)$x-epeII<$>%TjmJfRTXN_;u` zY_8#cnp;hTzU4e4p8zt;@HKrum;m5sAHbwFLV9nXF?F44xhrIGIr^{kg_0e;m-hT1 z#Z1FmMDJW~Op14_F*3hfYhTw-H^S=$B~l|u<$BU~IPX_?T9x zD=AFvyc?SqZ_SUGf>VYm(&Z}Gt5uDT)xG90aLtlIFkX+zgOt5+E~8lNmAdS$TNt7yH!%2O>tAJ{&AF<&U;V&B%a<}`<9Ed>d_qd2LxUSinL9UfW3uqj zh=!{JoXDtfSe*1^+-mOI0ra4nUNZQxSI$8b3I{*jaleg)?Uw7o==YWNBi+D z%Tdz2p(vI08HkEmKJYSCG2a?dpyaBSR!`Lyez-Ut4$QpWN-`6Ib}&VPPF8vLv@vMf zgBRR?5y=aPSr<}v)5sYCp(67?4f4l5H^*t))b1>UUAyXhlBvQaierQAydKXB${}=3 z?Ox%{?FFxg;=HVyZ7hypKHG&6p>yXmGs`!|mw+>Q6_!OVV+K57*GM7W6D1UFeY0QS zv@bPXz|d-hkzZF6k5IF5tUh|aD~5obkjnd&k=m-SdmlzTwL=;yty`Qdq@m)PB& z7e)Dxo6=8g!m4#VoIX<^jdYBfKdtVl>h$xc>n!uekgAsJ4}VdMG|NbKoXbMJpU7z# zt8g1Vs2jiBQY%!sn2x;sNv#R zc;ghy)q8b3(7nxUAV&~nu?Tun$ro}p=+S?Ku9RFI9IqM>Ahx6zNr#&)vhEauPFH0B z*%T$NLGHGZU3)zh^0Qz6-vd72 zmbd37fBU;7iCtP76Af(>Uf-mtv9ghD_n@R5=?s-m`we2&+|YF{>1o{Dyh(hggs<^a z`%mNG{gLuDxG)@#E( zY5jD25fq?qDnVW?d%fkV*T92pf_ey_WMMVJDStm_3-fCmEFdc+l^6*%K?oZUYfo=m zgEFRiB>`+@EP3%p_%-(K+RmcT4z_PBVN8yH2&ChlxK|KA>}TbQXOAj9`MZ{3;maYkEBD7^5zyb`e-PeL-3 zG=f>@?6RHgt8^lfF%I!WQvRWAEN}ib?&>E}x_S4nBpou**1wOFqF(SUB%v%ak+M!JXefU z`5aOCfYrP5bGdp}{fqpFY}CE;4U*r0tVZBTsa~Z`#n}^(7iJxGmtA(PR!o%&Hx+-G zbp8DJGP&Du44>p8YqnxzP$llyMnhO(lt8fD1vuQ+a?gyyRZ*GM2ba#P9CsIz0P$Rx zr$puqS*1_`V}X}gc{%^m6N<)4c{#4(gSl<~yj*?S>9g%HBDLSXsT`O`=wME+B69eJ zSB2W(>rGi6*M?k{9Nw2D$*!7AeMRb1{!9IE&B<R;3ZwQwbf7uMW?mHWu_uj>;r7+wMQ&N}@~;)9~i|Byh3ziOd61 zs?0Lqk4);mDfJxh>{(FL7&d(GIVB5go;Qc`4}W)L5&}dGBr7no{XlNquP|3ASV?3F z+^$#t5cButp6gJne&IJ8`A2-=I*IXQf4;S72r``!d7XZ*1I0GHUNQDfKuHV-zI+B3 z8zU81ILO(0j&{8~9^g)kye*Ih%%rB$p7%b)M3HL zgynPXDrvltgBl!~<|M2GGXWktzcR_cUj44(Kgl~0t3jt_<6Vhi+6sM4qJiSHwA#l) z6Fzf7j@ow?!9}_$eQZ)c-gA30X%yzgkKAgVv)U3dGl;#9rxd#nDZShXyMLUxPtv47 z>UL?IP~A^cRcCn0v+&vc1e+0o0QIfKX4=+cHl`WydSkO>3|Hkk zr{O#Z%GkmVhtW5_tgyd&o&@V?-Wh*EZGuUlyxWhwr*|pDXZGp)pzkGVz|M2mY`>$xoOl2l1mbPGrmwhjtT*1PF zdvw?!$Kk$jL-9Q>!|fx1*XKvRbaXHT{SDJs#dlApoD-(frCak{C8&6{W?F$hj_gD;WH_SD+J;Q%Wl(k<|>6zNCP;h32q2kEhaf{D+RcX063jQlmUk z$Z_4B@z}1W3zSVYEGZd{g^YvwCl``uGCCokQk+3TwkG$#XkML)TO0L_uq%+(*K6~QjN zFrOhUvg4mH-iDNqt(gf`{ObryKiQt?>GR*d$X*=pW?}8W_bFuFbZW#6zwdwou0AaD zdIaDrE$Y?r=CZHe(lNfHi!L8ap5VHBDa0rHpNve_`RIau>FOBEq4-3wJyAfZfjp_e zw~h3%IAoKUNO!D0~^t!d-JG zZyY5Rp%<~MOBmto1dYHwD*MsL`MX7bLua=c6}9oNE2E^oJGEwzw&IN$y68=!k; zv5A(;Y1Nl9&)S`%tez%+-oy!gXtz06_d*y8iRvdIW!Lr}amT|5E)fLdW2+@x>1M|ClG;BBQ^7 zzAC1Y51-V_?7VjQ)*(h%?T5#d+R5tgUQ9ByX17~ z(=wu2+jvvAL73Py1wrxr7CrYReSNu#pJW(3v0%Ja^ao*W8!r*@gQNm93`$gPom5@o zX7*j^9*{a~STL7?Ws^_p?yjeKOtDpJA*oZ3GWo*|FHL*7GE%ee3W%S1reQY?8H98U z5`!+k?EmPCRQQxKu==pyb945+kP>FDFfCVmDvSu-!%}k-?Dv(y$Kq3>|LRu-D_ zWT-FQlBH`OaQ<}$4DA&BG~eie-QiO@4*fVYZC^64Uy>ei=faT2vd`0XOym97t6jPC zN4@p(0MpjsxNr1Sz3AH(+gSjL%otE|_U8AE4Xb)3mq~ocSvXw$ zH>j>JeRJjMj^+-ry86gcA#Er07n{7_URoC?nHjff-w$vcD@5Q*3iCUwy zE|j&k|u+#)|5zLw=FKz~F#;m@nzSc^1WME#aZAF178D zR`1>W8|xRnN?#%xVHiOxo#SxcGg6=08e}1!lE$f#UzrsoOiambNv!V5NTM@ethYc} z!#=)q<5VvXJLBVi!h7GX=1 z9f4)Ri>A0N`~Y^L3LrW%rYjHQKid-ROsOzn#t7%>H9!n5VQ5LgQ1Rjppr zvZxzD3Y28(VhSkm$Y^j8<@U^65v3MxY}%Vt_Od&&yx&<7IsM5l_6>F}pip$H<1`A` zg=Khz*kbbYplU=QuHN$PYdfu*q&t#}k7NrfKmWJ+B2hu+Cc%-q8eqZQ#1`?9Vkd&; zN)icg%UNQsZHdoWX_gYX^_FbD@r}|kfjp{a{0J+ZrBZ6<$L2hL2$h(N)q}Fmh&z|3 zp(1_@LhK<`-7e;7P9i0$d-@`cU}b{Tz_-8MMOG_k65(3IJ~Cqfy^O{rUq_S{RyV$@ z?tb5RXIJIfMwjRas9U}*Q2>YJYnHW+S8J+NV(z5nw&Q{0g1~T+-6iNoe{lFyJ|B1y zsFujWak08zMiWbhTSL!^s#nv=g)h z*~jESj131{%YPj6&PD8vBeg1dzqPT=&|1lwY6I2}-lX(Tu9~=U)HC`NUZ>a??JuRs z_O+&KY6}c`XWL#6%;T^+DX8sKDuev^P z?K(TPITDoM1NJ#;U;f*iM{hW!jS@@+Q`66R+Fe_$H~KC|n6!{Igza=-_A!cx^s;Bb9&{5Sxe&&>ifxgHqEppue>b2KaO@rz8X@Db%(P0ZnC#DNN6atDJjzj zzl>mKrdjUKGyK)?j!IJCojE8`5mSR>&fC{dP12u#p-$K3)!z`dmd~{5!P5#Jw9B~A z`{Z*H(@N8c69+gku*U&N566S;Ha4snh8)#6Ox8uCY-pLW>X)U%b=5o!7}APEhw8P)B3MhelLvuX+?_9o&|G$DOn(u zMeegVqPMK<7dkd~48WWfF4tL5mcJQ|Jf2uKAzhZ=l;gH`n!5R4b4{getf7=$gb`8? zKXcx8g9jIAfPyc1JkuAjz{z)1`y?K32Z_=Qv0dTWfB>T3!vPDH8>*w3i5x-xjfUy^ zVu9p6q`qvYUh-rj4$kcx^{6SCk+{MpGQy3h6mz?eL(M`9~=9A3MARej+h$qn*;%d z3b&zCW;fy;YUVpu5xW!K-tK}HpV^#80E9zs&c`3>&Rfu2i@GpXs$9rhwaLpPiaL-+ zw%Tj~`f>p9hap{Tais=T4oK@3G2j!i$a^y`X=XCY-ybBLZjr_SxvE`?@kJWrLm-w} z$*LORlU|)Lli8tApz?+vfATF=b)xLh5s>OU*B6p%eZIKa-AgJ7DQhSc`(}83zx(N+ zbQC}pUci3Beq(48qQy|Gw)QZLdiE12$@%)ooxHO(Y)E@hnBpC=xaPsAk0rg}^1b1a z8T80yCHUn1v7u0?dr+0nJ)GHS4u;6cB^c%Y#I|d3pLu3OZ(mXw53{$iE%x|tpTf91 zi7oLs+XwSH-U$e_XNavw_$uEQ!`<%Fg`YLVIXpi!4FZPSvFf(#(jHFWxWAny5Ra! z>lWgeP7pS((d<33@gFAw|FVmPWI%RPJ{F!#=U`_`SkrD&w{k(?kn~mNMJ*MGv%Lvw zg(6k)wvV$Kw*K8mD@Ev&Q|(Y4S-Pi0%s&*1<|YLAp!$r1$B5_s3qI#*!WegkCI^SZ z6&ohIW`y)>N@1ys<$zk`fp_J_!}r8B{WM9ltT2-ez4}uf8`+NcD#QkX%H{8SG_Dsb z)LQQ~k>y$MZhtC|%1D(Cgm!l(CC z+-&h6u0-e1U*qs2OW02Usbj}_Rq$y-DR*v?c|Kq=bez>19&dolYH~86xkR;$Ihl;B;HeZ0ZlCeLc~%viv-!&TN|)-nSv>Y1OB)Nos~zpolHoL0DsRgMzKm?n;o)onDi3T+Q=7Cs6#gWe} zMAm(5dQy*F9(A^9)8g#;BOZsXX9?$ep`TiMKGca?e&#&pLewgE?!pUl>4uNkjCRzh zQDAQ#P&vwN{5zaGJR>c=F&I6sDKkNm-`p>E)|_5;c%|2ldwt|wf#~2JdFOeUEtB+g zC$t*IZ`?*sPG+$FVz8j5I$g6|fVkxr7E}>8R+U~UdR~2CGY@cDU*QX18E@#wRi(5! zff&pAvDqibYkskuh)^9uIaAD`4{P|y!?V)zA6=gxeEd;nhkVdJjkA7Qcjk=mnj z*>CHM_xvRr{MsaorcXo+xq7AVfp;b*ZrEk$VA^wcElQH+19S5mm^&LM` zN48uxZ_8<25LwcpCG~Ya>sUNvb8Ao(pToHICPl}kZ z+u(5yVTZPnu72E6Sr@qiMWqWlH6;6#Ac*q;I>4l&odyo?W zMv(HJWUAsJlzr7!)0hW%{_av#FpCgn$wFg;HjG46su_QpWf)nZDH3bLF5ko6csi_jh;P^!?bi#`y-#Su4N3 z`F5+jb4M~m7d*gA4jFu({_c(3Ku+?>*n4k|*8YcVy~tE9nPPGcFRA>7FNIl(f$Af% z@Vyvm2nd#%)BQZSz#?!+&i5zCn{*yI=l&Bq)ZQ0GR{TP&r;0OrBS_-Pq?zd);D4#k z;yL$C7G{Fuj!n3Q21&P|#D2_2j#iFF*xpR7f9*rAkH=hGpd71iZv4kr*EF*57AgkW zUw#6l#ax9eo;<~P^V~x3rb!Kx+Q_08ney$m>Zkf%iJ{l~Ed!hP&MQ-2!e7-`{Kf}G zbdXPI6u3Ku$1_}=1(e{|BK03%K7S!3GbP!oJ}3E|)QZMGmAW$?lw)hrG&wb^RZ9?Fp=nm#99mc{kPal^{vm3SJ}gnSwPJ66XgWZuwZ);g0^z27$< zbUpP$;EUBdYeT9*sQ6{Vf>1~0xV+T6#mE|YWt}vxTToinb<^w?Z^NBFXHoS6*EXdd z-OY64^f;1u*hPzQy(!#gbm+1yW9)fx8Ad zE(4%9PYGey(Uo{_u7a&JpvS+TWg^j2wZ=O1m^ZL&Gj@q(#eI+%OMg;fTy}UGRslv;I#`}gJxUj5|ZDhke z1jEV;KHL)FNf@vAD$@#ob{hlQXWsYx^0v?_P(paj2opj-7AQS%fpWc`7AIbgR3CSe z?tUQWuwiR-PsEFKcgyCx^i87UpznYj02aR0$`ao_vG9>Btq{tK9@JXj^UwirqfUhd zH!g$vhZY%r@(aicC)}{=gL^e@V)kqWD;X-UqA!_8OCs!Pk+5~Mj1=93X8tyYZP<(F z0hck_IJ6pvZEM8^w5KSgvLphCBn5!Rv09d8Y4x zdszcO1hWIdq|H3Sem>M5GdAMI;3|P?TIqxI7XWq&P7FLZ$PGGw3bmZu%^aoI+oc@m zeM3?MB+@3KLZ4KEe*a&<@E^9EqyfAaRQWXoV&`IvdKBK3VbN_n3##N zM@cUR3(N926bAld^s&9|8h^(x;1=3^rO-wb>-;LtKQcUli?Viz^g}4A-i_AxI)aik z%k%!YG@lrr|F-|vFIzqD8S{8PyvWqAp?q5P(>}*|;#<k~AdOT7AcYAC+?m%V;Pxt5*uoFZJUX8bZA*`W#8%YUAAAMg8D#b@Lxw&+?>MYtAkk7vp zUjH+ql?i%EWiXv{@ho&5y;Y3SHnzRs-rRJl-r^N+atZ^dfto+ZhAu@fzsqO!EC&G1BH)^ z<-gtqRymT%@|)Ryy1mK+D-FbXW2oj0^>ItJ2J3JIepl_meb>=v@CnK^m2~VGMMI*j zYJljx;>|HU#%G_VI*4@!xM~8~5Ar@kGG@%h0ihfeB?6!v@-I`Y_``lG`|eyOPSgEv zPRJ>Lix!8tiPL}dBiD`uHxsfSOl0K2sOvK(Tz zpdGoZ4qW#C?1F!{Pe=u~h8<$x^ehA9wF?u+xBrV z-0D3e-?LQ-cmFkCmW4LQ=T=wN1Q*9VSqN9kF~gE8^~7ndnuT1`>F;hNFBy&<@IHqs zKWw{LD=C+ipC3vtjHu!n7$`?@eScR6%vFC~kINlC^IS7`a+E*&?01IxSlGO6i^w2R zr8%Wi9hW|;WO!!##PpbYX3XY0L(KUN=jd(y?kmS%(+|ttP07aU_TH?wLTv>Y$YMOI zd7U}~jB?niSl0$I3i{r8V>9k+XXifLv^i_px?6(i^QNyCjcwCrPdBNJ-&}7!z{8AB zJDIziqP$veo=#8^mt#|0vxR<;il&^O{FeH8{vd2`{daD`5wm6*8hFarCIw#8m`0@Y zHLR(0v+(AMjO4^Lejl9V{`M6xaOU0aKK_aYC*MO)A`fR-eniJaoe)ABse$s4|J*9O zBOAE;3HknS<=9aC_S$)|+BZOhHa1PX3P(tUNwYVvWW0$YyHv2{8a}jqE^?4-@v`m1 z{E?j+{m*h9p|>1f6bLe16&T?!VLS7i7X{b_=x|soTLt9MYhnuLd_sPCw6XC*$emij zC}fy%=kBsnAYQaVlXSvD+SF8erTg7Umus}ZsgBJ?;yBsbn=RA7}^URK_dyLfh4V2Q+&C zw#qL;cupzhPiwdu|2;LTAJ@)8p7cvDYHPAxVa!QQJ#{!pd2t>30srk!@N7jScwr;0>fbA{Uq&V2?R8>*Fh5f}B+$LyPv(y|J+_b%t@O9O z9j7CK%fA-CR}qLUE7=M$_b5C3GWAyOc0s68k~rk1GpIQH=-QXf*~#=LVGv-HVc-&A zF{eFe$l^f7buC{<}BX!lJ*&!xTt|W@7-IoTQ zM#Kiqm9sHdf^f)f(@Fx?d`Iq<9ny5C9IbEOF4IY|VUc0{x03goP z`aCeBUj8&U5@hpK{OzG(vm43=#P;uT7))JZ~9{v4)mrt<$?9CI!Cu0W=8_+oq zx$~WgP+1F(MdrdO+BLnF{J}=Xu)4#0gdG(*=3srHLqAtZgwNZ|kf9su-VzwnelQY4hkZ2WI8dH~`g>hMjA>YUEQPj5plo--pmy)O)ve7v7@8+=u>#C@m zapB1*7vx`#`>NoQ^zX`slBrB?4U;u{9aH{bw=u8g5sFTm)5uG%{yzg3)MRBla@x}H zO}6H9JaW~)vy0~h83An7x@&ieJ8vrCwr`9>H^)}_n2R#6{~c_tP-G9uV~EYEkxt7G zE&%(_NL{zE6v)2LezTrNVQtgjXV`6a6cuy*Vkc~KB(?J(Jq9rwep1x@P1(@V>+mot zFXrfHT+Yb~ESx|t4Q~`gt7Vr(SPR~Gz)#GBymw5|xqXve9m6m2hcx==*|FuHF0nd) z!w$t9P=o@JB!YiTlkgcuk-wt*e~OUc|3-~F#Pu=+ZQa5vXjNh>xgx|#Xh;HOV9}Cs zk{rzLIXe|UBw`ra^9ep{QFpl@D5^|HqKHowTRbGuNt3RU<1BBr{<-OBor5TZQVH{l zx6Nf4@ceF_grAmYwSE!Y`Y6QT{Q9tvoMArGW1tp1>J{K5%O@Mt8okMX?adG?nQ{Gf z*UfvwMy2MzGFpB z!sZC6Bw9PZGvt)rj07YddCH%Oeem&)^!apuw-I_nHv?LIz<;BG&bj`;O-&> z*Ji18Mb03Pd`LYrPr~Fp({K4IzB5{BcgYxv!&b?5$epenMWqnCbQlk!hPA{s5GcSW z_HeplkCP?JH)A_#`k8U2lu3!5o3}16(xY# z!P;{mWbtlReW}#}b-e;1#C%utUP8XKX@dbJ3_G{w;99XHqgjWJJ^=JC6{y~^)BCnm zal%M7Ar7eBe3ZPm+nmcZ(H0EMn((GGt1g)nS6d4I(D>gRA$NHB=<*Tey^VSsrBL@w zEkK9-qnW4L4%{C|I;BbOFN1Y$IfT=-RVO<{7o8MgG5^Lz7}JymDc|nlt=fN=Fk1|> z{Siwce{xmO6hpbFqwZ{lJzOug|G{9$HOXOyfH}M*fqAQ9%gJS1rMnBTYjjAGWdA5l7ebiqXiBS-E~g zr%pAOzfV`kmPY*Evyf^9@9f*QoTJLJw@}SSiG57g^E^Kug%fdQn%`HKj8u|4$G7{w zbt|{%|XDH969G*mX&Ma5CriEibh7^3W+N z`T$3jIhL7dL*!iQYv|nv-*p}na|8a-?~_%VESlzGXjO9ikK`kF_gtiM-O z2_>(|0lK?0Kx{ITpy9Ne#M=4FwL$!o&iB?_*=g=wkk#&w_uL{xf0wlOUOYg0CR3dg zh^xqwq%8xDa!lmpX2d}XgZ%XG+kM}7-IM~|v`r*CZ9vDmCX zF-|0O-EXv9j=rHG*a#VA zDfA<<_&wX1xzrVT`B#&gD9b;>eTg^Q&RrH8Upr@vi9NpMwBaAzngJP|kwGL|EYikc zoEAO8IT8~gi05Xgti3@=$kNE+Y-RwHwimqJQx~BI7>r*nKiZq=>7)fhaNbhGOjSK% z8Pzc|U@e!3RqOpUb9g$VtMFb1L?x2RUv+4v%lMBuGWy6gi>8Kh{JaNx^laG+Dwr9c z!90rB`RP)bX&B;X$-ks#*R%}UHj%PdBCXL*=uc&%X-L(NRE~zjhY7a1(yE{|RKwQ{ z{lYh&++Lki3s$eWl^dWfQ-kbdPqr#D*okr-9|#zC8-l zegC^9bXH|id+dFJqnQAY&tYX~6kkgSCHNS0OVpSXf&X7)-yPLd)O{&M5$U272}Mys zX@b%r6h*`W0tzT46cIIq7Mk=bJv1pw2~FvQNN=GR=}kh9)X)P7C7~n}zi-WNX8xP} z@m5||a^G4n@1DEwIs5EA;_VZ|F|2>Qz-4ZM9p5no0zG9F&G&eRFqVF9WEm7 z+fVm&-PYtg@+FEFRbCFEqx|}GMvERb*vo?t;sFmKWLeEd7!}FZ!)Q}iA z%s2l%N|-Rm`G8s{kCvTKM~PQZBFj<7`T`MX~^Oz3(D1}k{_HHRgQF_4_Che1vxBgZ|#Hcqb_ML0TObso()qz9x zs1ErJ;Zo`Ydc5?tL5}^ew|Kk@KTjF6LJs)8%ruYhq>}CaWnD?V!%d|R!O>;N%|`m_ zO{LzoYuXuJYlyCCJFHLTdZG*{wD&lVL7uL#k-`2+MoP<z@JjdBX$Wei%?@ zM*~dVq*~>s6JPK`6v|$X4!^~wFk4Id=arDt+Fx8Um;QCa5PbE$8ZzQ)--H;=0D^(b z?%_PsM(2f%J-z38!#^L?ip;A%lB5FcRz)k|)hF&F5krC|So!gXZhi7E(yy3x_`fetBlaNu{YzDo@7zE$r?*b+J}J21>Kfgzj?)WFkq|lYZ$w zb}1t>t6wqrBM;UIz0qg91MkX|`S$f!jSE(n+?mGkC0A)m?q{1=kB3>NQsu@*@no$h z@$pnmVaBpX&}M9F?Ye0%^G3WrP4{#8@xB<(WHmRx*TUlv`isNDKXxG(=7du9sSPi?Cm4wK@*9&^k<1+p1seu}V4c$I|Wh62B;+ z6}pHG<3f9qHcdv%P&egD{B0%kjI-eZU&~04JpN*Y+wZ}E< znKjJ!0pJ&*1Kd4eUtwI4q=nu~N%*g8}JQyUs^_b}N>puYqmn$1ADWgB~E%vIO|ecy@J)l`(Z>{0T=@tt;Nbr96&OYfd5LC-&;mj+G_iAY4wrCz_Z zwMIq8ut|4CM_QZ46Yz$w-&;f`aB} zsZV^^UrNt1;cMF=A&THUhf57+*6?~$d zMjr_9srEAsok(F$Gw!8{z;)IgO4lv%#xr+qZy(6N->+oNO5{n28F%Pt9t#-dVzA^ z)Ma>Ynm=7%U$xvH#Y&0T_f|hDbdk?ikw2c8)-CP*IH38dYXU4DY+P($B}Kn2X+%Tt zMGZdkKYfiCrY@zJDHdRHCNhthN-dzoD@B@V4!faH`#>cdrfJjc|1Jj1;JuAjO*DIc`F+kTZIB(J{HHQ>4d5uf>j_+1%!o5s8Il;lwFZ(^JL zxt>eB%oSxFOa~K(SuPk|*mgLpY4J!rCi}P7AbsR}8i1^6f=D;w$dTfjF@^l8ho*Iv z&tLn*|56^rBB`0_tH~^}OPFAc@zN&d2=0JHHqIZUjnUzMy3{Q&b{!9ec&0_mv0@g> zR|W<$Ze;XX^`+7A`brVMTYTy$Q*R%YYkugQ)P6eGrsKyrGvNx_E?K+;6_par1I)__ z*LMNf#%rl&OZDXtzN(l3uZDDPUtLLV`A4V4vQnt!g#w$A(f)39B#fQF3qb!(Egn3K zpQ$T#DP)e){|RO>q3~4ZpTSjqa)+*I18H_Y)*0+vAH9AK)&3tZ2FLppU@` z%)z>+h{Io6AFAez9BUZv`_eJrI1+;(pHn4Xq85A>!a_b7rnQgteT$Ym{eFwb(B|IB zy=c90_ZD4wpp<1*!&bO|uejZCJ4~_G^;=p54NQof$0jUTaMaNuzf8Ec?DcQARp-R8 zdsm$HK?G-rQpDUXg6+t1hF+mfW8zfAlUwXGRGt9*Q=)C)f&MFvV4a94fY5&uS( zEzf0fvm`)fPOt6z$lq}k70#-`eT^AN4(vzuX%Ex!dBL8k`tQ}~ZiQm&?wCS0G~H+VC$%4C1_FY0`@n|Ir(-$n^3%@9f&0_WN~OfT_9PgnOyLK-p>nV zPzN=yXW6T)TEAs4xP3!MGAV>^jo^}oH3 z^>~n@sWTz5C})~a3wHeURq-A;#M+!a2< zgg1ejL${A)S*ghDYi>2t)3rm=k$kxtLcq089eH7P6vj<;*P6oBSQUbPAV%epr-d&K%hzEs-cA9ox0hCzdeGzf50Sp0md~m`R3lW0_C7g{`i^VCRAwGohQCdiw!C& z-x28?i8Po;Y!S^&E{*>pr`f;Axzv3SGDQ=9PMgaHa2dYbRABOs8x(dX{y~CRm~+>4 zuWEUtX1y+~xASe(HHwBC*J#zifgY8qR4YlTGg&%tbtx)*EV2*~sVzv#vLRix+1D;# zg0Py-o9Ws*ONNOk`X!*)NGYycDk3OqG7HpJX45z!B2dh~J+crW&-q5omj&D(0~6BY;B>DKUo(;;IDl=HYm4uCX|y+j$N@5El+wwiUDZe`I(_WvSyf}qtw0l~+p(^$lmJgRFZx3EwlP}x0iJF!}Z=c9@K2@xv6@=1i z^G&2~dQu5?>7ko0-+f?vDc#eoshN>_nr{2Krv>k~rC4`V3{vj?xQ`>O(`HZ{v`Ne~ z0g^=~Peon{*k@+Thda)t>S?qIDrPQF0X)G`C{rM4`;p~Khkws zj~Y$?=qZrG(>{d?XW0!?_B?|WOjpKItD7tsjvPqVqJ2O`Sce z)y1bYWuD*KqQXw`T93gRZo4_jNoEsL1dJ8|g}xr&#QgGq?6N>`#yWuHno~ z!$ry?NDr#lM<0XQ@g~40yxNF|r!SJeG}P@DOTXi$T@8w2%2PR>wK1e78r|uM6M=r) zGG2^6WDLylU<9Q`<*Ts@4>i1a>F_H55pa~Z7Xq=MQTC$UTbVmx?moNQ^^?VXNi)oG zt)hP4|AISUHvL(oWb1|LKjbuJkl|Blp>ju5c`REI!T&X4RtrBH5>PAhX2z$IrlBzo z6Htn>F_q0yxFIOD7feW88bil)XfG~ZT!mjLN_-wx=KEE{M2Wt(+9@?Hu6F-GLsoG) z4)g`j$8ajfKGfIniQ954d9v1JnzMCr|6Bfexzs|)bDNpJ%02r1586lC?k<74r?7^~ zg*$8^kHxi@=a{G>nVD&m2;o~MW`@dabwYxD zZPxW?thh9sl@+UYeRdM#PIL`WoAvg^k~3La4q32srv7b_{#31|l*w)TaA@gCg^=Xv zg*b$UTcxlqfXfaf*TJfA+{8`?vHuL6#G{Egt#2C|qqjQlWBTuKpHri?5n?6ZMcMiX zjonC)qHgyTD}8mu;PV`r!#v_Bb$1%BsOe}`uCMYmuyf5nQ!JnRNtJDyrBLo`IIPK< z&3OD9bT#YSd7H8yM_#3DFRfSA>oBhen8?>N&_d8?J$D7VTVxa9V`f_IC+7c}52qgW8cyk2V6 zb?%N-U%lcK^=hAoxK5RBRvl!$Pn^4Gdoi@JrA)2o=K$EAA0+d=IWa=Q-iolhA8}a{ z{`yGKs1efLIzhQLwF0)s+!tKwQTXIdgSr9b6@|g%kc7uG1v2^e?QAbKo4Jd(|7HD# zI;h^>Dj75kLbL$VN6|4y{%;Qc*YGP*u}EWa&~N+$p0A_@zT(rCR8S;c zrGJRm<^?SC0RpKuH)V3b^_w@I!dwCb=eDVD_057M=RWxdi?h*p{nl|r+km*Yt_I0W zlQFa)*ASWGYaMqg7-XqV|JLr%syVphg3}L#puXkTeF+D{c&z%HS*06P)t8rm%AD(qaPX z241!dyZ6kqaQ@k_z_jng?Q7;=hrLHe7}n&PLbhuZ0V}w`$p%*5*41W)MZo4A;bD0> zmF%;5t$TH64!Y&7hsKZnZ+CEUmR4&ha`h)})4fw-`*b?cF{2Ng@ULE?47{RBIv z*adHCrI;LZ7Fo|JSs!)pRW87HWDO0g2mYeZr|l*23*Vs=L~^8}h0*fzcZK1exYH`b zucut@>2eHfDWIme<+zpS{|-rvt_7@f%XpabQ|Hav6At*H%-z>G>Qhs>vtSZ z$HxmPr{lBt`v*dKN{EO>&$#$lhCG>^hs)@4-@`y=*C-?Lm-9lxOrn0(fH-pa9vF#g zS*iDJ$DBK{S`uw{2F=u{0~eB7NGH=4sM`urt~P)+do zsB1onehwu{Df=K^?-Fh__vuk9PsuUms+D9{5OA&U3tkrHt}tjtxS*{~6@TJR%|G_^ z^U+5`2F_NFy0d-vFIm|CyeTQvH6ek5ollZaQOkU#HhIADqWOOO6xZy2eq-&_v`?@T;|V`icNlRmJFgB7urDbv8jI4@(~{mx2d4| z8(p1|UR#%q13UFbaJVYfufxwqWDPwEN8*buyy~z?jlDC6cA5_Ji~qse+YA3)Wjy8r z%-V1K6`GyRp=n^%ZC2c!S{abP(>}tmD{S8G;TD@(FEPPgdv|{KsD-R~_?yF(@32PE zH3seTHE>8;?wdn!BO|QQV|-OA4B!nkCF5sY#S^^+moJIf&ruq7ZI&FG`C=)N_x|+D z=dmf=$OV`CvTS}N8gFe})ji{GGpdpHsV|`97L+<>tDu_id=8b|<=)+3dtLPKq7fx| zi#Uw<@vxUyGj~?*`Ewaokuc#|eP+4l5aPwkZNqB|m3n#%3jDfk_}sp0ZYY&?d7|XA zy#$=_%dnURR76dLKo5pikgTxf>u*MYaJ zkEkDp`^A-l=H1s8739uGX!P@u-%fI;l_8HxeGjU9k-knq)Xywto=<70M32f|EN_l| znU^(VuVJ%@KkBDE9urVMnTW+d`XQsI^IJbmPvt3&cIo+Xuw#?7=%l~?8k0Ra_a(+8 zi*hYaM22mkA#W|c`3%rN+kgrpCEPafIKY^-1n&H{D-wqb6NNw-@!jy?MV2$5!m8B0 z!oi#89*ig6bSMzxA-!^Utdj@^;`MnX2#jF?! zN3yq&-0?Mwia@zoU{?mKZH&@qH-n>$JwzZ5`V_<1u-#KWV};48&~tA{bBrU|(*oZS zF4qVe#Z=8HImf%;-kp{(*bcMyiXAVpGnohPJZbQC+WVyuOALt0Qdvw{g3`~x8MeE1 z6{_n9n%ZV5fvm09%~ao{nmE@H40rf{AgGP0n0JD|O6%?Th8;f>z`Hc=Hw91!y>G@k zgWO$nj0nFI7WSmgfyK`U=kdxge_A86JeF-qr63l5={f-Uk z%hW61=k;TVeCZXYRQzr6XLIBa72hqb3rkRz8UnDEzKT>oW`6QW|sUYzJ{a_a7#<55f~UUKMXMj{R+DKP&;3w69xii4AknLLemB#%29KB6k#EU-!tc9aYyG3{Rz7XLdR9>SUcPsg_FWrb_MsuVn$j!y1DWcmQ5L1J*TlTp z{e`B&-XfOqTT$o_ur99n5#NLSxkwl2+Xv@+_8Ao|!(8rhUy-kV(rxS0ZrDUMU3)Ak zwL$sRQ+mB%PxQIsdG~ldsQ*c0$ZMS91nF|M?{=v0c$MRn`hSV-|9WXy+s9~jbfBRh zgg?VHj*Z%lcSl>jN(uDD@o`R~0`8<_8iE0SIUHU07^cZ3*WPn$1sXLS$ICvol^p1AOo8awz4N0zL6<{Tog}ADkhV2c2?XAZUvxzsJWl-AM=o;VjaSzES0=?+J z40=GQe$9q?@EQ1TENV5EUk>PhWpQ>_>5!*sT{`Ow)t5C3>mjbLx8bfWaqgOP8_rL9 zncySawRz8)hz&Ch3%AUML~Nln@!qlanJsrsJ*p-4&KFdy+m^ViZ#At3Flnx&w1jCn zB$B^sx#tb9;%-pOe#R?j92Sj-8JQOQFgh2-aTGJ$ zZ@#-)obfwpsFGi;N|8DjCeA7(tRZoo$}W%Gm!QeU4V2H$J7XM}M8Xa>at}iJ2iLpz z2KeGg7`}Wu=Zp{Hn#uQ+81BS@x}Pynpc$Si^|@@HIqm&AdU0zN)`PTu=b4VsS-|6K zWiurGEd?Trluc|5(?u6t_Wfywqzs~dJBj)9k8Ss#*260=?at`RLt0n+{Kuxq##td> zU=XScU@jlo!3WYTbzq;s?f9Mf>%h19Ko$tVmaq$E)0s{$Uxq%1l5X{XHx>oYvli;k zh`It|+9mz3dJm}Z-;}amxq&*}vwMQ55^Q%cHM=R|lRZ2n6k9EF>3BwY;oXc7jws|% zKOg5YgGQc+?IdT2WLLo2IzC6fB7u2^7R_v2|Fplyz(DruYuU^hq`2%Ri-_v^*ErM3 z&mfz14sl6tuhZrm7Jc4FOt_32|6#?-{6iWtatt=ROpo~C!9PsT*K3{pHFtf4McX-z z`oaiWH(V~O2C)Vn#wjQ)4#B>HjyL{XzzB~|9K3SJ69J964*^TfBKpM-=ut zePStI9gWa4AWocU7J7KpkUu2Vo~9YY_fCbgn!nU*NxGq~IfbZ2 zpK>&QJ(AtGN<^J|W9~Dyv!tZUm)na5Zj1%vK`fB#lc%X;=oW6(>*!C7Z^OEu4ci@5 zZo(fXER5yv4^+*usv11D%<%Fwp}b>D&ctlcm5}P+9lp?>8_a&`dpv{sruKY->z7_1 zPP%DVgTE#ARd~Y?2>7n>3&88vttD*TGO^Iz%{q{me*x~K8_jHe1Y36L8Wj{P(_`CE zmnqLS_dB0B#yhR`^8Q1|RRv9vg8Q4#6-X9>-a@dmh6OltuVH^llPP=yEX<=fCGCPi z9oXEq0M_kxkN1yZEqWbqz#H=}c^kQ2T%U9sQcyG(mRHE=oa!MUf${h z^feaD{wYoBOy){}uD8P97lqudIPGjnCF`NH7w_T_ zg3ZAuU#*KiR>fUpDT3dsk>tljR&QeYs4p+@8bS{i0ZQLcOLn0IVCCea>^?BbsagL4 zRaf2qdnaMe_4vV~H!rwHq0ScP$%utf)H~;r2&Co1*y#zW!`G0h*{nF3N)o}j-?`6) z=(j7;ow`w6MqW^NXw2*#%ATvB{ENuK#4!i;OfKA|t2Wizr&whZkcGPVbFrh8ZM!C* z!)Gp1mt~405p1>9tg9P-xbV%}%dE5)*&CIwqkcHEY62A!cBq}w?C*bf)LmfV6EA*s3EC9`=SP(eI5RR$5)y6N`x z#+DuvVJD}Omn*OygeqxH`sL7hVZT@X@DV@p^^@>3?v~yo>TMdq*d3HbTKW)aDQ<}u zwC!Ag=IKK(dKzcwHzU2!&RsP(GGthn@2^efZY%-c^cB}awEMY?alcsh2(hU1z$Y1h zR9!R}?2Fl`Nx~&lQVXYx`AReGw0il>WMh+Sj-w5F%BOvD&O;y@&FX-m`NsMm|6Le0 zgS8dBBU>pjK+}*tc+mR!p5V()ZVd#G)`!zfl1nYpW>Cnk4oBQ_MgO(o(1g5t-f(KQ z?|;LcHI0ISsj?Dfr{s~GRgATXx5X8GMN+IFuu2W1ZmsmQ2up%+_b@sFTZ&uqek@AH$Y^x2eD;{u_~_*vCFM0`P; zah59m@kBpFV4T6(+FmTBx7B#+Ywl-1`f&qb}a=7K-)tolXOdHuY=}nnR zl56WuEAH`+XT&l8dnsgRn6I(SCM9EPwpy^?#V-(P&9|h2&aZgl4S+SiUHWRzhO_Gs<)Tanmzj^p1#w!fd# z)`)w=*FWr~HxC-VR5cMrejdwwxTV+ZZ|D-_LF^-Rx6LQGXsdCp&-}FKlKmacOk^#(VGT}$f|Wm_d*UWNMVOO8rUdAh6f79j#7SM^Z;iMtDW^)w#|EIxYajbDfY>r`q1S-iiE0B08~o$`@K zd8DJzI7co1!vsEB0Kb(#WKO^Aih0oc64LG_{{rJe4@Wp-{vwm*BoLdJ%DI;8?U4Xe zRy1 zlYk8t#`9Ve-t7G}k{2ud*@6+X4RtmDd;4|2NFe{^`%>Q?wX@D(V;5xxb-Hx7)k~|- zE{rSY;49uLlh97vH*~odW1iO;4Fb7WgEOY)B~dR6bCeDTuFaG=Fz~*_311;uv>9)B zU53w_bmGB?D;{$C6-eVA(HerQ_hp&i*RO|HXjoJy>hFs{mGF~mS9Ocz9KIBNK3Xw! z_1v38Esi#Zui)w3Tw;wcLWQ%k=NHfU<+=5Lh%NDRyA&X0pZOK`5483Cc;RY*P}(Lu zIsG?(Vi%~GdozoCLFryIV^sH%wU4~H)ho=%JPYN>I&-$^i>m*7nWo6i#8Ee1pfc~b z3ROneM$a2Pj+{ikE8N-SzYn0tVLcI}IugD4Sn$ZElm4E>70LcpM&;Q1Mlk9I-b%N! zsX3BS|HDdqM)_#*aKSJvl+XCnFf{9>kYg`Z25#4O4Jb0myPLOV$< ztJainsbp})(RAbbMV+G;<2X9WXG~COZ*_CnG{7l!!cM_rM(?=af4~k_uw6Kc9lKW9 z|7ZPb)VNjgy%vt{>ik;bJ|&=Xs-BTFsubTemGIMRIy&N7A8>}VM|9c!W3DI5)~Rzi z7;N2f9eK6XSaaB4s(H)JK-F1xSTGbxGiyS_8|XYnp6@pG?|4>^(BNA$(dPZ1g#y4< zkH~)5ynV}o0n0)`uF)$HF4LfXNAOeRP^xDQFMGP}DYFrX;_?mGM~|R;K#0EJf$LP! zKIv5^6E7TRhzi0fmQ}j3sLg!tpa%aWLDsZBn%{h8FOl1L^vi-%A|g?7T4;=77wSw@ zs{gArd2oLB#qk$DVflE6F89wfYc_js1dZ59OXT$REHPpl3)BG!+0@*9A+IXQ!W8ef z%{NQVX$VQ5EHbt?d!x%_EqPM^tt}-+P23-uLXNfW)Ox9#bfmR{Ydu;e^y7*y`dPeD zTj`ohO&>|EG*>B1i`)Cy_!E#><$Nx!b}=z#<<_r1^9D2NT{%S4Q$lveq8?dvTuRCJ z6PF0(?4E9U_ob2RP}E6>NX8XA0pklw%~vk?ps4*#$FHQ28+6Y9Eq`M?>Dm~mon^}{ z-6OK%epFZ@7>wII_a{l^|UA}4|p%swd7@*_>%Zg%2@Xl~f&M)QcaiQE7GMc%# z$h~6hv~8f&oo*x_)5^QmB;{<*>N72o7^$?Gs-swdyI zVU3_KZ61rL1=2SOKb|eJYpVOl&KQ;Da%}E7=bub-rRRGWLi%{^R^wmtYaVX;G`i1; z(p|BY(k_+0yN(NMgeJFtw+Owr>Q5e`d{$2QclK{q|M$>*ULcHGWTOJP|2dpW)XoL` zpVNQu{P`T@h5oOvP(Q#feeFMBU;CHmdVYAGwVrjab+2_lFKv-C=;)Xd21QId<_CF6F0@g>GOm7fKQh+eOW*1Ca99xf-UsG&bPRtm({3|p)mZ|LI zzJ6@MozHx7a5ZsbPiF6K^PwoE!aq(NP_|rPu77MD59?SL?8tlQWoHhLU2n7TXaDx&%8jEM>;^M$J2$t7c@j{ zQBG%t{g$}3xEBh6eQ#}Azf%(H;Q zIa0dd)!EGH9TCHP}T3ykqAj!!(ca7I=ZLV6Kmc@oHyt)XVVI!}oZ6*1lHrCU9-`Y+JAIRJ?w7B5Df& ziIZXjbGE!bCQJ8`6IBSXMf)<>+IM6Vmsx;C?)fr1`XL3sCZPiJp8~cq)!xBbg@rD| zJI#zSk!EIQUcu?)Y2p@-${EB)l3yTs-=d|oIv^gcajT1riFBgI9sMmu|IUk>x75!5 z8L(*^GD{9xQNQUvE_x>TE;@2|tz%2m>4VZP@UB`LOaGZp#HUZ6yhe4j_&2H5UieXB zgM;S83q_(6WmJ!bw4OQ>@;w*-ALAYM?y=HR6?l z>4Pgq*io+YHd1dRo!vuE2+x0H!_+YZ6QBCU>P>#%6~`;y1Em$>2X36ul79%4tw$(O z6`Xp0V>S^8ZfEYbQ#IxP;Suks=q$i98N^D)e zXS}~7*z9$;$4R8xRdXMAtnk{YyVm++tL*NUW^oEU($D0hpx-+Bn^Dlr>?^Z=bkEuKb5?TW!mJ_Sp=oCfd zGuO3tp_=GQu#uqi(&jD0nYNXS#?r@5VghbCOG)0av?Q5%Hjc?MCcGB8#2BGnXhzv! zCA632@A4A{+uNAh?A>V4Vy^bBJY_7^&8LUxVgl$BzO3DJ?5VbG%%U<0rql_}j5aAK zM$`m)IL{4~;}vmt2Ct<@6J~aMzv@kbJkJ*imwx#hT>cjFiGS1W-|`@B=ha1>$7<|S ziWTOP;b$)7HW4_5pM*Z?;wyVCytW8+RGYOz+z>STVFlt;BUGm;{;E@&6*$Y=BYt?*GwgZi4L8Fl+84p~U17)VN ze^a%?iOD@UXypNrSWEFfDR)tHN(VbYAk#zwlmWs#?=qyOYs!CEBXQpQ{(g{$N#-G3Xjb zBl%8UJ*#30EiSPuzy?n~yK27w#+S2=WK|OugA5J_&AcnZe@U!6L}FjzHwaepm(}0I z^hHa-oVrEyCS{UPUkqkRw_!%Z*J|Eedt>yoNu=Owi-B&A;7j{?9D{&u5R!G=vD+AIm(Jmn~~pv0Td5zo%tD3Yp0)INsd7|K)tH#v{pc ztjo2T1`auB+_|`ptI-7!bE3C=+^qqu>!PZUo^9bpA(`n_68!lhY7V+JKcw+ix%&AcKrG8PB3vb zlIQGSl8$Z80~A3T^Fueu-+k*uwUDUVELn|Yro1DY&{N8(EM?jjwlRaMq??{D1Bly>6GAl_kLE>kH&VBTZXJ%DBewA3Kn=e}yamb#PIH_~ z)CLwUS*V5jYfAozej)uZ7-74Z1~JmeIQI6O^}&A)`mRol`cm{?jbQp5?xIh~H#NSJ z<7X9XO{1Gno@0%CQoc2sGvXl;YvLwSKLfeBU|i@NpbaYXvIc~1m=#sl22DOYNy$%u zsQKu% zpa!}V|6UJF%k%iX*A#}>K_!~o&$Y|wE>Hn%WW;bP?oxYM)L0mwx!Ioz=!lMtt<6`m zn$cI6{~@yvkwd(Umo6~Iey5frh}lB4a3YS)x?mtgJi1lv27KU$D z#R*gTA;yS{64O3Pm8;jXgX}j5c{B*xm)`RY+@;+6(2&;HV|TpE{HcEs*TOW#v6AL+ z@RV#~y7@+qPV;A9-LLQFtmn@L#K_H!1e=ZSocj#%6Y~oWuBl9Mc%hUBb$NH;tr{42 zk`HJP8-SQtoEd(g)R{L|Qq~>O8Z7{Zw05)Q$LX;tOvrSaN<&?C%Wt3yFMpX9eZUi6 zyUSexiJe6U(9No6CKt#lU=?MlroJ>^E?lq%IJO zxcn0j4-XX(+`^*IiO9vBV>#GgpO=P0o?dS=XkI!hYkglo$-?yfgPu*qD>rbE$kf#l zZms{#qS6+r&whLHM-@((#y(KJ!q)@HWa+XKEN_CQkqW8?4sS z-@XqG2c+S5SchamBL`_n+bMP#-Kl|EnQ%x(Go6{Yh55xL^mcY@q>%4;L&&s2e-J|b zd5%P0caD+aJ`HaFW-mr*a$xb5I{n5VCJ0mO*W&yAalMs3(KRXd%+Zrto$PeYsD$i% zv3kp~9k4=$7NkqcGMvQzo`-yvU3@Yy?zWq}Pk%CG*Q)S<(=e7Kd0cC5L+GqE)<`5NnuL7q05K|Q0*Lf)RraB`??3!U8UDWm|NM^p g4~PF|9M&Q&$PRy8Ud@RDe!(Ebb)-4n^lsGu0lb4e!vFvP literal 0 HcmV?d00001 diff --git a/examples/file_dialog/src/main.rs b/examples/file_dialog/src/main.rs index 4afa9492..501cae24 100644 --- a/examples/file_dialog/src/main.rs +++ b/examples/file_dialog/src/main.rs @@ -5,6 +5,7 @@ use eframe::egui; fn main() { let options = eframe::NativeOptions { drag_and_drop_support: true, + initial_window_size: Some(egui::vec2(320.0, 240.0)), ..Default::default() }; eframe::run_native( diff --git a/examples/hello_world/Cargo.toml b/examples/hello_world/Cargo.toml index d0c07a05..b83f6557 100644 --- a/examples/hello_world/Cargo.toml +++ b/examples/hello_world/Cargo.toml @@ -9,5 +9,7 @@ publish = false [dependencies] -eframe = { path = "../../crates/eframe" } +eframe = { path = "../../crates/eframe", features = [ + "__screenshot", # __screenshot is so we can dump a ascreenshot using EFRAME_SCREENSHOT_TO +] } tracing-subscriber = "0.3" diff --git a/examples/hello_world/README.md b/examples/hello_world/README.md index d528b1bc..08c58a7d 100644 --- a/examples/hello_world/README.md +++ b/examples/hello_world/README.md @@ -1,3 +1,7 @@ +Example showing some UI controls like `Label`, `TextEdit`, `Slider`, `Button`. + ```sh cargo run -p hello_world ``` + +![](screenshot.png) diff --git a/examples/hello_world/screenshot.png b/examples/hello_world/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..765339d401b9bd00ca9f7ae69d702ab946c0466d GIT binary patch literal 7671 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 literal 0 HcmV?d00001 diff --git a/examples/hello_world/src/main.rs b/examples/hello_world/src/main.rs index a1f91f05..a3e70a42 100644 --- a/examples/hello_world/src/main.rs +++ b/examples/hello_world/src/main.rs @@ -6,7 +6,10 @@ fn main() { // Log to stdout (if you run with `RUST_LOG=debug`). tracing_subscriber::fmt::init(); - let options = eframe::NativeOptions::default(); + let options = eframe::NativeOptions { + initial_window_size: Some(egui::vec2(320.0, 240.0)), + ..Default::default() + }; eframe::run_native( "My egui App", options, diff --git a/examples/keyboard_events/Cargo.toml b/examples/keyboard_events/Cargo.toml index f2230942..693ff8b6 100644 --- a/examples/keyboard_events/Cargo.toml +++ b/examples/keyboard_events/Cargo.toml @@ -9,5 +9,7 @@ publish = false [dependencies] -eframe = { path = "../../crates/eframe" } +eframe = { path = "../../crates/eframe", features = [ + "__screenshot", # __screenshot is so we can dump a ascreenshot using EFRAME_SCREENSHOT_TO +] } tracing-subscriber = "0.3" diff --git a/examples/keyboard_events/README.md b/examples/keyboard_events/README.md index d528b1bc..afe67b25 100644 --- a/examples/keyboard_events/README.md +++ b/examples/keyboard_events/README.md @@ -1,3 +1,5 @@ ```sh cargo run -p hello_world ``` + +![](screenshot.png) diff --git a/examples/keyboard_events/screenshot.png b/examples/keyboard_events/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..b8ab11720e3ef15483820d023e410d951e436717 GIT binary patch literal 7505 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

L`}ywn1$W0C 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 Lo{lf=L(=~Xucx({ literal 0 HcmV?d00001 diff --git a/examples/retained_image/src/main.rs b/examples/retained_image/src/main.rs index b67a71d0..dc6b59c0 100644 --- a/examples/retained_image/src/main.rs +++ b/examples/retained_image/src/main.rs @@ -5,7 +5,7 @@ use egui_extras::RetainedImage; fn main() { let options = eframe::NativeOptions { - initial_window_size: Some(egui::vec2(500.0, 900.0)), + initial_window_size: Some(egui::vec2(300.0, 900.0)), ..Default::default() }; diff --git a/examples/screenshot/Cargo.toml b/examples/screenshot/Cargo.toml index 3be923e6..0056c194 100644 --- a/examples/screenshot/Cargo.toml +++ b/examples/screenshot/Cargo.toml @@ -9,6 +9,8 @@ publish = false [dependencies] -eframe = { path = "../../crates/eframe" } +eframe = { path = "../../crates/eframe", features = [ + "__screenshot", # __screenshot is so we can dump a ascreenshot using EFRAME_SCREENSHOT_TO +] } egui_extras = { path = "../../crates/egui_extras", features = ["image"] } itertools = "0.10.3" diff --git a/examples/screenshot/README.md b/examples/screenshot/README.md index 416c8bba..fb08d426 100644 --- a/examples/screenshot/README.md +++ b/examples/screenshot/README.md @@ -1,3 +1,7 @@ +Example how to take screenshots and display them with eframe/egui. + ```sh cargo run -p screenshot ``` + +![](screenshot.png) diff --git a/examples/screenshot/screenshot.png b/examples/screenshot/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..27bf79908a180803fb8ad3887e3e41ff227a1caf GIT binary patch literal 6645 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 literal 0 HcmV?d00001 diff --git a/examples/screenshot/src/main.rs b/examples/screenshot/src/main.rs index 7dfaf7ef..1ac45460 100644 --- a/examples/screenshot/src/main.rs +++ b/examples/screenshot/src/main.rs @@ -74,23 +74,25 @@ impl eframe::App for MyApp { self.take_screenshot = false; if let Some(gl) = frame.gl() { - let mut buf = vec![0u8; screen_size_px[0] as usize * screen_size_px[1] as usize * 4]; + let [w, h] = screen_size_px; + let mut buf = vec![0u8; w as usize * h as usize * 4]; let pixels = glow::PixelPackData::Slice(&mut buf[..]); unsafe { gl.read_pixels( 0, 0, - screen_size_px[0] as i32, - screen_size_px[1] as i32, + w as i32, + h as i32, glow::RGBA, glow::UNSIGNED_BYTE, pixels, ); } + // Flip vertically: let mut rows: Vec> = buf .into_iter() - .chunks(screen_size_px[0] as usize * 4) + .chunks(w as usize * 4) .into_iter() .map(|chunk| chunk.collect()) .collect(); diff --git a/examples/serial_windows/Cargo.toml b/examples/serial_windows/Cargo.toml index 16a90ec7..7e585867 100644 --- a/examples/serial_windows/Cargo.toml +++ b/examples/serial_windows/Cargo.toml @@ -9,4 +9,6 @@ publish = false [dependencies] -eframe = { path = "../../crates/eframe" } +eframe = { path = "../../crates/eframe", features = [ + "__screenshot", # __screenshot is so we can dump a ascreenshot using EFRAME_SCREENSHOT_TO +] } diff --git a/examples/serial_windows/README.md b/examples/serial_windows/README.md index 4941ce27..278023cd 100644 --- a/examples/serial_windows/README.md +++ b/examples/serial_windows/README.md @@ -6,3 +6,5 @@ See also . ```sh cargo run -p serial_windows ``` + +![](screenshot.png) diff --git a/examples/serial_windows/screenshot.png b/examples/serial_windows/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..bf9c436073d9e6d85b5b0b64f2fdbe96e0ac5818 GIT binary patch literal 1680 zcmeAS@N?(olHy`uVBq!ia0y~yU~~YoKX9-C$wJ+|*$fP9;hrvzAr*7p-aXyjU(Im* z*H*L7?{46i#w<=vLtaT2zWCzMlf+45pqzN z#=x|ZZP)8|G2N&TF};|GXJ=<$@2%U*FK;*H`uh0k{`2ihl^agJmOL<1WPjGbKR=)T z{{Ehc!zc2*>Ia{$`!jYHKQF6iT(&Hofw3;!UbO)z`~Dx(nH<~i4FAuz@k*ci_V)Ja zM@PGN2WGMhi|fT`01eb#9k%w>JBBkkler!&^PPR_!-s;MWpAT)7Cv^9l$6Z;es5px z?ON^+{|#0$yt}b+am>!5r7?S}wo3QzDtQ_7{rmi1zki=TH`n@fm#B7>f`0tIn7BO^ z7i*1wS!Z8gm%Dsd`MW!rj&qIE{i^G3Zc2T6b#?etpab4s6>oTX?S8Cq(BTmO#N)@` zyYtD}+;~*}``g=3Z*OlmTlZcp@8+hZId^t!jM-ne_s-tx?KS`Y?5y53g_)giimLat zDYMPdz|YcD|{(x3_IA zteu{((-T^|@13Tcecc}EsYS1^tu1d8coSki+JM&lknwXuNWczwp z*H!)dQyIChrqZ(bna|D5>Hd~gUovJhUR#=1yKi54#gh{g-<=F(W@gT1`}yMH;yf0E zS~Zyi?fml7fNHnTeDL^q|8DF5>&|`1I&f_D$3LH*df&coUHU2{a(`XzZSFhU^W%4x zzmKc@`6<=1@>9xpl>_Imf`Wrz=hddt>+51uUtU^zcW$6*$>y}Puk8N5{P*{F?*8@r zjDoM8Z*FdW`)`KSm8u0n(@%Y^i)G?3JJ0YZ$M%2ll7)Hk@7}-SDfs^GZtgc=*zCS^ z{d%~VPDB7Og04^740N4d{Qf%K<^J>Y+GV4+=j9sjt6K5#!NKODZ*OiI+1T7U6p`L+ zT4lQG`T6a@9r+My8r)b%hN;d-d?S~uQYyxUhVPK-fwo5|9En8a^9D4U{Y<@Wc?5> z=#XIb1)Bc9@+8>y%*fm$!t2vMk8#cNJ;s_%Ul%O>H#@0erPPac@~bwk6hH8O*>fI& y2j!{_4m#Mf42wX=s1&>a84V5O;&jl3#$QI(^|nX$-%tS6Gz^}uelF{r5}E*t*qBBD literal 0 HcmV?d00001 diff --git a/examples/serial_windows/src/main.rs b/examples/serial_windows/src/main.rs index 72981164..13544319 100644 --- a/examples/serial_windows/src/main.rs +++ b/examples/serial_windows/src/main.rs @@ -9,6 +9,7 @@ fn main() { let options = eframe::NativeOptions { run_and_return: true, + initial_window_size: Some(egui::vec2(320.0, 240.0)), ..Default::default() }; diff --git a/examples/svg/Cargo.toml b/examples/svg/Cargo.toml index 4bc9682d..489692e5 100644 --- a/examples/svg/Cargo.toml +++ b/examples/svg/Cargo.toml @@ -9,5 +9,7 @@ publish = false [dependencies] -eframe = { path = "../../crates/eframe" } +eframe = { path = "../../crates/eframe", features = [ + "__screenshot", # __screenshot is so we can dump a ascreenshot using EFRAME_SCREENSHOT_TO +] } egui_extras = { path = "../../crates/egui_extras", features = ["svg"] } diff --git a/examples/svg/README.md b/examples/svg/README.md index 7fedd163..c171c172 100644 --- a/examples/svg/README.md +++ b/examples/svg/README.md @@ -1,6 +1,7 @@ Example how to show an SVG image. - ```sh cargo run -p svg ``` + +![](screenshot.png) diff --git a/examples/svg/screenshot.png b/examples/svg/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..7b3d6222ca7172022cd589bc66c7e1117731c610 GIT binary patch literal 60851 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 kq}SR@bod{;-qu`KA|T1D3EL~ytXhLE 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 Date: Sun, 4 Dec 2022 12:17:12 -0600 Subject: [PATCH 028/143] Implement accessibility APIs via AccessKit (#2294) * squash before rebase * Update AccessKit, introducing support for editable spinners on Windows and an important fix for navigation order on macOS * Restore support for increment and decrement actions in DragValue * Avoid VoiceOver race condition bug * fix clippy lint * Tell AccessKit that the default action for a text edit (equivalent to a click) is to set the focus. This matters to some platform adapters. * Refactor InputState functions for AccessKit actions * Support the AccessKit SetValue for DragValue; this is the only way for a Windows AT to programmatically adjust the value * Same for Slider * Properly associate the slider label with both the slider and the drag value * Lazily activate egui's AccessKit support * fix clippy lint * Update AccessKit * More documentation, particularly around lazy activation * Tweak one of the doc comments * See if I can get AccessKit exempted from the 'missing backticks' lint * Make PlatformOutput::accesskit_update an Option * Refactor lazy activation * Refactor node mutation (again) * Eliminate the need for an explicit is_accesskit_active method, at least for now * Fix doc comment * More refactoring of tree construction; don't depend on Arc::get_mut * Override a clippy lint; I seem to have no other choice * Final planned refactor: a more flexible approach to hierarchy * Last AccessKit update for this PR; includes an important macOS DPI fix * Move and document the optional accesskit dependency * Fix comment typo Co-authored-by: Emil Ernerfeldt * reformat * More elegant code for conditionally creating a node Co-authored-by: Emil Ernerfeldt * Set step to 1.0 for all integer sliders * Add doc example for Response::labelled_by * Clarify a TODO comment I left for myself Co-authored-by: Emil Ernerfeldt --- CHANGELOG.md | 1 + Cargo.lock | 196 +++++++++++++++++- clippy.toml | 1 + crates/eframe/CHANGELOG.md | 1 + crates/eframe/Cargo.toml | 5 +- crates/eframe/src/native/epi_integration.rs | 28 +++ crates/eframe/src/native/run.rs | 57 ++++- crates/eframe/src/web/backend.rs | 2 + crates/egui-winit/CHANGELOG.md | 1 + crates/egui-winit/Cargo.toml | 6 + crates/egui-winit/src/lib.rs | 43 ++++ crates/egui/Cargo.toml | 6 +- crates/egui/src/context.rs | 140 ++++++++++++- crates/egui/src/data/input.rs | 4 + crates/egui/src/data/output.rs | 25 +++ crates/egui/src/frame_state.rs | 18 ++ crates/egui/src/id.rs | 5 + crates/egui/src/input_state.rs | 27 +++ crates/egui/src/lib.rs | 30 +++ crates/egui/src/memory.rs | 33 ++- crates/egui/src/response.rs | 101 ++++++++- crates/egui/src/widgets/drag_value.rs | 124 ++++++++--- crates/egui/src/widgets/label.rs | 22 +- crates/egui/src/widgets/slider.rs | 127 ++++++++---- crates/egui/src/widgets/text_edit/builder.rs | 134 +++++++++++- .../src/widgets/text_edit/cursor_range.rs | 2 +- crates/epaint/src/text/cursor.rs | 2 +- examples/hello_world/src/main.rs | 5 +- 28 files changed, 1049 insertions(+), 97 deletions(-) create mode 100644 clippy.toml diff --git a/CHANGELOG.md b/CHANGELOG.md index 45278cb3..9c983ba0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ NOTE: [`epaint`](crates/epaint/CHANGELOG.md), [`eframe`](crates/eframe/CHANGELOG * Added `Area::constrain` and `Window::constrain` which constrains area to the screen bounds. ([#2270](https://github.com/emilk/egui/pull/2270)). * Added `Area::pivot` and `Window::pivot` which controls what part of the window to position. ([#2303](https://github.com/emilk/egui/pull/2303)). * Added support for [thin space](https://en.wikipedia.org/wiki/Thin_space). +* Added optional integration with [AccessKit](https://accesskit.dev/) for implementing platform accessibility APIs. ([#2294](https://github.com/emilk/egui/pull/2294)). ### Changed 🔧 * Panels always have a separator line, but no stroke on other sides. Their spacing has also changed slightly ([#2261](https://github.com/emilk/egui/pull/2261)). diff --git a/Cargo.lock b/Cargo.lock index 66dcdb9f..421a5df6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -18,6 +18,68 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a13739d7177fbd22bb0ed28badfff9f372f8bef46c863db4e1c6248f6b223b6e" +[[package]] +name = "accesskit" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3083ac5a97521e35388ca80cf365b6be5210962cc59f11ee238cd92ac2fa9524" +dependencies = [ + "enumset", + "kurbo", + "serde", +] + +[[package]] +name = "accesskit_consumer" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df122220244ca3ab93f6a42da59a5f8b379c8846dbcaedf922d95636d22c4e10" +dependencies = [ + "accesskit", + "parking_lot", +] + +[[package]] +name = "accesskit_macos" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55c97d7b5cbb2409e05b016406a1bd057237d120205cb63220ca86c2ea3790a1" +dependencies = [ + "accesskit", + "accesskit_consumer", + "objc2", + "once_cell", + "parking_lot", +] + +[[package]] +name = "accesskit_windows" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b0cfda25182b83b24e350434a3f63676252a00a295f32760a14d3f55feb8493" +dependencies = [ + "accesskit", + "accesskit_consumer", + "arrayvec 0.7.2", + "once_cell", + "parking_lot", + "paste", + "windows 0.42.0", +] + +[[package]] +name = "accesskit_winit" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdf20fecd6573e03bebcb4de267f82431e5ea39a293b62aa51a45bdfd69ef39b" +dependencies = [ + "accesskit", + "accesskit_macos", + "accesskit_windows", + "parking_lot", + "winit", +] + [[package]] name = "addr2line" version = "0.17.0" @@ -369,6 +431,25 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" +[[package]] +name = "block-sys" +version = "0.1.0-beta.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa55741ee90902547802152aaf3f8e5248aab7e21468089560d4c8840561146" +dependencies = [ + "objc-sys", +] + +[[package]] +name = "block2" +version = "0.2.0-alpha.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dd9e63c1744f755c2f60332b88de39d341e5e86239014ad839bd71c106dec42" +dependencies = [ + "block-sys", + "objc2-encode", +] + [[package]] name = "bumpalo" version = "3.11.0" @@ -923,8 +1004,18 @@ version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.13.4", + "darling_macro 0.13.4", +] + +[[package]] +name = "darling" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0dd3cd20dc6b5a876612a6e5accfe7f3dd883db6d07acfbf14c128f61550dfa" +dependencies = [ + "darling_core 0.14.2", + "darling_macro 0.14.2", ] [[package]] @@ -941,13 +1032,37 @@ dependencies = [ "syn", ] +[[package]] +name = "darling_core" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a784d2ccaf7c98501746bf0be29b2022ba41fd62a2e622af997a03e9f972859f" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "darling_macro" version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" dependencies = [ - "darling_core", + "darling_core 0.13.4", + "quote", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7618812407e9402654622dd402b0a89dff9ba93badd6540781526117b92aab7e" +dependencies = [ + "darling_core 0.14.2", "quote", "syn", ] @@ -1166,6 +1281,7 @@ dependencies = [ name = "egui" version = "0.19.0" dependencies = [ + "accesskit", "ahash 0.8.1", "document-features", "epaint", @@ -1194,6 +1310,7 @@ dependencies = [ name = "egui-winit" version = "0.19.0" dependencies = [ + "accesskit_winit", "arboard", "document-features", "egui", @@ -1361,6 +1478,28 @@ dependencies = [ "syn", ] +[[package]] +name = "enumset" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19be8061a06ab6f3a6cf21106c873578bf01bd42ad15e0311a9c76161cb1c753" +dependencies = [ + "enumset_derive", + "serde", +] + +[[package]] +name = "enumset_derive" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03e7b551eba279bf0fa88b83a46330168c1560a52a94f5126f892f0b364ab3e0" +dependencies = [ + "darling 0.14.2", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "epaint" version = "0.19.0" @@ -2103,6 +2242,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a53776d271cfb873b17c618af0298445c88afc52837f3e948fa3fafd131f449" dependencies = [ "arrayvec 0.7.2", + "serde", ] [[package]] @@ -2349,7 +2489,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0df7ac00c4672f9d5aece54ee3347520b7e20f158656c7db2e6de01902eb7a6c" dependencies = [ - "darling", + "darling 0.13.4", "proc-macro-crate", "proc-macro2", "quote", @@ -2510,6 +2650,32 @@ dependencies = [ "objc_id", ] +[[package]] +name = "objc-sys" +version = "0.2.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7" + +[[package]] +name = "objc2" +version = "0.3.0-beta.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe31e5425d3d0b89a15982c024392815da40689aceb34bad364d58732bcfd649" +dependencies = [ + "block2", + "objc-sys", + "objc2-encode", +] + +[[package]] +name = "objc2-encode" +version = "2.0.0-pre.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abfcac41015b00a120608fdaa6938c44cb983fee294351cc4bac7638b4e50512" +dependencies = [ + "objc-sys", +] + [[package]] name = "objc_exception" version = "0.1.2" @@ -2634,6 +2800,12 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "paste" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1de2e551fb905ac83f73f7aedf2f0cb4a0da7e35efa24a202a936269f1f18e1" + [[package]] name = "peeking_take_while" version = "0.1.2" @@ -4374,6 +4546,7 @@ version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0286ba339aa753e70765d521bb0242cc48e1194562bfa2a2ad7ac8a6de28f5d5" dependencies = [ + "windows-implement", "windows_aarch64_gnullvm", "windows_aarch64_msvc 0.42.0", "windows_i686_gnu 0.42.0", @@ -4383,6 +4556,17 @@ dependencies = [ "windows_x86_64_msvc 0.42.0", ] +[[package]] +name = "windows-implement" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9539b6bd3eadbd9de66c9666b22d802b833da7e996bc06896142e09854a61767" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "windows-sys" version = "0.36.1" @@ -4500,9 +4684,9 @@ checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" [[package]] name = "winit" -version = "0.27.2" +version = "0.27.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a8f3e9d742401efcfe833b8f84960397482ff049cb7bf59a112e14a4be97f7" +checksum = "bb796d6fbd86b2fd896c9471e6f04d39d750076ebe5680a3958f00f5ab97657c" dependencies = [ "bitflags", "cocoa", diff --git a/clippy.toml b/clippy.toml new file mode 100644 index 00000000..f09ee277 --- /dev/null +++ b/clippy.toml @@ -0,0 +1 @@ +doc-valid-idents = ["AccessKit", ".."] diff --git a/crates/eframe/CHANGELOG.md b/crates/eframe/CHANGELOG.md index 6402ee2a..3759b1ed 100644 --- a/crates/eframe/CHANGELOG.md +++ b/crates/eframe/CHANGELOG.md @@ -18,6 +18,7 @@ NOTE: [`egui-winit`](../egui-winit/CHANGELOG.md), [`egui_glium`](../egui_glium/C * Web: Add `WebInfo::user_agent` ([#2202](https://github.com/emilk/egui/pull/2202)). * Wgpu device/adapter/surface creation has now various configuration options exposed via `NativeOptions/WebOptions::wgpu_options` ([#2207](https://github.com/emilk/egui/pull/2207)). * Fix: Make sure that `native_pixels_per_point` is updated ([#2256](https://github.com/emilk/egui/pull/2256)). +* Added optional, but enabled by default, integration with [AccessKit](https://accesskit.dev/) for implementing platform accessibility APIs. ([#2294](https://github.com/emilk/egui/pull/2294)). ## 0.19.0 - 2022-08-20 diff --git a/crates/eframe/Cargo.toml b/crates/eframe/Cargo.toml index a0021a34..68586210 100644 --- a/crates/eframe/Cargo.toml +++ b/crates/eframe/Cargo.toml @@ -20,7 +20,10 @@ all-features = true [features] -default = ["default_fonts", "glow"] +default = ["accesskit", "default_fonts", "glow"] + +## Enable platform accessibility API implementations through [AccessKit](https://accesskit.dev/). +accesskit = ["egui/accesskit", "egui-winit/accesskit"] ## Detect dark mode system preference using [`dark-light`](https://docs.rs/dark-light). ## diff --git a/crates/eframe/src/native/epi_integration.rs b/crates/eframe/src/native/epi_integration.rs index 2d75d998..0cda6fcb 100644 --- a/crates/eframe/src/native/epi_integration.rs +++ b/crates/eframe/src/native/epi_integration.rs @@ -3,6 +3,10 @@ use winit::event_loop::EventLoopWindowTarget; #[cfg(target_os = "macos")] use winit::platform::macos::WindowBuilderExtMacOS as _; +#[cfg(feature = "accesskit")] +use egui::accesskit; +#[cfg(feature = "accesskit")] +use egui_winit::accesskit_winit; use egui_winit::{native_pixels_per_point, EventResponse, WindowSettings}; use crate::{epi, Theme, WindowInfo}; @@ -262,6 +266,25 @@ impl EpiIntegration { } } + #[cfg(feature = "accesskit")] + pub fn init_accesskit + Send>( + &mut self, + window: &winit::window::Window, + event_loop_proxy: winit::event_loop::EventLoopProxy, + ) { + let egui_ctx = self.egui_ctx.clone(); + self.egui_winit + .init_accesskit(window, event_loop_proxy, move || { + // This function is called when an accessibility client + // (e.g. screen reader) makes its first request. If we got here, + // we know that an accessibility tree is actually wanted. + egui_ctx.enable_accesskit(); + // Enqueue a repaint so we'll receive a full tree update soon. + egui_ctx.request_repaint(); + egui::accesskit_placeholder_tree_update() + }); + } + pub fn warm_up(&mut self, app: &mut dyn epi::App, window: &winit::window::Window) { crate::profile_function!(); let saved_memory: egui::Memory = self.egui_ctx.memory().clone(); @@ -301,6 +324,11 @@ impl EpiIntegration { self.egui_winit.on_event(&self.egui_ctx, event) } + #[cfg(feature = "accesskit")] + pub fn on_accesskit_action_request(&mut self, request: accesskit::ActionRequest) { + self.egui_winit.on_accesskit_action_request(request); + } + pub fn update( &mut self, app: &mut dyn epi::App, diff --git a/crates/eframe/src/native/run.rs b/crates/eframe/src/native/run.rs index 27987687..9739cde9 100644 --- a/crates/eframe/src/native/run.rs +++ b/crates/eframe/src/native/run.rs @@ -4,6 +4,8 @@ use std::time::Duration; use std::time::Instant; +#[cfg(feature = "accesskit")] +use egui_winit::accesskit_winit; use egui_winit::winit; use winit::event_loop::{ ControlFlow, EventLoop, EventLoopBuilder, EventLoopProxy, EventLoopWindowTarget, @@ -15,6 +17,15 @@ use crate::epi; #[derive(Debug)] pub enum UserEvent { RequestRepaint, + #[cfg(feature = "accesskit")] + AccessKitActionRequest(accesskit_winit::ActionRequestEvent), +} + +#[cfg(feature = "accesskit")] +impl From for UserEvent { + fn from(inner: accesskit_winit::ActionRequestEvent) -> Self { + Self::AccessKitActionRequest(inner) + } } // ---------------------------------------------------------------------------- @@ -353,7 +364,9 @@ mod glow_integration { let window_builder = epi_integration::window_builder(native_options, &window_settings) .with_title(title) - .with_visible(false); // Keep hidden until we've painted something. See https://github.com/emilk/egui/pull/2279 + // Keep hidden until we've painted something. See https://github.com/emilk/egui/pull/2279 + // We must also keep the window hidden until AccessKit is initialized. + .with_visible(false); let gl_window = unsafe { glutin::ContextBuilder::new() @@ -400,6 +413,10 @@ mod glow_integration { #[cfg(feature = "wgpu")] None, ); + #[cfg(feature = "accesskit")] + { + integration.init_accesskit(gl_window.window(), self.repaint_proxy.lock().clone()); + } let theme = system_theme.unwrap_or(self.native_options.default_theme); integration.egui_ctx.set_visuals(theme.egui_visuals()); @@ -671,6 +688,21 @@ mod glow_integration { EventResult::Wait } } + #[cfg(feature = "accesskit")] + winit::event::Event::UserEvent(UserEvent::AccessKitActionRequest( + accesskit_winit::ActionRequestEvent { request, .. }, + )) => { + if let Some(running) = &mut self.running { + running + .integration + .on_accesskit_action_request(request.clone()); + // As a form of user input, accessibility actions should + // lead to a repaint. + EventResult::RepaintNext + } else { + EventResult::Wait + } + } _ => EventResult::Wait, } } @@ -769,7 +801,9 @@ mod wgpu_integration { let window_settings = epi_integration::load_window_settings(storage); epi_integration::window_builder(native_options, &window_settings) .with_title(title) - .with_visible(false) // Keep hidden until we've painted something. See https://github.com/emilk/egui/pull/2279 + // Keep hidden until we've painted something. See https://github.com/emilk/egui/pull/2279 + // We must also keep the window hidden until AccessKit is initialized. + .with_visible(false) .build(event_loop) .unwrap() } @@ -825,6 +859,10 @@ mod wgpu_integration { None, wgpu_render_state.clone(), ); + #[cfg(feature = "accesskit")] + { + integration.init_accesskit(&window, self.repaint_proxy.lock().unwrap().clone()); + } let theme = system_theme.unwrap_or(self.native_options.default_theme); integration.egui_ctx.set_visuals(theme.egui_visuals()); @@ -1068,6 +1106,21 @@ mod wgpu_integration { EventResult::Wait } } + #[cfg(feature = "accesskit")] + winit::event::Event::UserEvent(UserEvent::AccessKitActionRequest( + accesskit_winit::ActionRequestEvent { request, .. }, + )) => { + if let Some(running) = &mut self.running { + running + .integration + .on_accesskit_action_request(request.clone()); + // As a form of user input, accessibility actions should + // lead to a repaint. + EventResult::RepaintNext + } else { + EventResult::Wait + } + } _ => EventResult::Wait, } } diff --git a/crates/eframe/src/web/backend.rs b/crates/eframe/src/web/backend.rs index c4fcaf20..191709c3 100644 --- a/crates/eframe/src/web/backend.rs +++ b/crates/eframe/src/web/backend.rs @@ -400,6 +400,8 @@ impl AppRunner { events: _, // already handled mutable_text_under_cursor, text_cursor_pos, + #[cfg(feature = "accesskit")] + accesskit_update: _, // not currently implemented } = platform_output; set_cursor_icon(cursor_icon); diff --git a/crates/egui-winit/CHANGELOG.md b/crates/egui-winit/CHANGELOG.md index 317786e3..b9fbdd0c 100644 --- a/crates/egui-winit/CHANGELOG.md +++ b/crates/egui-winit/CHANGELOG.md @@ -5,6 +5,7 @@ All notable changes to the `egui-winit` integration will be noted in this file. ## Unreleased * The default features of the `winit` crate are not enabled if the default features of `egui-winit` are disabled too ([#1971](https://github.com/emilk/egui/pull/1971)) * Added new feature `wayland` which enables Wayland support ([#1971](https://github.com/emilk/egui/pull/1971)) +* Added optional integration with [AccessKit](https://accesskit.dev/) for implementing platform accessibility APIs. ([#2294](https://github.com/emilk/egui/pull/2294)). ## 0.19.0 - 2022-08-20 * MSRV (Minimum Supported Rust Version) is now `1.61.0` ([#1846](https://github.com/emilk/egui/pull/1846)). diff --git a/crates/egui-winit/Cargo.toml b/crates/egui-winit/Cargo.toml index 4667646c..afd4457a 100644 --- a/crates/egui-winit/Cargo.toml +++ b/crates/egui-winit/Cargo.toml @@ -20,6 +20,9 @@ all-features = true [features] default = ["clipboard", "links", "wayland", "winit/default"] +## Enable platform accessibility API implementations through [AccessKit](https://accesskit.dev/). +accesskit = ["accesskit_winit", "egui/accesskit"] + ## [`bytemuck`](https://docs.rs/bytemuck) enables you to cast [`egui::epaint::Vertex`], [`egui::Vec2`] etc to `&[u8]`. bytemuck = ["egui/bytemuck"] @@ -57,6 +60,9 @@ winit = { version = "0.27.2", default-features = false } ## Enable this when generating docs. document-features = { version = "0.2", optional = true } +# feature accesskit +accesskit_winit = { version = "0.7.1", optional = true } + puffin = { version = "0.14", optional = true } serde = { version = "1.0", optional = true, features = ["derive"] } diff --git a/crates/egui-winit/src/lib.rs b/crates/egui-winit/src/lib.rs index 6dde4124..fe802e19 100644 --- a/crates/egui-winit/src/lib.rs +++ b/crates/egui-winit/src/lib.rs @@ -11,7 +11,11 @@ use std::os::raw::c_void; +#[cfg(feature = "accesskit")] +pub use accesskit_winit; pub use egui; +#[cfg(feature = "accesskit")] +use egui::accesskit; pub use winit; pub mod clipboard; @@ -86,6 +90,9 @@ pub struct State { /// track ime state input_method_editor_started: bool, + + #[cfg(feature = "accesskit")] + accesskit: Option, } impl State { @@ -114,9 +121,26 @@ impl State { pointer_touch_id: None, input_method_editor_started: false, + + #[cfg(feature = "accesskit")] + accesskit: None, } } + #[cfg(feature = "accesskit")] + pub fn init_accesskit + Send>( + &mut self, + window: &winit::window::Window, + event_loop_proxy: winit::event_loop::EventLoopProxy, + initial_tree_update_factory: impl 'static + FnOnce() -> accesskit::TreeUpdate + Send, + ) { + self.accesskit = Some(accesskit_winit::Adapter::new( + window, + initial_tree_update_factory, + event_loop_proxy, + )); + } + /// Call this once a graphics context has been created to update the maximum texture dimensions /// that egui will use. pub fn set_max_texture_side(&mut self, max_texture_side: usize) { @@ -374,6 +398,16 @@ impl State { } } + /// Call this when there is a new [`accesskit::ActionRequest`]. + /// + /// The result can be found in [`Self::egui_input`] and be extracted with [`Self::take_egui_input`]. + #[cfg(feature = "accesskit")] + pub fn on_accesskit_action_request(&mut self, request: accesskit::ActionRequest) { + self.egui_input + .events + .push(egui::Event::AccessKitActionRequest(request)); + } + fn on_mouse_button_input( &mut self, state: winit::event::ElementState, @@ -592,6 +626,8 @@ impl State { events: _, // handled above mutable_text_under_cursor: _, // only used in eframe web text_cursor_pos, + #[cfg(feature = "accesskit")] + accesskit_update, } = platform_output; self.current_pixels_per_point = egui_ctx.pixels_per_point(); // someone can have changed it to scale the UI @@ -608,6 +644,13 @@ impl State { if let Some(egui::Pos2 { x, y }) = text_cursor_pos { window.set_ime_position(winit::dpi::LogicalPosition { x, y }); } + + #[cfg(feature = "accesskit")] + if let Some(accesskit) = self.accesskit.as_ref() { + if let Some(update) = accesskit_update { + accesskit.update_if_active(|| update); + } + } } fn set_cursor_icon(&mut self, window: &winit::window::Window, cursor_icon: egui::CursorIcon) { diff --git a/crates/egui/Cargo.toml b/crates/egui/Cargo.toml index 3e8e3ccc..b930bee9 100644 --- a/crates/egui/Cargo.toml +++ b/crates/egui/Cargo.toml @@ -52,7 +52,7 @@ mint = ["epaint/mint"] persistence = ["serde", "epaint/serde", "ron"] ## Allow serialization using [`serde`](https://docs.rs/serde). -serde = ["dep:serde", "epaint/serde"] +serde = ["dep:serde", "epaint/serde", "accesskit?/serde"] [dependencies] epaint = { version = "0.19.0", path = "../epaint", default-features = false } @@ -64,6 +64,10 @@ ahash = { version = "0.8.1", default-features = false, features = [ nohash-hasher = "0.2" #! ### Optional dependencies +## Exposes detailed accessibility implementation required by platform +## accessibility APIs. Also requires support in the egui integration. +accesskit = { version = "0.8.1", optional = true } + ## Enable this when generating docs. document-features = { version = "0.2", optional = true } diff --git a/crates/egui/src/context.rs b/crates/egui/src/context.rs index 6a2fed5b..12584d0d 100644 --- a/crates/egui/src/context.rs +++ b/crates/egui/src/context.rs @@ -67,6 +67,9 @@ struct ContextImpl { layer_rects_this_frame: ahash::HashMap>, /// Read layer_rects_prev_frame: ahash::HashMap>, + + #[cfg(feature = "accesskit")] + is_accesskit_enabled: bool, } impl ContextImpl { @@ -105,6 +108,25 @@ impl ContextImpl { interactable: true, }, ); + + #[cfg(feature = "accesskit")] + if self.is_accesskit_enabled { + use crate::frame_state::AccessKitFrameState; + let id = crate::accesskit_root_id(); + let node = Box::new(accesskit::Node { + role: accesskit::Role::Window, + transform: Some( + accesskit::kurbo::Affine::scale(self.input.pixels_per_point().into()).into(), + ), + ..Default::default() + }); + let mut nodes = IdMap::default(); + nodes.insert(id, node); + self.frame_state.accesskit_state = Some(AccessKitFrameState { + nodes, + parent_stack: vec![id], + }); + } } /// Load fonts unless already loaded. @@ -132,6 +154,19 @@ impl ContextImpl { } } } + + #[cfg(feature = "accesskit")] + fn accesskit_node(&mut self, id: Id) -> &mut accesskit::Node { + let state = self.frame_state.accesskit_state.as_mut().unwrap(); + let nodes = &mut state.nodes; + if let std::collections::hash_map::Entry::Vacant(entry) = nodes.entry(id) { + entry.insert(Default::default()); + let parent_id = state.parent_stack.last().unwrap(); + let parent = nodes.get_mut(parent_id).unwrap(); + parent.children.push(id.accesskit_id()); + } + nodes.get_mut(&id).unwrap() + } } // ---------------------------------------------------------------------------- @@ -456,16 +491,22 @@ impl Context { self.check_for_id_clash(id, rect, "widget"); + #[cfg(feature = "accesskit")] + if sense.focusable { + // Make sure anything that can receive focus has an AccessKit node. + // TODO(mwcampbell): For nodes that are filled from widget info, + // some information is written to the node twice. + if let Some(mut node) = self.accesskit_node(id) { + response.fill_accesskit_node_common(&mut node); + } + } + let clicked_elsewhere = response.clicked_elsewhere(); let ctx_impl = &mut *self.write(); let memory = &mut ctx_impl.memory; let input = &mut ctx_impl.input; - // We only want to focus labels if the screen reader is on. - let interested_in_focus = - sense.interactive() || sense.focusable && memory.options.screen_reader; - - if interested_in_focus { + if sense.focusable { memory.interested_in_focus(id); } @@ -477,6 +518,15 @@ impl Context { response.clicked[PointerButton::Primary as usize] = true; } + #[cfg(feature = "accesskit")] + { + if sense.click + && input.has_accesskit_action_request(response.id, accesskit::Action::Default) + { + response.clicked[PointerButton::Primary as usize] = true; + } + } + if sense.click || sense.drag { memory.interaction.click_interest |= hovered && sense.click; memory.interaction.drag_interest |= hovered && sense.drag; @@ -1003,7 +1053,29 @@ impl Context { textures_delta = ctx_impl.tex_manager.0.write().take_delta(); }; - let platform_output: PlatformOutput = std::mem::take(&mut self.output()); + #[cfg_attr(not(feature = "accesskit"), allow(unused_mut))] + let mut platform_output: PlatformOutput = std::mem::take(&mut self.output()); + + #[cfg(feature = "accesskit")] + { + let state = self.frame_state().accesskit_state.take(); + if let Some(state) = state { + let has_focus = self.input().raw.has_focus; + let root_id = crate::accesskit_root_id().accesskit_id(); + platform_output.accesskit_update = Some(accesskit::TreeUpdate { + nodes: state + .nodes + .into_iter() + .map(|(id, node)| (id.accesskit_id(), Arc::from(node))) + .collect(), + tree: Some(accesskit::Tree::new(root_id)), + focus: has_focus.then(|| { + let focus_id = self.memory().interaction.focus.id; + focus_id.map_or(root_id, |id| id.accesskit_id()) + }), + }); + } + } // if repaint_requests is greater than zero. just set the duration to zero for immediate // repaint. if there's no repaint requests, then we can use the actual repaint_after instead. @@ -1522,6 +1594,62 @@ impl Context { } } +/// ## Accessibility +impl Context { + /// Call the provided function with the given ID pushed on the stack of + /// parent IDs for accessibility purposes. If the `accesskit` feature + /// is disabled or if AccessKit support is not active for this frame, + /// the function is still called, but with no other effect. + pub fn with_accessibility_parent(&self, id: Id, f: impl FnOnce()) { + #[cfg(feature = "accesskit")] + { + let mut frame_state = self.frame_state(); + if let Some(state) = frame_state.accesskit_state.as_mut() { + state.parent_stack.push(id); + } + } + #[cfg(not(feature = "accesskit"))] + { + let _ = id; + } + f(); + #[cfg(feature = "accesskit")] + { + let mut frame_state = self.frame_state(); + if let Some(state) = frame_state.accesskit_state.as_mut() { + assert_eq!(state.parent_stack.pop(), Some(id)); + } + } + } + + /// If AccessKit support is active for the current frame, get or create + /// a node with the specified ID and return a mutable reference to it. + /// For newly crated nodes, the parent is the node with the ID at the top + /// of the stack managed by [`Context::with_accessibility_parent`]. + #[cfg(feature = "accesskit")] + pub fn accesskit_node(&self, id: Id) -> Option> { + let ctx = self.write(); + ctx.frame_state + .accesskit_state + .is_some() + .then(move || RwLockWriteGuard::map(ctx, |c| c.accesskit_node(id))) + } + + /// Enable generation of AccessKit tree updates in all future frames. + /// + /// If it's practical for the egui integration to immediately run the egui + /// application when it is either initializing the AccessKit adapter or + /// being called by the AccessKit adapter to provide the initial tree update, + /// then it should do so, to provide a complete AccessKit tree to the adapter + /// immediately. Otherwise, it should enqueue a repaint and use the + /// placeholder tree update from [`crate::accesskit_placeholder_tree_update`] + /// in the meantime. + #[cfg(feature = "accesskit")] + pub fn enable_accesskit(&self) { + self.write().is_accesskit_enabled = true; + } +} + #[test] fn context_impl_send_sync() { fn assert_send_sync() {} diff --git a/crates/egui/src/data/input.rs b/crates/egui/src/data/input.rs index bc5dcffe..0c079162 100644 --- a/crates/egui/src/data/input.rs +++ b/crates/egui/src/data/input.rs @@ -268,6 +268,10 @@ pub enum Event { /// The value is in the range from 0.0 (no pressure) to 1.0 (maximum pressure). force: f32, }, + + /// An assistive technology (e.g. screen reader) requested an action. + #[cfg(feature = "accesskit")] + AccessKitActionRequest(accesskit::ActionRequest), } /// Mouse button (or similar for touch input) diff --git a/crates/egui/src/data/output.rs b/crates/egui/src/data/output.rs index 405181a6..ffc51b08 100644 --- a/crates/egui/src/data/output.rs +++ b/crates/egui/src/data/output.rs @@ -85,6 +85,9 @@ pub struct PlatformOutput { /// Screen-space position of text edit cursor (used for IME). pub text_cursor_pos: Option, + + #[cfg(feature = "accesskit")] + pub accesskit_update: Option, } impl PlatformOutput { @@ -121,6 +124,8 @@ impl PlatformOutput { mut events, mutable_text_under_cursor, text_cursor_pos, + #[cfg(feature = "accesskit")] + accesskit_update, } = newer; self.cursor_icon = cursor_icon; @@ -133,6 +138,13 @@ impl PlatformOutput { self.events.append(&mut events); self.mutable_text_under_cursor = mutable_text_under_cursor; self.text_cursor_pos = text_cursor_pos.or(self.text_cursor_pos); + + #[cfg(feature = "accesskit")] + { + // egui produces a complete AccessKit tree for each frame, + // so overwrite rather than appending. + self.accesskit_update = accesskit_update; + } } /// Take everything ephemeral (everything except `cursor_icon` currently) @@ -372,6 +384,19 @@ pub enum OutputEvent { ValueChanged(WidgetInfo), } +impl OutputEvent { + pub fn widget_info(&self) -> &WidgetInfo { + match self { + OutputEvent::Clicked(info) + | OutputEvent::DoubleClicked(info) + | OutputEvent::TripleClicked(info) + | OutputEvent::FocusGained(info) + | OutputEvent::TextSelectionChanged(info) + | OutputEvent::ValueChanged(info) => info, + } + } +} + impl std::fmt::Debug for OutputEvent { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { diff --git a/crates/egui/src/frame_state.rs b/crates/egui/src/frame_state.rs index 3b9589b1..73dcfd4c 100644 --- a/crates/egui/src/frame_state.rs +++ b/crates/egui/src/frame_state.rs @@ -9,6 +9,13 @@ pub(crate) struct TooltipFrameState { pub count: usize, } +#[cfg(feature = "accesskit")] +#[derive(Clone)] +pub(crate) struct AccessKitFrameState { + pub(crate) nodes: IdMap>, + pub(crate) parent_stack: Vec, +} + /// State that is collected during a frame and then cleared. /// Short-term (single frame) memory. #[derive(Clone)] @@ -41,6 +48,9 @@ pub(crate) struct FrameState { /// horizontal, vertical pub(crate) scroll_target: [Option<(RangeInclusive, Option)>; 2], + + #[cfg(feature = "accesskit")] + pub(crate) accesskit_state: Option, } impl Default for FrameState { @@ -53,6 +63,8 @@ impl Default for FrameState { tooltip_state: None, scroll_delta: Vec2::ZERO, scroll_target: [None, None], + #[cfg(feature = "accesskit")] + accesskit_state: None, } } } @@ -67,6 +79,8 @@ impl FrameState { tooltip_state, scroll_delta, scroll_target, + #[cfg(feature = "accesskit")] + accesskit_state, } = self; used_ids.clear(); @@ -76,6 +90,10 @@ impl FrameState { *tooltip_state = None; *scroll_delta = input.scroll_delta; *scroll_target = [None, None]; + #[cfg(feature = "accesskit")] + { + *accesskit_state = None; + } } /// How much space is still available after panels has been added. diff --git a/crates/egui/src/id.rs b/crates/egui/src/id.rs index 682818f9..fee5e259 100644 --- a/crates/egui/src/id.rs +++ b/crates/egui/src/id.rs @@ -69,6 +69,11 @@ impl Id { pub(crate) fn value(&self) -> u64 { self.0 } + + #[cfg(feature = "accesskit")] + pub(crate) fn accesskit_id(&self) -> accesskit::NodeId { + std::num::NonZeroU64::new(self.0).unwrap().into() + } } impl std::fmt::Debug for Id { diff --git a/crates/egui/src/input_state.rs b/crates/egui/src/input_state.rs index b5938612..106a678f 100644 --- a/crates/egui/src/input_state.rs +++ b/crates/egui/src/input_state.rs @@ -399,6 +399,33 @@ impl InputState { } } } + + #[cfg(feature = "accesskit")] + pub fn accesskit_action_requests( + &self, + id: crate::Id, + action: accesskit::Action, + ) -> impl Iterator { + let accesskit_id = id.accesskit_id(); + self.events.iter().filter_map(move |event| { + if let Event::AccessKitActionRequest(request) = event { + if request.target == accesskit_id && request.action == action { + return Some(request); + } + } + None + }) + } + + #[cfg(feature = "accesskit")] + pub fn has_accesskit_action_request(&self, id: crate::Id, action: accesskit::Action) -> bool { + self.accesskit_action_requests(id, action).next().is_some() + } + + #[cfg(feature = "accesskit")] + pub fn num_accesskit_action_requests(&self, id: crate::Id, action: accesskit::Action) -> usize { + self.accesskit_action_requests(id, action).count() + } } // ---------------------------------------------------------------------------- diff --git a/crates/egui/src/lib.rs b/crates/egui/src/lib.rs index fe4c0491..67aa46c6 100644 --- a/crates/egui/src/lib.rs +++ b/crates/egui/src/lib.rs @@ -324,6 +324,9 @@ pub mod util; pub mod widget_text; pub mod widgets; +#[cfg(feature = "accesskit")] +pub use accesskit; + pub use epaint; pub use epaint::emath; @@ -549,3 +552,30 @@ pub fn __run_test_ui(mut add_contents: impl FnMut(&mut Ui)) { }); }); } + +#[cfg(feature = "accesskit")] +pub fn accesskit_root_id() -> Id { + Id::new("accesskit_root") +} + +/// Return a tree update that the egui integration should provide to the +/// AccessKit adapter if it cannot immediately run the egui application +/// to get a full tree update after running [`Context::enable_accesskit`]. +#[cfg(feature = "accesskit")] +pub fn accesskit_placeholder_tree_update() -> accesskit::TreeUpdate { + use accesskit::{Node, Role, Tree, TreeUpdate}; + use std::sync::Arc; + + let root_id = accesskit_root_id().accesskit_id(); + TreeUpdate { + nodes: vec![( + root_id, + Arc::new(Node { + role: Role::Window, + ..Default::default() + }), + )], + tree: Some(Tree::new(root_id)), + focus: None, + } +} diff --git a/crates/egui/src/memory.rs b/crates/egui/src/memory.rs index 73544655..a8ae6db6 100644 --- a/crates/egui/src/memory.rs +++ b/crates/egui/src/memory.rs @@ -166,7 +166,7 @@ pub(crate) struct Interaction { #[derive(Clone, Debug, Default)] pub(crate) struct Focus { /// The widget with keyboard focus (i.e. a text input field). - id: Option, + pub(crate) id: Option, /// What had keyboard focus previous frame? id_previous_frame: Option, @@ -174,6 +174,9 @@ pub(crate) struct Focus { /// Give focus to this widget next frame id_next_frame: Option, + #[cfg(feature = "accesskit")] + id_requested_by_accesskit: Option, + /// If set, the next widget that is interested in focus will automatically get it. /// Probably because the user pressed Tab. give_to_next: bool, @@ -231,6 +234,11 @@ impl Focus { self.id = Some(id); } + #[cfg(feature = "accesskit")] + { + self.id_requested_by_accesskit = None; + } + self.pressed_tab = false; self.pressed_shift_tab = false; for event in &new_input.events { @@ -261,6 +269,18 @@ impl Focus { } } } + + #[cfg(feature = "accesskit")] + { + if let crate::Event::AccessKitActionRequest(accesskit::ActionRequest { + action: accesskit::Action::Focus, + target, + data: None, + }) = event + { + self.id_requested_by_accesskit = Some(*target); + } + } } } @@ -281,6 +301,17 @@ impl Focus { } fn interested_in_focus(&mut self, id: Id) { + #[cfg(feature = "accesskit")] + { + if self.id_requested_by_accesskit == Some(id.accesskit_id()) { + self.id = Some(id); + self.id_requested_by_accesskit = None; + self.give_to_next = false; + self.pressed_tab = false; + self.pressed_shift_tab = false; + } + } + if self.give_to_next && !self.had_focus_last_frame(id) { self.id = Some(id); self.give_to_next = false; diff --git a/crates/egui/src/response.rs b/crates/egui/src/response.rs index 8ebf738a..7e108f37 100644 --- a/crates/egui/src/response.rs +++ b/crates/egui/src/response.rs @@ -526,10 +526,109 @@ impl Response { None }; if let Some(event) = event { - self.ctx.output().events.push(event); + self.output_event(event); + } else { + #[cfg(feature = "accesskit")] + if let Some(mut node) = self.ctx.accesskit_node(self.id) { + self.fill_accesskit_node_from_widget_info(&mut node, make_info()); + } } } + pub fn output_event(&self, event: crate::output::OutputEvent) { + #[cfg(feature = "accesskit")] + if let Some(mut node) = self.ctx.accesskit_node(self.id) { + self.fill_accesskit_node_from_widget_info(&mut node, event.widget_info().clone()); + } + self.ctx.output().events.push(event); + } + + #[cfg(feature = "accesskit")] + pub(crate) fn fill_accesskit_node_common(&self, node: &mut accesskit::Node) { + node.bounds = Some(accesskit::kurbo::Rect { + x0: self.rect.min.x.into(), + y0: self.rect.min.y.into(), + x1: self.rect.max.x.into(), + y1: self.rect.max.y.into(), + }); + if self.sense.focusable { + node.focusable = true; + } + if self.sense.click && node.default_action_verb.is_none() { + node.default_action_verb = Some(accesskit::DefaultActionVerb::Click); + } + } + + #[cfg(feature = "accesskit")] + fn fill_accesskit_node_from_widget_info( + &self, + node: &mut accesskit::Node, + info: crate::WidgetInfo, + ) { + use crate::WidgetType; + use accesskit::{CheckedState, Role}; + + self.fill_accesskit_node_common(node); + node.role = match info.typ { + WidgetType::Label => Role::StaticText, + WidgetType::Link => Role::Link, + WidgetType::TextEdit => Role::TextField, + WidgetType::Button | WidgetType::ImageButton | WidgetType::CollapsingHeader => { + Role::Button + } + WidgetType::Checkbox => Role::CheckBox, + WidgetType::RadioButton => Role::RadioButton, + WidgetType::SelectableLabel => Role::ToggleButton, + WidgetType::ComboBox => Role::PopupButton, + WidgetType::Slider => Role::Slider, + WidgetType::DragValue => Role::SpinButton, + WidgetType::ColorButton => Role::ColorWell, + WidgetType::Other => Role::Unknown, + }; + if let Some(label) = info.label { + node.name = Some(label.into()); + } + if let Some(value) = info.current_text_value { + node.value = Some(value.into()); + } + if let Some(value) = info.value { + node.numeric_value = Some(value); + } + if let Some(selected) = info.selected { + node.checked_state = Some(if selected { + CheckedState::True + } else { + CheckedState::False + }); + } + } + + /// Associate a label with a control for accessibility. + /// + /// # Example + /// + /// ``` + /// # egui::__run_test_ui(|ui| { + /// # let mut text = "Arthur".to_string(); + /// ui.horizontal(|ui| { + /// let label = ui.label("Your name: "); + /// ui.text_edit_singleline(&mut text).labelled_by(label.id); + /// }); + /// # }); + /// ``` + pub fn labelled_by(self, id: Id) -> Self { + #[cfg(feature = "accesskit")] + if let Some(mut node) = self.ctx.accesskit_node(self.id) { + node.labelled_by.push(id.accesskit_id()); + } + #[cfg(not(feature = "accesskit"))] + { + let _ = id; + } + + self + } + /// Response to secondary clicks (right-clicks) by showing the given menu. /// /// ``` diff --git a/crates/egui/src/widgets/drag_value.rs b/crates/egui/src/widgets/drag_value.rs index 13e727d7..59ccbd82 100644 --- a/crates/egui/src/widgets/drag_value.rs +++ b/crates/egui/src/widgets/drag_value.rs @@ -369,15 +369,16 @@ impl<'a> Widget for DragValue<'a> { } = self; let shift = ui.input().modifiers.shift_only(); - let is_slow_speed = shift && ui.memory().is_being_dragged(ui.next_auto_id()); + // The widget has the same ID whether it's in edit or button mode. + let id = ui.next_auto_id(); + let is_slow_speed = shift && ui.memory().is_being_dragged(id); - let kb_edit_id = ui.next_auto_id(); // The following call ensures that when a `DragValue` receives focus, // it is immediately rendered in edit mode, rather than being rendered // in button mode for just one frame. This is important for // screen readers. - ui.memory().interested_in_focus(kb_edit_id); - let is_kb_editing = ui.memory().has_focus(kb_edit_id); + ui.memory().interested_in_focus(id); + let is_kb_editing = ui.memory().has_focus(id); let old_value = get(&mut get_set_value); let mut value = old_value; @@ -388,24 +389,47 @@ impl<'a> Widget for DragValue<'a> { let max_decimals = max_decimals.unwrap_or(auto_decimals + 2); let auto_decimals = auto_decimals.clamp(min_decimals, max_decimals); - if is_kb_editing { + let change = { + let mut change = 0.0; let mut input = ui.input_mut(); - // This deliberately doesn't listen for left and right arrow keys, - // because when editing, these are used to move the caret. - // This behavior is consistent with other editable spinner/stepper - // implementations, such as Chromium's (for HTML5 number input). - // It is also normal for such controls to go directly into edit mode - // when they receive keyboard focus, and some screen readers - // assume this behavior, so having a separate mode for incrementing - // and decrementing, that supports all arrow keys, would be - // problematic. - let change = input.count_and_consume_key(Modifiers::NONE, Key::ArrowUp) as f64 - - input.count_and_consume_key(Modifiers::NONE, Key::ArrowDown) as f64; - if change != 0.0 { - value += speed * change; - value = emath::round_to_decimals(value, auto_decimals); + if is_kb_editing { + // This deliberately doesn't listen for left and right arrow keys, + // because when editing, these are used to move the caret. + // This behavior is consistent with other editable spinner/stepper + // implementations, such as Chromium's (for HTML5 number input). + // It is also normal for such controls to go directly into edit mode + // when they receive keyboard focus, and some screen readers + // assume this behavior, so having a separate mode for incrementing + // and decrementing, that supports all arrow keys, would be + // problematic. + change += input.count_and_consume_key(Modifiers::NONE, Key::ArrowUp) as f64 + - input.count_and_consume_key(Modifiers::NONE, Key::ArrowDown) as f64; } + + #[cfg(feature = "accesskit")] + { + use accesskit::Action; + change += input.num_accesskit_action_requests(id, Action::Increment) as f64 + - input.num_accesskit_action_requests(id, Action::Decrement) as f64; + } + + change + }; + + #[cfg(feature = "accesskit")] + { + use accesskit::{Action, ActionData}; + for request in ui.input().accesskit_action_requests(id, Action::SetValue) { + if let Some(ActionData::NumericValue(new_value)) = request.data { + value = new_value; + } + } + } + + if change != 0.0 { + value += speed * change; + value = emath::round_to_decimals(value, auto_decimals); } value = clamp_to_range(value, clamp_range.clone()); @@ -425,6 +449,8 @@ impl<'a> Widget for DragValue<'a> { } }; + // some clones below are redundant if AccessKit is disabled + #[allow(clippy::redundant_clone)] let mut response = if is_kb_editing { let button_width = ui.spacing().interact_size.x; let mut value_text = ui @@ -432,10 +458,10 @@ impl<'a> Widget for DragValue<'a> { .drag_value .edit_string .take() - .unwrap_or(value_text); + .unwrap_or_else(|| value_text.clone()); let response = ui.add( TextEdit::singleline(&mut value_text) - .id(kb_edit_id) + .id(id) .desired_width(button_width) .font(TextStyle::Monospace), ); @@ -444,7 +470,7 @@ impl<'a> Widget for DragValue<'a> { None => value_text.parse().ok(), }; if let Some(parsed_value) = parsed_value { - let parsed_value = clamp_to_range(parsed_value, clamp_range); + let parsed_value = clamp_to_range(parsed_value, clamp_range.clone()); set(&mut get_set_value, parsed_value); } ui.memory().drag_value.edit_string = Some(value_text); @@ -452,7 +478,7 @@ impl<'a> Widget for DragValue<'a> { } else { ui.memory().drag_value.edit_string = None; let button = Button::new( - RichText::new(format!("{}{}{}", prefix, value_text, suffix)).monospace(), + RichText::new(format!("{}{}{}", prefix, value_text.clone(), suffix)).monospace(), ) .wrap(false) .sense(Sense::click_and_drag()) @@ -471,7 +497,7 @@ impl<'a> Widget for DragValue<'a> { } if response.clicked() { - ui.memory().request_focus(kb_edit_id); + ui.memory().request_focus(id); } else if response.dragged() { ui.output().cursor_icon = CursorIcon::ResizeHorizontal; @@ -499,7 +525,7 @@ impl<'a> Widget for DragValue<'a> { ); let rounded_new_value = emath::round_to_decimals(rounded_new_value, auto_decimals); - let rounded_new_value = clamp_to_range(rounded_new_value, clamp_range); + let rounded_new_value = clamp_to_range(rounded_new_value, clamp_range.clone()); set(&mut get_set_value, rounded_new_value); drag_state.last_dragged_id = Some(response.id); @@ -514,6 +540,54 @@ impl<'a> Widget for DragValue<'a> { response.changed = get(&mut get_set_value) != old_value; response.widget_info(|| WidgetInfo::drag_value(value)); + + #[cfg(feature = "accesskit")] + if let Some(mut node) = ui.ctx().accesskit_node(response.id) { + use accesskit::Action; + // If either end of the range is unbounded, it's better + // to leave the corresponding AccessKit field set to None, + // to allow for platform-specific default behavior. + if clamp_range.start().is_finite() { + node.min_numeric_value = Some(*clamp_range.start()); + } + if clamp_range.end().is_finite() { + node.max_numeric_value = Some(*clamp_range.end()); + } + node.numeric_value_step = Some(speed); + node.actions |= Action::SetValue; + if value < *clamp_range.end() { + node.actions |= Action::Increment; + } + if value > *clamp_range.start() { + node.actions |= Action::Decrement; + } + // The name field is set to the current value by the button, + // but we don't want it set that way on this widget type. + node.name = None; + // Always expose the value as a string. This makes the widget + // more stable to accessibility users as it switches + // between edit and button modes. This is particularly important + // for VoiceOver on macOS; if the value is not exposed as a string + // when the widget is in button mode, then VoiceOver speaks + // the value (or a percentage if the widget has a clamp range) + // when the widget loses focus, overriding the announcement + // of the newly focused widget. This is certainly a VoiceOver bug, + // but it's good to make our software work as well as possible + // with existing assistive technology. However, if the widget + // has a prefix and/or suffix, expose those when in button mode, + // just as they're exposed on the screen. This triggers the + // VoiceOver bug just described, but exposing all information + // is more important, and at least we can avoid the bug + // for instances of the widget with no prefix or suffix. + // + // The value is exposed as a string by the text edit widget + // when in edit mode. + if !is_kb_editing { + let value_text = format!("{}{}{}", prefix, value_text, suffix); + node.value = Some(value_text.into()); + } + } + response } } diff --git a/crates/egui/src/widgets/label.rs b/crates/egui/src/widgets/label.rs index 153a119f..1addbc72 100644 --- a/crates/egui/src/widgets/label.rs +++ b/crates/egui/src/widgets/label.rs @@ -16,7 +16,7 @@ use crate::{widget_text::WidgetTextGalley, *}; pub struct Label { text: WidgetText, wrap: Option, - sense: Sense, + sense: Option, } impl Label { @@ -24,7 +24,7 @@ impl Label { Self { text: text.into(), wrap: None, - sense: Sense::focusable_noninteractive(), + sense: None, } } @@ -60,7 +60,7 @@ impl Label { /// # }); /// ``` pub fn sense(mut self, sense: Sense) -> Self { - self.sense = sense; + self.sense = Some(sense); self } } @@ -68,9 +68,17 @@ impl Label { impl Label { /// Do layout and position the galley in the ui, without painting it or adding widget info. pub fn layout_in_ui(self, ui: &mut Ui) -> (Pos2, WidgetTextGalley, Response) { + let sense = self.sense.unwrap_or_else(|| { + // We only want to focus labels if the screen reader is on. + if ui.memory().options.screen_reader { + Sense::focusable_noninteractive() + } else { + Sense::hover() + } + }); if let WidgetText::Galley(galley) = self.text { // If the user said "use this specific galley", then just use it: - let (rect, response) = ui.allocate_exact_size(galley.size(), self.sense); + let (rect, response) = ui.allocate_exact_size(galley.size(), sense); let pos = match galley.job.halign { Align::LEFT => rect.left_top(), Align::Center => rect.center_top(), @@ -121,10 +129,10 @@ impl Label { let rect = text_galley.galley.rows[0] .rect .translate(vec2(pos.x, pos.y)); - let mut response = ui.allocate_rect(rect, self.sense); + let mut response = ui.allocate_rect(rect, sense); for row in text_galley.galley.rows.iter().skip(1) { let rect = row.rect.translate(vec2(pos.x, pos.y)); - response |= ui.allocate_rect(rect, self.sense); + response |= ui.allocate_rect(rect, sense); } (pos, text_galley, response) } else { @@ -144,7 +152,7 @@ impl Label { }; let text_galley = text_job.into_galley(&ui.fonts()); - let (rect, response) = ui.allocate_exact_size(text_galley.size(), self.sense); + let (rect, response) = ui.allocate_exact_size(text_galley.size(), sense); let pos = match text_galley.galley.job.halign { Align::LEFT => rect.left_top(), Align::Center => rect.center_top(), diff --git a/crates/egui/src/widgets/slider.rs b/crates/egui/src/widgets/slider.rs index 59692db8..bb673afa 100644 --- a/crates/egui/src/widgets/slider.rs +++ b/crates/egui/src/widgets/slider.rs @@ -450,7 +450,7 @@ impl<'a> Slider<'a> { /// If you use one of the integer constructors (e.g. `Slider::i32`) this is called for you, /// but if you want to have a slider for picking integer values in an `Slider::f64`, use this. pub fn integer(self) -> Self { - self.fixed_decimals(0).smallest_positive(1.0) + self.fixed_decimals(0).smallest_positive(1.0).step_by(1.0) } fn get_value(&mut self) -> f64 { @@ -510,7 +510,7 @@ impl<'a> Slider<'a> { SliderOrientation::Horizontal => vec2(ui.spacing().slider_width, thickness), SliderOrientation::Vertical => vec2(thickness, ui.spacing().slider_width), }; - ui.allocate_response(desired_size, Sense::click_and_drag()) + ui.allocate_response(desired_size, Sense::drag()) } /// Just the slider, no text @@ -532,6 +532,9 @@ impl<'a> Slider<'a> { self.set_value(new_value); } + let mut decrement = 0usize; + let mut increment = 0usize; + if response.has_focus() { let (dec_key, inc_key) = match self.orientation { SliderOrientation::Horizontal => (Key::ArrowLeft, Key::ArrowRight), @@ -540,32 +543,51 @@ impl<'a> Slider<'a> { SliderOrientation::Vertical => (Key::ArrowUp, Key::ArrowDown), }; - let decrement = ui.input().num_presses(dec_key); - let increment = ui.input().num_presses(inc_key); - let kb_step = increment as f32 - decrement as f32; + decrement += ui.input().num_presses(dec_key); + increment += ui.input().num_presses(inc_key); + } - if kb_step != 0.0 { - let prev_value = self.get_value(); - let prev_position = self.position_from_value(prev_value, position_range.clone()); - let new_position = prev_position + kb_step; - let new_value = match self.step { - Some(step) => prev_value + (kb_step as f64 * step), - None if self.smart_aim => { - let aim_radius = ui.input().aim_radius(); - emath::smart_aim::best_in_range_f64( - self.value_from_position( - new_position - aim_radius, - position_range.clone(), - ), - self.value_from_position( - new_position + aim_radius, - position_range.clone(), - ), - ) - } - _ => self.value_from_position(new_position, position_range.clone()), - }; - self.set_value(new_value); + #[cfg(feature = "accesskit")] + { + use accesskit::Action; + decrement += ui + .input() + .num_accesskit_action_requests(response.id, Action::Decrement); + increment += ui + .input() + .num_accesskit_action_requests(response.id, Action::Increment); + } + + let kb_step = increment as f32 - decrement as f32; + + if kb_step != 0.0 { + let prev_value = self.get_value(); + let prev_position = self.position_from_value(prev_value, position_range.clone()); + let new_position = prev_position + kb_step; + let new_value = match self.step { + Some(step) => prev_value + (kb_step as f64 * step), + None if self.smart_aim => { + let aim_radius = ui.input().aim_radius(); + emath::smart_aim::best_in_range_f64( + self.value_from_position(new_position - aim_radius, position_range.clone()), + self.value_from_position(new_position + aim_radius, position_range.clone()), + ) + } + _ => self.value_from_position(new_position, position_range.clone()), + }; + self.set_value(new_value); + } + + #[cfg(feature = "accesskit")] + { + use accesskit::{Action, ActionData}; + for request in ui + .input() + .accesskit_action_requests(response.id, Action::SetValue) + { + if let Some(ActionData::NumericValue(new_value)) = request.data { + self.set_value(new_value); + } } } @@ -705,13 +727,37 @@ impl<'a> Slider<'a> { } fn add_contents(&mut self, ui: &mut Ui) -> Response { + let old_value = self.get_value(); + let thickness = ui .text_style_height(&TextStyle::Body) .at_least(ui.spacing().interact_size.y); let mut response = self.allocate_slider_space(ui, thickness); self.slider_ui(ui, &response); - if self.show_value { + let value = self.get_value(); + response.changed = value != old_value; + response.widget_info(|| WidgetInfo::slider(value, self.text.text())); + + #[cfg(feature = "accesskit")] + if let Some(mut node) = ui.ctx().accesskit_node(response.id) { + use accesskit::Action; + node.min_numeric_value = Some(*self.range.start()); + node.max_numeric_value = Some(*self.range.end()); + node.numeric_value_step = self.step; + node.actions |= Action::SetValue; + let clamp_range = self.clamp_range(); + if value < *clamp_range.end() { + node.actions |= Action::Increment; + } + if value > *clamp_range.start() { + node.actions |= Action::Decrement; + } + } + + let slider_response = response.clone(); + + let value_response = if self.show_value { let position_range = self.position_range(&response.rect); let value_response = self.value_ui(ui, position_range); if value_response.gained_focus() @@ -723,12 +769,23 @@ impl<'a> Slider<'a> { response = value_response.union(response); } else { // Use the slider id as the id for the whole widget - response = response.union(value_response); + response = response.union(value_response.clone()); } - } + Some(value_response) + } else { + None + }; if !self.text.is_empty() { - ui.add(Label::new(self.text.clone()).wrap(false)); + let label_response = ui.add(Label::new(self.text.clone()).wrap(false)); + // The slider already has an accessibility label via widget info, + // but sometimes it's useful for a screen reader to know + // that a piece of text is a label for another widget, + // e.g. so the text itself can be excluded from navigation. + slider_response.labelled_by(label_response.id); + if let Some(value_response) = value_response { + value_response.labelled_by(label_response.id); + } } response @@ -737,18 +794,12 @@ impl<'a> Slider<'a> { impl<'a> Widget for Slider<'a> { fn ui(mut self, ui: &mut Ui) -> Response { - let old_value = self.get_value(); - let inner_response = match self.orientation { SliderOrientation::Horizontal => ui.horizontal(|ui| self.add_contents(ui)), SliderOrientation::Vertical => ui.vertical(|ui| self.add_contents(ui)), }; - let mut response = inner_response.inner | inner_response.response; - let value = self.get_value(); - response.changed = value != old_value; - response.widget_info(|| WidgetInfo::slider(value, self.text.text())); - response + inner_response.inner | inner_response.response } } diff --git a/crates/egui/src/widgets/text_edit/builder.rs b/crates/egui/src/widgets/text_edit/builder.rs index 11cd7be1..bc4f768a 100644 --- a/crates/egui/src/widgets/text_edit/builder.rs +++ b/crates/egui/src/widgets/text_edit/builder.rs @@ -648,11 +648,7 @@ impl<'t> TextEdit<'t> { char_range, mask_if_password(password, text.as_str()), ); - response - .ctx - .output() - .events - .push(OutputEvent::TextSelectionChanged(info)); + response.output_event(OutputEvent::TextSelectionChanged(info)); } else { response.widget_info(|| { WidgetInfo::text_edit( @@ -662,6 +658,91 @@ impl<'t> TextEdit<'t> { }); } + #[cfg(feature = "accesskit")] + if let Some(mut node) = ui.ctx().accesskit_node(response.id) { + use accesskit::{Role, TextDirection, TextPosition, TextSelection}; + + let parent_id = response.id; + + if let Some(cursor_range) = &cursor_range { + let anchor = &cursor_range.secondary.rcursor; + let focus = &cursor_range.primary.rcursor; + node.text_selection = Some(TextSelection { + anchor: TextPosition { + node: parent_id.with(anchor.row).accesskit_id(), + character_index: anchor.column, + }, + focus: TextPosition { + node: parent_id.with(focus.row).accesskit_id(), + character_index: focus.column, + }, + }); + } + + node.default_action_verb = Some(accesskit::DefaultActionVerb::Focus); + + drop(node); + + ui.ctx().with_accessibility_parent(parent_id, || { + for (i, row) in galley.rows.iter().enumerate() { + let id = parent_id.with(i); + let mut node = ui.ctx().accesskit_node(id).unwrap(); + node.role = Role::InlineTextBox; + let rect = row.rect.translate(text_draw_pos.to_vec2()); + node.bounds = Some(accesskit::kurbo::Rect { + x0: rect.min.x.into(), + y0: rect.min.y.into(), + x1: rect.max.x.into(), + y1: rect.max.y.into(), + }); + node.text_direction = Some(TextDirection::LeftToRight); + // TODO(mwcampbell): Set more node fields for the row + // once AccessKit adapters expose text formatting info. + + let glyph_count = row.glyphs.len(); + let mut value = String::new(); + value.reserve(glyph_count); + let mut character_lengths = Vec::::new(); + character_lengths.reserve(glyph_count); + let mut character_positions = Vec::::new(); + character_positions.reserve(glyph_count); + let mut character_widths = Vec::::new(); + character_widths.reserve(glyph_count); + let mut word_lengths = Vec::::new(); + let mut was_at_word_end = false; + let mut last_word_start = 0usize; + + for glyph in &row.glyphs { + let is_word_char = is_word_char(glyph.chr); + if is_word_char && was_at_word_end { + word_lengths.push((character_lengths.len() - last_word_start) as _); + last_word_start = character_lengths.len(); + } + was_at_word_end = !is_word_char; + let old_len = value.len(); + value.push(glyph.chr); + character_lengths.push((value.len() - old_len) as _); + character_positions.push(glyph.pos.x - row.rect.min.x); + character_widths.push(glyph.size.x); + } + + if row.ends_with_newline { + value.push('\n'); + character_lengths.push(1); + character_positions.push(row.rect.max.x - row.rect.min.x); + character_widths.push(0.0); + } + word_lengths.push((character_lengths.len() - last_word_start) as _); + + node.value = Some(value.into()); + node.character_lengths = character_lengths.into(); + node.character_positions = Some(character_positions.into()); + node.character_widths = Some(character_widths.into()); + node.word_lengths = word_lengths.into(); + } + }); + } + TextEditOutput { response, galley, @@ -689,6 +770,28 @@ fn mask_if_password(is_password: bool, text: &str) -> String { // ---------------------------------------------------------------------------- +#[cfg(feature = "accesskit")] +fn ccursor_from_accesskit_text_position( + id: Id, + galley: &Galley, + position: &accesskit::TextPosition, +) -> Option { + let mut total_length = 0usize; + for (i, row) in galley.rows.iter().enumerate() { + let row_id = id.with(i); + if row_id.accesskit_id() == position.node { + return Some(CCursor { + index: total_length + position.character_index, + prefer_next_row: !(position.character_index == row.glyphs.len() + && !row.ends_with_newline + && (i + 1) < galley.rows.len()), + }); + } + total_length += row.glyphs.len() + (row.ends_with_newline as usize); + } + None +} + /// Check for (keyboard) events to edit the cursor and/or text. #[allow(clippy::too_many_arguments)] fn events( @@ -849,6 +952,27 @@ fn events( } } + #[cfg(feature = "accesskit")] + Event::AccessKitActionRequest(accesskit::ActionRequest { + action: accesskit::Action::SetTextSelection, + target, + data: Some(accesskit::ActionData::SetTextSelection(selection)), + }) => { + if id.accesskit_id() == *target { + let primary = + ccursor_from_accesskit_text_position(id, galley, &selection.focus); + let secondary = + ccursor_from_accesskit_text_position(id, galley, &selection.anchor); + if let (Some(primary), Some(secondary)) = (primary, secondary) { + Some(CCursorRange { primary, secondary }) + } else { + None + } + } else { + None + } + } + _ => None, }; diff --git a/crates/egui/src/widgets/text_edit/cursor_range.rs b/crates/egui/src/widgets/text_edit/cursor_range.rs index 360260b8..10668a56 100644 --- a/crates/egui/src/widgets/text_edit/cursor_range.rs +++ b/crates/egui/src/widgets/text_edit/cursor_range.rs @@ -1,7 +1,7 @@ use epaint::text::cursor::*; /// A selected text range (could be a range of length zero). -#[derive(Clone, Copy, Debug, Default)] +#[derive(Clone, Copy, Debug, Default, PartialEq)] #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] pub struct CursorRange { /// When selecting with a mouse, this is where the mouse was released. diff --git a/crates/epaint/src/text/cursor.rs b/crates/epaint/src/text/cursor.rs index b2078739..fcce2d47 100644 --- a/crates/epaint/src/text/cursor.rs +++ b/crates/epaint/src/text/cursor.rs @@ -113,7 +113,7 @@ impl PartialEq for PCursor { /// They all point to the same place, but in their own different ways. /// pcursor/rcursor can also point to after the end of the paragraph/row. /// Does not implement `PartialEq` because you must think which cursor should be equivalent. -#[derive(Clone, Copy, Debug, Default)] +#[derive(Clone, Copy, Debug, Default, PartialEq)] #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] pub struct Cursor { pub ccursor: CCursor, diff --git a/examples/hello_world/src/main.rs b/examples/hello_world/src/main.rs index a3e70a42..ec945bae 100644 --- a/examples/hello_world/src/main.rs +++ b/examples/hello_world/src/main.rs @@ -36,8 +36,9 @@ impl eframe::App for MyApp { egui::CentralPanel::default().show(ctx, |ui| { ui.heading("My egui Application"); ui.horizontal(|ui| { - ui.label("Your name: "); - ui.text_edit_singleline(&mut self.name); + let name_label = ui.label("Your name: "); + ui.text_edit_singleline(&mut self.name) + .labelled_by(name_label.id); }); ui.add(egui::Slider::new(&mut self.age, 0..=120).text("age")); if ui.button("Click each year").clicked() { From 5093b67e9b095072033e54557825f3bfc9d39c49 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Mon, 5 Dec 2022 09:29:59 +0100 Subject: [PATCH 029/143] Enable and fix some more clippy lints --- Cranky.toml | 6 +++--- crates/egui/src/containers/area.rs | 2 +- crates/egui/src/containers/panel.rs | 4 ++-- crates/egui/src/containers/popup.rs | 2 +- crates/egui/src/context.rs | 2 +- crates/egui/src/data/input.rs | 8 ++++---- crates/egui/src/data/output.rs | 4 ++-- crates/egui/src/layers.rs | 2 +- crates/egui/src/layout.rs | 4 ++-- crates/egui/src/lib.rs | 2 +- crates/egui/src/memory.rs | 4 ++-- crates/egui/src/style.rs | 2 +- crates/egui/src/widgets/color_picker.rs | 4 ++-- crates/egui/src/widgets/plot/legend.rs | 2 +- crates/egui_demo_lib/src/demo/drag_and_drop.rs | 2 +- crates/egui_demo_lib/src/demo/layout_test.rs | 2 +- crates/egui_demo_lib/src/demo/text_edit.rs | 2 +- crates/egui_demo_lib/src/demo/window_with_panels.rs | 2 +- crates/emath/src/rect.rs | 2 +- crates/emath/src/rect_transform.rs | 4 ++-- crates/epaint/src/image.rs | 2 +- crates/epaint/src/mesh.rs | 4 ++-- crates/epaint/src/shadow.rs | 6 +++--- crates/epaint/src/tessellator.rs | 2 +- crates/epaint/src/text/cursor.rs | 2 +- crates/epaint/src/text/font.rs | 2 +- crates/epaint/src/text/text_layout_types.rs | 6 +++--- crates/epaint/src/textures.rs | 2 +- 28 files changed, 44 insertions(+), 44 deletions(-) diff --git a/Cranky.toml b/Cranky.toml index 28bb35fc..b2e0b313 100644 --- a/Cranky.toml +++ b/Cranky.toml @@ -9,8 +9,10 @@ warn = [ "clippy::bool_to_int_with_if", "clippy::char_lit_as_u8", "clippy::checked_conversions", + "clippy::cloned_instead_of_copied", "clippy::dbg_macro", "clippy::debug_assert_with_mut_call", + "clippy::derive_partial_eq_without_eq", "clippy::disallowed_methods", "clippy::disallowed_script_idents", "clippy::doc_link_with_quotes", @@ -112,11 +114,9 @@ warn = [ allow = [ # TODO(emilk): enable more lints - "clippy::cloned_instead_of_copied", - "clippy::derive_partial_eq_without_eq", "clippy::type_complexity", "clippy::undocumented_unsafe_blocks", "trivial_casts", - "unsafe_op_in_unsafe_fn", # `unsafe_op_in_unsafe_fn` may become the default in future Rust versions: https://github.com/rust-lang/rust/issues/71668 + "unsafe_op_in_unsafe_fn", # `unsafe_op_in_unsafe_fn` may become the default in future Rust versions: https://github.com/rust-lang/rust/issues/71668 "unused_qualifications", ] diff --git a/crates/egui/src/containers/area.rs b/crates/egui/src/containers/area.rs index 072af44e..294d9efe 100644 --- a/crates/egui/src/containers/area.rs +++ b/crates/egui/src/containers/area.rs @@ -230,7 +230,7 @@ impl Area { let layer_id = LayerId::new(order, id); - let state = ctx.memory().areas.get(id).cloned(); + let state = ctx.memory().areas.get(id).copied(); let is_new = state.is_none(); if is_new { ctx.request_repaint(); // if we don't know the previous size we are likely drawing the area in the wrong place diff --git a/crates/egui/src/containers/panel.rs b/crates/egui/src/containers/panel.rs index a94f7b21..add3c035 100644 --- a/crates/egui/src/containers/panel.rs +++ b/crates/egui/src/containers/panel.rs @@ -44,7 +44,7 @@ impl PanelState { // ---------------------------------------------------------------------------- /// [`Left`](Side::Left) or [`Right`](Side::Right) -#[derive(Clone, Copy, Debug, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq)] pub enum Side { Left, Right, @@ -468,7 +468,7 @@ impl SidePanel { // ---------------------------------------------------------------------------- /// [`Top`](TopBottomSide::Top) or [`Bottom`](TopBottomSide::Bottom) -#[derive(Clone, Copy, Debug, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq)] pub enum TopBottomSide { Top, Bottom, diff --git a/crates/egui/src/containers/popup.rs b/crates/egui/src/containers/popup.rs index 3ae49479..4decca3f 100644 --- a/crates/egui/src/containers/popup.rs +++ b/crates/egui/src/containers/popup.rs @@ -22,7 +22,7 @@ impl TooltipState { fn individual_tooltip_size(&self, common_id: Id, index: usize) -> Option { if self.last_common_id == Some(common_id) { - Some(self.individual_ids_and_sizes.get(&index).cloned()?.1) + Some(self.individual_ids_and_sizes.get(&index)?.1) } else { None } diff --git a/crates/egui/src/context.rs b/crates/egui/src/context.rs index 12584d0d..a2127536 100644 --- a/crates/egui/src/context.rs +++ b/crates/egui/src/context.rs @@ -1513,7 +1513,7 @@ impl Context { ui.label("Hover to highlight"); let layers_ids: Vec = self.memory().areas.order().to_vec(); for layer_id in layers_ids { - let area = self.memory().areas.get(layer_id.id).cloned(); + let area = self.memory().areas.get(layer_id.id).copied(); if let Some(area) = area { let is_visible = self.memory().areas.is_visible(&layer_id); if !is_visible { diff --git a/crates/egui/src/data/input.rs b/crates/egui/src/data/input.rs index 0c079162..8cf23732 100644 --- a/crates/egui/src/data/input.rs +++ b/crates/egui/src/data/input.rs @@ -133,7 +133,7 @@ impl RawInput { } /// A file about to be dropped into egui. -#[derive(Clone, Debug, Default, PartialEq)] +#[derive(Clone, Debug, Default, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] pub struct HoveredFile { /// Set by the `egui-winit` backend. @@ -144,7 +144,7 @@ pub struct HoveredFile { } /// A file dropped into egui. -#[derive(Clone, Debug, Default, PartialEq)] +#[derive(Clone, Debug, Default, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] pub struct DroppedFile { /// Set by the `egui-winit` backend. @@ -305,7 +305,7 @@ pub const NUM_POINTER_BUTTONS: usize = 5; /// NOTE: For cross-platform uses, ALT+SHIFT is a bad combination of modifiers /// as on mac that is how you type special characters, /// so those key presses are usually not reported to egui. -#[derive(Clone, Copy, Debug, Default, PartialEq)] +#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] pub struct Modifiers { /// Either of the alt keys are down (option ⌥ on Mac). @@ -768,7 +768,7 @@ impl Key { /// /// Can be used with [`crate::InputState::consume_shortcut`] /// and [`crate::Context::format_shortcut`]. -#[derive(Clone, Copy, Debug, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq)] pub struct KeyboardShortcut { pub modifiers: Modifiers, pub key: Key, diff --git a/crates/egui/src/data/output.rs b/crates/egui/src/data/output.rs index ffc51b08..a13307ef 100644 --- a/crates/egui/src/data/output.rs +++ b/crates/egui/src/data/output.rs @@ -156,7 +156,7 @@ impl PlatformOutput { } /// What URL to open, and how. -#[derive(Clone, PartialEq)] +#[derive(Clone, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] pub struct OpenUrl { pub url: String, @@ -190,7 +190,7 @@ impl OpenUrl { /// egui emits a [`CursorIcon`] in [`PlatformOutput`] each frame as a request to the integration. /// /// Loosely based on . -#[derive(Clone, Copy, Debug, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] pub enum CursorIcon { /// Normal cursor icon, whatever that is. diff --git a/crates/egui/src/layers.rs b/crates/egui/src/layers.rs index f3b9674a..23e8b636 100644 --- a/crates/egui/src/layers.rs +++ b/crates/egui/src/layers.rs @@ -109,7 +109,7 @@ impl LayerId { } /// A unique identifier of a specific [`Shape`] in a [`PaintList`]. -#[derive(Clone, Copy, PartialEq)] +#[derive(Clone, Copy, PartialEq, Eq)] pub struct ShapeIdx(usize); /// A list of [`Shape`]s paired with a clip rectangle. diff --git a/crates/egui/src/layout.rs b/crates/egui/src/layout.rs index 275c57b8..8da23700 100644 --- a/crates/egui/src/layout.rs +++ b/crates/egui/src/layout.rs @@ -75,7 +75,7 @@ impl Region { // ---------------------------------------------------------------------------- /// Layout direction, one of [`LeftToRight`](Direction::LeftToRight), [`RightToLeft`](Direction::RightToLeft), [`TopDown`](Direction::TopDown), [`BottomUp`](Direction::BottomUp). -#[derive(Clone, Copy, Debug, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] pub enum Direction { LeftToRight, @@ -114,7 +114,7 @@ impl Direction { /// }); /// # }); /// ``` -#[derive(Clone, Copy, Debug, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq)] // #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] pub struct Layout { /// Main axis direction diff --git a/crates/egui/src/lib.rs b/crates/egui/src/lib.rs index 67aa46c6..c447ebaa 100644 --- a/crates/egui/src/lib.rs +++ b/crates/egui/src/lib.rs @@ -507,7 +507,7 @@ pub mod special_emojis { } /// The different types of built-in widgets in egui -#[derive(Clone, Copy, Debug, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] pub enum WidgetType { Label, // TODO(emilk): emit Label events diff --git a/crates/egui/src/memory.rs b/crates/egui/src/memory.rs index a8ae6db6..f67ee8f9 100644 --- a/crates/egui/src/memory.rs +++ b/crates/egui/src/memory.rs @@ -587,8 +587,8 @@ impl Areas { pub fn visible_layer_ids(&self) -> ahash::HashSet { self.visible_last_frame .iter() - .cloned() - .chain(self.visible_current_frame.iter().cloned()) + .copied() + .chain(self.visible_current_frame.iter().copied()) .collect() } diff --git a/crates/egui/src/style.rs b/crates/egui/src/style.rs index a4cd8817..493b94ca 100644 --- a/crates/egui/src/style.rs +++ b/crates/egui/src/style.rs @@ -592,7 +592,7 @@ impl WidgetVisuals { } /// Options for help debug egui by adding extra visualization -#[derive(Clone, Copy, Debug, Default, PartialEq)] +#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] pub struct DebugOptions { /// However over widgets to see their rectangles diff --git a/crates/egui/src/widgets/color_picker.rs b/crates/egui/src/widgets/color_picker.rs index a9935f4d..37bbe217 100644 --- a/crates/egui/src/widgets/color_picker.rs +++ b/crates/egui/src/widgets/color_picker.rs @@ -211,7 +211,7 @@ fn color_slider_2d( } /// What options to show for alpha -#[derive(Clone, Copy, PartialEq)] +#[derive(Clone, Copy, PartialEq, Eq)] pub enum Alpha { // Set alpha to 1.0, and show no option for it. Opaque, @@ -425,7 +425,7 @@ pub fn color_edit_button_rgb(ui: &mut Ui, rgb: &mut [f32; 3]) -> Response { // To ensure we keep hue slider when `srgba` is gray we store the full [`Hsva`] in a cache: fn color_cache_get(ctx: &Context, rgba: impl Into) -> Hsva { let rgba = rgba.into(); - use_color_cache(ctx, |cc| cc.get(&rgba).cloned()).unwrap_or_else(|| Hsva::from(rgba)) + use_color_cache(ctx, |cc| cc.get(&rgba).copied()).unwrap_or_else(|| Hsva::from(rgba)) } // To ensure we keep hue slider when `srgba` is gray we store the full [`Hsva`] in a cache: diff --git a/crates/egui/src/widgets/plot/legend.rs b/crates/egui/src/widgets/plot/legend.rs index 216f14b9..22ca3540 100644 --- a/crates/egui/src/widgets/plot/legend.rs +++ b/crates/egui/src/widgets/plot/legend.rs @@ -5,7 +5,7 @@ use crate::*; use super::items::PlotItem; /// Where to place the plot legend. -#[derive(Debug, Clone, Copy, PartialEq)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum Corner { LeftTop, RightTop, diff --git a/crates/egui_demo_lib/src/demo/drag_and_drop.rs b/crates/egui_demo_lib/src/demo/drag_and_drop.rs index 49bf62f4..89f662a5 100644 --- a/crates/egui_demo_lib/src/demo/drag_and_drop.rs +++ b/crates/egui_demo_lib/src/demo/drag_and_drop.rs @@ -76,7 +76,7 @@ pub fn drop_target( InnerResponse::new(ret, response) } -#[derive(Clone, PartialEq)] +#[derive(Clone, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] pub struct DragAndDropDemo { /// columns with items diff --git a/crates/egui_demo_lib/src/demo/layout_test.rs b/crates/egui_demo_lib/src/demo/layout_test.rs index 60193d9f..2d4fa8a8 100644 --- a/crates/egui_demo_lib/src/demo/layout_test.rs +++ b/crates/egui_demo_lib/src/demo/layout_test.rs @@ -21,7 +21,7 @@ impl Default for LayoutTest { } } -#[derive(Clone, Copy, PartialEq)] +#[derive(Clone, Copy, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] #[cfg_attr(feature = "serde", serde(default))] pub struct LayoutSettings { diff --git a/crates/egui_demo_lib/src/demo/text_edit.rs b/crates/egui_demo_lib/src/demo/text_edit.rs index c1aaa1f2..f23408a5 100644 --- a/crates/egui_demo_lib/src/demo/text_edit.rs +++ b/crates/egui_demo_lib/src/demo/text_edit.rs @@ -1,5 +1,5 @@ /// Showcase [`TextEdit`]. -#[derive(PartialEq)] +#[derive(PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] #[cfg_attr(feature = "serde", serde(default))] pub struct TextEdit { diff --git a/crates/egui_demo_lib/src/demo/window_with_panels.rs b/crates/egui_demo_lib/src/demo/window_with_panels.rs index b8d1af5e..4d5f1140 100644 --- a/crates/egui_demo_lib/src/demo/window_with_panels.rs +++ b/crates/egui_demo_lib/src/demo/window_with_panels.rs @@ -1,4 +1,4 @@ -#[derive(Clone, PartialEq, Default)] +#[derive(Clone, Default, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] pub struct WindowWithPanels {} diff --git a/crates/emath/src/rect.rs b/crates/emath/src/rect.rs index 887c09f1..6300bb11 100644 --- a/crates/emath/src/rect.rs +++ b/crates/emath/src/rect.rs @@ -172,7 +172,7 @@ impl Rect { /// Rotate the bounds (will expand the [`Rect`]) #[must_use] #[inline] - pub fn rotate_bb(self, rot: crate::Rot2) -> Self { + pub fn rotate_bb(self, rot: Rot2) -> Self { let a = rot * self.left_top().to_vec2(); let b = rot * self.right_top().to_vec2(); let c = rot * self.left_bottom().to_vec2(); diff --git a/crates/emath/src/rect_transform.rs b/crates/emath/src/rect_transform.rs index 9d700b99..de19fb67 100644 --- a/crates/emath/src/rect_transform.rs +++ b/crates/emath/src/rect_transform.rs @@ -1,10 +1,10 @@ -use crate::*; +use crate::{pos2, remap, remap_clamp, Pos2, Rect, Vec2}; /// Linearly transforms positions from one [`Rect`] to another. /// /// [`RectTransform`] stores the rectangles, and therefore supports clamping and culling. #[repr(C)] -#[derive(Clone, Copy, Debug, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] #[cfg_attr(feature = "bytemuck", derive(bytemuck::Pod, bytemuck::Zeroable))] pub struct RectTransform { diff --git a/crates/epaint/src/image.rs b/crates/epaint/src/image.rs index 5fd4499b..dcd945aa 100644 --- a/crates/epaint/src/image.rs +++ b/crates/epaint/src/image.rs @@ -43,7 +43,7 @@ impl ImageData { // ---------------------------------------------------------------------------- /// A 2D RGBA color image in RAM. -#[derive(Clone, Default, PartialEq)] +#[derive(Clone, Default, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] pub struct ColorImage { /// width, height. diff --git a/crates/epaint/src/mesh.rs b/crates/epaint/src/mesh.rs index d365a057..e9fc8334 100644 --- a/crates/epaint/src/mesh.rs +++ b/crates/epaint/src/mesh.rs @@ -5,7 +5,7 @@ use emath::*; /// /// Should be friendly to send to GPU as is. #[repr(C)] -#[derive(Clone, Copy, Debug, Default, PartialEq)] +#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] #[cfg_attr(feature = "bytemuck", derive(bytemuck::Pod, bytemuck::Zeroable))] pub struct Vertex { @@ -23,7 +23,7 @@ pub struct Vertex { } /// Textured triangles in two dimensions. -#[derive(Clone, Debug, Default, PartialEq)] +#[derive(Clone, Debug, Default, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] pub struct Mesh { /// Draw as triangles (i.e. the length is always multiple of three). diff --git a/crates/epaint/src/shadow.rs b/crates/epaint/src/shadow.rs index 953ff97c..22eccd5a 100644 --- a/crates/epaint/src/shadow.rs +++ b/crates/epaint/src/shadow.rs @@ -30,7 +30,7 @@ impl Shadow { } } - /// Used for widnows in dark mode. + /// Used for egui windows in dark mode. pub fn big_dark() -> Self { Self { extrusion: 32.0, @@ -38,7 +38,7 @@ impl Shadow { } } - /// Used for widnows in light mode. + /// Used for egui windows in light mode. pub fn big_light() -> Self { Self { extrusion: 32.0, @@ -46,7 +46,7 @@ impl Shadow { } } - pub fn tessellate(&self, rect: emath::Rect, rounding: impl Into) -> Mesh { + pub fn tessellate(&self, rect: Rect, rounding: impl Into) -> Mesh { // tessellator.clip_rect = clip_rect; // TODO(emilk): culling let Self { extrusion, color } = *self; diff --git a/crates/epaint/src/tessellator.rs b/crates/epaint/src/tessellator.rs index 7eb4089d..e6182ee6 100644 --- a/crates/epaint/src/tessellator.rs +++ b/crates/epaint/src/tessellator.rs @@ -586,7 +586,7 @@ pub mod path { // ---------------------------------------------------------------------------- -#[derive(Clone, Copy, PartialEq)] +#[derive(Clone, Copy, PartialEq, Eq)] pub enum PathType { Open, Closed, diff --git a/crates/epaint/src/text/cursor.rs b/crates/epaint/src/text/cursor.rs index fcce2d47..2dac510d 100644 --- a/crates/epaint/src/text/cursor.rs +++ b/crates/epaint/src/text/cursor.rs @@ -66,7 +66,7 @@ impl std::ops::SubAssign for CCursor { } /// Row Cursor -#[derive(Clone, Copy, Debug, Default, PartialEq)] +#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] pub struct RCursor { /// 0 is first row, and so on. diff --git a/crates/epaint/src/text/font.rs b/crates/epaint/src/text/font.rs index e93356ab..4fb0079c 100644 --- a/crates/epaint/src/text/font.rs +++ b/crates/epaint/src/text/font.rs @@ -8,7 +8,7 @@ use std::sync::Arc; // ---------------------------------------------------------------------------- -#[derive(Clone, Copy, Debug, Default, PartialEq)] +#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] pub struct UvRect { /// X/Y offset for nice rendering (unit: points). diff --git a/crates/epaint/src/text/text_layout_types.rs b/crates/epaint/src/text/text_layout_types.rs index 12e0cf75..14ed82f3 100644 --- a/crates/epaint/src/text/text_layout_types.rs +++ b/crates/epaint/src/text/text_layout_types.rs @@ -351,7 +351,7 @@ pub struct Galley { pub pixels_per_point: f32, } -#[derive(Clone, Debug, PartialEq)] +#[derive(Clone, Debug, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] pub struct Row { /// One for each `char`. @@ -374,7 +374,7 @@ pub struct Row { } /// The tessellated output of a row. -#[derive(Clone, Debug, PartialEq)] +#[derive(Clone, Debug, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] pub struct RowVisuals { /// The tessellated text, using non-normalized (texel) UV coordinates. @@ -400,7 +400,7 @@ impl Default for RowVisuals { } } -#[derive(Copy, Clone, Debug, PartialEq)] +#[derive(Copy, Clone, Debug, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] pub struct Glyph { /// The character this glyph represents. diff --git a/crates/epaint/src/textures.rs b/crates/epaint/src/textures.rs index eec5ef26..ff466a6b 100644 --- a/crates/epaint/src/textures.rs +++ b/crates/epaint/src/textures.rs @@ -117,7 +117,7 @@ impl TextureManager { } /// Meta-data about an allocated texture. -#[derive(Clone, Debug, PartialEq)] +#[derive(Clone, Debug, PartialEq, Eq)] pub struct TextureMeta { /// A human-readable name useful for debugging. pub name: String, From 4e59296cbb82c029a6c1f9215fc0b5b003b4c7be Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Mon, 5 Dec 2022 09:40:47 +0100 Subject: [PATCH 030/143] Minor code tweaks --- crates/eframe/src/web/mod.rs | 2 +- crates/egui/src/containers/frame.rs | 4 ++-- crates/egui/src/containers/panel.rs | 8 ++++++++ crates/egui/src/containers/scroll_area.rs | 13 ++++++------ crates/egui/src/context.rs | 24 ++++++++++++++--------- crates/egui/src/ui.rs | 2 +- crates/egui/src/widgets/label.rs | 6 ++++-- crates/egui/src/widgets/separator.rs | 13 ++++++++++-- crates/epaint/src/util/mod.rs | 3 +-- 9 files changed, 50 insertions(+), 25 deletions(-) diff --git a/crates/eframe/src/web/mod.rs b/crates/eframe/src/web/mod.rs index 18b75440..2e457763 100644 --- a/crates/eframe/src/web/mod.rs +++ b/crates/eframe/src/web/mod.rs @@ -91,7 +91,7 @@ pub fn canvas_element(canvas_id: &str) -> Option { pub fn canvas_element_or_die(canvas_id: &str) -> web_sys::HtmlCanvasElement { canvas_element(canvas_id) - .unwrap_or_else(|| panic!("Failed to find canvas with id '{}'", canvas_id)) + .unwrap_or_else(|| panic!("Failed to find canvas with id {:?}", canvas_id)) } fn canvas_origin(canvas_id: &str) -> egui::Pos2 { diff --git a/crates/egui/src/containers/frame.rs b/crates/egui/src/containers/frame.rs index 7da48cc2..769aa8cd 100644 --- a/crates/egui/src/containers/frame.rs +++ b/crates/egui/src/containers/frame.rs @@ -42,7 +42,7 @@ impl Frame { } } - pub(crate) fn side_top_panel(style: &Style) -> Self { + pub fn side_top_panel(style: &Style) -> Self { Self { inner_margin: Margin::symmetric(8.0, 2.0), fill: style.visuals.window_fill(), @@ -50,7 +50,7 @@ impl Frame { } } - pub(crate) fn central_panel(style: &Style) -> Self { + pub fn central_panel(style: &Style) -> Self { Self { inner_margin: Margin::same(8.0), fill: style.visuals.window_fill(), diff --git a/crates/egui/src/containers/panel.rs b/crates/egui/src/containers/panel.rs index add3c035..e6e7e220 100644 --- a/crates/egui/src/containers/panel.rs +++ b/crates/egui/src/containers/panel.rs @@ -349,6 +349,8 @@ impl SidePanel { None } else if how_expanded < 1.0 { // Show a fake panel in this in-between animation state: + // TODO(emilk): move the panel out-of-screen instead of changing its width. + // Then we can actually paint it as it animates. let expanded_width = PanelState::load(ctx, self.id) .map_or(self.default_width, |state| state.rect.width()); let fake_width = how_expanded * expanded_width; @@ -382,6 +384,8 @@ impl SidePanel { None } else if how_expanded < 1.0 { // Show a fake panel in this in-between animation state: + // TODO(emilk): move the panel out-of-screen instead of changing its width. + // Then we can actually paint it as it animates. let expanded_width = PanelState::load(ui.ctx(), self.id) .map_or(self.default_width, |state| state.rect.width()); let fake_width = how_expanded * expanded_width; @@ -785,6 +789,8 @@ impl TopBottomPanel { None } else if how_expanded < 1.0 { // Show a fake panel in this in-between animation state: + // TODO(emilk): move the panel out-of-screen instead of changing its height. + // Then we can actually paint it as it animates. let expanded_height = PanelState::load(ctx, self.id) .map(|state| state.rect.height()) .or(self.default_height) @@ -820,6 +826,8 @@ impl TopBottomPanel { None } else if how_expanded < 1.0 { // Show a fake panel in this in-between animation state: + // TODO(emilk): move the panel out-of-screen instead of changing its height. + // Then we can actually paint it as it animates. let expanded_height = PanelState::load(ui.ctx(), self.id) .map(|state| state.rect.height()) .or(self.default_height) diff --git a/crates/egui/src/containers/scroll_area.rs b/crates/egui/src/containers/scroll_area.rs index d4676957..345b5972 100644 --- a/crates/egui/src/containers/scroll_area.rs +++ b/crates/egui/src/containers/scroll_area.rs @@ -253,12 +253,13 @@ impl ScrollArea { self } - /// Control the scrolling behavior - /// If `true` (default), the scroll area will respond to user scrolling - /// If `false`, the scroll area will not respond to user scrolling + /// Control the scrolling behavior. + /// + /// * If `true` (default), the scroll area will respond to user scrolling. + /// * If `false`, the scroll area will not respond to user scrolling. /// /// This can be used, for example, to optionally freeze scrolling while the user - /// is inputing text in a [`TextEdit`] widget contained within the scroll area. + /// is typing text in a [`TextEdit`] widget contained within the scroll area. /// /// This controls both scrolling directions. pub fn enable_scrolling(mut self, enable: bool) -> Self { @@ -268,8 +269,8 @@ impl ScrollArea { /// For each axis, should the containing area shrink if the content is small? /// - /// If true, egui will add blank space outside the scroll area. - /// If false, egui will add blank space inside the scroll area. + /// * If `true`, egui will add blank space outside the scroll area. + /// * If `false`, egui will add blank space inside the scroll area. /// /// Default: `[true; 2]`. pub fn auto_shrink(mut self, auto_shrink: [bool; 2]) -> Self { diff --git a/crates/egui/src/context.rs b/crates/egui/src/context.rs index a2127536..dc4a479b 100644 --- a/crates/egui/src/context.rs +++ b/crates/egui/src/context.rs @@ -1293,12 +1293,15 @@ impl Context { } /// Like [`Self::animate_bool`] but allows you to control the animation time. - pub fn animate_bool_with_time(&self, id: Id, value: bool, animation_time: f32) -> f32 { + pub fn animate_bool_with_time(&self, id: Id, target_value: bool, animation_time: f32) -> f32 { let animated_value = { let ctx_impl = &mut *self.write(); - ctx_impl - .animation_manager - .animate_bool(&ctx_impl.input, animation_time, id, value) + ctx_impl.animation_manager.animate_bool( + &ctx_impl.input, + animation_time, + id, + target_value, + ) }; let animation_in_progress = 0.0 < animated_value && animated_value < 1.0; if animation_in_progress { @@ -1310,14 +1313,17 @@ impl Context { /// Allows you to smoothly change the f32 value. /// At the first call the value is written to memory. /// When it is called with a new value, it linearly interpolates to it in the given time. - pub fn animate_value_with_time(&self, id: Id, value: f32, animation_time: f32) -> f32 { + pub fn animate_value_with_time(&self, id: Id, target_value: f32, animation_time: f32) -> f32 { let animated_value = { let ctx_impl = &mut *self.write(); - ctx_impl - .animation_manager - .animate_value(&ctx_impl.input, animation_time, id, value) + ctx_impl.animation_manager.animate_value( + &ctx_impl.input, + animation_time, + id, + target_value, + ) }; - let animation_in_progress = animated_value != value; + let animation_in_progress = animated_value != target_value; if animation_in_progress { self.request_repaint(); } diff --git a/crates/egui/src/ui.rs b/crates/egui/src/ui.rs index 27f772f7..7147f976 100644 --- a/crates/egui/src/ui.rs +++ b/crates/egui/src/ui.rs @@ -2007,7 +2007,7 @@ impl Ui { InnerResponse::new(inner, self.interact(rect, child_ui.id, Sense::hover())) } - #[deprecated = "Use ui.vertical_centered instead"] + #[deprecated = "Use ui.vertical_centered or ui.centered_and_justified"] pub fn centered(&mut self, add_contents: impl FnOnce(&mut Self) -> R) -> InnerResponse { self.vertical_centered(add_contents) } diff --git a/crates/egui/src/widgets/label.rs b/crates/egui/src/widgets/label.rs index 1addbc72..4eb06758 100644 --- a/crates/egui/src/widgets/label.rs +++ b/crates/egui/src/widgets/label.rs @@ -34,11 +34,13 @@ impl Label { /// If `true`, the text will wrap to stay within the max width of the [`Ui`]. /// - /// By default [`Self::wrap`] will be true in vertical layouts + /// By default [`Self::wrap`] will be `true` in vertical layouts /// and horizontal layouts with wrapping, - /// and false on non-wrapping horizontal layouts. + /// and `false` on non-wrapping horizontal layouts. /// /// Note that any `\n` in the text will always produce a new line. + /// + /// You can also use [`crate::Style::wrap`]. #[inline] pub fn wrap(mut self, wrap: bool) -> Self { self.wrap = Some(wrap); diff --git a/crates/egui/src/widgets/separator.rs b/crates/egui/src/widgets/separator.rs index 8a9588fd..7855611a 100644 --- a/crates/egui/src/widgets/separator.rs +++ b/crates/egui/src/widgets/separator.rs @@ -72,10 +72,19 @@ impl Widget for Separator { if ui.is_rect_visible(response.rect) { let stroke = ui.visuals().widgets.noninteractive.bg_stroke; + let painter = ui.painter(); if is_horizontal_line { - ui.painter().hline(rect.x_range(), rect.center().y, stroke); + painter.hline( + rect.x_range(), + painter.round_to_pixel(rect.center().y), + stroke, + ); } else { - ui.painter().vline(rect.center().x, rect.y_range(), stroke); + painter.vline( + painter.round_to_pixel(rect.center().x), + rect.y_range(), + stroke, + ); } } diff --git a/crates/epaint/src/util/mod.rs b/crates/epaint/src/util/mod.rs index cb3bc66d..2aa70ee0 100644 --- a/crates/epaint/src/util/mod.rs +++ b/crates/epaint/src/util/mod.rs @@ -5,8 +5,7 @@ pub use ordered_float::*; /// Hash the given value with a predictable hasher. #[inline] pub fn hash(value: impl std::hash::Hash) -> u64 { - use ahash::RandomState; - RandomState::with_seeds(1, 2, 3, 4).hash_one(value) + ahash::RandomState::with_seeds(1, 2, 3, 4).hash_one(value) } /// Hash the given value with the given hasher. From 0b2d56cff0c05d8a5f3462d7cc5b534b7c643c76 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Mon, 5 Dec 2022 11:16:37 +0100 Subject: [PATCH 031/143] Grid: special-treat first frame to fix bug causing expanding grids (#2384) --- crates/egui/src/grid.rs | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/crates/egui/src/grid.rs b/crates/egui/src/grid.rs index fbfd7820..54344428 100644 --- a/crates/egui/src/grid.rs +++ b/crates/egui/src/grid.rs @@ -51,6 +51,9 @@ pub(crate) struct GridLayout { style: std::sync::Arc

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 literal 0 HcmV?d00001 diff --git a/examples/custom_window_frame/Cargo.toml b/examples/custom_window_frame/Cargo.toml index 5f5ea2c6..ef4d5878 100644 --- a/examples/custom_window_frame/Cargo.toml +++ b/examples/custom_window_frame/Cargo.toml @@ -9,4 +9,6 @@ publish = false [dependencies] -eframe = { path = "../../crates/eframe" } +eframe = { path = "../../crates/eframe", features = [ + "__screenshot", # __screenshot is so we can dump a ascreenshot using EFRAME_SCREENSHOT_TO +] } diff --git a/examples/custom_window_frame/README.md b/examples/custom_window_frame/README.md index dc1d02a8..c300f408 100644 --- a/examples/custom_window_frame/README.md +++ b/examples/custom_window_frame/README.md @@ -1,3 +1,7 @@ +Example how to show a custom window frame instead of the default OS window chrome decorations. + ```sh cargo run -p custom_window_frame ``` + +![](screenshot.png) diff --git a/examples/custom_window_frame/screenshot.png b/examples/custom_window_frame/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..afca4c0b6459eaf042eb20ea7b35054dc7388497 GIT binary patch literal 8369 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 R`d0)D1sN6T%8w>N{{ur94(0#= literal 0 HcmV?d00001 diff --git a/examples/custom_window_frame/src/main.rs b/examples/custom_window_frame/src/main.rs index 372fa7c7..10301cc3 100644 --- a/examples/custom_window_frame/src/main.rs +++ b/examples/custom_window_frame/src/main.rs @@ -11,6 +11,7 @@ fn main() { // To have rounded corners we need transparency: transparent: true, min_window_size: Some(egui::vec2(320.0, 100.0)), + initial_window_size: Some(egui::vec2(320.0, 240.0)), ..Default::default() }; eframe::run_native( diff --git a/examples/download_image/Cargo.toml b/examples/download_image/Cargo.toml index 87e0a8eb..58f58283 100644 --- a/examples/download_image/Cargo.toml +++ b/examples/download_image/Cargo.toml @@ -9,7 +9,9 @@ publish = false [dependencies] -eframe = { path = "../../crates/eframe" } +eframe = { path = "../../crates/eframe", features = [ + "__screenshot", # __screenshot is so we can dump a ascreenshot using EFRAME_SCREENSHOT_TO +] } egui_extras = { path = "../../crates/egui_extras", features = ["image"] } ehttp = "0.2" image = { version = "0.24", default-features = false, features = ["jpeg"] } diff --git a/examples/download_image/README.md b/examples/download_image/README.md index a2123b58..936e1e05 100644 --- a/examples/download_image/README.md +++ b/examples/download_image/README.md @@ -1,3 +1,7 @@ +Example how to download and show an image with eframe/egui. + ```sh cargo run -p download_image ``` + +![](screenshot.png) diff --git a/examples/download_image/screenshot.png b/examples/download_image/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..919c4544f55e6b1992c67a66ccb0fed29d9108de GIT binary patch literal 361536 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