def __init__(self, isconfig=False):
# self.__gobject_init__()
+ self.init_done=False
+
self.size=(0,0)
self.isconfig=isconfig
self.icons=None
self.lasticon=None # The last icon that got selected
+ self.draw_pending=False
+
+ self.mode=None
+
def do_realize(self, config):
self.config=config
self.icons=Icons(self.isconfig, self.config)
self.setMode('l')
- self.setSize((4,4))
+ self.setSize((8,4))
self.reloadIcons()
def connect(self, what, *args):
return(ret)
def setMode(self, mode):
+ if self.mode==mode:
+ print "same mode"
+ return
+
self.mode=mode
- if isinstance(self, gtk.Widget):
+ if not isinstance(self, gtk.Widget):
+ return
+
+ do_draw=False
+
+ try:
+ v=self.get_property('is-on-current-desktop')
+ if v:
+ do_draw=True
+ else:
+ self.draw_pending=True
+ except TypeError:
+ do_draw=True
+
+ if do_draw and self.config.getAnimate():
+ #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)
+
+ if do_draw:
+ self.queue_draw()
+
+ def timerAngle(self):
+ if self.angle_timer_start==0:
+ self.angle_timer_start=time.time()-0.05
+
+ dt=time.time()-self.angle_timer_start
+
+ # Duration of the rotation effect
+ rotation_time=0.5
+
+ da=90.0*dt/rotation_time
+
+ if self.mode=='l':
+ angle=90-da
+ else:
+ angle=da
+
+ if angle>=90:
+ angle=90
+ ret=False
+ elif angle<0:
+ angle=0
+ ret=False
+ else:
+ ret=True
+
+ if self.setAngle(angle):
self.queue_draw()
+ if ret==False:
+ self.angle_timer_start=0
+
+ return(ret)
+
def iconAt(self, x, y):
""" Get icon at coordinates x,y. X and Y are in pixels """
return(ret)
def _draw(self, cr, event):
+ self.draw_pending=False
+
w=self.config.iconsize + self.config.iconspace
for x,y in self.icons:
if self.mode=='l' or self.config.getIndiv():
continue
ico=self.icons.get(x,y)
- ico.draw(cr, x2, y2, self.mode)
+ 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)
+ if ic.setAngle(angle):
+ ret=True
+
+ return(ret)
def do_expose_event(self, event):
cr=self.window.cairo_create()
cr.clip()
+ if not self.init_done:
+ self.icons.setWindow(self.window)
+ self.init_done=True
+
self._draw(cr, event)
def setLastIcon(self, icon):
IconGrid.do_realize(self, self.config)
- if isconfig:
- maxsz=self.config.getMaxSize()
- w=maxsz[0] * (self.config.iconsize + self.config.iconspace)
- h=maxsz[1] * (self.config.iconsize + self.config.iconspace)
- else:
- w=self.size[0] * (self.config.iconsize + self.config.iconspace)
- h=self.size[1] * (self.config.iconsize + self.config.iconspace)
+ self.setSize(self.size)
+
+ def setSize(self, size):
+ IconGrid.setSize(self, size)
+
+ w=self.size[0] * (self.config.iconsize + self.config.iconspace)
+ h=self.size[1] * (self.config.iconsize + self.config.iconspace)
self.set_size_request(w, h)