From 61910fcbe87fff4f4b3607525fdeedb5d9f05907 Mon Sep 17 00:00:00 2001 From: noisymime Date: Sun, 30 Mar 2008 11:58:56 +0000 Subject: [PATCH] A lot --- InputQueue.py | 69 ++++++++++++++++----- modules/music_player/backends/myth_music.py | 2 + modules/music_player/music_player.py | 3 +- ui_elements/image_frame.py | 16 +++-- 4 files changed, 69 insertions(+), 21 deletions(-) diff --git a/InputQueue.py b/InputQueue.py index 874a0b8..8b15e17 100644 --- a/InputQueue.py +++ b/InputQueue.py @@ -1,5 +1,7 @@ import clutter import gobject +import pygtk +import gtk ######################################################### # The input queue controls fast user input by queing up @@ -18,6 +20,10 @@ class InputQueue(gobject.GObject): gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, []) } + accelerating = False + acceleration_factor = 10 #Timelines will run at regular speed times this + acceleration_threshold = 5 #The queue size at which accleration kicks in + def __init__(self): gobject.GObject.__init__(self) @@ -31,8 +37,13 @@ class InputQueue(gobject.GObject): self.action_south = None self.action_west = None + gtk.settings_get_default().set_long_property("gtk-timeout-repeat", 5000, "gloss") + def set_timeline(self, timeline): self.timeline = timeline + if self.accelerating: + fps = self.timeline.get_speed() * self.acceleration_factor + self.timeline.set_speed(fps) self.timeline.connect('completed', self.flush_queue) def input(self, event): @@ -47,16 +58,16 @@ class InputQueue(gobject.GObject): self.emit("entering-queue") if event.keyval == clutter.keysyms.Left: - self.queue_west = self.queue_west + 1 + self.queue_west += 1 return True elif event.keyval == clutter.keysyms.Right: - self.queue_east = self.queue_east + 1 + self.queue_east += 1 return True elif event.keyval == clutter.keysyms.Down: - self.queue_south = self.queue_south + 1 + self.queue_south += 1 return True elif event.keyval == clutter.keysyms.Up: - self.queue_north = self.queue_north + 1 + self.queue_north += 1 return True #If we get to this point, we haven't handled the input, so return False @@ -70,19 +81,45 @@ class InputQueue(gobject.GObject): def flush_queue(self, data): #Consolodate north/south, east/west volumes - self.queue_north = self.queue_north - self.queue_south - self.queue_south = self.queue_south - self.queue_north - self.queue_east = self.queue_east - self.queue_west - self.queue_west = self.queue_west - self.queue_east + if self.queue_north > self.queue_south: + self.queue_north = self.queue_north - self.queue_south + self.queue_south = 0 + elif self.queue_south > self.queue_north: + self.queue_south = self.queue_south - self.queue_north + self.queue_north = 0 + if self.queue_east > self.queue_west: + self.queue_east = self.queue_east - self.queue_west + self.queue_west = 0 + elif self.queue_west > self.queue_east: + self.queue_west = self.queue_west - self.queue_east + self.queue_east = 0 - if self.queue_north > 0: - self.action_north() - if self.queue_east > 0: - self.action_east() - if self.queue_south > 0: - self.action_south() - if self.queue_west > 0: - self.action_west() + if (self.queue_north > 0) or (self.queue_east > 0) or (self.queue_south > 0) or (self.queue_west > 0): + self.timeline.connect('completed', self.flush_queue) + + absolute_queue_size = self.queue_north + self.queue_east + self.queue_south + self.queue_west + if absolute_queue_size > self.acceleration_threshold: + self.accelerating = True + else: + self.accelerating = False + + print "Queue Size: N=%s E=%s S=%s W=%s" % (self.queue_north, self.queue_east, self.queue_south, self.queue_west) + + if self.queue_north > 0: + self.queue_north -= 1 + self.action_north() + if self.queue_east > 0: + self.queue_east -= 1 + self.action_east() + if self.queue_south > 0: + self.queue_south -= 1 + self.action_south() + if self.queue_west > 0: + self.queue_west -= 1 + self.action_west() + + + return self.queue_east = 0 self.queue_south = 0 diff --git a/modules/music_player/backends/myth_music.py b/modules/music_player/backends/myth_music.py index 5c5a685..4b6a150 100644 --- a/modules/music_player/backends/myth_music.py +++ b/modules/music_player/backends/myth_music.py @@ -66,6 +66,7 @@ class Backend(gobject.GObject): def get_albums_by_artistID(self, id, no_cache = False): #Check cache if (not no_cache) and (self.cache_albums_by_artistID.has_key(str(id))): + self.emit("query-complete") return self.cache_albums_by_artistID[str(id)] #Generate some SQL @@ -99,6 +100,7 @@ class Backend(gobject.GObject): def get_songs_by_albumID(self, id, no_cache = False): #Check cache if (not no_cache) and (self.cache_songs_by_albumID.has_key(str(id))): + self.emit("query-complete") return self.cache_songs_by_albumID[str(id)] diff --git a/modules/music_player/music_player.py b/modules/music_player/music_player.py index aa41da7..76f9aa0 100644 --- a/modules/music_player/music_player.py +++ b/modules/music_player/music_player.py @@ -134,7 +134,6 @@ class Module: def update_for_albums(self, data, artist = None): - if not artist == self.artistImageRow.get_current_object(): return if self.backend.handler_is_connected(self.conn_id): self.backend.disconnect(self.conn_id) albums = self.backend.get_albums_by_artistID(artist.artistID) @@ -150,6 +149,8 @@ class Module: pixbuf = albums[0].get_image() if not pixbuf is None: self.main_img.set_pixbuf(pixbuf) + else: + self.main_img.set_pixbuf(None) clutter.threads_leave() def begin(self, glossMgr): diff --git a/ui_elements/image_frame.py b/ui_elements/image_frame.py index a99a1cc..5b86cd3 100644 --- a/ui_elements/image_frame.py +++ b/ui_elements/image_frame.py @@ -71,12 +71,20 @@ class ImageFrame(clutter.Group): return pixbuf def set_pixbuf(self, pixbuf): - pixbuf = self.resize_pixbuf(pixbuf) - self.main_pic.set_pixbuf(pixbuf) - self.main_pic.set_position(self.x, self.y) - self.main_pic.show() + if pixbuf is None: + self.main_pic.hide() + if not self.reflection is None: self.reflection.hide() + return + else: + pixbuf = self.resize_pixbuf(pixbuf) + self.main_pic.set_pixbuf(pixbuf) + self.main_pic.set_position(self.x, self.y) + self.main_pic.show() + #For the most part the Reflection texture automatically takes car of pixbuf changes + #So we only need to set the flection the first time arouns (ie self.reflection is None) if self.use_reflection: + if self.reflection is None: self.reflection = Texture_Reflection(self.main_pic) self.add(self.reflection) self.reflection.show()