From b0c5d2a2c552eb98d3448ffc6bbe4a59dce93f7f Mon Sep 17 00:00:00 2001 From: William Casarin Date: Fri, 21 Jun 2024 08:56:53 -0700 Subject: [PATCH] postbox: add focused state Signed-off-by: William Casarin --- src/ui/note/post.rs | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/ui/note/post.rs b/src/ui/note/post.rs index 554b7d2..bac27e6 100644 --- a/src/ui/note/post.rs +++ b/src/ui/note/post.rs @@ -9,18 +9,26 @@ pub struct PostView<'app, 'p> { app: &'app mut Damus, /// account index poster: usize, + id_source: Option, replying_to: &'p [u8; 32], } impl<'app, 'p> PostView<'app, 'p> { pub fn new(app: &'app mut Damus, poster: usize, replying_to: &'p [u8; 32]) -> Self { + let id_source: Option = None; PostView { + id_source, app, poster, replying_to, } } + pub fn id_source(mut self, id_source: impl std::hash::Hash) -> Self { + self.id_source = Some(egui::Id::new(id_source)); + self + } + fn editbox(&mut self, txn: &nostrdb::Transaction, ui: &mut egui::Ui) { ui.spacing_mut().item_spacing.x = 12.0; @@ -59,7 +67,20 @@ impl<'app, 'p> PostView<'app, 'p> { .entry(enostr::NoteId::new(*self.replying_to)) .or_default(); - ui.add(TextEdit::multiline(&mut draft.buffer).frame(false)); + let focused = ui + .add(TextEdit::multiline(&mut draft.buffer).frame(false)) + .has_focus(); + + ui.ctx().data_mut(|d| d.insert_temp(self.id(), focused)); + } + + fn focused(&self, ui: &egui::Ui) -> bool { + ui.ctx() + .data(|d| d.get_temp::(self.id()).unwrap_or(false)) + } + + fn id(&self) -> egui::Id { + self.id_source.unwrap_or_else(|| egui::Id::new("post")) } pub fn ui(&mut self, txn: &nostrdb::Transaction, ui: &mut egui::Ui) { @@ -67,7 +88,12 @@ impl<'app, 'p> PostView<'app, 'p> { .inner_margin(egui::Margin::same(12.0)) .outer_margin(egui::Margin::same(12.0)) .fill(ui.visuals().extreme_bg_color) - .stroke(ui.visuals().noninteractive().bg_stroke) + .stroke(if self.focused(ui) { + ui.visuals().selection.stroke + } else { + //ui.visuals().selection.stroke + ui.visuals().noninteractive().bg_stroke + }) .rounding(12.0) .show(ui, |ui| { ui.vertical(|ui| {