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