Author: duncan
Date: Fri Feb 1 14:56:03 2008
New Revision: 10321
Log:
No Freevo screensaver crashed after a week, so this is looking okay
Modified:
branches/rel-1-7/freevo/src/plugins/screensaver/__init__.py
branches/rel-1-7/freevo/src/plugins/screensaver/balls.py
branches/rel-1-7/freevo/src/plugins/screensaver/bouncing_freevo.py
Modified: branches/rel-1-7/freevo/src/plugins/screensaver/__init__.py
==============================================================================
--- branches/rel-1-7/freevo/src/plugins/screensaver/__init__.py (original)
+++ branches/rel-1-7/freevo/src/plugins/screensaver/__init__.py Fri Feb 1
14:56:03 2008
@@ -74,6 +74,7 @@
('SCREENSAVER_CYCLE_TIME', 60, '# of seconds to run a
screensaver before starting another saver.')
]
+
def eventhandler(self, event = None, menuw=None, arg=None):
"""
eventhandler to handle the events. Always return False since we
@@ -99,18 +100,20 @@
if not event.name == 'IDENTIFY_MEDIA':
self.last_event = time.time()
- if self.screensaver_showing :
+ if self.screensaver_showing:
self.stop_saver()
return True
return False
+
def poll(self):
#_debug_("Saver got polled %f" % time.time())
time_diff = time.time() - self.last_event
if not self.screensaver_showing and time_diff > self.start_delay :
rc.post_event(Event("SCREENSAVER_START"))
+
def start_saver (self):
_debug_("start screensaver")
self.screensaver_showing = True
@@ -123,11 +126,13 @@
self.thread = threading.Thread(target =self.__run__)
self.thread.start()
+
def stop_saver (self):
_debug_("stop screensaver")
self.stop_screensaver = True
self.thread.join()
+
def __run__(self):
_debug_('Screensaver thread started')
current_saver = None
@@ -161,6 +166,7 @@
osd.update()
_debug_('Screensaver thread stopped')
+
def __run_screensaver__(self, screensaver):
_debug_('Running %s' % screensaver.plugin_name)
try:
Modified: branches/rel-1-7/freevo/src/plugins/screensaver/balls.py
==============================================================================
--- branches/rel-1-7/freevo/src/plugins/screensaver/balls.py (original)
+++ branches/rel-1-7/freevo/src/plugins/screensaver/balls.py Fri Feb 1
14:56:03 2008
@@ -35,8 +35,10 @@
# freevo modules
import config
+import osd
from plugins.screensaver import ScreenSaverPlugin
+osd = osd.get_singleton()
class PluginInterface(ScreenSaverPlugin):
"""
@@ -49,9 +51,11 @@
self.fps = config.BALLS_FPS
def config(self):
- return [ ('BALLS_FPS', 25, 'Frames per second'),
- ('BALLS_MAX_BALLS', 100, 'Maximum number of balls'),
- ('BALLS_MIN_BALLS', 1, 'Minimum number of balls')]
+ return [
+ ('BALLS_FPS', 25, 'Frames per second'),
+ ('BALLS_MAX_BALLS', 100, 'Maximum number of balls'),
+ ('BALLS_MIN_BALLS', 1, 'Minimum number of balls'),
+ ]
def start(self, width, height):
@@ -76,19 +80,23 @@
def draw(self, screen):
black = (0,0,0)
dirty = []
- screen.lock()
- for ball in self.balls:
- ball.clear(screen, black)
- dirty.append(ball.rectangle())
-
- for ball in self.balls:
- ball.update(self.width, self.height, 0.9, 0.9)
- ball.draw(screen)
- dirty.append(ball.rectangle())
+ osd.mutex.acquire()
+ try:
+ screen.unlock()
+ for ball in self.balls:
+ ball.clear(screen, black)
+ dirty.append(ball.rectangle())
+ for ball in self.balls:
+ ball.update(self.width, self.height, 0.9, 0.9)
+ ball.draw(screen)
+ dirty.append(ball.rectangle())
+ screen.unlock()
+ finally:
+ osd.mutex.release()
- screen.unlock()
class Ball:
+
def __init__(self):
self.name = "ball"
self.x = 100.0
@@ -106,14 +114,17 @@
self.stopped_count = 0
self.kick_threshold = 50
+
def draw(self, screen):
pygame.draw.ellipse(screen, self.color, (int(self.x), int(self.y),
self.w, self.h))
pygame.draw.ellipse(screen, (255,255,255), (int(self.x), int(self.y),
self.w, self.h), 1)
+
def clear(self, screen, color):
pygame.draw.ellipse(screen, color, (int(self.x), int(self.y), self.w,
self.h))
pygame.draw.ellipse(screen, color, (int(self.x), int(self.y), self.w,
self.h), 1)
+
def update(self, width, height, walldeccel, floordeccel):
# Update ball velocity
self.hspeed = self.hspeed + self.haccel
@@ -166,5 +177,6 @@
else:
self.stopped_count = 0
+
def rectangle(self):
return (int(self.x), int(self.y), self.w, self.h)
Modified: branches/rel-1-7/freevo/src/plugins/screensaver/bouncing_freevo.py
==============================================================================
--- branches/rel-1-7/freevo/src/plugins/screensaver/bouncing_freevo.py
(original)
+++ branches/rel-1-7/freevo/src/plugins/screensaver/bouncing_freevo.py Fri Feb
1 14:56:03 2008
@@ -71,27 +71,31 @@
def draw(self, screen):
- black = (0,0,0)
- dirty = []
- # Clear the old image
- screen.fill(black, (self.x,self.y, self.image_width,
self.image_height))
-
- # Move the image
- self.x += self.x_speed
- if self.x < 0:
- self.x = 0
- self.x_speed *= -1
- if (self.x + self.image_width) > self.width:
- self.x = self.width - self.image_width
- self.x_speed *= -1
-
- self.y += self.y_speed
- if self.y < 0:
- self.y = 0
- self.y_speed *= -1
-
- if (self.y + self.image_height) > self.height:
- self.y = self.height - self.image_height
- self.y_speed *= -1
-
- screen.blit(self.image, (self.x, self.y))
+ osd.mutex.acquire()
+ try:
+ black = (0,0,0)
+ dirty = []
+ # Clear the old image
+ screen.fill(black, (self.x,self.y, self.image_width,
self.image_height))
+
+ # Move the image
+ self.x += self.x_speed
+ if self.x < 0:
+ self.x = 0
+ self.x_speed *= -1
+ if (self.x + self.image_width) > self.width:
+ self.x = self.width - self.image_width
+ self.x_speed *= -1
+
+ self.y += self.y_speed
+ if self.y < 0:
+ self.y = 0
+ self.y_speed *= -1
+
+ if (self.y + self.image_height) > self.height:
+ self.y = self.height - self.image_height
+ self.y_speed *= -1
+
+ screen.blit(self.image, (self.x, self.y))
+ finally:
+ osd.mutex.release()
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog