def draw(self): t = Clock.get_time() touches = getCurrentTouches() # draw closed touches to_delete = [] ids = [touch.id for touch in touches] for id in self.closetouches: if not id in ids: to_delete.append(id) continue touch = self.closetouches[id] value = ((t - touch.time_start) - 1) / 2. if value > 1: self.do_close() return set_color(1, 1, 1, .7) drawSemiCircle(pos=(touch.x, touch.y), inner_radius=30, outer_radius=50, slices=64, sweep_angle=value*360) # delete old touches for id in to_delete: del self.closetouches[id] # search for t in touches: if 'closeapp.invalid_for_close' in t.userdata: continue # distance < 20 if Vector(t.osxpos, t.osypos).distance(Vector(t.sx, t.sy)) > 0.015: # flag t.userdata['closeapp.invalid_for_close'] = True if t.id in self.closetouches: del self.closetouches[touch.id] return # 1s minimum if t - t.time_start < 1: if t.id in self.closetouches: del self.closetouches[t.id] return # check corner screen if t.sx < .75 or t.sy < .75: if t.id in self.closetouches: del self.closetouches[t.id] return # add touches to closed touches self.closetouches[t.id] = t
def draw(self): bubbles = self.bubbles get = self.bubbles.get info = self.text_info current = getCurrentTouches() for touch in current: uid = touch.uid bubble = get(uid, None) if not bubble: bubble = MTSpeechBubble( size=(150, 100), color=(0, 0, 0, 1), font_size=9) self.bubbles[uid] = bubble bubble.pos = touch.pos bubble.label = info(touch) bubble.dispatch('on_draw') alive = [x.uid for x in current] for uid in bubbles.keys()[:]: if uid not in alive: del bubbles[uid]