Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Convertir un SFML key code en Unicode  (Lu 5383 fois)

0 Membres et 1 Invité sur ce sujet

Alundra

  • Newbie
  • *
  • Messages: 20
    • Voir le profil
Convertir un SFML key code en Unicode
« le: Juin 02, 2012, 02:56:03 am »
Bonjour,
Je cherche a convertir un SFML key code en Unicode.
Une solution est déjà en place dans SFML ou un gros switch est nécessaire ?

Merci

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Convertir un SFML key code en Unicode
« Réponse #1 le: Juin 02, 2012, 08:34:02 am »
Pourquoi faire ? Si tu cherches à faire ça, c'est que tu es parti dans une mauvaise direction.

Pour rappel, l'évènement à utiliser pour récupérer le texte entré par l'utilisateur est sf::Event::TextEntered.
Laurent Gomila - SFML developer

Alundra

  • Newbie
  • *
  • Messages: 20
    • Voir le profil
Re : Convertir un SFML key code en Unicode
« Réponse #2 le: Juin 02, 2012, 06:17:43 pm »
C'est pour l'envoi d'event de "key pressed" à MyGUI, j'ai fais un gros switch de conversion de SFML a MyGUI mais il demande aussi l'Unicode, sans ca, ca ne marche pas correctement :
MyGUI::InputManager::getInstance().injectKeyPress( MyGUI::KeyCode, Text );

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Convertir un SFML key code en Unicode
« Réponse #3 le: Juin 02, 2012, 07:23:59 pm »
Bon ben oui, il te faut un gros switch. Ca tombe bien, t'en as déjà un :)
Laurent Gomila - SFML developer

Alundra

  • Newbie
  • *
  • Messages: 20
    • Voir le profil
Re : Convertir un SFML key code en Unicode
« Réponse #4 le: Juin 03, 2012, 01:40:56 pm »
Ok.
Mes connaissances dans le domaine de l'Unicode étant très limité, serait-ce possible d'avoir une explication du code a renvoyé dans le switch ?

Merci

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Convertir un SFML key code en Unicode
« Réponse #5 le: Juin 03, 2012, 04:33:13 pm »
Il vaudrait mieux demander à l'auteur ou la doc de MyGUI. Unicode est un standard qui se décline en plusieurs encodages différents (UTF-8, UTF-16, UTF-32, etc.). Il faut voir lequel est attendu par la fonction que tu utilises.
Laurent Gomila - SFML developer

Alundra

  • Newbie
  • *
  • Messages: 20
    • Voir le profil
Re : Convertir un SFML key code en Unicode
« Réponse #6 le: Juin 04, 2012, 12:49:18 am »
Apparemment il attend un "MyGUI::Char" qui est un "typedef" qui renvoi a un "unsigned int", donc un UTF-32.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Convertir un SFML key code en Unicode
« Réponse #7 le: Juin 04, 2012, 08:20:28 am »
Citer
Apparemment
Il n'y a pas de doc API, de forum, ou d'auteur à questionner ? Personne d'autre qui a utilisé cette fonction sur internet avant toi ? Mais quel genre de bibliothèque est-ce donc ? :P
Laurent Gomila - SFML developer

Alundra

  • Newbie
  • *
  • Messages: 20
    • Voir le profil
Re : Convertir un SFML key code en Unicode
« Réponse #8 le: Juin 04, 2012, 02:13:52 pm »
La doc est plutôt sec :

Citer
bool MyGUI::InputManager::injectKeyPress (    KeyCode  _key,Char  _text = 0 )       
Inject KeyPress event

Returns:
    true if event has been processed by GUI

Par contre en regardant dans le framework Win32 des samples il y a ca :

Citer
   int VirtualKeyToText(WPARAM _virtualKey)
   {
      static WCHAR deadKey = 0;

      BYTE keyState[256];
      HKL  layout = GetKeyboardLayout(0);
      if (GetKeyboardState(keyState) == 0)
         return 0;

      WCHAR buff[3] = { 0, 0, 0 };
      int ascii = ToUnicodeEx((UINT)_virtualKey, 0, keyState, buff, 3, 0, layout);
      if (ascii == 1 && deadKey != '\0' )
      {
         // A dead key is stored and we have just converted a character key
         // Combine the two into a single character
         WCHAR wcBuff[3] = { buff[0], deadKey, '\0' };
         WCHAR out[3];

         deadKey = '\0';
         if (FoldStringW(MAP_PRECOMPOSED, (LPWSTR)wcBuff, 3, (LPWSTR)out, 3))
            return out[0];
      }
      else if (ascii == 1)
      {
         // We have a single character
         deadKey = '\0';
         return buff[0];
      }
      else if (ascii == 2)
      {
         // Convert a non-combining diacritical mark into a combining diacritical mark
         // Combining versions range from 0x300 to 0x36F; only 5 (for French) have been mapped below
         // http://www.fileformat.info/info/unicode/block/combining_diacritical_marks/images.htm
         switch (buff[0])
         {
         case 0x5E: // Circumflex accent: в
            deadKey = 0x302;
            break;
         case 0x60: // Grave accent: а
            deadKey = 0x300;
            break;
         case 0xA8: // Diaeresis: ь
            deadKey = 0x308;
            break;
         case 0xB4: // Acute accent: й
            deadKey = 0x301;
            break;
         case 0xB8: // Cedilla: з
            deadKey = 0x327;
            break;
         default:
            deadKey = buff[0];
            break;
         }
      }
      return 0;
   }

C'est cette fonction qui est appelé dans l'injection du input manger dans le framework.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Convertir un SFML key code en Unicode
« Réponse #9 le: Juin 04, 2012, 02:27:36 pm »
Comme il se fait chier... s'il avait prévu dans son API une fonction à part pour chopper les inputs de type "texte", au lieu de mélanger ça aux inputs de type "touche", il mapperait ça sur l'évènement WM_CHAR (dans l'exemple Win32) et ce serait fini avec une seule ligne de code.

Bon, du coup je pense que ça ira si tu convertis en UTF-32.
Laurent Gomila - SFML developer