diff --git a/crates/notedeck_chrome/src/chrome.rs b/crates/notedeck_chrome/src/chrome.rs index d3db69bb..e7e40d36 100644 --- a/crates/notedeck_chrome/src/chrome.rs +++ b/crates/notedeck_chrome/src/chrome.rs @@ -422,22 +422,21 @@ impl Chrome { ui.add_space(16.0); //let dark_mode = ui.ctx().style().visuals.dark_mode; { - let col_resp = columns_button(ui); - if col_resp.clicked() { + if columns_button(ui) + .on_hover_cursor(egui::CursorIcon::PointingHand) + .clicked() + { self.active = 0; - } else if col_resp.hovered() { - notedeck_ui::show_pointer(ui); } } ui.add_space(32.0); if let Some(dave) = self.get_dave() { let rect = dave_sidebar_rect(ui); - let dave_resp = dave_button(dave.avatar_mut(), ui, rect); + let dave_resp = dave_button(dave.avatar_mut(), ui, rect) + .on_hover_cursor(egui::CursorIcon::PointingHand); if dave_resp.clicked() { self.switch_to_dave(); - } else if dave_resp.hovered() { - notedeck_ui::show_pointer(ui); } } } @@ -712,17 +711,15 @@ fn bottomup_sidebar( ) -> Option { ui.add_space(8.0); - let pfp_resp = pfp_button(ctx, ui); - let settings_resp = settings_button(ui); + let pfp_resp = pfp_button(ctx, ui).on_hover_cursor(egui::CursorIcon::PointingHand); + let settings_resp = settings_button(ui).on_hover_cursor(egui::CursorIcon::PointingHand); let theme_action = match ui.ctx().theme() { egui::Theme::Dark => { let resp = ui .add(Button::new("☀").frame(false)) + .on_hover_cursor(egui::CursorIcon::PointingHand) .on_hover_text("Switch to light mode"); - if resp.hovered() { - notedeck_ui::show_pointer(ui); - } if resp.clicked() { Some(ChromePanelAction::SaveTheme(ThemePreference::Light)) } else { @@ -732,10 +729,8 @@ fn bottomup_sidebar( egui::Theme::Light => { let resp = ui .add(Button::new("🌙").frame(false)) + .on_hover_cursor(egui::CursorIcon::PointingHand) .on_hover_text("Switch to dark mode"); - if resp.hovered() { - notedeck_ui::show_pointer(ui); - } if resp.clicked() { Some(ChromePanelAction::SaveTheme(ThemePreference::Dark)) } else { @@ -744,9 +739,11 @@ fn bottomup_sidebar( } }; - let support_resp = support_button(ui); + let support_resp = support_button(ui).on_hover_cursor(egui::CursorIcon::PointingHand); - let wallet_resp = ui.add(wallet_button()); + let wallet_resp = ui + .add(wallet_button()) + .on_hover_cursor(egui::CursorIcon::PointingHand); if ctx.args.debug { ui.weak(format!("{}", ctx.frame_history.fps() as i32)); @@ -776,14 +773,6 @@ fn bottomup_sidebar( } } - if pfp_resp.hovered() - || settings_resp.hovered() - || support_resp.hovered() - || wallet_resp.hovered() - { - notedeck_ui::show_pointer(ui); - } - if pfp_resp.clicked() { Some(ChromePanelAction::Account) } else if settings_resp.clicked() { diff --git a/crates/notedeck_columns/src/app.rs b/crates/notedeck_columns/src/app.rs index 4410c24e..35f43440 100644 --- a/crates/notedeck_columns/src/app.rs +++ b/crates/notedeck_columns/src/app.rs @@ -604,10 +604,9 @@ fn hovering_post_button( let darkmode = ui.ctx().style().visuals.dark_mode; // only show the compose button on profile pages and on home - let compose_resp = ui.put(rect, ui::post::compose_note_button(darkmode)); - if compose_resp.hovered() { - notedeck_ui::show_pointer(ui); - } + let compose_resp = ui + .put(rect, ui::post::compose_note_button(darkmode)) + .on_hover_cursor(egui::CursorIcon::PointingHand); if compose_resp.clicked() && !app.columns(app_ctx.accounts).columns().is_empty() { // just use the some side panel logic as the desktop DesktopSidePanel::perform_action( diff --git a/crates/notedeck_columns/src/ui/column/header.rs b/crates/notedeck_columns/src/ui/column/header.rs index b7382c78..4039e689 100644 --- a/crates/notedeck_columns/src/ui/column/header.rs +++ b/crates/notedeck_columns/src/ui/column/header.rs @@ -76,14 +76,12 @@ impl<'a> NavTitle<'a> { ui.spacing_mut().item_spacing.x = item_spacing; let chev_x = 8.0; - let back_button_resp = - prev(self.routes).map(|r| self.back_button(ui, r, egui::Vec2::new(chev_x, 15.0))); + let back_button_resp = prev(self.routes).map(|r| { + self.back_button(ui, r, egui::Vec2::new(chev_x, 15.0)) + .on_hover_cursor(egui::CursorIcon::PointingHand) + }); - if let Some(back_resp) = &back_button_resp { - if back_resp.hovered() || back_resp.clicked() { - notedeck_ui::show_pointer(ui); - } - } else { + if back_button_resp.is_none() { // add some space where chevron would have been. this makes the ui // less bumpy when navigating ui.add_space(chev_x + item_spacing); @@ -216,7 +214,9 @@ impl<'a> NavTitle<'a> { // returns the column index to switch to, if any fn move_button_section(&mut self, ui: &mut egui::Ui) -> Option { let cur_id = ui.id().with("move"); - let mut move_resp = ui.add(grab_button()); + let mut move_resp = ui + .add(grab_button()) + .on_hover_cursor(egui::CursorIcon::PointingHand); // showing the hover text while showing the move tooltip causes some weird visuals if ui.data(|d| d.get_temp::(cur_id).is_none()) { @@ -235,8 +235,6 @@ impl<'a> NavTitle<'a> { d.insert_temp(cur_id, true); } }); - } else if move_resp.hovered() { - notedeck_ui::show_pointer(ui); } ui.data(|d| d.get_temp(cur_id)).and_then(|val| { @@ -597,11 +595,9 @@ impl<'a> NavTitle<'a> { top: &Route, pfp_size: f32, ) -> Option { - let pfp_r = self.title_pfp(ui, top, pfp_size); - - if pfp_r.as_ref().is_some_and(|r| r.hovered()) { - notedeck_ui::show_pointer(ui); - } + let pfp_r = self + .title_pfp(ui, top, pfp_size) + .map(|r| r.on_hover_cursor(egui::CursorIcon::PointingHand)); self.title_label(ui, top); diff --git a/crates/notedeck_columns/src/ui/side_panel.rs b/crates/notedeck_columns/src/ui/side_panel.rs index 70135534..da9e2b73 100644 --- a/crates/notedeck_columns/src/ui/side_panel.rs +++ b/crates/notedeck_columns/src/ui/side_panel.rs @@ -95,7 +95,9 @@ impl<'a> DesktopSidePanel<'a> { // ui.add_space(24.0); //} - let compose_resp = ui.add(crate::ui::post::compose_note_button(dark_mode)); + let compose_resp = ui + .add(crate::ui::post::compose_note_button(dark_mode)) + .on_hover_cursor(egui::CursorIcon::PointingHand); let search_resp = ui.add(search_button()); let column_resp = ui.add(add_column_button()); @@ -129,9 +131,6 @@ impl<'a> DesktopSidePanel<'a> { SidePanelAction::ComposeNote, compose_resp, )) - } else if compose_resp.hovered() { - notedeck_ui::show_pointer(ui); - None } else if search_resp.clicked() { Some(InnerResponse::new(SidePanelAction::Search, search_resp)) } else if column_resp.clicked() { diff --git a/crates/notedeck_columns/src/ui/timeline.rs b/crates/notedeck_columns/src/ui/timeline.rs index 358895be..13141641 100644 --- a/crates/notedeck_columns/src/ui/timeline.rs +++ b/crates/notedeck_columns/src/ui/timeline.rs @@ -11,7 +11,7 @@ use crate::timeline::{TimelineCache, TimelineKind, TimelineTab, ViewFilter}; use notedeck::{note::root_note_id_from_selected_id, NoteAction, NoteContext, ScrollInfo}; use notedeck_ui::{ anim::{AnimationHelper, ICON_EXPANSION_MULTIPLE}, - show_pointer, NoteOptions, NoteView, + NoteOptions, NoteView, }; pub struct TimelineView<'a, 'd> { @@ -127,6 +127,7 @@ fn timeline_ui( .fixed_pos(top_button_pos) .show(ui.ctx(), |ui| Some(ui.add(goto_top_button(top_button_pos)))) .inner + .map(|r| r.on_hover_cursor(egui::CursorIcon::PointingHand)) } else { None }; @@ -143,12 +144,8 @@ fn timeline_ui( scroll_area = scroll_area.vertical_scroll_offset(offset); } - if let Some(goto_top_resp) = goto_top_resp { - if goto_top_resp.clicked() { - scroll_area = scroll_area.vertical_scroll_offset(0.0); - } else if goto_top_resp.hovered() { - show_pointer(ui); - } + if goto_top_resp.is_some_and(|r| r.clicked()) { + scroll_area = scroll_area.vertical_scroll_offset(0.0); } // chrome can ask to scroll to top as well via an app option diff --git a/crates/notedeck_dave/src/ui/dave.rs b/crates/notedeck_dave/src/ui/dave.rs index 71cfe072..90a004a2 100644 --- a/crates/notedeck_dave/src/ui/dave.rs +++ b/crates/notedeck_dave/src/ui/dave.rs @@ -468,15 +468,15 @@ fn top_buttons_ui(app_ctx: &mut AppContext, ui: &mut egui::Ui) -> Option Option { - let resp = ui.colored_label(link_color, format!("#{}", block.as_str())); + let resp = ui + .colored_label(link_color, format!("#{}", block.as_str())) + .on_hover_cursor(egui::CursorIcon::PointingHand); if resp.clicked() { note_action = Some(NoteAction::Hashtag(block.as_str().to_string())); - } else if resp.hovered() { - crate::show_pointer(ui); } } diff --git a/crates/notedeck_ui/src/note/mod.rs b/crates/notedeck_ui/src/note/mod.rs index 8f433a2d..d0f220bf 100644 --- a/crates/notedeck_ui/src/note/mod.rs +++ b/crates/notedeck_ui/src/note/mod.rs @@ -669,14 +669,12 @@ fn show_actual_pfp( anim_speed, ); + let resp = resp.on_hover_cursor(egui::CursorIcon::PointingHand); + let mut pfp = ProfilePic::new(images, pic).size(size); let pfp_resp = ui.put(rect, &mut pfp); let action = pfp.action; - if resp.hovered() || resp.clicked() { - crate::show_pointer(ui); - } - pfp_resp.on_hover_ui_at_pointer(|ui| { ui.set_max_width(300.0); ui.add(ProfilePreview::new(profile.as_ref().unwrap(), images)); @@ -768,20 +766,17 @@ fn render_note_actionbar( note_key: NoteKey, ) -> egui::InnerResponse> { ui.horizontal(|ui| 's: { - let reply_resp = reply_button(ui, note_key); - let quote_resp = quote_repost_button(ui, note_key); + let reply_resp = reply_button(ui, note_key).on_hover_cursor(egui::CursorIcon::PointingHand); + let quote_resp = + quote_repost_button(ui, note_key).on_hover_cursor(egui::CursorIcon::PointingHand); let to_noteid = |id: &[u8; 32]| NoteId::new(*id); if reply_resp.clicked() { break 's Some(NoteAction::Reply(to_noteid(note_id))); - } else if reply_resp.hovered() { - crate::show_pointer(ui); } if quote_resp.clicked() { break 's Some(NoteAction::Quote(to_noteid(note_id))); - } else if quote_resp.hovered() { - crate::show_pointer(ui); } let Some(Zapper { zaps, cur_acc }) = zapper else { @@ -815,11 +810,8 @@ fn render_note_actionbar( ui.add(x_button(rect)).on_hover_text(err.to_string()) } } - }; - - if zap_resp.hovered() { - crate::show_pointer(ui); } + .on_hover_cursor(egui::CursorIcon::PointingHand); if zap_resp.secondary_clicked() { break 's Some(NoteAction::Zap(ZapAction::CustomizeAmount(target)));