From 76602e85aea2a634c43a51a518edaee1d4463f0b Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Sat, 5 Nov 2022 09:40:59 +0100 Subject: [PATCH 01/11] Move `File->Advanced` to own `View` menu instead --- crates/re_viewer/src/app.rs | 60 ++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 28 deletions(-) diff --git a/crates/re_viewer/src/app.rs b/crates/re_viewer/src/app.rs index 80b33dd24ee3..b1515d9a20c0 100644 --- a/crates/re_viewer/src/app.rs +++ b/crates/re_viewer/src/app.rs @@ -546,6 +546,10 @@ fn top_panel(egui_ctx: &egui::Context, frame: &mut eframe::Frame, app: &mut App) file_menu(ui, app, frame); }); + ui.menu_button("View", |ui| { + view_menu(ui, app, frame); + }); + ui.menu_button("Recordings", |ui| { recordings_menu(ui, app); }); @@ -729,40 +733,40 @@ fn file_menu(ui: &mut egui::Ui, app: &mut App, _frame: &mut eframe::Frame) { } } - ui.menu_button("Advanced", |ui| { - ui.set_min_width(180.0); - - if ui - .add( - egui::Button::new("Reset viewer") - .shortcut_text(ui.ctx().format_shortcut(&kb_shortcuts::RESET_VIEWER)), - ) - .on_hover_text("Reset the viewer to how it looked the first time you ran it") - .clicked() - { - app.reset(ui.ctx()); - ui.close_menu(); - } - - #[cfg(all(feature = "puffin", not(target_arch = "wasm32")))] - if ui - .add( - egui::Button::new("Profile viewer") - .shortcut_text(ui.ctx().format_shortcut(&kb_shortcuts::SHOW_PROFILER)), - ) - .on_hover_text("Starts a profiler, showing what makes the viewer run slow") - .clicked() - { - app.state.profiler.start(); - } - }); - #[cfg(not(target_arch = "wasm32"))] if ui.button("Quit").clicked() { _frame.close(); } } +fn view_menu(ui: &mut egui::Ui, app: &mut App, _frame: &mut eframe::Frame) { + ui.set_min_width(180.0); + + if ui + .add( + egui::Button::new("Reset viewer") + .shortcut_text(ui.ctx().format_shortcut(&kb_shortcuts::RESET_VIEWER)), + ) + .on_hover_text("Reset the viewer to how it looked the first time you ran it") + .clicked() + { + app.reset(ui.ctx()); + ui.close_menu(); + } + + #[cfg(all(feature = "puffin", not(target_arch = "wasm32")))] + if ui + .add( + egui::Button::new("Profile viewer") + .shortcut_text(ui.ctx().format_shortcut(&kb_shortcuts::SHOW_PROFILER)), + ) + .on_hover_text("Starts a profiler, showing what makes the viewer run slow") + .clicked() + { + app.state.profiler.start(); + } +} + // --- fn recordings_menu(ui: &mut egui::Ui, app: &mut App) { From bd1394c290f986dacab359ebb76f25121020b5ed Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Sat, 5 Nov 2022 10:07:34 +0100 Subject: [PATCH 02/11] "Recordings" menu: show that there are no recordings --- crates/re_viewer/src/app.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/crates/re_viewer/src/app.rs b/crates/re_viewer/src/app.rs index b1515d9a20c0..884fccece44d 100644 --- a/crates/re_viewer/src/app.rs +++ b/crates/re_viewer/src/app.rs @@ -776,6 +776,11 @@ fn recordings_menu(ui: &mut egui::Ui, app: &mut App) { .sorted_by_key(|log_db| log_db.recording_info().map(|ri| ri.started)) .collect_vec(); + if log_dbs.is_empty() { + ui.weak("(empty)"); + return; + } + ui.style_mut().wrap = Some(false); for log_db in log_dbs { let info = if let Some(rec_info) = log_db.recording_info() { From 89a44c698b3b906dee6078558b6e4354e3ef98e7 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Sat, 5 Nov 2022 11:01:52 +0100 Subject: [PATCH 03/11] Capitalize menu items --- crates/re_viewer/src/app.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/crates/re_viewer/src/app.rs b/crates/re_viewer/src/app.rs index 884fccece44d..eebc1fb298a2 100644 --- a/crates/re_viewer/src/app.rs +++ b/crates/re_viewer/src/app.rs @@ -651,7 +651,7 @@ fn file_menu(ui: &mut egui::Ui, app: &mut App, _frame: &mut eframe::Frame) { ui.spinner(); }); ui.horizontal(|ui| { - let _ = ui.button("Save time selection…"); + let _ = ui.button("Save Time Selection…"); ui.spinner(); }); }); @@ -720,7 +720,7 @@ fn file_menu(ui: &mut egui::Ui, app: &mut App, _frame: &mut eframe::Frame) { #[cfg(not(target_arch = "wasm32"))] if ui .button("Load") - .on_hover_text("Load a Rerun data file (.rrd)") + .on_hover_text("Load a Rerun Data File (.rrd)") .clicked() { if let Some(path) = rfd::FileDialog::new() @@ -744,7 +744,7 @@ fn view_menu(ui: &mut egui::Ui, app: &mut App, _frame: &mut eframe::Frame) { if ui .add( - egui::Button::new("Reset viewer") + egui::Button::new("Reset Viewer") .shortcut_text(ui.ctx().format_shortcut(&kb_shortcuts::RESET_VIEWER)), ) .on_hover_text("Reset the viewer to how it looked the first time you ran it") @@ -757,7 +757,7 @@ fn view_menu(ui: &mut egui::Ui, app: &mut App, _frame: &mut eframe::Frame) { #[cfg(all(feature = "puffin", not(target_arch = "wasm32")))] if ui .add( - egui::Button::new("Profile viewer") + egui::Button::new("Profile Viewer") .shortcut_text(ui.ctx().format_shortcut(&kb_shortcuts::SHOW_PROFILER)), ) .on_hover_text("Starts a profiler, showing what makes the viewer run slow") From c8266da260f9404797953c600e030e657409f6e4 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Sat, 5 Nov 2022 11:21:06 +0100 Subject: [PATCH 04/11] Add buttons and shortcuts for zooming the whole GUI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit You can now zoom the whole GUI with ⌘+ and ⌘- (or Ctrl+Plus/Ctrl+Minus), just like on the web, or an electron app. --- Cargo.lock | 16 +++++----- Cargo.toml | 24 +++++++-------- crates/re_viewer/src/app.rs | 61 +++++++++++++++++++++++++++---------- 3 files changed, 65 insertions(+), 36 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 022043eb1e3a..91004a2872a3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1021,7 +1021,7 @@ dependencies = [ [[package]] name = "eframe" version = "0.19.0" -source = "git+https://github.com/emilk/egui?rev=fcb00723bc7e57ca7571d408b0f9019db8478592#fcb00723bc7e57ca7571d408b0f9019db8478592" +source = "git+https://github.com/emilk/egui?rev=a0b3f1126b158d41db91c3418695f12133bc1329#a0b3f1126b158d41db91c3418695f12133bc1329" dependencies = [ "bytemuck", "directories-next", @@ -1048,7 +1048,7 @@ dependencies = [ [[package]] name = "egui" version = "0.19.0" -source = "git+https://github.com/emilk/egui?rev=fcb00723bc7e57ca7571d408b0f9019db8478592#fcb00723bc7e57ca7571d408b0f9019db8478592" +source = "git+https://github.com/emilk/egui?rev=a0b3f1126b158d41db91c3418695f12133bc1329#a0b3f1126b158d41db91c3418695f12133bc1329" dependencies = [ "ahash 0.8.0", "epaint", @@ -1070,7 +1070,7 @@ dependencies = [ [[package]] name = "egui-wgpu" version = "0.19.0" -source = "git+https://github.com/emilk/egui?rev=fcb00723bc7e57ca7571d408b0f9019db8478592#fcb00723bc7e57ca7571d408b0f9019db8478592" +source = "git+https://github.com/emilk/egui?rev=a0b3f1126b158d41db91c3418695f12133bc1329#a0b3f1126b158d41db91c3418695f12133bc1329" dependencies = [ "bytemuck", "egui", @@ -1084,7 +1084,7 @@ dependencies = [ [[package]] name = "egui-winit" version = "0.19.0" -source = "git+https://github.com/emilk/egui?rev=fcb00723bc7e57ca7571d408b0f9019db8478592#fcb00723bc7e57ca7571d408b0f9019db8478592" +source = "git+https://github.com/emilk/egui?rev=a0b3f1126b158d41db91c3418695f12133bc1329#a0b3f1126b158d41db91c3418695f12133bc1329" dependencies = [ "arboard", "egui", @@ -1109,7 +1109,7 @@ dependencies = [ [[package]] name = "egui_extras" version = "0.19.0" -source = "git+https://github.com/emilk/egui?rev=fcb00723bc7e57ca7571d408b0f9019db8478592#fcb00723bc7e57ca7571d408b0f9019db8478592" +source = "git+https://github.com/emilk/egui?rev=a0b3f1126b158d41db91c3418695f12133bc1329#a0b3f1126b158d41db91c3418695f12133bc1329" dependencies = [ "egui", "tracing", @@ -1118,7 +1118,7 @@ dependencies = [ [[package]] name = "egui_glow" version = "0.19.0" -source = "git+https://github.com/emilk/egui?rev=fcb00723bc7e57ca7571d408b0f9019db8478592#fcb00723bc7e57ca7571d408b0f9019db8478592" +source = "git+https://github.com/emilk/egui?rev=a0b3f1126b158d41db91c3418695f12133bc1329#a0b3f1126b158d41db91c3418695f12133bc1329" dependencies = [ "bytemuck", "egui", @@ -1140,7 +1140,7 @@ checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" [[package]] name = "emath" version = "0.19.0" -source = "git+https://github.com/emilk/egui?rev=fcb00723bc7e57ca7571d408b0f9019db8478592#fcb00723bc7e57ca7571d408b0f9019db8478592" +source = "git+https://github.com/emilk/egui?rev=a0b3f1126b158d41db91c3418695f12133bc1329#a0b3f1126b158d41db91c3418695f12133bc1329" dependencies = [ "bytemuck", "serde", @@ -1149,7 +1149,7 @@ dependencies = [ [[package]] name = "epaint" version = "0.19.0" -source = "git+https://github.com/emilk/egui?rev=fcb00723bc7e57ca7571d408b0f9019db8478592#fcb00723bc7e57ca7571d408b0f9019db8478592" +source = "git+https://github.com/emilk/egui?rev=a0b3f1126b158d41db91c3418695f12133bc1329#a0b3f1126b158d41db91c3418695f12133bc1329" dependencies = [ "ab_glyph", "ahash 0.8.0", diff --git a/Cargo.toml b/Cargo.toml index dccc60af0a84..8e027c561c95 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,18 +24,18 @@ opt-level = 2 debug = true [patch.crates-io] -# 2022-11-02 - user-defined command buffers -eframe = { git = "https://github.com/emilk/egui", rev = "fcb00723bc7e57ca7571d408b0f9019db8478592" } -egui = { git = "https://github.com/emilk/egui", rev = "fcb00723bc7e57ca7571d408b0f9019db8478592" } -egui_extras = { git = "https://github.com/emilk/egui", rev = "fcb00723bc7e57ca7571d408b0f9019db8478592" } -egui_glow = { git = "https://github.com/emilk/egui", rev = "fcb00723bc7e57ca7571d408b0f9019db8478592" } -egui-wgpu = { git = "https://github.com/emilk/egui", rev = "fcb00723bc7e57ca7571d408b0f9019db8478592" } - -# eframe = { path = "../egui/crates/eframe" } -# egui = { path = "../egui/crates/egui" } -# egui_extras = { path = "../egui/crates/egui_extras" } -# egui_glow = { path = "../egui/crates/egui_glow" } -# egui-wgpu = { path = "../egui/crates/egui-wgpu" } +# 2022-11-05 - helpers for zooming the UI +eframe = { git = "https://github.com/emilk/egui", rev = "a0b3f1126b158d41db91c3418695f12133bc1329" } +egui = { git = "https://github.com/emilk/egui", rev = "a0b3f1126b158d41db91c3418695f12133bc1329" } +egui_extras = { git = "https://github.com/emilk/egui", rev = "a0b3f1126b158d41db91c3418695f12133bc1329" } +egui_glow = { git = "https://github.com/emilk/egui", rev = "a0b3f1126b158d41db91c3418695f12133bc1329" } +egui-wgpu = { git = "https://github.com/emilk/egui", rev = "a0b3f1126b158d41db91c3418695f12133bc1329" } + +# eframe = { path = "../../egui/crates/eframe" } +# egui = { path = "../../egui/crates/egui" } +# egui_extras = { path = "../../egui/crates/egui_extras" } +# egui_glow = { path = "../../egui/crates/egui_glow" } +# egui-wgpu = { path = "../../egui/crates/egui-wgpu" } # Because gltf hasn't published a new version: https://github.com/gltf-rs/gltf/issues/357 gltf = { git = "https://github.com/rerun-io/gltf", rev = "3c14ded73755d1ce9e47010edb06db63cb7e2cca" } diff --git a/crates/re_viewer/src/app.rs b/crates/re_viewer/src/app.rs index eebc1fb298a2..ddb5ceeaea54 100644 --- a/crates/re_viewer/src/app.rs +++ b/crates/re_viewer/src/app.rs @@ -189,20 +189,8 @@ impl App { pub fn promise_exists(&mut self, name: impl AsRef) -> bool { self.pending_promises.contains_key(name.as_ref()) } -} - -impl eframe::App for App { - fn save(&mut self, storage: &mut dyn eframe::Storage) { - eframe::set_value(storage, eframe::APP_KEY, &self.state); - } - - fn update(&mut self, egui_ctx: &egui::Context, frame: &mut eframe::Frame) { - #[cfg(not(target_arch = "wasm32"))] - if self.ctrl_c.load(std::sync::atomic::Ordering::SeqCst) { - frame.close(); - return; - } + fn check_kb_shortcuts(&mut self, egui_ctx: &egui::Context, frame: &mut eframe::Frame) { if egui_ctx .input_mut() .consume_shortcut(&kb_shortcuts::RESET_VIEWER) @@ -218,6 +206,29 @@ impl eframe::App for App { self.state.profiler.start(); } + if !frame.is_web() { + egui::gui_zoom::zoom_with_keyboard_shortcuts( + egui_ctx, + frame.info().native_pixels_per_point, + ); + } + } +} + +impl eframe::App for App { + fn save(&mut self, storage: &mut dyn eframe::Storage) { + eframe::set_value(storage, eframe::APP_KEY, &self.state); + } + + fn update(&mut self, egui_ctx: &egui::Context, frame: &mut eframe::Frame) { + #[cfg(not(target_arch = "wasm32"))] + if self.ctrl_c.load(std::sync::atomic::Ordering::SeqCst) { + frame.close(); + return; + } + + self.check_kb_shortcuts(egui_ctx, frame); + self.state.cache.new_frame(); if let Some(rx) = &mut self.rx { @@ -534,12 +545,24 @@ fn top_panel(egui_ctx: &egui::Context, frame: &mut eframe::Frame, app: &mut App) egui::menu::bar(ui, |ui| { #[cfg(target_os = "macos")] if crate::native::FULLSIZE_CONTENT { + let gui_zoom = if let Some(native_pixels_per_point) = + frame.info().native_pixels_per_point + { + native_pixels_per_point / ui.ctx().pixels_per_point() + } else { + 1.0 + }; + // We use up the same row as the native red/yellow/green close/minimize/maximize buttons. // This means we need to make room for them: - ui.add_space(64.0); + let needed_space = egui::vec2(64.0, 24.0); + + // Even when zoomed out, we don't want to shrink too much: + let needed_space = needed_space.max(needed_space * gui_zoom); // …and match their height: - ui.set_min_size(egui::vec2(ui.available_width(), 24.0)); + ui.add_space(needed_space.x); + ui.set_min_size(egui::vec2(ui.available_width(), needed_space.y)); } ui.menu_button("File", |ui| { @@ -739,9 +762,15 @@ fn file_menu(ui: &mut egui::Ui, app: &mut App, _frame: &mut eframe::Frame) { } } -fn view_menu(ui: &mut egui::Ui, app: &mut App, _frame: &mut eframe::Frame) { +fn view_menu(ui: &mut egui::Ui, app: &mut App, frame: &mut eframe::Frame) { ui.set_min_width(180.0); + // On the web the browser controls the zoom + if !frame.is_web() { + egui::gui_zoom::zoom_menu_buttons(ui, frame.info().native_pixels_per_point); + ui.separator(); + } + if ui .add( egui::Button::new("Reset Viewer") From 7e882b80ce17d87d7948f3a24d9d3cfcbf9823fd Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Sat, 5 Nov 2022 11:36:37 +0100 Subject: [PATCH 05/11] Hide "File" menu on web --- crates/re_viewer/src/app.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/crates/re_viewer/src/app.rs b/crates/re_viewer/src/app.rs index ddb5ceeaea54..44e3d2ea4d7b 100644 --- a/crates/re_viewer/src/app.rs +++ b/crates/re_viewer/src/app.rs @@ -565,6 +565,7 @@ fn top_panel(egui_ctx: &egui::Context, frame: &mut eframe::Frame, app: &mut App) ui.set_min_size(egui::vec2(ui.available_width(), needed_space.y)); } + #[cfg(not(target_arch = "wasm32"))] ui.menu_button("File", |ui| { file_menu(ui, app, frame); }); @@ -662,7 +663,8 @@ fn file_saver_progress_ui(egui_ctx: &egui::Context, app: &mut App) { } } -fn file_menu(ui: &mut egui::Ui, app: &mut App, _frame: &mut eframe::Frame) { +#[cfg(not(target_arch = "wasm32"))] +fn file_menu(ui: &mut egui::Ui, app: &mut App, frame: &mut eframe::Frame) { // TODO(emilk): support saving data on web #[cfg(not(target_arch = "wasm32"))] { @@ -758,7 +760,7 @@ fn file_menu(ui: &mut egui::Ui, app: &mut App, _frame: &mut eframe::Frame) { #[cfg(not(target_arch = "wasm32"))] if ui.button("Quit").clicked() { - _frame.close(); + frame.close(); } } From 2d81b2f12320f6a7493b761f6288e4db993602d4 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Sat, 5 Nov 2022 13:55:07 +0100 Subject: [PATCH 06/11] Fix small bug when zooming in on mac --- crates/re_viewer/src/app.rs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/crates/re_viewer/src/app.rs b/crates/re_viewer/src/app.rs index 44e3d2ea4d7b..a3f644720d16 100644 --- a/crates/re_viewer/src/app.rs +++ b/crates/re_viewer/src/app.rs @@ -554,15 +554,17 @@ fn top_panel(egui_ctx: &egui::Context, frame: &mut eframe::Frame, app: &mut App) }; // We use up the same row as the native red/yellow/green close/minimize/maximize buttons. - // This means we need to make room for them: - let needed_space = egui::vec2(64.0, 24.0); + // This means we need to make room for them. + let size_in_native_scale = egui::vec2(64.0, 24.0); // source: I measured /emilk - // Even when zoomed out, we don't want to shrink too much: - let needed_space = needed_space.max(needed_space * gui_zoom); + // Always use the same width measured in native GUI coordinates: + ui.add_space(gui_zoom * size_in_native_scale.x); - // …and match their height: - ui.add_space(needed_space.x); - ui.set_min_size(egui::vec2(ui.available_width(), needed_space.y)); + // Use more vertical space when zoomed in… + let bar_height = size_in_native_scale.y; + // …but never shrink below the native button height when zoomed out. + let bar_height = bar_height.max(gui_zoom * size_in_native_scale.y); + ui.set_min_size(egui::vec2(ui.available_width(), bar_height)); } #[cfg(not(target_arch = "wasm32"))] From c3f917038ad7c9cd13e29eae40c81954df65a131 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Sun, 6 Nov 2022 20:16:07 +0100 Subject: [PATCH 07/11] Fix crash with zero-sized viewports --- crates/re_viewer/src/ui/view3d/scene.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/re_viewer/src/ui/view3d/scene.rs b/crates/re_viewer/src/ui/view3d/scene.rs index 5a39d7208f2d..672fcd1c85c3 100644 --- a/crates/re_viewer/src/ui/view3d/scene.rs +++ b/crates/re_viewer/src/ui/view3d/scene.rs @@ -401,10 +401,10 @@ impl Scene { let hover_size_boost = 1.5; const HOVER_COLOR: [u8; 4] = [255, 200, 200, 255]; - let viewport_area = viewport_size.x * viewport_size.y; + let viewport_area = (viewport_size.x * viewport_size.y).at_least(1.0); // Size of a ui point (in meters), when projected out one meter: - let point_size_at_one_meter = eye.fov_y / viewport_size.y; + let point_size_at_one_meter = eye.fov_y / viewport_size.y.at_least(1.0); let eye_camera_plane = macaw::Plane3::from_normal_point(eye.forward_in_world(), eye.pos_in_world()); From bded61f44c19b7ac55118bb3aeb416e769730878 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Sun, 6 Nov 2022 20:21:38 +0100 Subject: [PATCH 08/11] Use fixed top bar height --- crates/re_viewer/src/app.rs | 43 +++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/crates/re_viewer/src/app.rs b/crates/re_viewer/src/app.rs index a3f644720d16..4312c19a9460 100644 --- a/crates/re_viewer/src/app.rs +++ b/crates/re_viewer/src/app.rs @@ -539,32 +539,37 @@ fn top_panel(egui_ctx: &egui::Context, frame: &mut eframe::Frame, app: &mut App) } }; + let gui_zoom = if let Some(native_pixels_per_point) = frame.info().native_pixels_per_point { + native_pixels_per_point / egui_ctx.pixels_per_point() + } else { + 1.0 + }; + + // On Mac, we share the same space as the native red/yellow/green close/minimize/maximize buttons. + // This means we need to make room for them. + let native_buttons_size_in_native_scale = egui::vec2(64.0, 24.0); // source: I measured /emilk + + let bar_height = if crate::native::FULLSIZE_CONTENT { + // Use more vertical space when zoomed in… + let bar_height = native_buttons_size_in_native_scale.y; + + // …but never shrink below the native button height when zoomed out. + bar_height.max(gui_zoom * native_buttons_size_in_native_scale.y) + } else { + egui_ctx.style().spacing.interact_size.y + }; + egui::TopBottomPanel::top("top_bar") .frame(panel_frame) + .exact_height(bar_height) .show(egui_ctx, |ui| { egui::menu::bar(ui, |ui| { + ui.set_height(bar_height); + #[cfg(target_os = "macos")] if crate::native::FULLSIZE_CONTENT { - let gui_zoom = if let Some(native_pixels_per_point) = - frame.info().native_pixels_per_point - { - native_pixels_per_point / ui.ctx().pixels_per_point() - } else { - 1.0 - }; - - // We use up the same row as the native red/yellow/green close/minimize/maximize buttons. - // This means we need to make room for them. - let size_in_native_scale = egui::vec2(64.0, 24.0); // source: I measured /emilk - // Always use the same width measured in native GUI coordinates: - ui.add_space(gui_zoom * size_in_native_scale.x); - - // Use more vertical space when zoomed in… - let bar_height = size_in_native_scale.y; - // …but never shrink below the native button height when zoomed out. - let bar_height = bar_height.max(gui_zoom * size_in_native_scale.y); - ui.set_min_size(egui::vec2(ui.available_width(), bar_height)); + ui.add_space(gui_zoom * native_buttons_size_in_native_scale.x); } #[cfg(not(target_arch = "wasm32"))] From b6dd60cb32d032a42c5a3c41548dc0c25fcbbba1 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Sun, 6 Nov 2022 20:37:47 +0100 Subject: [PATCH 09/11] Wasm32 build-fix --- crates/re_viewer/src/app.rs | 5 ++--- crates/re_viewer/src/lib.rs | 6 ++++++ crates/re_viewer/src/native.rs | 6 +----- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/crates/re_viewer/src/app.rs b/crates/re_viewer/src/app.rs index 4312c19a9460..3241f47bc555 100644 --- a/crates/re_viewer/src/app.rs +++ b/crates/re_viewer/src/app.rs @@ -549,7 +549,7 @@ fn top_panel(egui_ctx: &egui::Context, frame: &mut eframe::Frame, app: &mut App) // This means we need to make room for them. let native_buttons_size_in_native_scale = egui::vec2(64.0, 24.0); // source: I measured /emilk - let bar_height = if crate::native::FULLSIZE_CONTENT { + let bar_height = if crate::FULLSIZE_CONTENT { // Use more vertical space when zoomed in… let bar_height = native_buttons_size_in_native_scale.y; @@ -566,8 +566,7 @@ fn top_panel(egui_ctx: &egui::Context, frame: &mut eframe::Frame, app: &mut App) egui::menu::bar(ui, |ui| { ui.set_height(bar_height); - #[cfg(target_os = "macos")] - if crate::native::FULLSIZE_CONTENT { + if crate::FULLSIZE_CONTENT { // Always use the same width measured in native GUI coordinates: ui.add_space(gui_zoom * native_buttons_size_in_native_scale.x); } diff --git a/crates/re_viewer/src/lib.rs b/crates/re_viewer/src/lib.rs index 1c26633ec2c4..d591686ea7f4 100644 --- a/crates/re_viewer/src/lib.rs +++ b/crates/re_viewer/src/lib.rs @@ -42,6 +42,12 @@ pub use web::start; // --------------------------------------------------------------------------- +/// If true, we fill the entire window, except for the close/maximize/minimize buttons in the top-left. +/// See +pub const FULLSIZE_CONTENT: bool = cfg!(target_os = "macos"); + +// --------------------------------------------------------------------------- + /// Profiling macro for feature "puffin" #[doc(hidden)] #[macro_export] diff --git a/crates/re_viewer/src/native.rs b/crates/re_viewer/src/native.rs index 255fc43d893e..29a0d6297085 100644 --- a/crates/re_viewer/src/native.rs +++ b/crates/re_viewer/src/native.rs @@ -7,10 +7,6 @@ use crate::DesignTokens; #[cfg(not(any(feature = "glow", feature = "wgpu")))] compile_error!("You must enable either the 'glow' or 'wgpu' feature of re_viewer."); -/// If true, we fill the entire window, except for the close/maximize/minimize buttons in the top-left. -/// See -pub const FULLSIZE_CONTENT: bool = cfg!(target_os = "macos"); - type AppCreator = Box, DesignTokens) -> Box>; @@ -34,7 +30,7 @@ pub fn run_native_app(app_creator: AppCreator) { default_theme: eframe::Theme::Dark, #[cfg(target_os = "macos")] - fullsize_content: FULLSIZE_CONTENT, + fullsize_content: crate::FULLSIZE_CONTENT, #[cfg(feature = "wgpu")] wgpu_options: crate::wgpu_options(), From 22d9787878bbe692552ab17a064538b50326e659 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Mon, 7 Nov 2022 12:22:11 +0100 Subject: [PATCH 10/11] check_keyboard_shortcuts --- crates/re_viewer/src/app.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/re_viewer/src/app.rs b/crates/re_viewer/src/app.rs index 036516608536..90d6e61f53a0 100644 --- a/crates/re_viewer/src/app.rs +++ b/crates/re_viewer/src/app.rs @@ -190,7 +190,7 @@ impl App { self.pending_promises.contains_key(name.as_ref()) } - fn check_kb_shortcuts(&mut self, egui_ctx: &egui::Context, frame: &mut eframe::Frame) { + fn check_keyboard_shortcuts(&mut self, egui_ctx: &egui::Context, frame: &mut eframe::Frame) { if egui_ctx .input_mut() .consume_shortcut(&kb_shortcuts::RESET_VIEWER) @@ -227,7 +227,7 @@ impl eframe::App for App { return; } - self.check_kb_shortcuts(egui_ctx, frame); + self.check_keyboard_shortcuts(egui_ctx, frame); self.state.cache.new_frame(); From 9999ad5280d5e35394ee87c0e1e6e368e9ac8615 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Mon, 7 Nov 2022 12:22:31 +0100 Subject: [PATCH 11/11] Relaxed --- crates/re_viewer/src/app.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/re_viewer/src/app.rs b/crates/re_viewer/src/app.rs index 90d6e61f53a0..916e6c08f67d 100644 --- a/crates/re_viewer/src/app.rs +++ b/crates/re_viewer/src/app.rs @@ -222,7 +222,7 @@ impl eframe::App for App { fn update(&mut self, egui_ctx: &egui::Context, frame: &mut eframe::Frame) { #[cfg(not(target_arch = "wasm32"))] - if self.ctrl_c.load(std::sync::atomic::Ordering::SeqCst) { + if self.ctrl_c.load(std::sync::atomic::Ordering::Relaxed) { frame.close(); return; }