Myriad Blog 1.3.0 Tuesday, Oct 17th, 2017 at 10:12am 

Tuesday, Sep 6th, 2011 at 04:59pm
Acam III, version Ubuntu, étape 93

 
Nous avons enfin résolu nos problèmes de rafraîchissement graphique dans le plug-in.
 
Afin que nos efforts, étalés sur plusieurs semaines, puissent bénéficier à d'autres, voici le pourquoi et le comment.
 
<technique on>
Lorsqu'un plug-in Mozilla désire avoir la main régulièrement, par exemple pour gérer des animations sans intervention de l'utilisateur, il doit se charger de mettre en place un timer, un thread ou tout autre moyen permettant d'exécuter une fonction régulièrement.
Dans notre cas, nous avons choisi un thread, qui boucle sur une attente de 1/10e de seconde  - usleep(100000) - puis qui appelle la fonction demandée.
 
Mais là, attention! Les fonctions du navigateur ne sont pas "thread-safe". On ne doit donc pas, depuis le thread qui boucle, appeler une quelconque fonction du navigateur, comme par exemple celle qui demande de remettre à jour une partie de l'aire du plug-in:
browser -> invalidaterect(NPP id,NPRect * rect)
 
Pour le faire, il faut passer par une fonction spéciale qui lance l'appel de manière asynchrone:
browser -> pluginthreadasynccall(void * myAsyncFn, void * parametre)
 
La fonction désirée, appelée ici myAsyncFn, sera appelée plus tard, lorsque le navigateur le pourra, et dans celle-ci, on pourra utiliser toutes les méthodes du navigateur que l'on désire (par exemple invalidaterect).

<technique off>
 
Maintenant, le plug-in fonctionne donc bien mieux. Il reste à régler des problèmes de son dans le jeu des didacticiels, ainsi que la musique qui parfois ne s'arrête pas lorsqu'on ferme la page sur laquelle est le plug-in (!)
 
Dès que ceux-ci seront résolus, nous posterons une nouvelle beta.
by Olivier Guillion


Most recent first
Oldest first

Top of page
Legal information Last update:  (c) Myriad