diff --git a/assets/icons/wallet-icon.svg b/assets/icons/wallet-icon.svg new file mode 100644 index 00000000..905a4a56 --- /dev/null +++ b/assets/icons/wallet-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/crates/notedeck_columns/src/ui/side_panel.rs b/crates/notedeck_columns/src/ui/side_panel.rs index 2860519b..e61ee7ed 100644 --- a/crates/notedeck_columns/src/ui/side_panel.rs +++ b/crates/notedeck_columns/src/ui/side_panel.rs @@ -54,6 +54,7 @@ pub enum SidePanelAction { SwitchDeck(usize), EditDeck(usize), SaveTheme(ThemePreference), + Wallet, } pub struct SidePanelResponse { @@ -215,6 +216,8 @@ impl<'a> DesktopSidePanel<'a> { let support_resp = ui.add(support_button()); + let wallet_resp = ui.add(wallet_button()); + let optional_inner = if pfp_resp.clicked() { Some(egui::InnerResponse::new( SidePanelAction::Account, @@ -235,6 +238,11 @@ impl<'a> DesktopSidePanel<'a> { SidePanelAction::SaveTheme(theme), resp, )) + } else if wallet_resp.clicked() { + Some(egui::InnerResponse::new( + SidePanelAction::Wallet, + wallet_resp, + )) } else { None }; @@ -377,6 +385,18 @@ impl<'a> DesktopSidePanel<'a> { SidePanelAction::SaveTheme(theme) => { theme_handler.save(theme); } + SidePanelAction::Wallet => 's: { + if router + .routes() + .iter() + .any(|r| matches!(r, Route::Wallet(_))) + { + router.go_back(); + break 's; + } + + router.route_to(Route::Wallet(notedeck::WalletType::Auto)); + } } switching_response } @@ -592,6 +612,33 @@ fn add_deck_button() -> impl Widget { } } +fn wallet_button() -> impl Widget { + |ui: &mut egui::Ui| -> egui::Response { + let img_size = 24.0; + + let max_size = img_size * ICON_EXPANSION_MULTIPLE; + let img_data = egui::include_image!("../../../../assets/icons/wallet-icon.svg"); + + let mut img = egui::Image::new(img_data).max_width(img_size); + + if !ui.visuals().dark_mode { + img = img.tint(egui::Color32::BLACK); + } + + let helper = AnimationHelper::new(ui, "wallet-icon", vec2(max_size, max_size)); + + let cur_img_size = helper.scale_1d_pos(img_size); + img.paint_at( + ui, + helper + .get_animation_rect() + .shrink((max_size - cur_img_size) / 2.0), + ); + + helper.take_animation_response() + } +} + fn show_decks<'a>( ui: &mut egui::Ui, decks_cache: &'a DecksCache,