fix problems with non-char keyboard input causing more than one input -- pretty much complete and now back to needing a physical mac to test with

This commit is contained in:
camh 2022-01-27 23:45:14 -08:00
parent 111e717b15
commit 040d613e24
3 changed files with 31 additions and 18 deletions

View File

@ -7818,6 +7818,9 @@ nk_input_glyph(struct nk_context *ctx, const nk_glyph glyph)
NK_INPUT_MAX - in->keyboard.text_len);
in->keyboard.text_len += len;
}
// in->keyboard.keys[key].clicked++;
// in->keyboard.keys[key].down = down;
}
NK_API void
nk_input_char(struct nk_context *ctx, char c)
@ -15643,6 +15646,7 @@ nk_textedit_clamp(struct nk_text_edit *state)
NK_API void
nk_textedit_delete(struct nk_text_edit *state, short where, short len)
{
/* delete characters while updating undo */
nk_textedit_makeundo_delete(state, where, len);
nk_str_delete_runes(&state->string, where, len);
@ -16046,8 +16050,9 @@ retry:
nk_textedit_delete_selection(state);
else {
short n = state->string.len;
if (state->cursor < n)
if (state->cursor < n) {
nk_textedit_delete(state, state->cursor, 1);
}
}
state->has_preferred_x = 0;
break;
@ -16706,18 +16711,29 @@ nk_do_edit(nk_flags *state, struct nk_command_buffer *out,
cursor_follow = nk_true;
}
{short i; /* keyboard input */
short old_mode = edit->mode;
for (i = 0; i < NK_KEY_MAX; ++i) {
if (i == NK_KEY_ENTER || i == NK_KEY_TAB) continue; /* special case */
if (nk_input_is_key_pressed(in, (enum nk_keys)i)) {
nk_textedit_key(edit, (enum nk_keys)i, shift_mod, font, row_height);
cursor_follow = nk_true;
{ /* keyboard input */
short i;
short old_mode = edit->mode;
for (i = 0; i < NK_KEY_MAX; ++i) {
if (i == NK_KEY_ENTER || i == NK_KEY_TAB) {
continue; /* special case */
}
if (nk_input_is_key_pressed(in, (enum nk_keys)i)) {
nk_textedit_key(edit, (enum nk_keys)i, shift_mod, font, row_height);
cursor_follow = nk_true;
in->keyboard.keys[(enum nk_keys)i].down = nk_false;
in->keyboard.keys[(enum nk_keys)i].clicked--;
}
}
if (old_mode != edit->mode) {
in->keyboard.text_len = 0;
}
}
if (old_mode != edit->mode) {
in->keyboard.text_len = 0;
}}
/* text input */
edit->filter = filter;

View File

@ -1,7 +1,5 @@
// TODO:
// - test, bug fixes, write blog posts
// - bug: messages start over-writing eachother in main chat -- need a way to force clear it
// - bug: delete key deletes infinitely
// - test on physical, bug fixes, write blog posts
#define WINDOW_WIDTH 510
#define WINDOW_HEIGHT 302

View File

@ -1184,7 +1184,7 @@ NK_API int nk_quickdraw_handle_event(EventRecord *event, struct nk_context *nukl
FindWindow(event->where, &window);
// char logb[255];
// sprintf(logb, "nk_quickdraw_handle_event event %d", event->what);
// // writeSerialPortDebug(boutRefNum, logb);
// writeSerialPortDebug(boutRefNum, logb);
switch (event->what) {
case updateEvt: {
@ -1323,9 +1323,8 @@ NK_API int nk_quickdraw_handle_event(EventRecord *event, struct nk_context *nukl
nk_input_key(nuklear_context, NK_KEY_SHIFT, isKeyDown);
} else if (key == deleteKey && isKeyDown) {
nk_input_key(nuklear_context, NK_KEY_DEL, 1);
nk_input_key(nuklear_context, NK_KEY_DEL, 0);
nk_input_key(nuklear_context, NK_KEY_DEL, isKeyDown);
} else if (key == enterKey) {
nk_input_key(nuklear_context, NK_KEY_ENTER, isKeyDown);