Ejemplo n.º 1
0
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();
}
Ejemplo n.º 2
0
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();
}