Mercurial > repos > blastem
comparison nuklear_ui/nuklear.h @ 1844:7a9e6fd94d61
Fix mouse selection of files. Keep keynav from selecting a non-existent widget
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Mon, 22 Apr 2019 09:36:10 -0700 |
parents | 5d10b8494b02 |
children | b6ad26acade4 |
comparison
equal
deleted
inserted
replaced
1841:5d10b8494b02 | 1844:7a9e6fd94d61 |
---|---|
14616 } | 14616 } |
14617 | 14617 |
14618 NK_INTERN int | 14618 NK_INTERN int |
14619 nk_do_selectable(nk_flags *state, struct nk_command_buffer *out, | 14619 nk_do_selectable(nk_flags *state, struct nk_command_buffer *out, |
14620 struct nk_rect bounds, const char *str, int len, nk_flags align, int *value, | 14620 struct nk_rect bounds, const char *str, int len, nk_flags align, int *value, |
14621 const struct nk_style_selectable *style, const struct nk_input *in, | 14621 const struct nk_style_selectable *style, struct nk_input *in, |
14622 const struct nk_user_font *font) | 14622 const struct nk_user_font *font) |
14623 { | 14623 { |
14624 int old_value; | 14624 int old_value; |
14625 struct nk_rect touch; | 14625 struct nk_rect touch; |
14626 | 14626 |
14645 if (nk_button_behavior(state, touch, in, NK_BUTTON_DEFAULT)) | 14645 if (nk_button_behavior(state, touch, in, NK_BUTTON_DEFAULT)) |
14646 *value = !(*value); | 14646 *value = !(*value); |
14647 | 14647 |
14648 if (!old_value && !(*value) && in && in->selected_widget == in->widget_counter) { | 14648 if (!old_value && !(*value) && in && in->selected_widget == in->widget_counter) { |
14649 *value = 1; | 14649 *value = 1; |
14650 } else if (!old_value && *value && in) { | |
14651 in->selected_widget = in->widget_counter; | |
14650 } | 14652 } |
14651 | 14653 |
14652 /* draw selectable */ | 14654 /* draw selectable */ |
14653 if (style->draw_begin) style->draw_begin(out, style->userdata); | 14655 if (style->draw_begin) style->draw_begin(out, style->userdata); |
14654 nk_draw_selectable(out, *state, style, *value, &bounds, 0,0, str, len, align, font); | 14656 nk_draw_selectable(out, *state, style, *value, &bounds, 0,0, str, len, align, font); |
20290 c.y = (float)((int)c.y); | 20292 c.y = (float)((int)c.y); |
20291 c.w = (float)((int)c.w); | 20293 c.w = (float)((int)c.w); |
20292 c.h = (float)((int)c.h); | 20294 c.h = (float)((int)c.h); |
20293 if (is_keynav) { | 20295 if (is_keynav) { |
20294 ctx->input.widget_counter++; | 20296 ctx->input.widget_counter++; |
20295 if (ctx->input.selected_widget == ctx->input.widget_counter) { | 20297 if ( |
20296 if (ctx->input.keyboard.keys[NK_KEY_UP].clicked && ctx->input.keyboard.keys[NK_KEY_UP].down && ctx->input.selected_widget) { | 20298 ctx->input.selected_widget == (ctx->input.widget_counter + 1) && |
20297 ctx->input.selected_widget--; | 20299 ctx->input.keyboard.keys[NK_KEY_UP].clicked && ctx->input.keyboard.keys[NK_KEY_UP].down |
20298 ctx->input.keyboard.keys[NK_KEY_UP].clicked = 0; | 20300 ) { |
20299 } else if (ctx->input.keyboard.keys[NK_KEY_DOWN].clicked && ctx->input.keyboard.keys[NK_KEY_DOWN].down) { | 20301 ctx->input.selected_widget--; |
20300 ctx->input.keyboard.keys[NK_KEY_DOWN].clicked = 0; | 20302 } else if ( |
20301 ctx->input.selected_widget++; | 20303 ctx->input.selected_widget == (ctx->input.widget_counter - 1) && |
20302 } | 20304 ctx->input.keyboard.keys[NK_KEY_DOWN].clicked && ctx->input.keyboard.keys[NK_KEY_DOWN].down |
20305 ) { | |
20306 ctx->input.keyboard.keys[NK_KEY_DOWN].clicked = 0; | |
20307 ctx->input.selected_widget++; | |
20303 } | 20308 } |
20304 } | 20309 } |
20305 | 20310 |
20306 nk_unify(&v, &c, bounds->x, bounds->y, bounds->x + bounds->w, bounds->y + bounds->h); | 20311 nk_unify(&v, &c, bounds->x, bounds->y, bounds->x + bounds->w, bounds->y + bounds->h); |
20307 if (!NK_INTERSECT(c.x, c.y, c.w, c.h, bounds->x, bounds->y, bounds->w, bounds->h)) | 20312 if (!NK_INTERSECT(c.x, c.y, c.w, c.h, bounds->x, bounds->y, bounds->w, bounds->h)) |
20893 nk_selectable_text(struct nk_context *ctx, const char *str, int len, | 20898 nk_selectable_text(struct nk_context *ctx, const char *str, int len, |
20894 nk_flags align, int *value) | 20899 nk_flags align, int *value) |
20895 { | 20900 { |
20896 struct nk_window *win; | 20901 struct nk_window *win; |
20897 struct nk_panel *layout; | 20902 struct nk_panel *layout; |
20898 const struct nk_input *in; | 20903 struct nk_input *in; |
20899 const struct nk_style *style; | 20904 const struct nk_style *style; |
20900 | 20905 |
20901 enum nk_widget_layout_states state; | 20906 enum nk_widget_layout_states state; |
20902 struct nk_rect bounds; | 20907 struct nk_rect bounds; |
20903 | 20908 |