add toolbar icons to notedeck_ui

Signed-off-by: kernelkind <kernelkind@gmail.com>
This commit is contained in:
kernelkind
2025-08-13 19:07:42 -04:00
parent 3d8018bb9a
commit 1469f9a074

View File

@@ -1,5 +1,10 @@
use egui::{vec2, Color32, Stroke}; use egui::{vec2, Color32, Stroke};
use crate::{app_images, AnimationHelper};
pub static ICON_WIDTH: f32 = 40.0;
pub static ICON_EXPANSION_MULTIPLE: f32 = 1.2;
/// Creates a magnifying glass icon widget /// Creates a magnifying glass icon widget
pub fn search_icon(size: f32, height: f32) -> impl egui::Widget { pub fn search_icon(size: f32, height: f32) -> impl egui::Widget {
move |ui: &mut egui::Ui| { move |ui: &mut egui::Ui| {
@@ -25,3 +30,75 @@ pub fn search_icon(size: f32, height: f32) -> impl egui::Widget {
response response
} }
} }
pub fn notifications_button(
ui: &mut egui::Ui,
size: f32,
unseen_indicator: bool,
) -> egui::Response {
expanding_button(
"notifications-button",
size,
app_images::notifications_light_image(),
app_images::notifications_dark_image(),
ui,
unseen_indicator,
)
}
pub fn home_button(ui: &mut egui::Ui, size: f32) -> egui::Response {
expanding_button(
"home-button",
size,
app_images::home_light_image(),
app_images::home_dark_image(),
ui,
false,
)
}
pub fn expanding_button(
name: &'static str,
img_size: f32,
light_img: egui::Image,
dark_img: egui::Image,
ui: &mut egui::Ui,
unseen_indicator: bool,
) -> egui::Response {
let max_size = ICON_WIDTH * ICON_EXPANSION_MULTIPLE; // max size of the widget
let img = if ui.visuals().dark_mode {
dark_img
} else {
light_img
};
let helper = AnimationHelper::new(ui, name, egui::vec2(max_size, max_size));
let cur_img_size = helper.scale_1d_pos(img_size);
let paint_rect = helper
.get_animation_rect()
.shrink((max_size - cur_img_size) / 2.0);
img.paint_at(ui, paint_rect);
if unseen_indicator {
paint_unseen_indicator(ui, paint_rect, helper.scale_1d_pos(3.0));
}
helper.take_animation_response()
}
fn paint_unseen_indicator(ui: &mut egui::Ui, rect: egui::Rect, radius: f32) {
let center = rect.center();
let top_right = rect.right_top();
let distance = center.distance(top_right);
let midpoint = {
let mut cur = center;
cur.x += distance / 2.0;
cur.y -= distance / 2.0;
cur
};
let painter = ui.painter_at(rect);
painter.circle_filled(midpoint, radius, crate::colors::PINK);
}