2011-02-11 6 views
0

Salutations,GTK # et PixbufAnimation itération

Je vais avoir un problème à l'aide d'un Gdk.PixbufAnimationIter PixbufAnimation. Le code ressemble à ceci:

Gdk.PixbufAnimation animation = new Gdk.PixbufAnimation(System.IO.Path.Combine([filepath], [filename])); 
Gdk.PixbufAnimationIter iter = animation.GetIter([Current Time as IntPtr]); 

Voici ce que je lis sur PixbufAnimation.Iter:

start_time est le temps de démarrage spécifié comme un flotteur en sortie de la fonction Python time.time(). start_time marques le début de l'animation lecture.

GTK # n'a pas la fonction time.time(), et je l'ai essayé ce qui suit:

long StartTime = DateTime.Now.Millisecond; 
IntPtr SysTime = new IntPtr (&StartTime); 
Gdk.PixbufAnimationIter iter = animation.GetIter(SysTime); 

Mais cela ne semble pas récupérer tout temps de manière cohérente. Les nombres générés à partir de cela semblent très aléatoires, et tirent probablement de la mauvaise adresse en mémoire (seulement une supposition, ne me citez pas dessus).

J'ai aussi lu ce d'une autre documentation de PixbufAnimation:

Comme un raccourci, si start_time est NULL, le résultat de g_get_current_time() sera automatiquement utilisé.

Cependant, le compilateur refuse d'autoriser une valeur NULL pour IntPtr.

J'ai aussi lu que "Current Time" n'est utilisé que si vous essayez de jouer avec l'animation, par exemple en accélérant ou en ralentissant l'affichage de l'animation.

Quelqu'un peut-il m'aider?

Répondre

2

Si vous passez IntPtr.Zero à la méthode GetIter, cela devrait être la même chose que de passer NULL à la méthode C. Cette API manque un peu de la liaison, pour être honnête, car le paramètre start_time est censé être un GTimeVal qui n'est pas encore consolidé. Vous pourriez certainement déposer un bug pour cela et nous pouvons étendre l'API. Nous pourrions probablement utiliser une surcharge GetIter(), par exemple, pour gérer ce scénario plus proprement.

+0

Merci, et la chose amusante était que j'utilisais initialement IntPtr.Zero juste pour obtenir la compilation de mon code, mais j'ai senti que mon animation ne s'affichait pas correctement à cause de cela. Cependant, ce n'est pas le cas. Par le biais du débogage, je peux voir que l'animation fonctionne correctement et saisit les pixbufs et les délais corrects, mais le pixbuf ne peut pas être redessiné sur la fenêtre après l'initialisation. Il semble que si vous n'utilisez pas Gtk.Image ou Gdk.Image, vous avez vraiment très peu d'options pour gérer les animations, et encore moins les animations qui nécessitent l'ajout d'une couleur alpha. – MrFreeman