Mercurial > repos > blastem
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++); |