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;