From 3c7326e4824518df22a1908b5a02ddab6f503c6a Mon Sep 17 00:00:00 2001
From: Yann Leboulanger <asterix@lagaule.org>
Date: Thu, 1 Jul 2004 15:42:39 +0000
Subject: [PATCH] better ImageCellRenderer (it takes less CPU)

---
 plugins/gtkgui/gtkgui.py | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/plugins/gtkgui/gtkgui.py b/plugins/gtkgui/gtkgui.py
index f9fddfc37f..c6825a140a 100644
--- a/plugins/gtkgui/gtkgui.py
+++ b/plugins/gtkgui/gtkgui.py
@@ -53,15 +53,23 @@ class ImageCellRenderer(gtk.GenericCellRenderer):
 	def do_get_property(self, pspec):
 		return getattr(self, pspec.name)
 
+	def func(self, model, path, iter, (image, tree)):
+		if model.get_value(iter, 0) == image:
+			self.redraw = 1
+			cell_area = tree.get_cell_area(path, tree.get_column(0))
+			tree.queue_draw_area(cell_area.x, cell_area.y, cell_area.width, cell_area.height)
+
 	def animation_timeout(self, tree, image):
 		if image.get_storage_type() == gtk.IMAGE_ANIMATION:
+			self.redraw = 0
 			image.get_data('iter').advance()
-			gobject.timeout_add(image.get_data('iter').get_delay_time(), self.animation_timeout, tree, image)
-		tree.queue_draw()
-#		tree.queue_draw_area(16,32,16,340)
-#		tree.queue_draw_area(draw_rect.x, \
-#			draw_rect.y, pix.get_width(), pix.get_height())
-	
+			model = tree.get_model()
+			model.foreach(self.func, (image, tree))
+			if self.redraw:
+				gobject.timeout_add(image.get_data('iter').get_delay_time(), self.animation_timeout, tree, image)
+			else:
+				image.set_data('iter', None)
+				
 	def on_render(self, window, widget, background_area,cell_area, \
 		expose_area, flags):
 		pix_rect = gtk.gdk.Rectangle()
-- 
GitLab