Partage
  • Partager sur Facebook
  • Partager sur Twitter

Raw code of key pressed ?

    12 septembre 2022 à 12:54:05

    Bonjour,

    Etant sur la façon de gérer les event avec gtkmm-4.0 en lisant cette page

     https://developer-old.gnome.org/gtkmm/stable/classGtk_1_1EventControllerKey.html

    je vois ceci

    Glib::SignalProxy<bool(guint, guint, Gdk::ModifierType)> Gtk::EventControllerKey::signal_key_pressed (   )  
    Slot Prototype:
    bool on_my_key_pressed(guint keyval, guint keycode, Gdk::ModifierType state)

    Flags: Run Last

    This signal is emitted whenever a key is pressed.

    Parameters
    keyval The pressed key.
    keycode The raw code of the pressed key.
    state The bitmask, representing the state of modifier keys and pointer buttons. See Gdk::ModifierType.
    Returns
    true if the key press was handled, false otherwise.

    Je ne comprends pas cette notion de "raw code"

    Si par exemple je fais ceci

    if (keycode == )

    et que je veux récupérer l'appui sur la touche "Carriage Return" keycode doit être égal à quoi ?

    -
    Edité par Duncan4031 12 septembre 2022 à 13:01:19

    • Partager sur Facebook
    • Partager sur Twitter
      14 septembre 2022 à 13:02:32

      utilise plutôt keyval qui sont définis dans https://gitlab.gnome.org/GNOME/gtk/-/blob/main/gdk/gdkkeysyms.h (GDK_KEY_Return pour la touche entrée, et GDK_KEY_KP_Enter pour celle du pavé numérique sauf erreur de ma part)

      -
      Edité par umfred 14 septembre 2022 à 13:04:23

      • Partager sur Facebook
      • Partager sur Twitter
        14 septembre 2022 à 14:10:54

        Merci pour le lien.

        mais "raw code of key pressed" je ne comprends pas, ce n'est pas l'équivalent ASCII.

        Peut être lié au périphérique d'entrée, genre joystick, clavier ou autre et que dans ce cas il faut un code particulier ?

        • Partager sur Facebook
        • Partager sur Twitter
          14 septembre 2022 à 14:15:32

          le meilleur moyen de savoir c'est de tester en affichant sa valeur
          • Partager sur Facebook
          • Partager sur Twitter
            14 septembre 2022 à 14:41:17

            >le meilleur moyen de savoir c'est de tester en affichant sa valeur

            Avec un clavier chinois ou japonnais histoire de voir qu'une touche ou un caractère, ça n'a pas grand chose de commun.

            • Partager sur Facebook
            • Partager sur Twitter
            Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
              14 septembre 2022 à 14:56:29

              On peux faire l'essai avec une touche connue, on pourra alors comparer avec l'ascii (pour cette touche) et sa valeur keyval (dans le fichier)
              • Partager sur Facebook
              • Partager sur Twitter
                14 septembre 2022 à 18:51:57

                Pour keyval c'est le code tel que défini dans le fichier gdkkeysims.h

                Mais pour keycode je ne comprends pas

                • Partager sur Facebook
                • Partager sur Twitter
                  14 septembre 2022 à 19:24:45

                  tu peux peut-être nous dire ce que tu as testé et les valeurs obtenus ; mais je le redis (je ne l'ai sûrement pas bien dit) dans la majorité des cas, tu n'as qu'à utiliser keyval, keycode, c'est le code défini par le hardware correspondant à la touche (traduit en keyval par keymap si je ne me trompe pas et si possible)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    16 septembre 2022 à 10:59:05

                    Pour le clavier, il y a 2 concepts à comprendre:
                    - La valeur de la touche ou les combinaisons de touche: tu appuies sur "a", et tu obtiens un "a", tu appuies sur MAJ + "a", tu obtiens "A".
                    - Le code de la touche, on peut assimiler cela aux coordonnées de la touche, tu appuies sur "a" sur un clavier azerty, tu obtiens un "a", par contre la même touche (entendre: même position) sur un clavier qwerty donnera un "q".
                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 septembre 2022 à 16:55:41

                      Deedolith a écrit:

                      Pour le clavier, il y a 2 concepts à comprendre:
                      - La valeur de la touche ou les combinaisons de touche: tu appuies sur "a", et tu obtiens un "a", tu appuies sur MAJ + "a", tu obtiens "A".
                      - Le code de la touche, on peut assimiler cela aux coordonnées de la touche, tu appuies sur "a" sur un clavier azerty, tu obtiens un "a", par contre la même touche (entendre: même position) sur un clavier qwerty donnera un "q".


                      Avec la SDL2 (comme pour d'autres bibliothèques je suppose) il y a deux approches différentes pour un clavier: les keycodes (plus modernes) et les scancodes (déjà présents dans la version 1.x de la biliothèque). Avec les scancodes on a ce que tu décris par exemple pour le 'w'/'z' ,'q'/'a' , 'm'/'?' (pour les clavier azerty/qwerty); par contre avec les keycodes: le 'a' azerty correspond au 'a' du clavier qwerty ce qui permet de coder sans penser aux différents claviers qui peuvent exister (sans trop rentrer dans les détails des claviers avec alphabets non latins).
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Mon site web de jeux SDL2 entre autres : https://www.ant01.fr

                        17 septembre 2022 à 17:18:06

                        @Warren79 merci pour les précisions

                        j'ai mis en place cette fonction pour voir ce que récupère keycode et keyval

                        bool Window::on_key_pressed(guint keyval, guint keycode, Gdk::ModifierType, const Glib::ustring &phase)
                        {
                          const gunichar unichar = gdk_keyval_to_unicode(keyval);
                          std::cout << "unichar -> " << std::hex << (char)unichar << std::endl;
                          std::cout << "keycode -> " << std::hex << keycode << std::endl;
                          std::cout << "keyval -> " << std::hex << keyval << std::endl;
                          
                          return false;
                        }

                        ce qui donne

                        unichar -> a
                        keycode -> 18
                        keyval -> 61
                        
                        unichar -> z
                        keycode -> 19
                        keyval -> 7a
                        
                        unichar -> w
                        keycode -> 34
                        keyval -> 77

                        Autant keyval c'est bien le code ASCII, mais keycode je ne vois pas à quoi ça correspond



                        • Partager sur Facebook
                        • Partager sur Twitter
                          18 septembre 2022 à 10:58:11

                          Bonjour,

                          @Duncan4031 : J'ai envie de dire , mais je n'en suis pas du tout sur, que le keycode représente une touche par rapport à la 'géométrie' du clavier; si tu as un clavier azerty, la touche 'a' est juste avant la touche 'z' sur une même ligne ce qui expliquerais que leurs code 'keycode' soient 18 et 19 respectivement (donc juste à suivre); donc par déclinaison sur un clavier qwerty 'q' et 'w' auraient un keycode contigüe. Par contre, le keyval definie bien la touche d'appuyé, à savoir que le 'a' azerty aurait le même keyval que le 'a' d'un clavier qwerty. Donc pour garder une meilleur compatibilité , il conviendrait d'utiliser keyval. Il faut que tu lise la documentation de gtkmm pour en être sur, ce que je dis , si je ne me trompe pas doit être mentionné quelque part.:)

                          Edit: Dans ton premier post, il y a la réponse :

                          "- The raw code of the pressed key" et "- The pressed key"

                          Le raw code correspond à la valeur brut du clavier (par rapport à sa géométrie , quelle ligne et quelle numéro de touche de cette ligne, indépendamment de la touche qui se trouve à cet endroit)

                          Alors que keyval , c'est la touche (ce qu' il y a de marqué dessus) donc un 'a' azerty est un 'a' en qwerty etc...

                          -
                          Edité par Warren79 18 septembre 2022 à 11:02:30

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Mon site web de jeux SDL2 entre autres : https://www.ant01.fr

                            18 septembre 2022 à 15:55:37

                            Effectivement cela semble cohérent.

                            Donc keycode pourrait s'utiliser avec des périphériques d'entrée spécifiques par exemple

                            • Partager sur Facebook
                            • Partager sur Twitter
                              20 septembre 2022 à 17:15:27

                              A noter que le keycode est le seul moyen de connaitre l'état d'une touche, dont les touches non affichables (shift, ctrl, bckspace, alt ...).
                              • Partager sur Facebook
                              • Partager sur Twitter
                                22 septembre 2022 à 19:04:44

                                Oui le ModifierType est là pour repérer les touches comme ALT SHIFT CTRL et boutons de la souris
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  23 septembre 2022 à 17:12:51

                                  umfred a écrit:

                                  le ModifierType  donne  cette info  https://developer-old.gnome.org/gtkmm/stable/group__gdkmmEnums.html#ga734c2979005c87dbe51223a0128cdd97


                                  Et qu'en est-il des touches qui ne sont pas des "modificateur" (backspace ou escape par exemple) ?
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    23 septembre 2022 à 19:09:15

                                    ils sont dans la listes des clés déjà indiqué plus haut https://gitlab.gnome.org/GNOME/gtk/-/blob/main/gdk/gdkkeysyms.h 

                                    #define GDK_KEY_BackSpace 0xff08

                                    #define GDK_KEY_Escape 0xff1b

                                    -
                                    Edité par umfred 23 septembre 2022 à 19:10:19

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      24 septembre 2022 à 8:52:30

                                      En associant keyval et ModifierType on peut créer des raccourcis clavier.

                                      voir par là https://developer-old.gnome.org/gtkmm-tutorial/stable/chapter-keyboardevents.html.fr

                                      mais keycode n'est pas détaillé, d'où ma question de départ.

                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      Raw code of key pressed ?

                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                      • Editeur
                                      • Markdown