SFGUI -> Capturer les sf::Event

Salut 4ian,

Je voudrais savoir si il y a un moyen de recevoir les événements sf::Event car je fais des tests avec SFGUI : elle a besoin de récupérer les Events pour fonctionner correctement.

Pas actuellement, je réfléchis à une solution.

Ok, parce que voici ce qui est proposé en exemple avec SFGUI :

[code]while( window.PollEvent( event ) ) {
if( m_wndmain->HandleEvent( event ) == sfg::Widget::EatEvent ) {
continue;
}

		if( event.Type == sf::Event::Closed ) {
			window.Close();
		}

}[/code]
Sachant que m_wndmain est un widget de SFGUI.
Il faudrait “juste” récupérer une liste d’événements.

EDIT : Idée : Une fonction qui demande un pointeur sur la fonction a exécuter à l’intérieur de while(window.PollEvent()) et également une fonction pour supprimer cet appel. :wink:

Le risque est que plusieurs extensions veuillent capter les évènements : Si les fonctions interagissent directement dans la boucle “while(window.PollEvent())”, seule une recevra les évènements.

Ce que je pourrais faire, c’est mettre une liste de sf::Event ( std::vectorsf::Event ) accessible.

Oui, ce serait pas mal. :smiley:
EDIT : Une liste qui se vide à chaque tour de boucle ?

Tu as réussi à ajouter ça ?

Je vais ajouter ça.
Je devrai normalement mettre une version de correctifs/modifs plus ou moins mineures la semaine prochaine, ça sera dedans.

Oui : Le principe est d’avoir la même chose que ce qu’on fait avec “window.PollEvent( event )”, mais plutôt en itérant sur une liste en “lecture seule” fournie par la scène, ce qui permet à chaque extension de réagir comme elle le souhaite. D’ailleurs je me pose la question, à quel moment va tu traiter les évènements dans l’extension.

Est-ce que dans void Object::UpdateTime(float), ça ira ? (c’est propre à chaque objets)

C’est toi qui voit et qui gère ça comme tu le sens, c’était juste pour savoir, mais en effet c’est aussi ce que j’ai utilisé pour l’extension d’entrée de texte, car même si UpdateTime n’est pas au départ censée être utile pour ce genre de tâche, ça le fait quand même.

( En attendant la prochaine version et la liste d’évènements mise à disposition par la scène, tu peux peut être essayer d’intégrer les widgets même si t’a pas possibilité de tester si ils réagissent correctement pour le moment. )

C’est ce que j’ai fait pour sfg::Entry : :wink:
[attachment=0]TA-Preview.png[/attachment]

J’ai implementé la possibilité de récupérer la liste des évènements, ce qui fait qu’on pourra maintenant faire :

const std::vector<sf::Event> & events = scene->GetRenderTargetEvents(); for (unsigned int i = 0;i<events.size();++i) { if (events[i].Type == sf::Event::... ) //... }

Ok, merci beaucoup.
J’attends la prochaine version et j’ajouterai ça. :wink:

Ça ne risque pas de trop ralentir les jeux ?

Non, y a pas non plus des centaines d’évènements à traiter donc les boucles devraient se faire rapidement, d’autant que le vector d’évènements est récupéré bien sûr par référence constante donc pas de copie faite en mémoire.