reset more input fields on frame end

This commit is contained in:
Alessandro Mauri 2025-10-23 22:31:03 +02:00
parent 793fd1aa28
commit bb6a166f2a

View File

@ -264,7 +264,7 @@ fn void? Ctx.frame_begin(&ctx)
elem.layout.h = @exact(ctx.height); elem.layout.h = @exact(ctx.height);
ctx.div_scissor = elem.bounds; ctx.div_scissor = elem.bounds;
ctx.skip_frame = false; ctx.skip_frame = false;
} }
@ -278,7 +278,8 @@ fn void? Ctx.frame_end(&ctx)
// 2. clear input fields // 2. clear input fields
ctx.input = ctx.current_input; ctx.input = ctx.current_input;
ctx.current_input.events = {}; ctx.current_input.events = {};
ctx.current_input.keyboard.text_len = 0; ctx.current_input.mouse.scroll = {};
ctx.current_input.keyboard = {};
// DO THE LAYOUT // DO THE LAYOUT
ctx.layout_element_tree()!; ctx.layout_element_tree()!;
@ -296,7 +297,7 @@ fn void? Ctx.frame_end(&ctx)
// Propagate input events to the right elements // Propagate input events to the right elements
ctx.set_elem_events(ctx.hover_id); ctx.set_elem_events(ctx.hover_id);
ctx.set_elem_events(ctx.focus_id); ctx.set_elem_events(ctx.focus_id);
// 1. clear the tree // 1. clear the tree
ctx.tree.nuke(); ctx.tree.nuke();
@ -310,7 +311,7 @@ fn void? Ctx.frame_end(&ctx)
ctx.push_update_atlas(&ctx.sprite_atlas.atlas)!; ctx.push_update_atlas(&ctx.sprite_atlas.atlas)!;
ctx.sprite_atlas.should_update = false; ctx.sprite_atlas.should_update = false;
} }
// send skip frame request // send skip frame request
if (ctx.skip_frame) { if (ctx.skip_frame) {
ctx.cmd_queue.push({.type = CMD_REQ_SKIP_FRAME}); ctx.cmd_queue.push({.type = CMD_REQ_SKIP_FRAME});
@ -338,11 +339,6 @@ $if $feature(DEBUG_POINTER):
}; };
ctx.cmd_queue.push(cmd); ctx.cmd_queue.push(cmd);
$endif $endif
// foreach (i, c: ctx.cmd_queue) {
// io::printf("[%d]: ", i);
// io::printn(c);
// }
} }
@ -364,16 +360,16 @@ fn void Ctx.update_hover_and_focus(&ctx, Elem* elem)
hover = !(different && still_hovered && shown && above); hover = !(different && still_hovered && shown && above);
} }
if (focus) { if (focus) {
Elem* prev_focus = ctx.find_elem(ctx.hover_id); Elem* prev_focus = ctx.find_elem(ctx.hover_id);
bool different = prev_focus.id != elem.id; bool different = prev_focus.id != elem.id;
bool shown = prev_focus.flags.shown; bool shown = prev_focus.flags.shown;
bool above = prev_focus.z_index > elem.z_index; bool above = prev_focus.z_index > elem.z_index;
focus = !(different && shown && above); focus = !(different && shown && above);
} }
if (hover) ctx.hover_id = elem.id; if (hover) ctx.hover_id = elem.id;
if (focus) ctx.focus_id = elem.id; if (focus) ctx.focus_id = elem.id;
} }