import pygame
from sys import modules
-events = ['TIMEOUT',
- 'NOTEON',
+events = ['NOTEON',
'NOTEOFF',
'NOTEEND',
'COLDOWN',
self = modules[__name__]
for i, name in enumerate(events) :
- eventType = pygame.USEREVENT+i
+ eventType = pygame.USEREVENT + 1 + i
eventNames[eventType] = name
setattr(self, name, eventType)
$URL$
"""
-from events import TIMEOUT, COLOVER, eventNames
+from events import COLOVER, eventNames
from event_pprinters import pprinters
import sys
import pygame
hiddenEvents = {pygame.MOUSEMOTION:True,
pygame.MOUSEBUTTONDOWN:True,
pygame.MOUSEBUTTONUP:True,
- TIMEOUT:True,
#COLOVER:True,
}
import pygame
import os
+from threading import Thread
+import time
from eventutils import EventHandlerMixin, event_handler
-from events import TIMEOUT
from itertools import cycle
class WarpingCursor(pygame.sprite.DirtySprite, EventHandlerMixin):
self.blinkMode = blinkMode
self._startBlink()
+ def __del__(self) :
+ if hasattr(self, 'timer') :
+ try : self.timer.stop()
+ except : pass
+
def _startBlink(self) :
if self.blinkMode :
self._blinking = True
- pygame.time.set_timer(TIMEOUT, self.duration)
self.iterator = self.iterImages()
+ self.timer = ForeverTimer(self.duration, self.loadNext)
+ self.timer.start()
def _stopBlink(self) :
if self.blinkMode :
- pygame.time.set_timer(TIMEOUT, 0)
+ self.timer.stop()
def iterImages(self) :
for img in cycle(self.images) :
yield img
- @event_handler(TIMEOUT)
- def loadNext(self, event) :
+ def loadNext(self) :
if self._blinking :
self.dirty = 1
self.image = self.iterator.next()
self.dirty = 1
if self.blinkMode :
self._blinking = True
- self.loadNext(event)
else :
self.image = self.images[0]
x, y = pos
rx, ry = self.rect.centerx, self.rect.centery
self.rect.move_ip(x-rx, y-ry)
+
+
+class ForeverTimer(Thread) :
+ def __init__(self, duration, func, *args, **kw) :
+ Thread.__init__(self)
+ self.duration = duration / 1000.
+ self.func = func
+ self.args = args
+ self.kw = kw
+ self.running = True
+
+ def run(self) :
+ while self.running :
+ self.func(*self.args, **self.kw)
+ time.sleep(self.duration)
+
+ def stop(self) :
+ self.running = False
\ No newline at end of file