use crate::anim::{AnimationHelper, ICON_EXPANSION_MULTIPLE}; use egui::{emath::GuiRounding, Pos2, Stroke}; pub fn x_button(rect: egui::Rect) -> impl egui::Widget { move |ui: &mut egui::Ui| -> egui::Response { let max_width = rect.width(); let helper = AnimationHelper::new_from_rect(ui, "user_search_close", rect); let fill_color = ui.visuals().text_color(); let radius = max_width / (2.0 * ICON_EXPANSION_MULTIPLE); let painter = ui.painter(); let ppp = ui.ctx().pixels_per_point(); let nw_edge = helper .scale_pos_from_center(Pos2::new(-radius, radius)) .round_to_pixel_center(ppp); let se_edge = helper .scale_pos_from_center(Pos2::new(radius, -radius)) .round_to_pixel_center(ppp); let sw_edge = helper .scale_pos_from_center(Pos2::new(-radius, -radius)) .round_to_pixel_center(ppp); let ne_edge = helper .scale_pos_from_center(Pos2::new(radius, radius)) .round_to_pixel_center(ppp); let line_width = helper.scale_1d_pos(2.0); painter.line_segment([nw_edge, se_edge], Stroke::new(line_width, fill_color)); painter.line_segment([ne_edge, sw_edge], Stroke::new(line_width, fill_color)); helper.take_animation_response() } }