I haven't tried pygame 1.7 and I haven't tried on other machines yet, but
with pygame 1.8.0release on my vista machine, anytime the mouse is in
virtual input mode (mouse grabbed and cursor hidden, or fullscreen and
cursor hidden) mouse control gets screwy on my Vista machine (seems to get
shoved to the screen edges a lot) - oddly enough though, the mouse doesn't
get screwy until a key message is processed...

Attached is a test script - with it everything seems fine at first, until a
key is pressed, then it goes bad. You can switch fullscreen, mouse grab and
mouse visible with the f, g and m keys respectively to see that the
screwiness is tied to cases where virtual mouse input is on.

I'm curious if this happens for anybody else, on other OS's, so if you try
it out, please let me know if you see the same problems.
import pygame

print pygame.version.ver

grab_mouse = True
mouse_visible = False
full_screen = False

pygame.display.init()
screen = pygame.display.set_mode((640,480))

pygame.event.set_grab(grab_mouse)
pygame.mouse.set_visible(mouse_visible)

pygame.font.init()
def_font = pygame.font.Font(None, 24)

while 1:
    status_text = "grab (g to toggle): "
    if grab_mouse:
        status_text += "ON"
    else:
        status_text += "OFF"
    status_text += "  mouse (m to toggle): "
    if mouse_visible:
        status_text += "Visible"
    else:
        status_text += "Hidden"
    status_text += "  fullscreen (f to toggle): "
    if mouse_visible:
        status_text += "YES"
    else:
        status_text += "NO"
    text_surface = def_font.render(status_text, True, (128,196,255), (0,0,0))
    screen.blit(text_surface, (0,0))
    pygame.draw.circle(screen, (255,255,255), pygame.mouse.get_pos(), 2)
    for event in pygame.event.get():
            if event.type == pygame.KEYDOWN:
                if event.key == 27:
                    raise SystemExit
                if event.key == pygame.K_g:
                    grab_mouse = not grab_mouse
                    pygame.event.set_grab(grab_mouse)
                if event.key == pygame.K_m:
                    mouse_visible = not mouse_visible
                    pygame.mouse.set_visible(mouse_visible)
                if event.key == pygame.K_f:
                    full_screen = not full_screen
                    if full_screen:
                        screen = pygame.display.set_mode((640,480), pygame.FULLSCREEN)
                    else:
                        screen = pygame.display.set_mode((640,480))
                    
    pygame.display.update()

Reply via email to