diff -r 28b8330b8af1 -r 174c94b8ea72 cocoaTouch/SDLOverrides/SDL_uikitview.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cocoaTouch/SDLOverrides/SDL_uikitview.m Fri Jan 08 03:52:44 2010 +0000 @@ -0,0 +1,494 @@ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2009 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga, mods for Hedgewars by Vittorio Giovara + slouken@libsdl.org, vittorio.giovara@gmail.com + */ + +#include "PascalImports.h" +#import "SDL_uikitview.h" +#import "SDL_uikitappdelegate.h" + +#if SDL_IPHONE_KEYBOARD +#import "SDL_keyboard_c.h" +#import "keyinfotable.h" +#import "SDL_uikitwindow.h" +#endif + +@implementation SDL_uikitview + +@synthesize initialDistance, gestureStartPoint; + +- (void)dealloc { +#if SDL_IPHONE_KEYBOARD + SDL_DelKeyboard(0); + [textField release]; +#endif + [super dealloc]; +} + +- (id)initWithFrame:(CGRect)frame { + + self = [super initWithFrame: frame]; + +#if SDL_IPHONE_KEYBOARD + [self initializeKeyboard]; +#endif + + int i; + for (i=0; i= kMinimumGestureLength && deltaY <= kMaximumVariance) { + NSLog(@"Horizontal swipe detected, begX:%f curX:%f", gestureStartPoint.x, currentPosition.x); + if (Xdiff > 0) HW_walkLeft(); + else HW_walkRight(); + } + else if (deltaY >= kMinimumGestureLength && deltaX <= kMaximumVariance){ + NSLog(@"Vertical swipe detected, begY:%f curY:%f", gestureStartPoint.y, currentPosition.y); + if (Ydiff > 0) HW_aimUp(); + else HW_aimDown(); + } + + // end pinch detection + if (2 == [touches count]) { + NSArray *twoTouches = [touches allObjects]; + UITouch *first = [twoTouches objectAtIndex:0]; + UITouch *second = [twoTouches objectAtIndex:1]; + CGFloat currentDistance = distanceBetweenPoints([first locationInView:self], [second locationInView:self]); + + if (0 == initialDistance) + initialDistance = currentDistance; + else if (currentDistance - initialDistance > kMinimumPinchDelta) { + NSLog(@"Outward pinch detected"); + HW_zoomOut(); + } + else if (initialDistance - currentDistance > kMinimumPinchDelta) { + NSLog(@"Inward pinch detected"); + HW_zoomIn(); + } + } + + /*NSEnumerator *enumerator = [touches objectEnumerator]; + UITouch *touch=nil;while(touch = (UITouch *)[enumerator nextObject]) { + // try to find the mouse associated with this touch + int i, found = NO; + for (i=0; idriverdata; + view = data->view; + + if (nil == view) { + SDL_SetError("Window has no view"); + return -1; + } + else { + [view showKeyboard]; + return 0; + } +} + +int SDL_iPhoneKeyboardHide(SDL_WindowID windowID) { + + SDL_Window *window = SDL_GetWindowFromID(windowID); + SDL_WindowData *data; + SDL_uikitview *view; + + if (NULL == window) { + SDL_SetError("Window does not exist"); + return -1; + } + + data = (SDL_WindowData *)window->driverdata; + view = data->view; + + if (NULL == view) { + SDL_SetError("Window has no view"); + return -1; + } + else { + [view hideKeyboard]; + return 0; + } +} + +SDL_bool SDL_iPhoneKeyboardIsShown(SDL_WindowID windowID) { + + SDL_Window *window = SDL_GetWindowFromID(windowID); + SDL_WindowData *data; + SDL_uikitview *view; + + if (NULL == window) { + SDL_SetError("Window does not exist"); + return -1; + } + + data = (SDL_WindowData *)window->driverdata; + view = data->view; + + if (NULL == view) { + SDL_SetError("Window has no view"); + return 0; + } + else { + return view.keyboardVisible; + } +} + +int SDL_iPhoneKeyboardToggle(SDL_WindowID windowID) { + + SDL_Window *window = SDL_GetWindowFromID(windowID); + SDL_WindowData *data; + SDL_uikitview *view; + + if (NULL == window) { + SDL_SetError("Window does not exist"); + return -1; + } + + data = (SDL_WindowData *)window->driverdata; + view = data->view; + + if (NULL == view) { + SDL_SetError("Window has no view"); + return -1; + } + else { + if (SDL_iPhoneKeyboardIsShown(windowID)) { + SDL_iPhoneKeyboardHide(windowID); + } + else { + SDL_iPhoneKeyboardShow(windowID); + } + return 0; + } +} + +#else + +/* stubs, used if compiled without keyboard support */ + +int SDL_iPhoneKeyboardShow(SDL_WindowID windowID) { + SDL_SetError("Not compiled with keyboard support"); + return -1; +} + +int SDL_iPhoneKeyboardHide(SDL_WindowID windowID) { + SDL_SetError("Not compiled with keyboard support"); + return -1; +} + +SDL_bool SDL_iPhoneKeyboardIsShown(SDL_WindowID windowID) { + return 0; +} + +int SDL_iPhoneKeyboardToggle(SDL_WindowID windowID) { + SDL_SetError("Not compiled with keyboard support"); + return -1; +} + + +#endif /* SDL_IPHONE_KEYBOARD */