# HG changeset patch # User Ryan C. Gordon # Date 1054020791 0 # Node ID fb78cadbfeb885780791517b815be06cf389250d # Parent 477917048b91024a20adf048a51f26e2d7ab9f81 More-than-three mouse button support for Quartz target. diff -r 477917048b91 -r fb78cadbfeb8 src/video/quartz/SDL_QuartzEvents.m --- a/src/video/quartz/SDL_QuartzEvents.m Sun May 25 02:17:52 2003 +0000 +++ b/src/video/quartz/SDL_QuartzEvents.m Tue May 27 07:33:11 2003 +0000 @@ -378,6 +378,25 @@ CFRelease (rls); } + +// Try to map Quartz mouse buttons to SDL's lingo... +static int QZ_OtherMouseButtonToSDL(int button) +{ + switch (button) + { + case 0: + return(SDL_BUTTON_LEFT); // 1 + case 1: + return(SDL_BUTTON_RIGHT); // 3 + case 2: + return(SDL_BUTTON_MIDDLE); // 2 + } + + // >= 3: skip 4 & 5, since those are the SDL mousewheel buttons. + return(button + 3); +} + + static void QZ_PumpEvents (_THIS) { int firstMouseEvent; @@ -420,6 +439,7 @@ inMode: NSDefaultRunLoopMode dequeue:YES ]; if (event != nil) { + int button; unsigned int type; BOOL isForGameWin; BOOL isInGameWin; @@ -466,8 +486,7 @@ } } break; - case NSOtherMouseDown: DO_MOUSE_DOWN (SDL_BUTTON_MIDDLE); break; - case NSRightMouseDown: DO_MOUSE_DOWN (SDL_BUTTON_RIGHT); break; + case NSLeftMouseUp: if ( last_virtual_button != 0 ) { DO_MOUSE_UP (last_virtual_button); @@ -477,8 +496,19 @@ DO_MOUSE_UP (SDL_BUTTON_LEFT); } break; - case NSOtherMouseUp: DO_MOUSE_UP (SDL_BUTTON_MIDDLE); break; - case NSRightMouseUp: DO_MOUSE_UP (SDL_BUTTON_RIGHT); break; + + case NSOtherMouseDown: + case NSRightMouseDown: + button = QZ_OtherMouseButtonToSDL([ event buttonNumber ]); + DO_MOUSE_DOWN (button); + break; + + case NSOtherMouseUp: + case NSRightMouseUp: + button = QZ_OtherMouseButtonToSDL([ event buttonNumber ]); + DO_MOUSE_UP (button); + break; + case NSSystemDefined: /* Future: up to 32 "mouse" buttons can be handled.