diff -u -u -r1.4 artdisplay.py
--- plugins/artdisplay/artdisplay.py	3 May 2006 12:11:09 -0000	1.4
+++ plugins/artdisplay/artdisplay.py	3 May 2006 13:37:31 -0000
@@ -37,6 +37,9 @@
 ASSOCIATE = "webservices-20"
 ART_FOLDER = '~/.gnome2/rhythmbox/covers'
 
+fade_step = 0.1
+fade_step_time = 100
+
 class GnomeVFSAsyncSrc(object):  
     def __init__(self):
 	    	self.chunk = 4096
@@ -381,6 +384,7 @@
 		self.resize_id = 0
 		self.resize_in_progress = False
 		self.old_width = 0
+		self.fade_step = 0
 		entry = sp.get_playing_entry ()
 		self.playing_entry_changed (sp, entry)
 	
@@ -435,9 +439,42 @@
 		# Set the pixbuf for the entry returned from the art db
 		self.set_current_art (pixbuf)
 
-	def set_current_art (self, pixmap):
-		self.current_pixbuf = pixmap;
-		self.update_displayed_art (False);
+	def fade_art (self, old_pixbuf, new_pixbuf):
+		self.fade_step += fade_step
+
+		if self.fade_step <= 0.999:
+			# get pixbuf size
+			ow = old_pixbuf.get_width ()
+			nw = new_pixbuf.get_width ()
+			oh = old_pixbuf.get_height ()
+			nh = new_pixbuf.get_height ()
+
+			# find scale, widget size and alpha
+			ww = self.art_widget.parent.allocation.width 
+			wh = oh * ww / ow
+			sw = float(ww)/nw
+			sh = float(wh)/nh
+			alpha = int (self.fade_step * 255)
+
+			self.current_pixbuf = old_pixbuf.scale_simple (ww, wh, gtk.gdk.INTERP_NEAREST)
+			new_pixbuf.composite (self.current_pixbuf, 0, 0, ow, oh, 0, 0, sw, sh, gtk.gdk.INTERP_NEAREST, alpha)
+			self.art_widget.set_from_pixbuf (self.current_pixbuf)
+			self.art_widget.show ()
+		else:
+			self.current_pixbuf = new_pixbuf
+			self.update_displayed_art (False);
+
+		return (self.fade_step <= 0.999)
+
+	def set_current_art (self, pixbuf):
+		current_pb = self.art_widget.get_pixbuf ()
+		if current_pb is not None and pixbuf is not None:
+			self.fade_step = 0.0
+			self.fade_art (current_pb, pixbuf)
+			gobject.timeout_add (fade_step_time, self.fade_art, current_pb, pixbuf)
+		else:
+			self.current_pixbuf = pixbuf;
+			self.update_displayed_art (False);
 
 	def update_displayed_art (self, quick):
 		if self.current_pixbuf is None:
