Voilà mes deux fonctions principales que j'utilise pour gérer l'unicode, ainsi qu'une structure. Vous n'êtes pas obligé d'utiliser une structure mais je trouve ça beaucoup plus simple.
http://pastebin.com/C4Wkq5f9
http://pastebin.com/45uThTJ0
Pour commencer, je vais parler de la structure Event_s. Elle "remplace" le type SDL_Event. Elle contient une variable de type SDL_Event, un tableau de booléen pour garder une trace de l'état des touches, et un tableau de SDLKey pour contrôler les touches réellement pressées et dé-pressées.
La fonction updateEvents() est factice, mais très utile. En effet, pour gérer les touches il faut faire une série de switch fastidieux, et récupérer l'événement géré. C'est long, lourd, chiant, et il est difficile par exemple de contrôler l'état de plusieurs touches appuyées...
La fonction updateEvents se charge donc d'inscrire l'état des touches dans un tableau de booléen (true pour pressé, false pour dépressée).
La fonction unicodeTranslation() se charge elle de faire correspondre l'unicode si il le faut. Si les valeurs sont inférieures à 256 (au delà ce sont les touches comme les flèches, etc non gérées par unicode).
Si l'événement unicode remplit les conditions, on sauvegarde la valeur unicode comme valeur à la touche pressée. (sym).
Sinon, on sauvegarde la valeur sym tout simplement.
Cette manipulation est le coeur de toute la démarche !
Pour revenir à updateEvents(), pour garder l'état des touches, il faut simplement donner la valeur de la touche sym utilisée dans le tableau de booléen, et le mettre sur true ! Pareil pour SDL_KEYDOWN mais à false.
Finalement, comme faire pour gérer une touche vous aller me dire ? Simplement, voici un exemple de mon code :
http://pastebin.com/EQe20HPN
Il suffit simplement de tester la valeur du tableau de booléen !
Par défaut, vous n'avez même plus besoin de gérer l'appui long des touches ! Vous devrez cependant maintenant gérer le fait que ça n'appuie qu'une fois. C'est très simple, vous mettez manuellement vous même la valeur dans le tableau de booléen à false après vos instructions !
Voilà, je ne m'exprime pas super bien, posez-moi vos questions si jamais. Mais ça marche !