123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- #ifdef __OBJC__
- #import <UIKit/UIKit.h>
- #endif
- #import "KeyboardHandleriOS.h"
- #include <allegro5/allegro.h>
- #include <allegro5/allegro_iphone_objc.h>
- @interface KeyboardHandleriOS()
- {
- ALLEGRO_EVENT_SOURCE *event_source;
- ALLEGRO_DISPLAY *current_display;
- }
- @end
- @implementation KeyboardHandleriOS
- - (id)init {
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];
- self = [self initWithFrame:CGRectMake(-100, -100, 0, 0)];
- event_source = NULL;
- current_display = al_get_current_display();
- UIView* v = al_iphone_get_view(current_display);
- [v addSubview:self];
- return self;
- }
- - (void)setCustomKeyboardEventSource:(ALLEGRO_EVENT_SOURCE *)ev_src {
- event_source = ev_src;
- }
- - (UIKeyboardType) keyboardType
- {
- return UIKeyboardTypeASCIICapable;
- }
- - (UITextAutocorrectionType) autocorrectionType
- {
- return UITextAutocorrectionTypeNo;
- }
- -(BOOL)canBecomeFirstResponder {
- return YES;
- }
- - (void)deleteBackward {
-
- if (!event_source) {
- NSLog(@"deleteBackward(): No event source found, not sending events");
- return;
- }
-
- ALLEGRO_EVENT *event_down = (ALLEGRO_EVENT*)calloc(1, sizeof(ALLEGRO_EVENT));
- ALLEGRO_EVENT *event_up = (ALLEGRO_EVENT*)calloc(1, sizeof(ALLEGRO_EVENT));
-
- event_down->type = ALLEGRO_EVENT_KEY_DOWN;
- event_down->keyboard.display = current_display;
- event_down->keyboard.keycode = ALLEGRO_KEY_BACKSPACE;
- event_up->type = ALLEGRO_EVENT_KEY_UP;
- event_up->keyboard.display = current_display;
- event_up->keyboard.keycode = ALLEGRO_KEY_BACKSPACE;
- al_emit_user_event(event_source, event_down, NULL);
- al_emit_user_event(event_source, event_up, NULL);
-
- free(event_down);
- free(event_up);
- }
- - (BOOL)hasText {
- return YES;
- }
- - (void)insertText:(NSString *)text
- {
- if (!event_source) {
- NSLog(@"insertText(): No event source found, not sending events");
- return;
- }
-
- ALLEGRO_EVENT *event_down = (ALLEGRO_EVENT*)calloc(1, sizeof(ALLEGRO_EVENT));
- ALLEGRO_EVENT *event_up = (ALLEGRO_EVENT*)calloc(1, sizeof(ALLEGRO_EVENT));
-
- if([text isEqualToString:@"\n"])
- {
- event_down->type = ALLEGRO_EVENT_KEY_DOWN;
- event_down->keyboard.display = current_display;
- event_down->keyboard.keycode = ALLEGRO_KEY_ENTER;
- event_up->type = ALLEGRO_EVENT_KEY_UP;
- event_up->keyboard.display = current_display;
- event_up->keyboard.keycode = ALLEGRO_KEY_ENTER;
- al_emit_user_event(event_source, event_down, NULL);
- al_emit_user_event(event_source, event_up, NULL);
- [self hide];
- //m_kb->setDonePressed();
- }
- else {
- event_down->type = ALLEGRO_EVENT_KEY_CHAR;
- event_down->keyboard.display = current_display;
- event_down->keyboard.unichar = [text characterAtIndex:0];
- // doesn't matter what keycode is, nuklear backend ignores it as long as it
- // isn't a special key
- event_down->keyboard.keycode = ALLEGRO_KEY_A;
- al_emit_user_event(event_source, event_down, NULL);
- }
- free(event_down);
- free(event_up);
- }
- -(void)show {
- NSLog(@"Should be showing!");
- [self performSelectorOnMainThread:@selector(becomeFirstResponder) withObject:nil waitUntilDone:YES];
- }
- -(void)hide {
- NSLog(@"Should be hiding!");
- [self performSelectorOnMainThread:@selector(resignFirstResponder) withObject:nil waitUntilDone:YES];
- }
- - (void)keyboardDidHide:(NSNotification *)notification {
- NSLog(@"keyboardDidHide called");
- }
- -(void)dealloc {
- [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidHideNotification object:nil];
- }
- @end
|