Mercurial > sdl-ios-xcode
diff src/video/cocoa/SDL_cocoakeyboard.m @ 4673:c17ac64abb70
Fixed the code so we receive Cocoa touch events
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Wed, 28 Jul 2010 23:32:13 -0700 |
parents | 1f0e8f6417d9 |
children | c24ba2cc9583 |
line wrap: on
line diff
--- a/src/video/cocoa/SDL_cocoakeyboard.m Tue Jul 27 18:14:09 2010 +0400 +++ b/src/video/cocoa/SDL_cocoakeyboard.m Wed Jul 28 23:32:13 2010 -0700 @@ -26,17 +26,11 @@ #include "../../events/SDL_keyboard_c.h" #include "../../events/scancodes_darwin.h" -//Touch Code -#include "../../events/SDL_touch_c.h" -#include "SDL_cocoatouch.h" - #include <Carbon/Carbon.h> //#define DEBUG_IME NSLog #define DEBUG_IME -#define DEBUG_TOUCH NSLog - #ifndef NX_DEVICERCTLKEYMASK #define NX_DEVICELCTLKEYMASK 0x00000001 #endif @@ -71,7 +65,6 @@ } - (void) doCommandBySelector:(SEL)myselector; - (void) setInputRect:(SDL_Rect *) rect; -- (void) handleTouches:(cocoaTouchType)type WithEvent:(NSEvent*) event; @end @implementation SDLTranslatorResponder @@ -198,83 +191,6 @@ return [NSArray array]; } -// Touch Code Begins ----------- - -- (id)initWithFrame:(CGRect)frame { - if (self = [super initWithFrame:frame]) { - [self setAcceptsTouchEvents:YES]; - [self setWantsRestingTouches:YES]; - DEBUG_TOUCH(@"Initializing Cocoa Touch System...."); - - } - return self; -} - -//Not an API function -- (void)handleTouches:(cocoaTouchType)type WithEvent:(NSEvent *)event { - NSSet *touches = [event touchesMatchingPhase:NSTouchPhaseBegan inView:self]; - - NSEnumerator *enumerator = [touches objectEnumerator]; - NSTouch *touch = (NSTouch*)[enumerator nextObject]; - while (touch) { - long touchId = (long)[touch device]; - if(!SDL_GetTouchIndex(touchId)) { - if(Cocoa_AddTouch(touch) < 0) continue; - } - float x = [touch normalizedPosition].x; - float y = [touch normalizedPosition].y; - long fingerId = (long)[touch identity]; - switch (type) { - case COCOA_TOUCH_DOWN: - SDL_SendFingerDown(touchId,fingerId, - SDL_TRUE,x,y,1); - break; - case COCOA_TOUCH_UP: - case COCOA_TOUCH_CANCELLED: - SDL_SendFingerDown(touchId,fingerId, - SDL_FALSE,x,y,1); - case COCOA_TOUCH_MOVE: - SDL_SendTouchMotion(touchId,fingerId, - SDL_FALSE,x,y,1); - } - - touch = (NSTouch*)[enumerator nextObject]; - } -} - -- (void)touchesBeganWithEvent:(NSEvent *)event { - DEBUG_TOUCH(@"Finger Down"); - - [self handleTouches: COCOA_TOUCH_DOWN WithEvent: event]; - - //Documentation said to call super, but examples do not - //[super touchesBeganWithEvent:event] -} -- (void)touchesMovedWithEvent:(NSEvent *)event { - DEBUG_TOUCH(@"Finger Moved"); - - [self handleTouches: COCOA_TOUCH_MOVE WithEvent: event]; - - //[super touchesMovedWithEvent:event] -} -- (void)touchesEndedWithEvent:(NSEvent *)event { - DEBUG_TOUCH(@"Finger Up"); - - [self handleTouches: COCOA_TOUCH_UP WithEvent: event]; - - //[super touchesEndedWithEvent:event] -} -- (void)touchesCancelledWithEvent:(NSEvent *)event { - DEBUG_TOUCH(@"Finger Cancelled"); - - [self handleTouches: COCOA_TOUCH_CANCELLED WithEvent: event]; - - //[super touchesCancelledWithEvent:event] -} - -//Touch Code Ends -------------- - - @end /* This is the original behavior, before support was added for @@ -712,14 +628,13 @@ * it to the front most window's content view */ if (!data->fieldEdit) { data->fieldEdit = - [[SDLTranslatorResponder alloc] initWithFrame: NSMakeRect(0.0, 0.0, 0.0, 0.0)]; - DEBUG_TOUCH(@"Accepts Touch events? %i",[data->fieldEdit acceptsTouchEvents]); + [[SDLTranslatorResponder alloc] initWithFrame: NSMakeRect(0.0, 0.0, 0.0, 0.0)]; } if (![[data->fieldEdit superview] isEqual: parentView]) { // DEBUG_IME(@"add fieldEdit to window contentView"); - [data->fieldEdit removeFromSuperview]; + [data->fieldEdit removeFromSuperview]; [parentView addSubview: data->fieldEdit]; [[NSApp keyWindow] makeFirstResponder: data->fieldEdit]; } @@ -776,14 +691,14 @@ if (![event isARepeat]) { /* See if we need to rebuild the keyboard layout */ UpdateKeymap(data); + } - SDL_SendKeyboardKey(SDL_PRESSED, code); + SDL_SendKeyboardKey(SDL_PRESSED, code); #if 1 - if (code == SDL_SCANCODE_UNKNOWN) { - fprintf(stderr, "The key you just pressed is not recognized by SDL. To help get this fixed, report this to the SDL mailing list <sdl@libsdl.org> or to Christian Walther <cwalther@gmx.ch>. Mac virtual key code is %d.\n", scancode); - } + if (code == SDL_SCANCODE_UNKNOWN) { + fprintf(stderr, "The key you just pressed is not recognized by SDL. To help get this fixed, report this to the SDL mailing list <sdl@libsdl.org> or to Christian Walther <cwalther@gmx.ch>. Mac virtual key code is %d.\n", scancode); + } #endif - } if (SDL_EventState(SDL_TEXTINPUT, SDL_QUERY)) { /* FIXME CW 2007-08-16: only send those events to the field editor for which we actually want text events, not e.g. esc or function keys. Arrow keys in particular seem to produce crashes sometimes. */ [data->fieldEdit interpretKeyEvents:[NSArray arrayWithObject:event]]; @@ -808,29 +723,6 @@ } } -Cocoa_AddTouch(NSTouch* finger) { - SDL_Touch touch; - touch.id = (long)[finger device]; - //NSSize size = [finger deviceSize]; - //touch.driverdata = SDL_malloc(sizeof(EventTouchData)); - //EventTouchData* data = (EventTouchData*)(touch.driverdata); - - touch.x_min = 0; - touch.x_max = 1; - touch.xres = touch.x_max - touch.x_min; - touch.y_min = 0; - touch.y_max = 1; - touch.yres = touch.y_max - touch.y_min; - touch.pressure_min = 0; - touch.pressure_max = 1; - touch.pressureres = touch.pressure_max - touch.pressure_min; - - - return SDL_AddTouch(&touch, ""); - -} - - void Cocoa_QuitKeyboard(_THIS) {