# HG changeset patch # User Jiang Jiang # Date 1246433638 0 # Node ID 88861448961fd9d87ebb898cdcd4eb73c7c45c80 # Parent 009bd8f819476c5997769d7da8db6e5c2e7af779 Add SDL_TEXTEDTING event to inform application about marked text. diff -r 009bd8f81947 -r 88861448961f include/SDL_events.h --- a/include/SDL_events.h Wed Jul 01 05:52:17 2009 +0000 +++ b/include/SDL_events.h Wed Jul 01 07:33:58 2009 +0000 @@ -74,9 +74,10 @@ SDL_SYSWMEVENT, /**< System specific event */ SDL_PROXIMITYIN, /**< Proximity In event */ SDL_PROXIMITYOUT, /**< Proximity Out event */ - SDL_EVENT_RESERVED1, /**< Reserved for future use... */ + SDL_EVENT_RESERVED1, SDL_EVENT_RESERVED2, SDL_EVENT_RESERVED3, + SDL_TEXTEDITING, /**< Reserved for future use... */ /* Events SDL_USEREVENT through SDL_MAXEVENTS-1 are for your use */ SDL_USEREVENT = 24, /* This last event is only for bounding internal arrays @@ -116,7 +117,8 @@ SDL_QUITMASK = SDL_EVENTMASK(SDL_QUIT), SDL_SYSWMEVENTMASK = SDL_EVENTMASK(SDL_SYSWMEVENT), SDL_PROXIMITYINMASK = SDL_EVENTMASK(SDL_PROXIMITYIN), - SDL_PROXIMITYOUTMASK = SDL_EVENTMASK(SDL_PROXIMITYOUT) + SDL_PROXIMITYOUTMASK = SDL_EVENTMASK(SDL_PROXIMITYOUT), + SDL_TEXTEDITINGMASK = SDL_EVENTMASK(SDL_TEXTEDITING) } SDL_EventMask; #define SDL_ALLEVENTS 0xFFFFFFFF @@ -163,6 +165,20 @@ } SDL_TextInputEvent; /** + * \struct SDL_TextEditingEvent + * + * \brief Keyboard text editing event structure (event.edit.*) + */ +#define SDL_TEXTEDITINGEVENT_TEXT_SIZE (32) +typedef struct SDL_TextEditingEvent +{ + Uint8 type; /**< SDL_TEXTEDITING */ + char text[SDL_TEXTEDITINGEVENT_TEXT_SIZE]; /**< The editing text */ + int start; /**< The start cursor of selected editing text */ + int length; /**< The length of selected editing text */ +} SDL_TextEditingEvent; + +/** * \struct SDL_MouseMotionEvent * * \brief Mouse motion event structure (event.motion.*) @@ -358,6 +374,7 @@ SDL_UserEvent user; /**< Custom event data */ SDL_SysWMEvent syswm; /**< System dependent window event data */ SDL_ProximityEvent proximity; /**< Proximity In or Out event */ + SDL_TextEditingEvent edit; /**< Text editing event data */ /* Temporarily here for backwards compatibility */ SDL_ActiveEvent active; diff -r 009bd8f81947 -r 88861448961f src/events/SDL_keyboard.c --- a/src/events/SDL_keyboard.c Wed Jul 01 05:52:17 2009 +0000 +++ b/src/events/SDL_keyboard.c Wed Jul 01 07:33:58 2009 +0000 @@ -852,6 +852,24 @@ return (posted); } +int +SDL_SendEditingText(const char *text, int start, int length) +{ + int posted; + + /* Post the event, if desired */ + posted = 0; + if (SDL_ProcessEvents[SDL_TEXTEDITING] == SDL_ENABLE) { + SDL_Event event; + event.edit.type = SDL_TEXTEDITING; + event.edit.start = start; + event.edit.length = length; + SDL_strlcpy(event.edit.text, text, SDL_arraysize(event.text.text)); + posted = (SDL_PushEvent(&event) > 0); + } + return (posted); +} + void SDL_KeyboardQuit(void) { diff -r 009bd8f81947 -r 88861448961f src/events/SDL_keyboard_c.h --- a/src/events/SDL_keyboard_c.h Wed Jul 01 05:52:17 2009 +0000 +++ b/src/events/SDL_keyboard_c.h Wed Jul 01 07:33:58 2009 +0000 @@ -81,6 +81,9 @@ /* Send keyboard text input for a keyboard at an index */ extern int SDL_SendKeyboardText(int index, const char *text); +/* Send editing text for selected range from start to end */ +extern int SDL_SendEditingText(const char *text, int start, int end); + /* Shutdown the keyboard subsystem */ extern void SDL_KeyboardQuit(void); diff -r 009bd8f81947 -r 88861448961f src/video/cocoa/SDL_cocoakeyboard.m --- a/src/video/cocoa/SDL_cocoakeyboard.m Wed Jul 01 05:52:17 2009 +0000 +++ b/src/video/cocoa/SDL_cocoakeyboard.m Wed Jul 01 07:33:58 2009 +0000 @@ -130,6 +130,8 @@ _selectedRange = selRange; _markedRange = NSMakeRange(0, [aString length]); + SDL_SendEditingText([aString UTF8String], selRange.location, selRange.length); + NSLog(@"setMarkedText: %@, (%d, %d)", _markedText, selRange.location, selRange.length); } diff -r 009bd8f81947 -r 88861448961f test/Makefile.in --- a/test/Makefile.in Wed Jul 01 05:52:17 2009 +0000 +++ b/test/Makefile.in Wed Jul 01 07:33:58 2009 +0000 @@ -147,7 +147,8 @@ $(CC) -o $@ $? $(CFLAGS) $(LIBS) testime$(EXE): $(srcdir)/testime.c - $(CC) -o $@ $? $(CFLAGS) -L../build/.libs $(LIBS) -lSDL_ttf + $(CC) -o $@ $? -I../include $(CFLAGS) -L../build/.libs $(LIBS) -lSDL_ttf + install_name_tool -change /usr/local/lib/libSDL-1.3.0.dylib ../build/.libs/libSDL-1.3.0.dylib $@ clean: rm -f $(TARGETS) diff -r 009bd8f81947 -r 88861448961f test/testime.c --- a/test/testime.c Wed Jul 01 05:52:17 2009 +0000 +++ b/test/testime.c Wed Jul 01 07:33:58 2009 +0000 @@ -111,6 +111,15 @@ SDL_StartTextInput(&markedRect); break; + case SDL_TEXTEDITING: + fprintf(stderr, "text editing \"%s\", selected range (%d, %d)\n", + event.edit.text, event.edit.start, event.edit.length); + + SDL_FillRect(screen, &markedRect, backColor); + render_text(screen, font, event.edit.text, markedRect.x, markedRect.y, textColor); + SDL_Flip(screen); + break; + case SDL_QUIT: done = 1; break;