# powerbar # joe, 2/01/2014 import appuifw as A import graphics as G class Keyboard(object): def __init__(self,onevent=lambda:None): self._keyboard_state={} self._downs={} self._onevent=onevent def handle_event(self,event): if event['type']==3: code=event['scancode'] if not self.is_down(code): self._downs[code]=self._downs.get(code,0)+1 self._keyboard_state[code]=1 elif event['type']==2: self._keyboard_state[event['scancode']]=0 self._onevent() def is_down(self,scancode): return self._keyboard_state.get(scancode,0) def pressed(self,scancode): if self._downs.get(scancode,0): self._downs[scancode]-=1 return True return False def release(self,scancode): if self._downs.get(scancode,0): self._downs[scancode]-=2 return True return False class Bar: def __init__(self): self.w,self.max=10,150 self.v=0 def update(self): self.v+=1 if self.v>self.max-1:self.v=self.max def full(self): self.v=0 def draw(self,g): px,py=5,H-5 g.rectangle((px-1,py-self.max-1,px+self.w+1,py+1),0xffffff) g.rectangle((px,py-(self.max-self.v),px+self.w,py),fill=0x00ee00) class App: def __init__(self): self.run=0 A.app.screen='full' self.c = A.Canvas(redraw_callback=self.redraw,event_callback=kb.handle_event) A.app.body=self.c A.app.exit_key_handler = self.stop def stop(self): self.run=0 def redraw(self,x): if bg: self.c.blit(bg) def play(self): self.run=1 while self.run: bg.clear(0) bg.text((25,H-8),u'Pow: %s' %(bar.v,'Maximum')[bar.v==bar.max],0xffffff) bar.draw(bg) self.redraw(0) A.e32.ao_sleep(1e-04) if kb.is_down(0x38): bar.update() elif kb.release(0x38): bar.full() W,H=G.sysinfo.display_pixels() bg=G.Image.new((W,H)) kb=Keyboard() bar=Bar() App().play()