diff options
author | Michael Pavone <pavone@retrodev.com> | 2019-04-22 09:36:10 -0700 |
---|---|---|
committer | Michael Pavone <pavone@retrodev.com> | 2019-04-22 09:36:10 -0700 |
commit | ffc706b87e65f86d45c3055426e783fb097ccfe1 (patch) | |
tree | 5efb0fd08099e50b20d05ae868b12f4146c6e38f /nuklear_ui/nuklear.h | |
parent | a4365454d29e9b0b65451d8499c2a4fc28d4b37e (diff) |
Fix mouse selection of files. Keep keynav from selecting a non-existent widget
Diffstat (limited to 'nuklear_ui/nuklear.h')
-rw-r--r-- | nuklear_ui/nuklear.h | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/nuklear_ui/nuklear.h b/nuklear_ui/nuklear.h index e1ce56a..b161541 100644 --- a/nuklear_ui/nuklear.h +++ b/nuklear_ui/nuklear.h @@ -14618,7 +14618,7 @@ nk_draw_selectable(struct nk_command_buffer *out, NK_INTERN int nk_do_selectable(nk_flags *state, struct nk_command_buffer *out, struct nk_rect bounds, const char *str, int len, nk_flags align, int *value, - const struct nk_style_selectable *style, const struct nk_input *in, + const struct nk_style_selectable *style, struct nk_input *in, const struct nk_user_font *font) { int old_value; @@ -14647,6 +14647,8 @@ nk_do_selectable(nk_flags *state, struct nk_command_buffer *out, if (!old_value && !(*value) && in && in->selected_widget == in->widget_counter) { *value = 1; + } else if (!old_value && *value && in) { + in->selected_widget = in->widget_counter; } /* draw selectable */ @@ -20292,14 +20294,17 @@ nk_widget_gen(struct nk_rect *bounds, struct nk_context *ctx, nk_byte is_keynav) c.h = (float)((int)c.h); if (is_keynav) { ctx->input.widget_counter++; - if (ctx->input.selected_widget == ctx->input.widget_counter) { - if (ctx->input.keyboard.keys[NK_KEY_UP].clicked && ctx->input.keyboard.keys[NK_KEY_UP].down && ctx->input.selected_widget) { - ctx->input.selected_widget--; - ctx->input.keyboard.keys[NK_KEY_UP].clicked = 0; - } else if (ctx->input.keyboard.keys[NK_KEY_DOWN].clicked && ctx->input.keyboard.keys[NK_KEY_DOWN].down) { - ctx->input.keyboard.keys[NK_KEY_DOWN].clicked = 0; - ctx->input.selected_widget++; - } + if ( + ctx->input.selected_widget == (ctx->input.widget_counter + 1) && + ctx->input.keyboard.keys[NK_KEY_UP].clicked && ctx->input.keyboard.keys[NK_KEY_UP].down + ) { + ctx->input.selected_widget--; + } else if ( + ctx->input.selected_widget == (ctx->input.widget_counter - 1) && + ctx->input.keyboard.keys[NK_KEY_DOWN].clicked && ctx->input.keyboard.keys[NK_KEY_DOWN].down + ) { + ctx->input.keyboard.keys[NK_KEY_DOWN].clicked = 0; + ctx->input.selected_widget++; } } @@ -20895,7 +20900,7 @@ nk_selectable_text(struct nk_context *ctx, const char *str, int len, { struct nk_window *win; struct nk_panel *layout; - const struct nk_input *in; + struct nk_input *in; const struct nk_style *style; enum nk_widget_layout_states state; |