notedeck

One damus client to rule them all
git clone git://jb55.com/notedeck
Log | Files | Refs | README | LICENSE

commit 95c836b375384297bc121754f7812c165c9268ce
parent d38fcf80b9511c3d7148f65fcae5cb3b53e67080
Author: William Casarin <jb55@jb55.com>
Date:   Wed,  7 Feb 2024 12:06:28 -0800

update to latest egui

Signed-off-by: William Casarin <jb55@jb55.com>

Diffstat:
Mshell.nix | 2+-
Msrc/app.rs | 26+++++++++++++++-----------
Msrc/frame_history.rs | 80-------------------------------------------------------------------------------
Msrc/images.rs | 9+++++----
4 files changed, 21 insertions(+), 96 deletions(-)

diff --git a/shell.nix b/shell.nix @@ -1,7 +1,7 @@ { pkgs ? import <nixpkgs> {}, use_android ? true }: with pkgs; let - x11libs = lib.makeLibraryPath [ xorg.libX11 xorg.libXcursor xorg.libXrandr xorg.libXi libglvnd vulkan-loader vulkan-validation-layers ]; + x11libs = lib.makeLibraryPath [ xorg.libX11 xorg.libXcursor xorg.libXrandr xorg.libXi libglvnd vulkan-loader vulkan-validation-layers libxkbcommon ]; ndk-version = "24.0.8215888"; #ndk-version = "21.0.6113669"; diff --git a/src/app.rs b/src/app.rs @@ -7,7 +7,7 @@ use crate::ui::padding; use crate::Result; use egui::containers::scroll_area::ScrollBarVisibility; use egui::widgets::Spinner; -use egui::{Context, Frame, Margin, TextureHandle, TextureId}; +use egui::{Context, Frame, ImageSource, Margin, TextureHandle, TextureId}; use egui_extras::Size; use enostr::{ClientMessage, EventId, Filter, Profile, Pubkey, RelayEvent, RelayMessage}; use poll_promise::Promise; @@ -94,7 +94,11 @@ fn relay_setup(pool: &mut RelayPool, ctx: &egui::Context) { fn send_initial_filters(pool: &mut RelayPool, relay_url: &str) { let filter = Filter::new().limit(100).kinds(vec![1, 42]).pubkeys( - ["32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245".into()].into(), + [ + Pubkey::from_hex("32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245") + .unwrap(), + ] + .into(), ); let subid = "initial"; @@ -109,7 +113,7 @@ fn send_initial_filters(pool: &mut RelayPool, relay_url: &str) { fn try_process_event(damus: &mut Damus, ctx: &egui::Context) { let amount = 0.2; - if ctx.input(|i| i.key_pressed(egui::Key::PlusEquals)) { + if ctx.input(|i| i.key_pressed(egui::Key::Plus)) { ctx.set_pixels_per_point(ctx.pixels_per_point() + amount); } else if ctx.input(|i| i.key_pressed(egui::Key::Minus)) { ctx.set_pixels_per_point(ctx.pixels_per_point() - amount); @@ -321,22 +325,22 @@ fn render_pfp(ui: &mut egui::Ui, img_cache: &mut ImageCache, url: &str) { ui.label("❌"); } Some(Ok(img)) => { - pfp_image(ui, img.into(), pfp_size); + pfp_image(ui, img, pfp_size); } } } Some(Ok(img)) => { - pfp_image(ui, img.into(), pfp_size); + pfp_image(ui, img, pfp_size); } } } -fn pfp_image(ui: &mut egui::Ui, img: TextureId, size: f32) -> egui::Response { +fn pfp_image<'a>(ui: &mut egui::Ui, img: impl Into<ImageSource<'a>>, size: f32) -> egui::Response { #[cfg(feature = "profiling")] puffin::profile_function!(); //img.show_max_size(ui, egui::vec2(size, size)) - ui.image(img, egui::vec2(size, size)) + ui.image(img) //.with_options() } @@ -647,8 +651,8 @@ fn add_test_events(damus: &mut Damus) { // For inspiration and more examples, go to https://emilk.github.io/egui let test_event = Event { - id: "6938e3cd841f3111dbdbd909f87fd52c3d1f1e4a07fd121d1243196e532811cb".to_string().into(), - pubkey: "f0a6ff7f70b872de6d82c8daec692a433fd23b6a49f25923c6f034df715cdeec".to_string().into(), + id: EventId::from_hex("6938e3cd841f3111dbdbd909f87fd52c3d1f1e4a07fd121d1243196e532811cb").unwrap(), + pubkey: Pubkey::from_hex("f0a6ff7f70b872de6d82c8daec692a433fd23b6a49f25923c6f034df715cdeec").unwrap(), created_at: 1667781968, kind: 1, tags: vec![], @@ -657,8 +661,8 @@ fn add_test_events(damus: &mut Damus) { }; let test_event2 = Event { - id: "6938e3cd841f3111dbdbd909f87fd52c3d1f1e4a07fd121d1243196e532811cb".to_string().into(), - pubkey: "32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245".to_string().into(), + id: EventId::from_hex("6938e3cd841f3111dbdbd909f87fd52c3d1f1e4a07fd121d1243196e532811cb").unwrap(), + pubkey: Pubkey::from_hex("32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245").unwrap(), created_at: 1667781968, kind: 1, tags: vec![], diff --git a/src/frame_history.rs b/src/frame_history.rs @@ -42,85 +42,5 @@ impl FrameHistory { Does not include GPU usage, nor overhead for sending data to GPU.", ); egui::warn_if_debug_build(ui); - - if !cfg!(target_arch = "wasm32") { - egui::CollapsingHeader::new("📊 CPU usage history") - .default_open(false) - .show(ui, |ui| { - self.graph(ui); - }); - } - } - - fn graph(&mut self, ui: &mut egui::Ui) -> egui::Response { - use egui::*; - - ui.label("egui CPU usage history"); - - let history = &self.frame_times; - - // TODO(emilk): we should not use `slider_width` as default graph width. - let height = ui.spacing().slider_width; - let size = vec2(ui.available_size_before_wrap().x, height); - let (rect, response) = ui.allocate_at_least(size, Sense::hover()); - let style = ui.style().noninteractive(); - - let graph_top_cpu_usage = 0.010; - let graph_rect = Rect::from_x_y_ranges(history.max_age()..=0.0, graph_top_cpu_usage..=0.0); - let to_screen = emath::RectTransform::from_to(graph_rect, rect); - - let mut shapes = Vec::with_capacity(3 + 2 * history.len()); - shapes.push(Shape::Rect(epaint::RectShape { - rect, - rounding: style.rounding, - fill: ui.visuals().extreme_bg_color, - stroke: ui.style().noninteractive().bg_stroke, - })); - - let rect = rect.shrink(4.0); - let color = ui.visuals().text_color(); - let line_stroke = Stroke::new(1.0, color); - - if let Some(pointer_pos) = response.hover_pos() { - let y = pointer_pos.y; - shapes.push(Shape::line_segment( - [pos2(rect.left(), y), pos2(rect.right(), y)], - line_stroke, - )); - let cpu_usage = to_screen.inverse().transform_pos(pointer_pos).y; - let text = format!("{:.1} ms", 1e3 * cpu_usage); - shapes.push(ui.fonts(|f| { - Shape::text( - f, - pos2(rect.left(), y), - egui::Align2::LEFT_BOTTOM, - text, - TextStyle::Monospace.resolve(ui.style()), - color, - ) - })); - } - - let circle_color = color; - let radius = 2.0; - let right_side_time = ui.input(|i| i.time); // Time at right side of screen - - for (time, cpu_usage) in history.iter() { - let age = (right_side_time - time) as f32; - let pos = to_screen.transform_pos_clamped(Pos2::new(age, cpu_usage)); - - shapes.push(Shape::line_segment( - [pos2(pos.x, rect.bottom()), pos], - line_stroke, - )); - - if cpu_usage < graph_top_cpu_usage { - shapes.push(Shape::circle_filled(pos, radius, circle_color)); - } - } - - ui.painter().extend(shapes); - - response } } diff --git a/src/images.rs b/src/images.rs @@ -1,7 +1,6 @@ use crate::error::Error; use crate::result::Result; -use egui::{Color32, ColorImage, TextureHandle}; -use egui_extras::image::FitTo; +use egui::{Color32, ColorImage, SizeHint, TextureHandle}; use image::imageops::FilterType; use poll_promise::Promise; @@ -90,8 +89,10 @@ fn parse_img_response(response: ehttp::Response) -> Result<ColorImage> { #[cfg(feature = "profiling")] puffin::profile_scope!("load_svg"); - let mut color_image = - egui_extras::image::load_svg_bytes_with_size(&response.bytes, FitTo::Size(size, size))?; + let mut color_image = egui_extras::image::load_svg_bytes_with_size( + &response.bytes, + Some(SizeHint::Size(size, size)), + )?; round_image(&mut color_image); Ok(color_image) } else if content_type.starts_with("image/") {