comparison nuklear_ui/nuklear.h @ 1846:6fc4afea5424

Add keyboard navigation to toggle and "property" widgets. Property widgets still need some work
author Michael Pavone <pavone@retrodev.com>
date Mon, 22 Apr 2019 20:54:18 -0700
parents b6ad26acade4
children 58b6f5d918f4
comparison
equal deleted inserted replaced
1845:b6ad26acade4 1846:6fc4afea5424
16173 /* draw property */ 16173 /* draw property */
16174 if (style->draw_begin) style->draw_begin(out, style->userdata); 16174 if (style->draw_begin) style->draw_begin(out, style->userdata);
16175 nk_draw_property(out, style, &property, &label, *ws, name, name_len, font); 16175 nk_draw_property(out, style, &property, &label, *ws, name, name_len, font);
16176 if (style->draw_end) style->draw_end(out, style->userdata); 16176 if (style->draw_end) style->draw_end(out, style->userdata);
16177 16177
16178 /* execute right button */ 16178 int selected = in && in->selected_widget == in->widget_counter;
16179 if (nk_do_button_symbol(ws, out, left, style->sym_left, behavior, &style->dec_button, in, font)) { 16179 if (selected) {
16180 //prevent left/right buttons from activating when enter is pressed
16181 in->selected_widget = -1;
16182 }
16183 /* execute left button */
16184 if (
16185 nk_do_button_symbol(ws, out, left, style->sym_left, behavior, &style->dec_button, in, font)
16186 || (selected && in->keyboard.keys[NK_KEY_LEFT].clicked && in->keyboard.keys[NK_KEY_LEFT].down)
16187 ) {
16180 switch (variant->kind) { 16188 switch (variant->kind) {
16181 default: break; 16189 default: break;
16182 case NK_PROPERTY_INT: 16190 case NK_PROPERTY_INT:
16183 variant->value.i = NK_CLAMP(variant->min_value.i, variant->value.i - variant->step.i, variant->max_value.i); break; 16191 variant->value.i = NK_CLAMP(variant->min_value.i, variant->value.i - variant->step.i, variant->max_value.i); break;
16184 case NK_PROPERTY_FLOAT: 16192 case NK_PROPERTY_FLOAT:
16185 variant->value.f = NK_CLAMP(variant->min_value.f, variant->value.f - variant->step.f, variant->max_value.f); break; 16193 variant->value.f = NK_CLAMP(variant->min_value.f, variant->value.f - variant->step.f, variant->max_value.f); break;
16186 case NK_PROPERTY_DOUBLE: 16194 case NK_PROPERTY_DOUBLE:
16187 variant->value.d = NK_CLAMP(variant->min_value.d, variant->value.d - variant->step.d, variant->max_value.d); break; 16195 variant->value.d = NK_CLAMP(variant->min_value.d, variant->value.d - variant->step.d, variant->max_value.d); break;
16188 } 16196 }
16189 } 16197 }
16190 /* execute left button */ 16198 /* execute right button */
16191 if (nk_do_button_symbol(ws, out, right, style->sym_right, behavior, &style->inc_button, in, font)) { 16199 if (
16200 nk_do_button_symbol(ws, out, right, style->sym_right, behavior, &style->inc_button, in, font)
16201 || (selected && in->keyboard.keys[NK_KEY_RIGHT].clicked && in->keyboard.keys[NK_KEY_RIGHT].down)
16202 ) {
16192 switch (variant->kind) { 16203 switch (variant->kind) {
16193 default: break; 16204 default: break;
16194 case NK_PROPERTY_INT: 16205 case NK_PROPERTY_INT:
16195 variant->value.i = NK_CLAMP(variant->min_value.i, variant->value.i + variant->step.i, variant->max_value.i); break; 16206 variant->value.i = NK_CLAMP(variant->min_value.i, variant->value.i + variant->step.i, variant->max_value.i); break;
16196 case NK_PROPERTY_FLOAT: 16207 case NK_PROPERTY_FLOAT:
16197 variant->value.f = NK_CLAMP(variant->min_value.f, variant->value.f + variant->step.f, variant->max_value.f); break; 16208 variant->value.f = NK_CLAMP(variant->min_value.f, variant->value.f + variant->step.f, variant->max_value.f); break;
16198 case NK_PROPERTY_DOUBLE: 16209 case NK_PROPERTY_DOUBLE:
16199 variant->value.d = NK_CLAMP(variant->min_value.d, variant->value.d + variant->step.d, variant->max_value.d); break; 16210 variant->value.d = NK_CLAMP(variant->min_value.d, variant->value.d + variant->step.d, variant->max_value.d); break;
16200 } 16211 }
16201 } 16212 }
16213 if (selected) {
16214 in->selected_widget = in->widget_counter;
16215 }
16202 if (old != NK_PROPERTY_EDIT && (*state == NK_PROPERTY_EDIT)) { 16216 if (old != NK_PROPERTY_EDIT && (*state == NK_PROPERTY_EDIT)) {
16203 /* property has been activated so setup buffer */ 16217 /* property has been activated so setup buffer */
16204 NK_MEMCPY(buffer, dst, (nk_size)*length); 16218 NK_MEMCPY(buffer, dst, (nk_size)*length);
16205 *cursor = nk_utf_len(buffer, *length); 16219 *cursor = nk_utf_len(buffer, *length);
16206 *len = *length; 16220 *len = *length;
21011 21025
21012 win = ctx->current; 21026 win = ctx->current;
21013 style = &ctx->style; 21027 style = &ctx->style;
21014 layout = win->layout; 21028 layout = win->layout;
21015 21029
21016 state = nk_widget(&bounds, ctx); 21030 state = nk_keynav_widget(&bounds, ctx);
21017 if (!state) return active; 21031 if (!state) return active;
21018 in = (state == NK_WIDGET_ROM || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input; 21032 in = (state == NK_WIDGET_ROM || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input;
21019 nk_do_toggle(&ctx->last_widget_state, &win->buffer, bounds, &active, 21033 nk_do_toggle(&ctx->last_widget_state, &win->buffer, bounds, &active,
21020 text, len, NK_TOGGLE_CHECK, &style->checkbox, in, style->font); 21034 text, len, NK_TOGGLE_CHECK, &style->checkbox, in, style->font);
21021 return active; 21035 return active;
21486 return; 21500 return;
21487 21501
21488 win = ctx->current; 21502 win = ctx->current;
21489 layout = win->layout; 21503 layout = win->layout;
21490 style = &ctx->style; 21504 style = &ctx->style;
21491 s = nk_widget(&bounds, ctx); 21505 s = nk_keynav_widget(&bounds, ctx);
21492 if (!s) return; 21506 if (!s) return;
21493 21507
21494 /* calculate hash from name */ 21508 /* calculate hash from name */
21495 if (name[0] == '#') { 21509 if (name[0] == '#') {
21496 hash = nk_murmur_hash(name, (int)nk_strlen(name), win->property.seq++); 21510 hash = nk_murmur_hash(name, (int)nk_strlen(name), win->property.seq++);