post.rs (2281B)
1 use egui::{vec2, Color32, Stroke, Widget}; 2 use notedeck_ui::anim::AnimationHelper; 3 4 static ICON_WIDTH: f32 = 40.0; 5 static ICON_EXPANSION_MULTIPLE: f32 = 1.2; 6 7 pub fn compose_note_button(dark_mode: bool) -> impl Widget { 8 move |ui: &mut egui::Ui| -> egui::Response { 9 let max_size = ICON_WIDTH * ICON_EXPANSION_MULTIPLE; // max size of the widget 10 11 let min_outer_circle_diameter = 40.0; 12 let min_plus_sign_size = 14.0; // length of the plus sign 13 let min_line_width = 2.25; // width of the plus sign 14 15 let helper = AnimationHelper::new(ui, "note-compose-button", vec2(max_size, max_size)); 16 17 let painter = ui.painter_at(helper.get_animation_rect()); 18 19 let use_background_radius = helper.scale_radius(min_outer_circle_diameter); 20 let use_line_width = helper.scale_1d_pos(min_line_width); 21 let use_edge_circle_radius = helper.scale_radius(min_line_width); 22 23 // TODO: theme!? 24 let fill_color = notedeck_ui::colors::PINK; 25 26 painter.circle_filled(helper.center(), use_background_radius, fill_color); 27 28 let min_half_plus_sign_size = min_plus_sign_size / 2.0; 29 let north_edge = helper.scale_from_center(0.0, min_half_plus_sign_size); 30 let south_edge = helper.scale_from_center(0.0, -min_half_plus_sign_size); 31 let west_edge = helper.scale_from_center(-min_half_plus_sign_size, 0.0); 32 let east_edge = helper.scale_from_center(min_half_plus_sign_size, 0.0); 33 34 let icon_color = if !dark_mode { 35 Color32::BLACK 36 } else { 37 Color32::WHITE 38 }; 39 40 painter.line_segment( 41 [north_edge, south_edge], 42 Stroke::new(use_line_width, icon_color), 43 ); 44 painter.line_segment( 45 [west_edge, east_edge], 46 Stroke::new(use_line_width, icon_color), 47 ); 48 painter.circle_filled(north_edge, use_edge_circle_radius, icon_color); 49 painter.circle_filled(south_edge, use_edge_circle_radius, icon_color); 50 painter.circle_filled(west_edge, use_edge_circle_radius, icon_color); 51 painter.circle_filled(east_edge, use_edge_circle_radius, icon_color); 52 53 helper 54 .take_animation_response() 55 .on_hover_text("Compose new note") 56 } 57 }