Bonjour, j'ai besoin d'aide pour régler un problème de mise à jour grpahique qui visiblement à un rapport avec la manière dont gtkmm gère les expose events.
Je monte une application de test (sous Ubuntu64Bit) qui vise à intégrer Berkelium (http://berkelium.org) dans gtk(mm) - et sera open source dés que je peu pusher le repo (problèmes d'acces depuis le boulot).
Berkelium est mis à jour (Berkelium::update()) toutes les 33 millisecondes. Il mets à jour les Berkelium::Window qui eux même envoie des messages (via fonctions virtuelles...) à des Berkelium::WindowDelegate. Celui pour l'affichage est onPaint().
Dans onPaint() je copie les pixels d'un buffer fournis. En fait on nous fournis une liste de rectangles à mettre à jour, donc je copie les pixels de ces rectangles dans une Cairo::Surface que je garde pour chaque Berkelium::Window que j'ai créé.
Mes Berkelium::WindowDelegate héritent aussi de Gtk:rawingArea. Du coup pour chaque rectangle modifié, j'appelle queue_draw_area(). De cette manière je m'attends à ce que on_expose_event() soit appelé pour chaque rectangle au moins.
J'ai d'abord surchargé on_expose_event() pour copier les rectangles depuis mon buffer vers la fenetre (en utilisant un Cairo::Context créé depuis la fenetre courante).
Ca marche, moyennant des rectangles mal placés, mais j'imagine que je dois avoir des bugs.
Ce qui me prose problème est que visiblement, on_expose_event() n'est pas appelé pour chaque mise à jour graphique, et je ne trouve pas le moyen de forcer gtkmm(Gtk::Main?) à bien mettre à jour chaque des carrés.
Par exemple, j'ai des animations flash dans les pages que je veux afficher. Ces animations ne sont mises à jour que sporadiquement, ce qui fait qu'on voit environ une frame toutes les 2 à 3 secondes. Pire : on ne voit pas la fin des animations.
Il se peut que le problème vienne de Berkelium parceque cela ne concerne quasimment que les animations en flash. Par exemple les animations en gif sont mises à jour correctement.
Mais il se peut aussi que ce soit parceque flash provoque énormément de mises à jour graphique et que cela est l'effet inverse dans la mise a jour de gtk, c'est à dire que certains events de mises à jour serait zappés.
Est-ce que quelqu'un a déjà vu ce genre de problèmes?
J'ai déjà vu quelque part qu'il valait mieu implémenter un handler connecté à un signal_expose(), ce que j'ia fait mais ne change strictement rien.
Une idée?
Partager