Shrink handwriting when not focused [wip]

This commit is contained in:
2025-06-23 10:12:57 +02:00
parent fac896161e
commit fdb92fbd0e

View File

@ -89,6 +89,9 @@ struct Ephemeral {
/// Tool position last frame, in canvas space. /// Tool position last frame, in canvas space.
last_tool_position: Option<Pos2>, last_tool_position: Option<Pos2>,
/// Whether the handwriting element is being interacted with.
is_focused: bool,
/// The stroke that is currently being drawed. /// The stroke that is currently being drawed.
current_stroke: Vec<Pos2>, current_stroke: Vec<Pos2>,
@ -142,6 +145,7 @@ impl Default for Ephemeral {
tool: Tool::Eraser, tool: Tool::Eraser,
tool_position: None, tool_position: None,
last_tool_position: None, last_tool_position: None,
is_focused: false,
current_stroke: Default::default(), current_stroke: Default::default(),
tessellator: None, tessellator: None,
mesh: Default::default(), mesh: Default::default(),
@ -238,9 +242,16 @@ impl Handwriting {
// Was the user in the process of drawing a stroke last frame? // Was the user in the process of drawing a stroke last frame?
let was_drawing = !self.e.current_stroke.is_empty(); let was_drawing = !self.e.current_stroke.is_empty();
// Is the user in the process of drawing a stroke now? // Is the user in the process of drawing a stroke now?;
let is_drawing = response.interact_pointer_pos().is_some(); let is_drawing = response.interact_pointer_pos().is_some();
if is_drawing {
self.e.is_focused = true;
} else if ui.ctx().input(|i| i.pointer.any_down()) {
// if the user starts interactive with something else, unfocus the handwriting area.
self.e.is_focused = false;
}
if !is_drawing { if !is_drawing {
if was_drawing { if was_drawing {
// commit current line // commit current line
@ -248,12 +259,18 @@ impl Handwriting {
response.mark_changed(); response.mark_changed();
} }
let padding = if self.e.is_focused {
HANDWRITING_BOTTOM_PADDING
} else {
0.0
};
// recalculate how tall the widget should be // recalculate how tall the widget should be
let lines_max_y = self let lines_max_y = self
.strokes .strokes
.iter() .iter()
.flatten() .flatten()
.map(|p| p.y + HANDWRITING_BOTTOM_PADDING) .map(|p| p.y + padding)
.fold(HANDWRITING_MIN_HEIGHT, |max, y| max.max(y)); .fold(HANDWRITING_MIN_HEIGHT, |max, y| max.max(y));
// Change the height of the handwriting item. // Change the height of the handwriting item.