Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
Browse files Browse the repository at this point in the history
Basic text input API
  • Loading branch information
jjgod committed Jun 26, 2009
1 parent a5e2709 commit 6512362
Show file tree
Hide file tree
Showing 7 changed files with 51 additions and 2 deletions.
6 changes: 6 additions & 0 deletions include/SDL_video.h
Expand Up @@ -1467,6 +1467,12 @@ extern DECLSPEC void SDLCALL SDL_GL_SwapWindow(SDL_WindowID windowID);
*/
extern DECLSPEC void SDLCALL SDL_GL_DeleteContext(SDL_GLContext context);

/**
* \fn void SDL_StartTextInput(SDL_rect *rect)
*
* \brief Start Unicode text input within the given rectangle.
*/
extern DECLSPEC void SDLCALL SDL_StartTextInput(SDL_Rect *rect);

/* Ends C function definitions when using C++ */
#ifdef __cplusplus
Expand Down
3 changes: 3 additions & 0 deletions src/video/SDL_sysvideo.h
Expand Up @@ -277,6 +277,9 @@ struct SDL_VideoDevice
/* Suspend the screensaver */
void (*SuspendScreenSaver) (_THIS);

/* Text input */
void (*StartTextInput) (_THIS, SDL_Rect *rect);

/* * * */
/* Data common to all drivers */
SDL_bool suspend_screensaver;
Expand Down
8 changes: 8 additions & 0 deletions src/video/SDL_video.c
Expand Up @@ -3067,4 +3067,12 @@ SDL_GetWindowWMInfo(SDL_WindowID windowID, struct SDL_SysWMinfo *info)
return (_this->GetWindowWMInfo(_this, window, info));
}

void
SDL_StartTextInput(SDL_Rect *rect)
{
if (_this->StartTextInput) {
_this->StartTextInput(_this, rect);
}
}

/* vi: set ts=4 sw=4 expandtab: */
2 changes: 2 additions & 0 deletions src/video/cocoa/SDL_cocoakeyboard.h
Expand Up @@ -28,6 +28,8 @@ extern void Cocoa_InitKeyboard(_THIS);
extern void Cocoa_HandleKeyEvent(_THIS, NSEvent * event);
extern void Cocoa_QuitKeyboard(_THIS);

extern void Cocoa_StartTextInput(_THIS, SDL_Rect *rect);

#endif /* _SDL_cocoakeyboard_h */

/* vi: set ts=4 sw=4 expandtab: */
28 changes: 27 additions & 1 deletion src/video/cocoa/SDL_cocoakeyboard.m
Expand Up @@ -59,12 +59,19 @@ @interface SDLTranslatorResponder : NSTextView
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;
Expand Down Expand Up @@ -135,11 +142,20 @@ - (void) unmarkText

- (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;
}

Expand All @@ -152,6 +168,7 @@ - (NSInteger) conversationIdentifier
// nearest to thePoint. thPoint is in screen coordinate system.
- (NSUInteger) characterIndexForPoint:(NSPoint) thePoint
{
NSLog(@"characterIndexForPoint: (%g, %g)", thePoint.x, thePoint.y);
return 0;
}

Expand Down Expand Up @@ -577,6 +594,15 @@ - (NSArray *) validAttributesForMarkedText
SDL_SetScancodeName(SDL_SCANCODE_RGUI, "Right Command");
}

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)
{
Expand Down
4 changes: 3 additions & 1 deletion src/video/cocoa/SDL_cocoavideo.h
Expand Up @@ -41,14 +41,16 @@

/* Private display data */

@class SDLTranslatorResponder;

typedef struct SDL_VideoData
{
SInt32 osversion;
unsigned int modifierFlags;
int mouse;
int keyboard;
void *key_layout;
NSText *fieldEdit;
SDLTranslatorResponder *fieldEdit;
Uint32 screensaver_activity;
} SDL_VideoData;

Expand Down
2 changes: 2 additions & 0 deletions src/video/cocoa/SDL_cocoavideo.m
Expand Up @@ -102,6 +102,8 @@
device->GL_DeleteContext = Cocoa_GL_DeleteContext;
#endif

device->StartTextInput = Cocoa_StartTextInput;

device->free = Cocoa_DeleteDevice;

return device;
Expand Down

0 comments on commit 6512362

Please sign in to comment.