void TextEntry::on_key_down(const ALLEGRO_KEYBOARD_EVENT & event) { if (is_disabled()) return; switch (event.keycode) { case ALLEGRO_KEY_LEFT: al_ustr_prev(text, &cursor_pos); break; case ALLEGRO_KEY_RIGHT: al_ustr_next(text, &cursor_pos); break; case ALLEGRO_KEY_HOME: cursor_pos = 0; break; case ALLEGRO_KEY_END: cursor_pos = al_ustr_size(text); break; case ALLEGRO_KEY_DELETE: al_ustr_remove_chr(text, cursor_pos); break; case ALLEGRO_KEY_BACKSPACE: if (al_ustr_prev(text, &cursor_pos)) al_ustr_remove_chr(text, cursor_pos); break; default: if (event.unichar >= ' ') { al_ustr_insert_chr(text, cursor_pos, event.unichar); cursor_pos += al_utf8_width(event.unichar); } break; } maybe_scroll(); dialog->request_draw(); }
void TextEntry::on_key_down(const ALLEGRO_KEYBOARD_EVENT & event) { switch (event.keycode) { case ALLEGRO_KEY_LEFT: if (cursor_pos > 0) cursor_pos--; break; case ALLEGRO_KEY_RIGHT: if (cursor_pos < text.size()) cursor_pos++; break; case ALLEGRO_KEY_HOME: cursor_pos = 0; break; case ALLEGRO_KEY_END: cursor_pos = text.size(); break; case ALLEGRO_KEY_DELETE: if (cursor_pos < text.size()) text.erase(cursor_pos, 1); break; case ALLEGRO_KEY_BACKSPACE: if (cursor_pos > 0) text.erase(--cursor_pos, 1); break; default: if (isprint(event.unichar)) text.insert(cursor_pos++, 1, event.unichar); break; } maybe_scroll(); dialog->request_draw(); }