2010-10-04 18 views
3

J'essaye de dessiner et d'animer avec SWT en utilisant PaintListeners. Je voudrais influencer le timing de l'animation, donc j'ai regardé loin et sans pouvoir trouver quoi que ce soit expliquant où et comment les PaintEvents sont générés et comment influencer cela, par exemple en imposant un framerate ou en envoyant le PaintEvent uniquement aux widgets de cetrain.D'où vient le SWT PaintEvent et comment l'influencer

Alors, comment cela peut-il être fait? Et, devrait-il être fait du tout? - ne rien trouver sur ce sujet suggère qu'il pourrait y avoir un meilleur moyen. PaintEvents sont générés par SWT pour vous chaque fois que cela est nécessaire.

Répondre

3

Par exemple, la première fois qu'un widget est affiché ou après qu'un widget est redevenu visible parce qu'une fenêtre a été déplacée.

Vous pouvez forcer l'événement de peinture pour se produire sur un contrôle à l'aide:

control.redraw(); 
control.update(); 

Voir ici: http://help.eclipse.org/helios/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/widgets/Control.html#redraw()

+0

Merci, im au courant de la 'redessiner()' et «mise à jour() méthodes Si je comprends bien l'API, la première marque juste le wiget pour le traitement quand la prochaine demande de douleur vient et la seconde force toutes les demandes en attente à être traitées. Aucun d'eux n'a d'influence sur la génération des demandes. Donc, cela ne répond pas à ma question. Peut-être pourriez-vous élaborer sur votre première partie "générée par SWT" et "chaque fois que c'est nécessaire". Par quelle partie de SWT? Et comment le besoin est-il déterminé? – kostja

+0

@kostja Je pense que SWT ne génère pas lui-même ces événements de peinture mais s'appuie sur le système de fenêtrage sous-jacent (motif, gtk ou Windows). Pourquoi le redessin/mise à jour ne correspond pas à vos besoins? –

+0

Je veux réaliser des framerate cohérents sur différents systèmes, donc j'ai pensé qu'une bonne idée serait de mettre la main sur la génération de PaintEvent et de la contrôler avec timerExec() ou similaire. Peut-être qu'il y a une meilleure façon de le faire? – kostja