Ich habe es hinbekommen, da war im Web ein Tutorial bei der SDL Seite.
Ich musste nur noch etwas abändern:
Code:
/* wait for event */
SDL_EnableUNICODE (SDL_ENABLE);
SDL_StartTextInput ();
wait = TRUE;
while (wait)
{
if (! SDL_WaitEvent (&event))
{
printf ("event_gadget_string: error can't wait for event!\n");
free (string_buf);
return FALSE;
}
value_len = strlen (string->value);
switch (event.type)
{
case SDL_KEYDOWN:
key = event.key.keysym.sym;
switch (key)
{
case SDLK_BACKSPACE:
printf ("event_gadget_string: BACKSPACE\n");
if (string->insert_pos > 0)
{
strremoveleft (string_buf, string->value, string->insert_pos);
strcpy (string->value, string_buf);
string->cursor_pos--;
string->insert_pos--;
if (! draw_gadget_string (client, screennum, gadget_index, GADGET_SELECTED))
{
free (string_buf);
return (FALSE);
}
}
break;
case SDLK_DELETE:
printf ("event_gadget_string: DELETE\n");
strremoveright (string_buf, string->value, string->insert_pos);
strcpy (string->value, string_buf);
if (! draw_gadget_string (client, screennum, gadget_index, GADGET_SELECTED))
{
free (string_buf);
return (FALSE);
}
break;
break;
case SDLK_LEFT:
printf ("event_gadget_string: CURSOR LEFT\n");
if (string->cursor_pos > 0)
{
string->cursor_pos--;
string->insert_pos--;
if (! draw_gadget_string (client, screennum, gadget_index, GADGET_SELECTED))
{
free (string_buf);
return (FALSE);
}
}
break;
case SDLK_RIGHT:
printf ("event_gadget_string: CURSOR RIGHT\n");
if (string->cursor_pos < value_len)
{
string->cursor_pos++;
string->insert_pos++;
if (! draw_gadget_string (client, screennum, gadget_index, GADGET_SELECTED))
{
free (string_buf);
return (FALSE);
}
}
break;
case SDLK_RETURN:
printf ("event_gadget_string: RETURN\n");
wait = FALSE;
break;
}
break;
case SDL_TEXTINPUT:
/* update the composition text */
printf ("DEBUG: SDL_TEXTINPUT\n");
i = 0; insert_pos = string->insert_pos;
while (event.text.text[i] != '\0')
{
if (value_len < string->string_len)
{
strinsertchar (string_buf, string->value, event.text.text[i], insert_pos);
strcpy (string->value, string_buf);
i = i + 1;
insert_pos = insert_pos + 1;
value_len = value_len + 1;
string->cursor_pos++;
string->insert_pos++;
}
else
{
printf ("event_gadget_string: textinput = full\n");
wait = FALSE;
break;
}
}
if (! draw_gadget_string (client, screennum, gadget_index, GADGET_SELECTED))
{
free (string_buf);
return (FALSE);
}
break;
}
}
SDL_StopTextInput();
free (string_buf);
return (TRUE);
}
Lesezeichen