notedeck

One damus client to rule them all
git clone git://jb55.com/notedeck
Log | Files | Refs | README | LICENSE

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 }