X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=vid_agl.c;h=88e33a16e68e8a60971561f4af2f8063c49aec89;hb=a0b9d49361de0b03d7775381698c8df56e11844c;hp=671738800d584baf8009564c1bb5dc4f7798e1f1;hpb=64a00997d5d76bae2e6aae5e2de6ac17ea3504a9;p=xonotic%2Fdarkplaces.git diff --git a/vid_agl.c b/vid_agl.c index 67173880..88e33a16 100644 --- a/vid_agl.c +++ b/vid_agl.c @@ -60,8 +60,8 @@ CGLContextObj (*qCGLGetCurrentContext) (void); static qboolean multithreadedgl; static qboolean mouse_avail = true; static qboolean vid_usingmouse = false; +static qboolean vid_usinghidecursor = false; static qboolean vid_usingnoaccel = false; -static float mouse_x, mouse_y; static qboolean vid_isfullscreen = false; static qboolean vid_usingvsync = false; @@ -106,19 +106,21 @@ void VID_GetWindowSize (int *x, int *y, int *width, int *height) *height = scr_height; } -void VID_GrabMouse(qboolean grab) +void VID_SetMouse(qboolean fullscreengrab, qboolean relative, qboolean hidecursor) { - if (grab) + if (!mouse_avail || !window) + relative = hidecursor = false; + + if (relative) { if(vid_usingmouse && (vid_usingnoaccel != !!apple_mouse_noaccel.integer)) - VID_GrabMouse(false); // ungrab first! - if (!vid_usingmouse && mouse_avail && window) + VID_SetMouse(false, false, false); // ungrab first! + if (!vid_usingmouse) { Rect winBounds; CGPoint winCenter; SelectWindow(window); - CGDisplayHideCursor(CGMainDisplayID()); // Put the mouse cursor at the center of the window GetWindowBounds (window, kWindowContentRgn, &winBounds); @@ -159,7 +161,6 @@ void VID_GrabMouse(qboolean grab) } } - mouse_x = mouse_y = 0; vid_usingmouse = true; vid_usingnoaccel = !!apple_mouse_noaccel.integer; } @@ -183,11 +184,19 @@ void VID_GrabMouse(qboolean grab) } CGAssociateMouseAndMouseCursorPosition(true); - CGDisplayShowCursor(CGMainDisplayID()); vid_usingmouse = false; } } + + if (vid_usinghidecursor != hidecursor) + { + vid_usinghidecursor = hidecursor; + if (hidecursor) + CGDisplayHideCursor(CGMainDisplayID()); + else + CGDisplayShowCursor(CGMainDisplayID()); + } } #define GAMMA_TABLE_SIZE 256 @@ -399,7 +408,7 @@ void VID_Shutdown(void) if (context == NULL && window == NULL) return; - VID_GrabMouse(false); + VID_SetMouse(false, false, false); VID_RestoreSystemGamma(); if (context != NULL) @@ -699,6 +708,7 @@ int VID_InitMode(int fullscreen, int width, int height, int bpp, int refreshrate multithreadedgl = false; vid_isfullscreen = fullscreen; vid_usingmouse = false; + vid_usinghidecursor = false; vid_hidden = false; vid_activewindow = true; sound_active = true; @@ -965,11 +975,19 @@ void Sys_SendKeyEvents(void) case kEventMouseDragged: { HIPoint deltaPos; + HIPoint windowPos; GetEventParameter(theEvent, kEventParamMouseDelta, typeHIPoint, NULL, sizeof(deltaPos), NULL, &deltaPos); + GetEventParameter(theEvent, kEventParamWindowMouseLocation, typeHIPoint, NULL, sizeof(windowPos), NULL, &windowPos); - mouse_x += deltaPos.x; - mouse_y += deltaPos.y; + if (vid_usingmouse) + { + in_mouse_x += deltaPos.x; + in_mouse_y += deltaPos.y; + } + + in_windowmouse_x = windowPos.x; + in_windowmouse_y = windowPos.y; break; } @@ -1102,11 +1120,4 @@ void Sys_SendKeyEvents(void) void IN_Move (void) { - if (mouse_avail) - { - in_mouse_x = mouse_x; - in_mouse_y = mouse_y; - } - mouse_x = 0; - mouse_y = 0; }