def main():
  n = manymouse.init()
  event = manymouse.Event()
  while True:
    if manymouse.poll_event(event) == 0:
      continue
    if event.type == manymouse.EVENT_RELMOTION:
      print event.device, 'EVENT_RELMOTION', event.item, event.value, event.minval, event.maxval
    elif event.type == manymouse.EVENT_ABSMOTION:
      print event.device, 'EVENT_ABSMOTION', event.item, event.value, event.minval, event.maxval
    elif event.type == manymouse.EVENT_BUTTON: 
      print event.device, 'EVENT_BUTTON', event.item, event.value, event.minval, event.maxval
    elif event.type == manymouse.EVENT_SCROLL:
      print event.device, 'EVENT_SCROLL', event.item, event.value, event.minval, event.maxval
    elif event.type == manymouse.EVENT_DISCONNECT:
      print event.device, 'EVENT_DISCONNECT', event.item, event.value, event.minval, event.maxval
def update_mice(screen_w, screen_h):
    global available_mice, mice
    event = manymouse.Event()
    while manymouse.poll_event(event) != 0:
        if event.device >= available_mice:
            continue
            
        mouse = mice[event.device]
        
        if event.type == manymouse.EVENT_RELMOTION:
            if event.item == 0:
                mouse.x += event.value
            elif event.item == 1:
                mouse.y += event.value
                
        elif event.type == manymouse.EVENT_ABSMOTION:
            val = event.value - event.minval
            maxval = event.maxval - event.minval
            if event.item == 0:
                mouse.x = (val/maxval)*screen_w
            elif event.item == 1:
                mouse.y = (val/maxval)*screen_h
                    
        elif event.type == manymouse.EVENT_BUTTON: 
            if event.item < MAX_BUTTONS: 
                if event.value:
                    mouse.buttons[event.item] = True
                else:
                    mouse.buttons[event.item] = False
            
        elif event.type == manymouse.EVENT_SCROLL:
            if event.item == 0:
                if event.value < 0:
                    mouse.scrolldowntick = pygame.time.get_ticks()
                else:
                    mouse.scrolluptick = pygame.time.get_ticks()
            elif event.item == 1:
                if event.value < 0:
                    mouse.scrolllefttick = pygame.time.get_ticks()
                else:
                    mouse.scrollrighttick = pygame.time.get_ticks()
                    
        elif event.type == manymouse.EVENT_DISCONNECT:
            mice[event.device].connected = False
def update_mice(screen_w, screen_h):
    global available_mice, mice
    event = manymouse.Event()
    while manymouse.poll_event(event) != 0:
        if event.device >= available_mice:
            continue

        mouse = mice[event.device]

        if event.type == manymouse.EVENT_RELMOTION:
            if event.item == 0:
                mouse.x += event.value
            elif event.item == 1:
                mouse.y += event.value

        elif event.type == manymouse.EVENT_ABSMOTION:
            val = event.value - event.minval
            maxval = event.maxval - event.minval
            if event.item == 0:
                mouse.x = (val / maxval) * screen_w
            elif event.item == 1:
                mouse.y = (val / maxval) * screen_h

        elif event.type == manymouse.EVENT_BUTTON:
            if event.item < MAX_BUTTONS:
                if event.value:
                    mouse.buttons[event.item] = True
                else:
                    mouse.buttons[event.item] = False

        elif event.type == manymouse.EVENT_SCROLL:
            if event.item == 0:
                if event.value < 0:
                    mouse.scrolldowntick = pygame.time.get_ticks()
                else:
                    mouse.scrolluptick = pygame.time.get_ticks()
            elif event.item == 1:
                if event.value < 0:
                    mouse.scrolllefttick = pygame.time.get_ticks()
                else:
                    mouse.scrollrighttick = pygame.time.get_ticks()

        elif event.type == manymouse.EVENT_DISCONNECT:
            mice[event.device].connected = False
 def process_events(self):
     event = manymouse.Event()
     
     while manymouse.poll_event(event) != 0:
         if event.device >= len(self.mice):
             continue
             
         mouse = self.mice[event.device]
         pgevent = None
         
         if event.type == manymouse.EVENT_RELMOTION:
             delta_x = delta_y = 0
             if event.item == 0:
                 mouse.x += event.value
                 delta_x = event.value
             elif event.item == 1:
                 mouse.y += event.value
                 delta_y = event.value
             pgevent = pygame.event.Event(pygame.locals.USEREVENT, subtype=MOUSERELMOTION, delta=(delta_x, delta_y), mouse=mouse)
                 
         elif event.type == manymouse.EVENT_ABSMOTION:
             val = event.value - event.minval
             maxval = event.maxval - event.minval
             if event.item == 0:
                 mouse.x = (val/maxval)*mouse.xscale
             elif event.item == 1:
                 mouse.y = (val/maxval)*mouse.yscale
             pgevent = pygame.event.Event(pygame.locals.USEREVENT, subtype=MOUSEABSMOTION, pos=(mouse.x, mouse.y), mouse=mouse)
                     
         elif event.type == manymouse.EVENT_BUTTON: 
             if event.item < MAX_BUTTONS: 
                 if event.value:
                     if not mouse.buttons[event.item]:
                         pgevent = pygame.event.Event(pygame.locals.USEREVENT, subtype=MOUSEBUTTONDOWN, button=event.item, mouse=mouse)
                     mouse.buttons[event.item] = True
                 else:
                     if mouse.buttons[event.item]:
                         pgevent = pygame.event.Event(pygame.locals.USEREVENT, subtype=MOUSEBUTTONUP, button=event.item, mouse=mouse)
                     mouse.buttons[event.item] = False
             
         elif event.type == manymouse.EVENT_SCROLL:
             if event.item == 0:
                 if event.value < 0:
                     d = DOWN
                 else:
                     d = UP
                     mouse.scrollticks[d] = pygame.time.get_ticks()
             elif event.item == 1:
                 if event.value < 0:
                     d = LEFT
                     mouse.scrollticks[d] = pygame.time.get_ticks()
                 else:
                     d = RIGHT
                     mouse.scrollticks[d] = pygame.time.get_ticks()
             pgevent = pygame.event.Event(pygame.locals.USEREVENT, subtype=MOUSESCROLL, dir=d, mouse=mouse)
                     
         elif event.type == manymouse.EVENT_DISCONNECT:
             mice[event.device].connected = False
             pgevent = pygame.event.Event(pygame.locals.USEREVENT, subtype=MOUSEDISCONNECT, num=event.device, mouse=mouse)
             
         if pgevent == None:
             print 'No pygame event generated by manymouse event'
         else:
             pygame.event.post(pgevent)
    def process_events(self):
        event = manymouse.Event()

        while manymouse.poll_event(event) != 0:
            if event.device >= len(self.mice):
                continue

            mouse = self.mice[event.device]
            pgevent = None

            if event.type == manymouse.EVENT_RELMOTION:
                delta_x = delta_y = 0
                if event.item == 0:
                    mouse.x += event.value
                    delta_x = event.value
                elif event.item == 1:
                    mouse.y += event.value
                    delta_y = event.value
                pgevent = pygame.event.Event(
                    pygame.locals.USEREVENT, subtype=MOUSERELMOTION, delta=(delta_x, delta_y), mouse=mouse
                )

            elif event.type == manymouse.EVENT_ABSMOTION:
                val = event.value - event.minval
                maxval = event.maxval - event.minval
                if event.item == 0:
                    mouse.x = (val / maxval) * mouse.xscale
                elif event.item == 1:
                    mouse.y = (val / maxval) * mouse.yscale
                pgevent = pygame.event.Event(
                    pygame.locals.USEREVENT, subtype=MOUSEABSMOTION, pos=(mouse.x, mouse.y), mouse=mouse
                )

            elif event.type == manymouse.EVENT_BUTTON:
                if event.item < MAX_BUTTONS:
                    if event.value:
                        if not mouse.buttons[event.item]:
                            pgevent = pygame.event.Event(
                                pygame.locals.USEREVENT, subtype=MOUSEBUTTONDOWN, button=event.item, mouse=mouse
                            )
                        mouse.buttons[event.item] = True
                    else:
                        if mouse.buttons[event.item]:
                            pgevent = pygame.event.Event(
                                pygame.locals.USEREVENT, subtype=MOUSEBUTTONUP, button=event.item, mouse=mouse
                            )
                        mouse.buttons[event.item] = False

            elif event.type == manymouse.EVENT_SCROLL:
                if event.item == 0:
                    if event.value < 0:
                        d = DOWN
                    else:
                        d = UP
                        mouse.scrollticks[d] = pygame.time.get_ticks()
                elif event.item == 1:
                    if event.value < 0:
                        d = LEFT
                        mouse.scrollticks[d] = pygame.time.get_ticks()
                    else:
                        d = RIGHT
                        mouse.scrollticks[d] = pygame.time.get_ticks()
                pgevent = pygame.event.Event(pygame.locals.USEREVENT, subtype=MOUSESCROLL, dir=d, mouse=mouse)

            elif event.type == manymouse.EVENT_DISCONNECT:
                mice[event.device].connected = False
                pgevent = pygame.event.Event(
                    pygame.locals.USEREVENT, subtype=MOUSEDISCONNECT, num=event.device, mouse=mouse
                )

            if pgevent == None:
                print "No pygame event generated by manymouse event"
            else:
                pygame.event.post(pgevent)