add toolbar icons to notedeck_ui
Signed-off-by: kernelkind <kernelkind@gmail.com>
This commit is contained in:
@@ -1,5 +1,10 @@
|
||||
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
|
||||
pub fn search_icon(size: f32, height: f32) -> impl egui::Widget {
|
||||
move |ui: &mut egui::Ui| {
|
||||
@@ -25,3 +30,75 @@ pub fn search_icon(size: f32, height: f32) -> impl egui::Widget {
|
||||
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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user