Mercurial > sdl-ios-xcode
diff src/video/cocoa/SDL_cocoakeyboard.m @ 3130:fef1a835af43 gsoc2009_IME
Basic text input API
author | Jiang Jiang <gzjjgod@gmail.com> |
---|---|
date | Fri, 26 Jun 2009 10:37:57 +0000 |
parents | e42873b9c6f1 |
children | 88861448961f |
line wrap: on
line diff
--- a/src/video/cocoa/SDL_cocoakeyboard.m Sun May 31 16:57:29 2009 +0000 +++ b/src/video/cocoa/SDL_cocoakeyboard.m Fri Jun 26 10:37:57 2009 +0000 @@ -59,12 +59,19 @@ NSString *_markedText; NSRange _markedRange; NSRange _selectedRange; + SDL_Rect inputRect; } - (void) doCommandBySelector:(SEL)myselector; +- (void) setInputRect:(SDL_Rect *) rect; @end @implementation SDLTranslatorResponder +- (void) setInputRect:(SDL_Rect *) rect +{ + inputRect = *rect; +} + - (void) insertText:(id) aString { const char *str; @@ -135,11 +142,20 @@ - (NSRect) firstRectForCharacterRange: (NSRange) theRange { - return NSMakeRect(0, 0, 0, 0); + float windowHeight = [[self window] frame].size.height; + NSRect rect = NSMakeRect(inputRect.x, windowHeight - inputRect.y, inputRect.w, inputRect.h); + + NSLog(@"firstRectForCharacterRange: (%d, %d): windowHeight = %g, rect = %@", + theRange.location, theRange.length, windowHeight, + NSStringFromRect(rect)); + rect.origin = [[self window] convertBaseToScreen: rect.origin]; + + return rect; } - (NSAttributedString *) attributedSubstringFromRange: (NSRange) theRange { + NSLog(@"attributedSubstringFromRange: (%d, %d)", theRange.location, theRange.length); return nil; } @@ -152,6 +168,7 @@ // nearest to thePoint. thPoint is in screen coordinate system. - (NSUInteger) characterIndexForPoint:(NSPoint) thePoint { + NSLog(@"characterIndexForPoint: (%g, %g)", thePoint.x, thePoint.y); return 0; } @@ -578,6 +595,15 @@ } void +Cocoa_StartTextInput(_THIS, SDL_Rect *rect) +{ + SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; + + NSLog(@"StartTextInput: (%d, %d) (w=%d, h=%d)", rect->x, rect->y, rect->w, rect->h); + [data->fieldEdit setInputRect: rect]; +} + +void Cocoa_HandleKeyEvent(_THIS, NSEvent *event) { SDL_VideoData *data = (SDL_VideoData *) _this->driverdata;