diff --git a/assets/icons/media_upload_dark_4x.png b/assets/icons/media_upload_dark_4x.png new file mode 100644 index 00000000..e8316877 Binary files /dev/null and b/assets/icons/media_upload_dark_4x.png differ diff --git a/crates/notedeck_columns/src/ui/note/post.rs b/crates/notedeck_columns/src/ui/note/post.rs index cd6c3618..5ed7870e 100644 --- a/crates/notedeck_columns/src/ui/note/post.rs +++ b/crates/notedeck_columns/src/ui/note/post.rs @@ -203,6 +203,15 @@ impl<'a> PostView<'a> { }); } + ui.with_layout( + egui::Layout::left_to_right(egui::Align::BOTTOM), + |ui| { + if ui.add(media_upload_button()).clicked() { + // TODO: implement media upload + } + }, + ); + ui.with_layout(egui::Layout::right_to_left(egui::Align::BOTTOM), |ui| { if ui .add_sized( @@ -252,6 +261,38 @@ fn post_button(interactive: bool) -> impl egui::Widget { } } +fn media_upload_button() -> impl egui::Widget { + |ui: &mut egui::Ui| -> egui::Response { + let resp = ui.allocate_response(egui::vec2(32.0, 32.0), egui::Sense::click()); + let painter = ui.painter(); + let (fill_color, stroke) = if resp.hovered() { + ( + ui.visuals().widgets.hovered.bg_fill, + ui.visuals().widgets.hovered.bg_stroke, + ) + } else if resp.clicked() { + ( + ui.visuals().widgets.active.bg_fill, + ui.visuals().widgets.active.bg_stroke, + ) + } else { + ( + ui.visuals().widgets.inactive.bg_fill, + ui.visuals().widgets.inactive.bg_stroke, + ) + }; + + painter.rect_filled(resp.rect, 8.0, fill_color); + painter.rect_stroke(resp.rect, 8.0, stroke); + egui::Image::new(egui::include_image!( + "../../../../../assets/icons/media_upload_dark_4x.png" + )) + .max_size(egui::vec2(16.0, 16.0)) + .paint_at(ui, resp.rect.shrink(8.0)); + resp + } +} + mod preview { use super::*; use notedeck::{App, AppContext};