ménage.
[minwii.git] / src / app / widgets / cursors.py
index 9315211..041c0fb 100755 (executable)
@@ -29,7 +29,6 @@ class WarpingCursor(pygame.sprite.DirtySprite, EventHandlerMixin):
     
     def __init__(self, theme='black', duration=50, blinkMode=True):
         pygame.sprite.DirtySprite.__init__(self)
-        pygame.mouse.set_visible(False)
         imagesPath, images = WarpingCursor._get_theme_images(theme)
         flashImage = images.pop(images.index('flash.png'))
         flashImagePath = os.path.sep.join([imagesPath, flashImage]) 
@@ -48,17 +47,29 @@ class WarpingCursor(pygame.sprite.DirtySprite, EventHandlerMixin):
         self.duration = duration
         
         self.image = self.images[0]
-        self.rect = pygame.Rect((-self.width/2,-self.height/2), (self.width, self.height))
+        # workarround cursor alignement problem
+        pygame.event.set_blocked(pygame.MOUSEMOTION)
+        pygame.mouse.set_pos(pygame.mouse.get_pos())
+        pygame.event.set_allowed(pygame.MOUSEMOTION)
+        # ---
+        x, y = pygame.mouse.get_pos()
+        left = x - self.width / 2
+        top = y - self.height / 2
+        self.rect = pygame.Rect((left, top), (self.width, self.height))
         
         self.blinkMode = blinkMode
         self._startBlink()
-            
+    
     def _startBlink(self) :
         if self.blinkMode :
             self._blinking = True
             pygame.time.set_timer(TIMEOUT, self.duration)
             self.iterator = self.iterImages()
     
+    def _stopBlink(self) :
+        if self.blinkMode :
+            pygame.time.set_timer(TIMEOUT, 0)
+            
     def iterImages(self) :
         for img in cycle(self.images) :
             yield img