@@ -347,6 +347,7 @@ NK_API int
347347nk_allegro5_handle_event (ALLEGRO_EVENT * ev )
348348{
349349 struct nk_context * ctx = & allegro5 .ctx ;
350+ static int insert_toggle = 0 ;
350351 switch (ev -> type ) {
351352 case ALLEGRO_EVENT_DISPLAY_RESIZE : {
352353 allegro5 .width = (unsigned int )ev -> display .width ;
@@ -415,19 +416,21 @@ nk_allegro5_handle_event(ALLEGRO_EVENT *ev)
415416 int kc = ev -> keyboard .keycode ;
416417 int down = ev -> type == ALLEGRO_EVENT_KEY_DOWN ;
417418
419+ /* do we need this? */
418420 if (kc == ALLEGRO_KEY_LSHIFT || kc == ALLEGRO_KEY_RSHIFT ) nk_input_key (ctx , NK_KEY_SHIFT , down );
419- else if (kc == ALLEGRO_KEY_DELETE ) nk_input_key (ctx , NK_KEY_DEL , down );
420- else if (kc == ALLEGRO_KEY_ENTER || kc == ALLEGRO_KEY_PAD_ENTER ) nk_input_key (ctx , NK_KEY_ENTER , down );
421- else if (kc == ALLEGRO_KEY_TAB ) nk_input_key (ctx , NK_KEY_TAB , down );
422- else if (kc == ALLEGRO_KEY_LEFT ) nk_input_key (ctx , NK_KEY_LEFT , down );
423- else if (kc == ALLEGRO_KEY_RIGHT ) nk_input_key (ctx , NK_KEY_RIGHT , down );
424- else if (kc == ALLEGRO_KEY_UP ) nk_input_key (ctx , NK_KEY_UP , down );
425- else if (kc == ALLEGRO_KEY_DOWN ) nk_input_key (ctx , NK_KEY_DOWN , down );
426- else if (kc == ALLEGRO_KEY_BACKSPACE ) nk_input_key (ctx , NK_KEY_BACKSPACE , down );
427421 else if (kc == ALLEGRO_KEY_ESCAPE ) nk_input_key (ctx , NK_KEY_TEXT_RESET_MODE , down );
428422 else if (kc == ALLEGRO_KEY_PGUP ) nk_input_key (ctx , NK_KEY_SCROLL_UP , down );
429423 else if (kc == ALLEGRO_KEY_PGDN ) nk_input_key (ctx , NK_KEY_SCROLL_DOWN , down );
430- else if (kc == ALLEGRO_KEY_HOME ) {
424+ else if (kc == ALLEGRO_KEY_INSERT ) {
425+ if (down ) insert_toggle = !insert_toggle ;
426+ if (insert_toggle ) {
427+ nk_input_key (ctx , NK_KEY_TEXT_INSERT_MODE , down );
428+ /* nk_input_key(ctx, NK_KEY_TEXT_REPLACE_MODE, !down); */
429+ } else {
430+ nk_input_key (ctx , NK_KEY_TEXT_REPLACE_MODE , down );
431+ /* nk_input_key(ctx, NK_KEY_TEXT_INSERT_MODE, !down); */
432+ }
433+ } else if (kc == ALLEGRO_KEY_HOME ) {
431434 nk_input_key (ctx , NK_KEY_TEXT_START , down );
432435 nk_input_key (ctx , NK_KEY_SCROLL_START , down );
433436 } else if (kc == ALLEGRO_KEY_END ) {
@@ -438,32 +441,52 @@ nk_allegro5_handle_event(ALLEGRO_EVENT *ev)
438441 } break ;
439442 case ALLEGRO_EVENT_KEY_CHAR : {
440443 int kc = ev -> keyboard .keycode ;
444+ int repeat = ev -> keyboard .repeat ;
441445 int control_mask = (ev -> keyboard .modifiers & ALLEGRO_KEYMOD_CTRL ) ||
442446 (ev -> keyboard .modifiers & ALLEGRO_KEYMOD_COMMAND );
443447
444- if (kc == ALLEGRO_KEY_C && control_mask ) {
448+ if (kc == ALLEGRO_KEY_C && control_mask && ! repeat ) {
445449 nk_input_key (ctx , NK_KEY_COPY , 1 );
446450 } else if (kc == ALLEGRO_KEY_V && control_mask ) {
447451 nk_input_key (ctx , NK_KEY_PASTE , 1 );
448- } else if (kc == ALLEGRO_KEY_X && control_mask ) {
452+ } else if (kc == ALLEGRO_KEY_X && control_mask && ! repeat ) {
449453 nk_input_key (ctx , NK_KEY_CUT , 1 );
450454 } else if (kc == ALLEGRO_KEY_Z && control_mask ) {
451455 nk_input_key (ctx , NK_KEY_TEXT_UNDO , 1 );
452456 } else if (kc == ALLEGRO_KEY_R && control_mask ) {
453457 nk_input_key (ctx , NK_KEY_TEXT_REDO , 1 );
454- } else if (kc == ALLEGRO_KEY_A && control_mask ) {
458+ } else if (kc == ALLEGRO_KEY_A && control_mask && ! repeat ) {
455459 nk_input_key (ctx , NK_KEY_TEXT_SELECT_ALL , 1 );
460+ } else if (kc == ALLEGRO_KEY_BACKSPACE ) {
461+ nk_input_key (ctx , NK_KEY_BACKSPACE , 1 );
462+ } else if (kc == ALLEGRO_KEY_LEFT ) {
463+ if (control_mask ) {
464+ nk_input_key (ctx , NK_KEY_TEXT_WORD_LEFT , 1 );
465+ } else {
466+ nk_input_key (ctx , NK_KEY_LEFT , 1 );
467+ }
468+ } else if (kc == ALLEGRO_KEY_RIGHT ) {
469+ if (control_mask ) {
470+ nk_input_key (ctx , NK_KEY_TEXT_WORD_RIGHT , 1 );
471+ } else {
472+ nk_input_key (ctx , NK_KEY_RIGHT , 1 );
473+ }
474+ } else if (kc == ALLEGRO_KEY_UP ) {
475+ nk_input_key (ctx , NK_KEY_UP , 1 );
476+ } else if (kc == ALLEGRO_KEY_DOWN ) {
477+ nk_input_key (ctx , NK_KEY_DOWN , 1 );
478+ } else if (kc == ALLEGRO_KEY_DELETE ) {
479+ nk_input_key (ctx , NK_KEY_DEL , 1 );
480+ } else if (kc == ALLEGRO_KEY_ENTER || kc == ALLEGRO_KEY_PAD_ENTER ) {
481+ nk_input_key (ctx , NK_KEY_ENTER , 1 );
482+ } else if (kc == ALLEGRO_KEY_TAB ) {
483+ nk_input_key (ctx , NK_KEY_TAB , 1 );
456484 } else {
457485 if (kc != ALLEGRO_KEY_BACKSPACE &&
458- kc != ALLEGRO_KEY_LEFT &&
459- kc != ALLEGRO_KEY_RIGHT &&
460- kc != ALLEGRO_KEY_UP &&
461- kc != ALLEGRO_KEY_DOWN &&
462486 kc != ALLEGRO_KEY_HOME &&
463- kc != ALLEGRO_KEY_DELETE &&
464- kc != ALLEGRO_KEY_ENTER &&
465487 kc != ALLEGRO_KEY_END &&
466488 kc != ALLEGRO_KEY_ESCAPE &&
489+ kc != ALLEGRO_KEY_INSERT &&
467490 kc != ALLEGRO_KEY_PGDN &&
468491 kc != ALLEGRO_KEY_PGUP ) {
469492 nk_input_unicode (ctx , ev -> keyboard .unichar );
0 commit comments