IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

Problème avec la gestion des événements


Sujet :

SDL

  1. #21
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par fearyourself
    Oui mais c'est un peu comme la raison d'avoir un octree en fait. Si tu as une fenêtre qui a 30 widgets mais que la souris n'est même pas dans la fenêtre, pourquoi parcourir ses widgets ?

    En testant si la souris est dans la boîte de dialogue tu évites des tests lorsque la souris ne l'est pas.
    Oui effectivement ... j'avais pas vu ca sous cet angle

    Je me heurte tout de même à un petit problème... Admettons une boîte de dialogue avec un bouton, si je clique sur le bouton,celui-ci prend le focus mais la fenêtre étant de ce fait active, elle recoit également le focus non ? Ca me semble logique d'un certain point de vue mais tant que j'y suis, autant demander

    Citation Envoyé par fearyourself
    Ah non, si tu as 20 événements en attente, tu affiches et parcours les widgets 20 fois.

    Par contre, en sortant l'appel de l'affichage tu appelles la gestion gui_events 20 fois (normal) mais l'affichage une seule fois (logique on prend tous les événements en compte et après on réactualise)
    Oui c'est vrai, j'avais pas pensé à ca

    Citation Envoyé par fearyourself
    C'est vrai, mais quand tu vas mettre le jeu en place, il y aura toujours un réaffichage en place pour les animations par exemple donc est-ce vraiment utile ?

    Jc
    Moui, je parlais surtout du point de vue des widgets uniquement mais c'est vrai, il y'aura un réaffichage constant de toutes manières.
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  2. #22
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Franck.H
    Je me heurte tout de même à un petit problème... Admettons une boîte de dialogue avec un bouton, si je clique sur le bouton,celui-ci prend le focus mais la fenêtre étant de ce fait active, elle recoit également le focus non ? Ca me semble logique d'un certain point de vue mais tant que j'y suis, autant demander
    Moi j'avais un focus directement au widget qui était concerné, aucun autre n'avait cette info.

    Par contre, si tu veux faire une couleur différente pour la boîte de dialogue, je pense que tu pourrais le faire facilement en ajoutant une fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    void give_focus(widget *);
    void lose_focus(widget *);
    Vu que t'as codé cela logiquement, j'ai vu qu'un widget a un parent, suffit de remonter et mettre un flag à 1 pour l'affichage. Par contre, l'info va directement au widget concerné pour le clavier par exemple.

    Jc

  3. #23
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Ok, en fait non je ne fait pas de truc du style changement de la couleur de la fenêtre et tout. Un jour peut-être mais c'est pas dans mes prévisions.

    Non c'était juste pour savoir, là pour le moment j'ai fait en sorte que ce soit qu'un seul widget qui possède le focus.

    Merci pour toutes ces infos ... j'ai de quoi coder pour le moment Je met une fois tout ca en place puis je te fait signe
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  4. #24
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Franck.H
    Ok, en fait non je ne fait pas de truc du style changement de la couleur de la fenêtre et tout. Un jour peut-être mais c'est pas dans mes prévisions.

    Non c'était juste pour savoir, là pour le moment j'ai fait en sorte que ce soit qu'un seul widget qui possède le focus.

    Merci pour toutes ces infos ... j'ai de quoi coder pour le moment Je met une fois tout ca en place puis je te fait signe
    Ca marche, d'ailleurs malgré mes remarques, sache que je suis impressionné du boulot fait. C'est pas mal du tout

    Jc

  5. #25
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par fearyourself
    Ca marche, d'ailleurs malgré mes remarques, sache que je suis impressionné du boulot fait. C'est pas mal du tout

    Jc
    Merci
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #26
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Coucou

    J'ai fait une mise à jour sur le CVS avec mes modifications et ajouts que j'était en train de faire, ca marche pas si mal pour le moment mais ca reste sans doute améliorable je pense
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  7. #27
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Et voilà, une dernière mise à jour aujourd'hui avec quelques améliorations

    En fait dans les nouveauté, j'ai créé un nouveau widget BDesktop qui lui permet d'afficher une image de fond (ou une couleur) avec aussi la possibilité de mettre ce même en fond en transparence ... Avec tout ca, l'objectif principal de ce widget est avant tout de pouvoir afficher les boîtes de dialogues comme ca, j'ai quelque chose de bien séparé.

    Le but était aussi de faire en sorte que le fond donc, ce qui se trouve autour d'une boîte de dialogue puisse également intéragir avec l'utilisateur par le biais d'événements mais, ca permet également de faire en sorte qu'aucun widget, y compris une boîte de dialogue peut avoir la possibilité de ne pas avoir le focus (dans ce cas ce serais alors le BDesktop qui l'aura)... cela pourra servire pour le futur, sait-on jamais

    J'estime que maintenant ma gestion des événements et bien mieux ainsi et aussi peut-être même plus fléxible ... grâce à toi ... merci


    Si toutesfois tu as des suggestions ... hésite pas
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  8. #28
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Franck.H
    Et voilà, une dernière mise à jour aujourd'hui avec quelques améliorations

    En fait dans les nouveauté, j'ai créé un nouveau widget BDesktop qui lui permet d'afficher une image de fond (ou une couleur) avec aussi la possibilité de mettre ce même en fond en transparence ... Avec tout ca, l'objectif principal de ce widget est avant tout de pouvoir afficher les boîtes de dialogues comme ca, j'ai quelque chose de bien séparé.
    Ah sympa, je vais regarder cela

    Le but était aussi de faire en sorte que le fond donc, ce qui se trouve autour d'une boîte de dialogue puisse également intéragir avec l'utilisateur par le biais d'événements mais, ca permet également de faire en sorte qu'aucun widget, y compris une boîte de dialogue peut avoir la possibilité de ne pas avoir le focus (dans ce cas ce serais alors le BDesktop qui l'aura)... cela pourra servire pour le futur, sait-on jamais
    En effet, cela pourrait servir dans certains cas je pense, faut juste trouver ce cas

    J'estime que maintenant ma gestion des événements et bien mieux ainsi et aussi peut-être même plus fléxible ... grâce à toi ... merci


    Si toutesfois tu as des suggestions ... hésite pas
    mais j'ai juste fait des remarques, au final c'est toi qui a bossé. Ce soir, je vais regarder de plus près tes changements, je te tiens au courant

    Jc

  9. #29
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par fearyourself
    En effet, cela pourrait servir dans certains cas je pense, faut juste trouver ce cas
    Ouais c'est sûr mais en générale ca viens tout seul le moment voulu

    Citation Envoyé par fearyourself
    mais j'ai juste fait des remarques, au final c'est toi qui a bossé.
    Ouais c'est sûr Les remarques servent à avancer

    Citation Envoyé par fearyourself
    Ce soir, je vais regarder de plus près tes changements, je te tiens au courant
    Ok
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  10. #30
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Allez, je viens de terminer mon étude de ton code, désolé mais encore des trucs à redire ...

    Commencons par ta gestion du main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
                while (SDL_PollEvent (p_event))
                {
                   switch (p_event->type)
                   {
                      case SDL_QUIT:
                      {
                         b_quit = SDL_TRUE;
                      }
                      break;
     
                      default:
                         gui_events ();
                   }
     
     
                   bengine_main ();
                }
    Je ne suis pas d'accord sur cet appel de bengine_main, je ferais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
                while (SDL_PollEvent (p_event))
                {
                   switch (p_event->type)
                   {
                      case SDL_QUIT:
                      {
                         b_quit = SDL_TRUE;
                      }
                      break;
     
                      default:
                         gui_events ();
                   }
     
                }
                bengine_main ();
    Comme ceci, tu gères tous les événements et ensuite tu affiches. Sinon tu vas avoir trop de demandes d'affichage que nécessaire à mon avis.

    Pour la gestion des boutons, j'ai ajouté une fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void* gui_widget_get_focus()
    {
        return p_current_focused_widget;
    }
    et j'ai modifié ton give_focus pour accepter un paramètre NULL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    void gui_widget_give_focus (void * p_wid)
    {
       if (p_wid != NULL)
       {
          if (p_current_focused_widget != NULL)
          {
             bwidget_leave_focus (p_current_focused_widget);
          }
     
          p_current_focused_widget = (BWidget *) p_wid;
          bwidget_give_focus (p_current_focused_widget);
       }
       else {
           p_current_focused_widget = NULL;
       }
    }
    Ceci m'a permis de corriger un problème dans ton code : si on clic sur un bouton et ensuite on bouge la souris, le bouton passe en mode normal. Or il devrait rester en mode appuyé tant qu'on ne sorte pas de sa zone.

    Avec le widget qui a le focus, j'ai aussi pu virer ton event_state et button_state. Par contre, j'ai ajouté une gestion du temps entre le moment que l'utilisateur appuie sur le bouton et qu'il le lâche.

    Je vais tenter de détailler les changements :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    static SDL_bool bbutton_event_loop (void * p_wid)
    {
       SDL_bool       event_captured = SDL_FALSE;
       static Uint32 downtime =0, uptime=0;
     
       int            mouse_x        = 0;
       int            mouse_y        = 0;
       Uint8          state;
       SDL_Event   *  p_event        = bengine_get_event ();
       BButton     *  p_btn          = (BButton *) p_wid;
     
       if (p_btn != NULL &&
           BBUTTON_GET_SUPER (p_btn).state != BWIDGET_STATE_INSENSITIVE)
       {
          /*
           * Si la souris est au-dessus du bouton :
           */
          state = SDL_GetMouseState (& mouse_x, & mouse_y);
     
          if (mouse_x >= BBUTTON_GET_SUPER (p_btn).rect.x &&
              mouse_x <= BBUTTON_GET_SUPER (p_btn).rect.x +
                         BBUTTON_GET_SUPER (p_btn).rect.w &&
              mouse_y >= BBUTTON_GET_SUPER (p_btn).rect.y &&
              mouse_y <= BBUTTON_GET_SUPER (p_btn).rect.y +
                         BBUTTON_GET_SUPER (p_btn).rect.h)
          {
             /*
              * Si l'etat est normal, on pase en prelight
              */
             if(BBUTTON_GET_SUPER (p_btn).state == BWIDGET_STATE_NORMAL) {
                BBUTTON_GET_SUPER (p_btn).state = BWIDGET_STATE_PRELIGHT;
             }
    Jusque là rien n'a changé

    C'est maintenant que tout change !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
             switch (p_event->type)
             {
                case SDL_MOUSEBUTTONDOWN:
                {
                    /*
                     * On recupere le temps
                     */
                    downtime = SDL_GetTicks();
                   /*
                    * Bouton gauche enfonce.
                    */
                   BBUTTON_GET_SUPER (p_btn).state = BWIDGET_STATE_ACTIVE;
     
                   /*
                    * Si on n'a pas encore le focus, on peut appeler la fonction pressed
                    */
     
                   if (gui_widget_get_focus() != p_wid)
                   {
                       if (BBUTTON_GET_SUPER (p_btn).mouse_pressed != NULL)
                       {
                         BBUTTON_GET_SUPER (p_btn).mouse_pressed (
                            & BBUTTON_GET_SUPER (p_btn),
                            BBUTTON_GET_SUPER (p_btn).p_event [BWIDGET_MOUSE_PRESSED_EVENT],
                            BBUTTON_GET_SUPER (p_btn).p_data [BWIDGET_MOUSE_PRESSED_EVENT]
                         );
                       }
                   }
                   /*
                    * On donne le focus au widget
                    */
                   gui_widget_give_focus (p_wid);
                   event_captured = SDL_TRUE;
                }
                break;
    Comme tu vois, je récupére d'abord le temps actuel pour pouvoir gérer le clic par la suite. On met le bouton en mode active pour que le rendu en prenne compte.

    Ensuite, si on n'a pas encore le focus, on appelle la fonction pressed si elle existe et ensuite on donne le focus, ceci permet d'être sûr de le donner qu'une seule fois.

    Le cas up est similaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
                case SDL_MOUSEBUTTONUP:
                {
                    /*
                     * On recupere le temps
                     */
                    uptime = SDL_GetTicks();
     
                   /*
                    * Bouton gauche relache ou non presse
                    */
                   BBUTTON_GET_SUPER (p_btn).state = BWIDGET_STATE_PRELIGHT;
    Donc on récupére le temps et on dit que c'est un bouton PRELIGHT maintenant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                   if (gui_widget_get_focus() == p_wid)
                   {
    On commence par vérifier qu'on est dans le même bouton. Ceci permet d'être sûr qu'on ne pas appeler la fonction released d'un autre bouton. Par exemple, suppose que tu appuies sur bouton1, déplaces la fonction jusqu'au bouton2 et relâche.

    Par défaut, rien ne se passe. Donc ceci permet d'en être sûr. Ensuite, mon commentaire donne une alternative possible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
                    /*
                     * Si c'est le meme widget qui a eu le focus, on peut appeler la fonction released
                     * Rem : Une autre solution serait d'appeler la fonction released du widget qui a le focus,
                     *       Mais alors il faut ajouter un test en bas pour le cas "on n'est plus dans le widget qui a le focus"
                     */
     
                       /*
                        * Gestion de la fonction released
                        */
                       if (BBUTTON_GET_SUPER (p_btn).mouse_released != NULL)
                        {
                          BBUTTON_GET_SUPER (p_btn).mouse_released (
                             & BBUTTON_GET_SUPER (p_btn),
                             BBUTTON_GET_SUPER (p_btn).p_event [BWIDGET_MOUSE_RELEASED_EVENT],
                             BBUTTON_GET_SUPER (p_btn).p_data [BWIDGET_MOUSE_RELEASED_EVENT]
                          );
                        }
    Ensuite, on gére le clic en regardant la différence de temps :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
                     /*
                      * Si le bouton gauche de la souris a ete presse et relache,
                      * on declenche l'evenement utilisateur 'mouse_clicked' s'il a
                      * ete definit par l'utilisateur.
                      * On definit cela en regardant la difference entre uptime et downtime.
                      */
     
                     if(uptime - downtime < BBUTTON_CLICK_TIME)
                     {
                         if(BBUTTON_GET_SUPER (p_btn).mouse_clicked != NULL)
                            {
                                BBUTTON_GET_SUPER (p_btn).mouse_clicked (
                                & BBUTTON_GET_SUPER (p_btn),
                                BBUTTON_GET_SUPER (p_btn).p_event [BWIDGET_MOUSE_CLICKED_EVENT],
                                BBUTTON_GET_SUPER (p_btn).p_data [BWIDGET_MOUSE_CLICKED_EVENT]
                                );
                            }
                     }
    Finalement, on enlève le focus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
                     /* Dans le cas d'un bouton, lorsqu'on relache le bouton, on perd le focus */
                     gui_widget_give_focus(NULL);
                  }
     
                  event_captured = SDL_TRUE;
                }
                break;
     
                default:
                   break;
             }
    Enfin, on arrive au cas où on sort du bouton. On remet le bouton à un état normal et on enlève le focus c'est c'était le notre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
          }
          else
          {
             BBUTTON_GET_SUPER (p_btn).state = BWIDGET_STATE_NORMAL;
     
             /* Si on est dehors, on perd le focus si c'est le widget qui avait le focus */
             if(gui_widget_get_focus() == p_wid)
             {
                gui_widget_give_focus(NULL);
             }
          }
       }
     
       return event_captured;
    }
    Dernière remarque sur ce code, il me semble meilleur

    Plus sérieusement, je m'explique :
    - En utilisant directement le bouton qui a le focus, je suis sûr de ne pas tomber dans le cas où on appuie sur un bouton, on déplace la souris et on arrive sur un autre pour relâcher.
    - Côté affichage, lorsque tu bougeais la souris sur un bouton cliqué, il repassait en état normal.
    - Certes j'ai 2 compteurs statiques pour le temps mais tu en aurais aussi eu besoin. Parce que, dans l'état de ton code, la distinction entre released et clicked n'avait pas vraiment de sens puisque tu n'as plus une boucle qui regarde si les SDL_MOUSEBUTTONUP et SDL_MOUSEBUTTONDOWN sont faits en même temps.
    - Je n'affiche plus qu'une fois par gestion de tous les événements qui sont en attente.
    - et puis pleins d'autres aspects nettement plus cool dont je n'ai même pas pensé

    Jc

    PS : Et j'ai vu des casts d'un pointeur void vers un autre type de pointeur. C'est un cast inutile, c'est pas bien!

  11. #31
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Waouw ... Si je m'attendait à ca

    Pour le bouton qui se remet en état normal alors qu'il ne dervait pas oui, je l'avais remarqué mais encore rien fait pour y remédier

    A moins que tu me donnes les fichiers modifiés, BBUTTON_CLICK_TIME
    possède quelle valeur ? Je pense que tu as du donner une valeur relativement correcte en milliseconde mais laquelle ?

    PS : Et j'ai vu des casts d'un pointeur void vers un autre type de pointeur. C'est un cast inutile, c'est pas bien!
    Ouais je sais, j'en ai surtout fait lorsque je récupère le pointeur d'un widget depuis un argument de type void *.

    J'avais pensé créer également une macro par widget permettant de déterminer si le widget passé en argument est bien du bon type, je pense que ca permet également d'éviter certains problèmes, enfin ... c'est dans les prévisions


    En tous cas merci pour ces optimisations (comme si j'avais pas assez de travail il m'en rajoute )
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  12. #32
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Franck.H
    Waouw ... Si je m'attendait à ca

    Pour le bouton qui se remet en état normal alors qu'il ne dervait pas oui, je l'avais remarqué mais encore rien fait pour y remédier

    A moins que tu me donnes les fichiers modifiés, BBUTTON_CLICK_TIME
    possède quelle valeur ? Je pense que tu as du donner une valeur relativement correcte en milliseconde mais laquelle ?
    J'avais mis 1000 disant qu'un clic se faisait en moins d'une seconde. Mais il faudrait peut-être mettre plutôt 500...

    Cela pourrait être une variable quelque part qui peut être modifié pendant l'exécution.

    Ouais je sais, j'en ai surtout fait lorsque je récupère le pointeur d'un widget depuis un argument de type void *.

    J'avais pensé créer également une macro par widget permettant de déterminer si le widget passé en argument est bien du bon type, je pense que ca permet également d'éviter certains problèmes, enfin ... c'est dans les prévisions
    Effectivement, cela serait sûrement pas mal. Genre une fonction qui retourne NULL si ce n'est pas le bon type et le pointeur si c'est le bon.

    En tous cas merci pour ces optimisations (comme si j'avais pas assez de travail il m'en rajoute )
    Désolé

    J'étais motivé ce matin pour regarder et comprendre pourquoi il ne faisait pas ce qu'on attendrait en temps normal.

    Par contre, avec cela, ton projet tourne à présent bien sur mon ordi.
    Jc

    PS : Un truc sympa serait d'ajouter un nombre d'images par seconde de ton système pour voir à combien il tourne.
    PPS: En compilant en -O3 et sans debug, j'ai ces messages :

    /backbubble/Sources/BEngine/blist/blist.c: In function 'blist_get_generic':
    /backbubble/Sources/BEngine/blist/blist.c:699: warning: 'data.p_adr1' may be
    used uninitialized in this function
    /backbubble/Sources/BEngine/blist/blist.c:699: warning: 'data.p_adr2' may be
    used uninitialized in this function
    /backbubble/Sources/BEngine/gui/widgets/bbutton.c: In function
    'bbutton_get_title_alignment':
    /backbubble/Sources/BEngine/gui/widgets/bbutton.c:449: warning: 'align' may
    be used uninitialized in this function
    Compiling: gui/widgets/bcheck_button.c
    Compiling: gui/widgets/bdesktop.c
    /backbubble/Sources/BEngine/gui/widgets/bdesktop.c: In function
    'bdesktop_get_background_color':
    /backbubble/Sources/BEngine/gui/widgets/bdesktop.c:299: warning:
    'color.unused' is used uninitialized in this function
    /backbubble/Sources/BEngine/gui/widgets/bdesktop.c:290: warning: 'color.r'
    may be used uninitialized in this function
    /backbubble/Sources/BEngine/gui/widgets/bdesktop.c:290: warning: 'color.g'
    may be used uninitialized in this function
    /backbubble/Sources/BEngine/gui/widgets/bdesktop.c:290: warning: 'color.b'
    may be used uninitialized in this function
    Compiling: gui/widgets/bdialog.c
    Compiling: gui/widgets/bentry.c
    /backbubble/Sources/BEngine/gui/widgets/bentry.c: In function
    'bentry_event_loop':
    /backbubble/Sources/BEngine/gui/widgets/bentry.c:123: warning: unused
    variable 'p_event'
    /backbubble/Sources/BEngine/gui/widgets/bentry.c: In function
    'bentry_create':
    /backbubble/Sources/BEngine/gui/widgets/bentry.c:513: warning: assignment
    from incompatible pointer type
    /backbubble/Sources/BEngine/gui/widgets/bentry.c: At top level:
    /backbubble/Sources/BEngine/gui/widgets/bentry.c:87: warning:
    'bentry_move_caret' defined but not used

  13. #33
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par fearyourself
    J'avais mis 1000 disant qu'un clic se faisait en moins d'une seconde. Mais il faudrait peut-être mettre plutôt 500...

    Cela pourrait être une variable quelque part qui peut être modifié pendant l'exécution.
    Oui effectivement, une petite propriété globale au moteur sur la vitesse du click de la souris

    Citation Envoyé par fearyourself
    Effectivement, cela serait sûrement pas mal. Genre une fonction qui retourne NULL si ce n'est pas le bon type et le pointeur si c'est le bon.
    En fait je pensais simplement à une macro de test qui renverrais SDL_TRUE ou SDL_FALSE suivant les cas puis faire en fonction du resultat là où on l'utilise.

    Citation Envoyé par fearyourself
    J'étais motivé ce matin pour regarder et comprendre pourquoi il ne faisait pas ce qu'on attendrait en temps normal.

    Par contre, avec cela, ton projet tourne à présent bien sur mon ordi.
    Chez moi aussi faut dire, je crois que c'est surtout dû au déplacement de bengine_main dans le main qui fait pas mal de chose car avant j'avais encore quelques latences.

    Citation Envoyé par fearyourself
    PS : Un truc sympa serait d'ajouter un nombre d'images par seconde de ton système pour voir à combien il tourne.
    PPS: En compilant en -O3 et sans debug, j'ai ces messages :
    Oui, ca pourrait effectivement être sympa, je verrais ca un peu plus tard mais pour le moment j'aime mieux avancer le moteur

    Pour les warning ... oui en fait c'est surtout dû au fait que je n'initialise pas avec memset par exemple certaines structures mais en générale j'initialise plus tard mais toujours avant utilisation pour éviter les problèmes. Pour ce qui touche aux warning du widget BEntry c'est tout à fait normal ... il est en cours de développement donc pas fini
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [ZF 1.7] Zend_Log problème avec la gestion des erreurs
    Par miya dans le forum Zend Framework
    Réponses: 9
    Dernier message: 26/05/2009, 18h33
  2. Problème avec la gestion des fichier dans une JList()
    Par chebmo1986 dans le forum Composants
    Réponses: 3
    Dernier message: 18/02/2009, 23h49
  3. Problème avec gotoAndPlay, gestion des animations
    Par Pimprenelle dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 01/06/2008, 21h24
  4. Problème avec la "Gestion des bibliothèques dynamiques"
    Par GoustiFruit dans le forum Delphi
    Réponses: 15
    Dernier message: 31/05/2006, 09h54
  5. Problème avec la gestion des événements
    Par CynO dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/10/2005, 10h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo