Faster icon rotation using various cachings
[drlaunch] / src / icongrid.py
index 0278dde..3571736 100755 (executable)
@@ -110,16 +110,22 @@ class IconGrid(object):   #(gobject.GObject):
            #self.queue_draw()
            self.angle_timer_start=time.time()
            gobject.timeout_add(20, self.timerAngle)
-
+        else:
+            if self.mode=='l':
+                self.setAngle(0)
+            else:
+                self.setAngle(90)
+                
     def timerAngle(self):
-       self.queue_draw()
-
        if self.angle_timer_start==0:
-           self.angle_timer_start=time.time()
+           self.angle_timer_start=time.time()-0.05
 
        dt=time.time()-self.angle_timer_start
 
-       da=90.0*dt/0.5
+       # Duration of the rotation effect
+       rotation_time=0.5
+
+       da=90.0*dt/rotation_time
 
        if self.mode=='l':
            angle=90-da
@@ -135,7 +141,8 @@ class IconGrid(object):     #(gobject.GObject):
        else:
            ret=True
 
-       self.setAngle(angle)
+       if self.setAngle(angle):
+           self.queue_draw()
 
        if ret==False:
            self.angle_timer_start=0
@@ -186,9 +193,14 @@ class IconGrid(object):    #(gobject.GObject):
            ico.draw(cr, x2, y2)
 
     def setAngle(self, angle):
+       """ Return True/False indicating that angle has changed """
+       ret=False
        for x,y in self.icons:
            ic=self.icons.get(x,y)
-           ic.setAngle(angle)
+           if ic.setAngle(angle):
+               ret=True
+
+       return(ret)
 
     def do_expose_event(self, event):
        cr=self.window.cairo_create()