def test_keypresses(self): if not self.is_interactive: py.test.skip("interactive test only") RSDL.EnableUNICODE(1) print print "Keys pressed in the Pygame window should be printed below." print " Use Escape to quit." event = lltype.malloc(RSDL.Event, flavor='raw') try: while True: ok = RSDL.WaitEvent(event) assert rffi.cast(lltype.Signed, ok) == 1 c_type = rffi.getintfield(event, 'c_type') if c_type == RSDL.KEYDOWN: p = rffi.cast(RSDL.KeyboardEventPtr, event) if rffi.getintfield(p.c_keysym, 'c_sym') == RSDL.K_ESCAPE: print 'Escape key' break char = rffi.getintfield(p.c_keysym, 'c_unicode') if char != 0: print 'Key:', unichr(char).encode('utf-8') else: print 'Some special key' else: print '(event of type %d)' % c_type finally: lltype.free(event, flavor='raw')
def test_mousemove(self): if not self.is_interactive: py.test.skip("interactive test only") print print "Move the Mouse up and down:" print " Use Escape to quit." event = lltype.malloc(RSDL.Event, flavor="raw") directions = [False]*4 try: while True: ok = RSDL.WaitEvent(event) assert rffi.cast(lltype.Signed, ok) == 1 c_type = rffi.getintfield(event, "c_type") if c_type == RSDL.MOUSEMOTION: m = rffi.cast(RSDL.MouseMotionEventPtr, event) assert rffi.getintfield(m, "c_x") >= 0 assert rffi.getintfield(m, "c_y") >= 0 print rffi.getintfield(m, "c_xrel") directions[0] |= rffi.getintfield(m, "c_xrel")>0 directions[1] |= rffi.getintfield(m, "c_xrel")<0 directions[2] |= rffi.getintfield(m, "c_yrel")>0 directions[3] |= rffi.getintfield(m, "c_yrel")<0 if False not in directions: break elif c_type == RSDL.KEYUP: p = rffi.cast(RSDL.KeyboardEventPtr, event) if rffi.getintfield(p.c_keysym, 'c_sym') == RSDL.K_ESCAPE: print " test manually aborted" py.test.fail(" mousemovement test aborted") break finally: lltype.free(event, flavor='raw')
def update(self, event): # fetch the event from sdl ok = RSDL.WaitEvent(event) assert rffi.cast(lltype.Signed, ok) == 1 type = rffi.getintfield(event, 'c_type') if type == RSDL.KEYDOWN: self.create_called_key() self.on_key_down() elif type == RSDL.KEYUP: self.create_called_key() self.on_key_up()
def entry_point(argv=None): RSDL.Init(RSDL.INIT_VIDEO) >= 0 screen = RSDL.SetVideoMode(WIDTH, HEIGHT, 32, 0) event = lltype.malloc(RSDL.Event, flavor='raw') paintpattern = 0 try: while True: ok = RSDL.WaitEvent(event) assert rffi.cast(lltype.Signed, ok) == 1 c_type = rffi.getintfield(event, 'c_type') if c_type == RSDL.KEYDOWN: p = rffi.cast(RSDL.KeyboardEventPtr, event) if rffi.getintfield(p.c_keysym, 'c_sym') == RSDL.K_ESCAPE: print 'Escape key' break paintpattern += 1 update_screen(screen, paintpattern) finally: lltype.free(event, flavor='raw') return 0
def test_mousebutton_wheel(self): if not self.is_interactive: py.test.skip("interactive test only") print print "Press the given MouseButtons:" print " Use Escape to pass tests." event_tests = [("left button", RSDL.BUTTON_LEFT), ("middle button", RSDL.BUTTON_MIDDLE), ("right button", RSDL.BUTTON_RIGHT), ("scroll up", RSDL.BUTTON_WHEELUP), ("scroll down", RSDL.BUTTON_WHEELDOWN)] test_success = [] event = lltype.malloc(RSDL.Event, flavor='raw') try: for button_test in event_tests: print " press %s:" % button_test[0] while True: ok = RSDL.WaitEvent(event) assert rffi.cast(lltype.Signed, ok) == 1 c_type = rffi.getintfield(event, 'c_type') if c_type == RSDL.MOUSEBUTTONDOWN: pass elif c_type == RSDL.MOUSEBUTTONUP: b = rffi.cast(RSDL.MouseButtonEventPtr, event) if rffi.getintfield(b, 'c_button') == button_test[1]: test_success.append(True) break elif c_type == RSDL.KEYUP: p = rffi.cast(RSDL.KeyboardEventPtr, event) if rffi.getintfield(p.c_keysym, 'c_sym') == RSDL.K_ESCAPE: test_success.append(False) print " manually aborted" break #break if False in test_success: py.test.fail("") finally: lltype.free(event, flavor='raw')