diff --git a/gtkarea/main.c b/gtkarea/main.c index 6a6d1b7e..2b5bf9d6 100644 --- a/gtkarea/main.c +++ b/gtkarea/main.c @@ -123,6 +123,27 @@ static void handlerDragBroken(uiAreaHandler *ah, uiArea *a) printf("drag broken\n"); } +static int handlerKeyEvent(uiAreaHandler *ah, uiArea *a, uiAreaKeyEvent *e) +{ + char k[4]; + + k[0] = '\''; + k[1] = e->Key; + k[2] = '\''; + k[3] = '\0'; + if (e->Key == 0) { + k[0] = '0'; + k[1] = '\0'; + } + printf("key key:%s extkey:%d mod:%d mods:%d up:%d\n", + k, + (int) e->ExtKey, + (int) e->Modifier, + (int) e->Modifiers; + e->Up); + return 0; +} + static void recalcScroll(GtkSpinButton *sb, gpointer data) { areaUpdateScroll(area); @@ -151,6 +172,7 @@ int main(void) h.ah.RedrawOnResize = handlerRedrawOnResize; h.ah.MouseEvent = handlerMouseEvent; h.ah.DragBroken = handlerDragBroken; + h.ah.KeyEvent = handlerKeyEvent; gtk_init(NULL, NULL); diff --git a/gtkarea/ui.h b/gtkarea/ui.h index 470d2437..845a6d66 100644 --- a/gtkarea/ui.h +++ b/gtkarea/ui.h @@ -4,6 +4,7 @@ typedef struct uiArea uiArea; typedef struct uiAreaHandler uiAreaHandler; typedef struct uiAreaDrawParams uiAreaDrawParams; typedef struct uiAreaMouseEvent uiAreaMouseEvent; +typedef struct uiAreaKeyEvent uiAreaKeyEvent; typedef struct uiDrawContext uiDrawContext; @@ -14,6 +15,7 @@ struct uiAreaHandler { int (*RedrawOnResize)(uiAreaHandler *, uiArea *); void (*MouseEvent)(uiAreaHandler *, uiArea *, uiAreaMouseEvent *); void (*DragBroken)(uiAreaHandler *, uiArea *); + int (*KeyEvent)(uiAreaHandler *, uiArea *, uiAreaKeyEvent *); }; struct uiAreaDrawParams { @@ -145,3 +147,57 @@ struct uiAreaMouseEvent { uint64_t Held1To64; }; + +typedef enum uiExtKey uiExtKey; + +enum uiExtKey { + uiExtKeyEscape = 1, + uiExtKeyInsert, // equivalent to "Help" on Apple keyboards + uiExtKeyDelete, + uiExtKeyHome, + uiExtKeyEnd, + uiExtKeyPageUp, + uiExtKeyPageDown, + uiExtKeyUp, + uiExtKeyDown, + uiExtKeyLeft, + uiExtKeyRight, + uiExtKeyF1, // F1..F12 are guaranteed to be consecutive + uiExtKeyF2, + uiExtKeyF3, + uiExtKeyF4, + uiExtKeyF5, + uiExtKeyF6, + uiExtKeyF7, + uiExtKeyF8, + uiExtKeyF9, + uiExtKeyF10, + uiExtKeyF11, + uiExtKeyF12, + uiExtKeyN0, // numpad keys; independent of Num Lock state + uiExtKeyN1, // N0..N9 are guaranteed to be consecutive + uiExtKeyN2, + uiExtKeyN3, + uiExtKeyN4, + uiExtKeyN5, + uiExtKeyN6, + uiExtKeyN7, + uiExtKeyN8, + uiExtKeyN9, + uiExtKeyNDot, + uiExtKeyNEnter, + uiExtKeyNAdd, + uiExtKeyNSubtract, + uiExtKeyNMultiply, + uiExtKeyNDivide, +}; + +struct uiAreaKeyEvent { + char Key; + uiExtKey ExtKey; + uiModifiers Modifier; + + uiModifiers Modifiers; + + int Up; +}; diff --git a/macarea/alt/main.m b/macarea/alt/main.m index 343f92fb..a1a121ed 100644 --- a/macarea/alt/main.m +++ b/macarea/alt/main.m @@ -129,6 +129,27 @@ static void handlerDragBroken(uiAreaHandler *ah, uiArea *a) printf("drag broken\n"); } +static int handlerKeyEvent(uiAreaHandler *ah, uiArea *a, uiAreaKeyEvent *e) +{ + char k[4]; + + k[0] = '\''; + k[1] = e->Key; + k[2] = '\''; + k[3] = '\0'; + if (e->Key == 0) { + k[0] = '0'; + k[1] = '\0'; + } + printf("key key:%s extkey:%d mod:%d mods:%d up:%d\n", + k, + (int) e->ExtKey, + (int) e->Modifier, + (int) e->Modifiers; + e->Up); + return 0; +} + // areaUpdateScroll(area); @interface appDelegate : NSObject @@ -189,6 +210,7 @@ int main(void) h.ah.RedrawOnResize = handlerRedrawOnResize; h.ah.MouseEvent = handlerMouseEvent; h.ah.DragBroken = handlerDragBroken; + h.ah.KeyEvent = handlerKeyEvent; app = [NSApplication sharedApplication]; [app setActivationPolicy:NSApplicationActivationPolicyRegular]; diff --git a/macarea/alt/ui.h b/macarea/alt/ui.h index 470d2437..845a6d66 100644 --- a/macarea/alt/ui.h +++ b/macarea/alt/ui.h @@ -4,6 +4,7 @@ typedef struct uiArea uiArea; typedef struct uiAreaHandler uiAreaHandler; typedef struct uiAreaDrawParams uiAreaDrawParams; typedef struct uiAreaMouseEvent uiAreaMouseEvent; +typedef struct uiAreaKeyEvent uiAreaKeyEvent; typedef struct uiDrawContext uiDrawContext; @@ -14,6 +15,7 @@ struct uiAreaHandler { int (*RedrawOnResize)(uiAreaHandler *, uiArea *); void (*MouseEvent)(uiAreaHandler *, uiArea *, uiAreaMouseEvent *); void (*DragBroken)(uiAreaHandler *, uiArea *); + int (*KeyEvent)(uiAreaHandler *, uiArea *, uiAreaKeyEvent *); }; struct uiAreaDrawParams { @@ -145,3 +147,57 @@ struct uiAreaMouseEvent { uint64_t Held1To64; }; + +typedef enum uiExtKey uiExtKey; + +enum uiExtKey { + uiExtKeyEscape = 1, + uiExtKeyInsert, // equivalent to "Help" on Apple keyboards + uiExtKeyDelete, + uiExtKeyHome, + uiExtKeyEnd, + uiExtKeyPageUp, + uiExtKeyPageDown, + uiExtKeyUp, + uiExtKeyDown, + uiExtKeyLeft, + uiExtKeyRight, + uiExtKeyF1, // F1..F12 are guaranteed to be consecutive + uiExtKeyF2, + uiExtKeyF3, + uiExtKeyF4, + uiExtKeyF5, + uiExtKeyF6, + uiExtKeyF7, + uiExtKeyF8, + uiExtKeyF9, + uiExtKeyF10, + uiExtKeyF11, + uiExtKeyF12, + uiExtKeyN0, // numpad keys; independent of Num Lock state + uiExtKeyN1, // N0..N9 are guaranteed to be consecutive + uiExtKeyN2, + uiExtKeyN3, + uiExtKeyN4, + uiExtKeyN5, + uiExtKeyN6, + uiExtKeyN7, + uiExtKeyN8, + uiExtKeyN9, + uiExtKeyNDot, + uiExtKeyNEnter, + uiExtKeyNAdd, + uiExtKeyNSubtract, + uiExtKeyNMultiply, + uiExtKeyNDivide, +}; + +struct uiAreaKeyEvent { + char Key; + uiExtKey ExtKey; + uiModifiers Modifier; + + uiModifiers Modifiers; + + int Up; +}; diff --git a/winarea/main.c b/winarea/main.c index fbf5f434..795fcbcf 100644 --- a/winarea/main.c +++ b/winarea/main.c @@ -129,6 +129,27 @@ static void handlerDragBroken(uiAreaHandler *ah, uiArea *a) printf("drag broken\n"); } +static int handlerKeyEvent(uiAreaHandler *ah, uiArea *a, uiAreaKeyEvent *e) +{ + char k[4]; + + k[0] = '\''; + k[1] = e->Key; + k[2] = '\''; + k[3] = '\0'; + if (e->Key == 0) { + k[0] = '0'; + k[1] = '\0'; + } + printf("key key:%s extkey:%d mod:%d mods:%d up:%d\n", + k, + (int) e->ExtKey, + (int) e->Modifier, + (int) e->Modifiers; + e->Up); + return 0; +} + static void repos(HWND hwnd) { RECT r; @@ -182,6 +203,7 @@ int main(void) h.ah.RedrawOnResize = handlerRedrawOnResize; h.ah.MouseEvent = handlerMouseEvent; h.ah.DragBroken = handlerDragBroken; + h.ah.KeyEvent = handlerKeyEvent; registerAreaClass(); diff --git a/winarea/ui.h b/winarea/ui.h index 470d2437..845a6d66 100644 --- a/winarea/ui.h +++ b/winarea/ui.h @@ -4,6 +4,7 @@ typedef struct uiArea uiArea; typedef struct uiAreaHandler uiAreaHandler; typedef struct uiAreaDrawParams uiAreaDrawParams; typedef struct uiAreaMouseEvent uiAreaMouseEvent; +typedef struct uiAreaKeyEvent uiAreaKeyEvent; typedef struct uiDrawContext uiDrawContext; @@ -14,6 +15,7 @@ struct uiAreaHandler { int (*RedrawOnResize)(uiAreaHandler *, uiArea *); void (*MouseEvent)(uiAreaHandler *, uiArea *, uiAreaMouseEvent *); void (*DragBroken)(uiAreaHandler *, uiArea *); + int (*KeyEvent)(uiAreaHandler *, uiArea *, uiAreaKeyEvent *); }; struct uiAreaDrawParams { @@ -145,3 +147,57 @@ struct uiAreaMouseEvent { uint64_t Held1To64; }; + +typedef enum uiExtKey uiExtKey; + +enum uiExtKey { + uiExtKeyEscape = 1, + uiExtKeyInsert, // equivalent to "Help" on Apple keyboards + uiExtKeyDelete, + uiExtKeyHome, + uiExtKeyEnd, + uiExtKeyPageUp, + uiExtKeyPageDown, + uiExtKeyUp, + uiExtKeyDown, + uiExtKeyLeft, + uiExtKeyRight, + uiExtKeyF1, // F1..F12 are guaranteed to be consecutive + uiExtKeyF2, + uiExtKeyF3, + uiExtKeyF4, + uiExtKeyF5, + uiExtKeyF6, + uiExtKeyF7, + uiExtKeyF8, + uiExtKeyF9, + uiExtKeyF10, + uiExtKeyF11, + uiExtKeyF12, + uiExtKeyN0, // numpad keys; independent of Num Lock state + uiExtKeyN1, // N0..N9 are guaranteed to be consecutive + uiExtKeyN2, + uiExtKeyN3, + uiExtKeyN4, + uiExtKeyN5, + uiExtKeyN6, + uiExtKeyN7, + uiExtKeyN8, + uiExtKeyN9, + uiExtKeyNDot, + uiExtKeyNEnter, + uiExtKeyNAdd, + uiExtKeyNSubtract, + uiExtKeyNMultiply, + uiExtKeyNDivide, +}; + +struct uiAreaKeyEvent { + char Key; + uiExtKey ExtKey; + uiModifiers Modifier; + + uiModifiers Modifiers; + + int Up; +};