| #ifndef KEYBOARD_H |
| #define KEYBOARD_H |
| |
| |
| #include "graph.h" |
| #include "input.h" |
| |
| |
| #define K_LBL_SIZE LABEL_MAXLEN |
| |
| |
| |
| enum { |
| KF_HIGHLIGHT = 1 << 0, |
| KF_HOLD = 1 << 1, |
| KF_MOD = 1 << 2, |
| KF_LAYOUT = 1 << 3, |
| KF_MOVE = 1 << 4, |
| KF_SIZE = 1 << 5, |
| KF_CLOSE = 1 << 6, |
| |
| KF_SPECIAL = KF_HOLD | KF_MOD | KF_LAYOUT | KF_MOVE | KF_SIZE | KF_CLOSE, |
| }; |
| |
| |
| |
| enum { |
| LI_PREV = -1, |
| LI_NEXT = -2, |
| LI_REVERT = -3 }; |
| |
| |
| |
| struct Key; |
| struct Layout; |
| struct Keyboard; |
| typedef struct Key Key; |
| typedef struct Layout Layout; |
| typedef struct Keyboard Keyboard; |
| |
| |
| struct Key { |
| |
| int ox, oy, ow, oh; |
| unsigned int keySym; |
| unsigned int keySym2; |
| char label[K_LBL_SIZE]; |
| char label2[K_LBL_SIZE]; |
| unsigned int flags; |
| int optValue; |
| |
| |
| Layout *l; |
| int isLetter; |
| int isKeypad; |
| TextLayout tl; |
| TextLayout tl2; |
| |
| |
| int x, y, w, h; |
| int down; |
| int longDown; |
| int downKeycode; |
| int mx, my; |
| Key *nextHeld, *prevHeld; |
| Key *orig, *clone; |
| }; |
| |
| |
| struct Layout { |
| |
| Key *keys; |
| int keysCount; |
| int ow, oh; |
| |
| |
| Keyboard *kbd; |
| int hidden; |
| |
| |
| int w, h; |
| Key *downKey; |
| }; |
| |
| |
| struct Keyboard { |
| |
| Layout *layouts; |
| int layoutsCount; |
| int ow, oh; |
| |
| |
| App *app; |
| |
| |
| unsigned int lastModifiers; |
| Layout *current; |
| Layout *lastVisible; |
| Key *firstHeld; |
| }; |
| |
| |
| int keyInit(Key *k, Layout *l); |
| void keyDeinit(Key *k); |
| void keyInvalidateRect(Key *k); |
| void keyDraw(Key *k, int cx, int cy, int cw, int ch); |
| void keyDown(Key *k, int x, int y); |
| void keyMotion(Key *k, int x, int y); |
| void keyLongDown(Key *k); |
| void keyUp(Key *k, int force); |
| |
| int layoutInit(Layout *l, Keyboard *kbd); |
| void layoutDeinit(Layout *l); |
| void layoutResize(Layout *l); |
| void layoutDraw(Layout *l, int cx, int cy, int cw, int ch); |
| void layoutMouseDown(Layout *l, int x, int y); |
| void layoutMouseMotion(Layout *l, int x, int y); |
| void layoutMouseLongDown(Layout *l); |
| void layoutMouseUp(Layout *l); |
| |
| int keyboardInit(Keyboard *kbd, App *app); |
| void keyboardDeinit(Keyboard *kbd); |
| void keyboardResize(Keyboard *kbd); |
| void keyboardUpdateModifiers(Keyboard *kbd); |
| void keyboardDraw(Keyboard *kbd, int cx, int cy, int cw, int ch); |
| void keyboardMouseDown(Keyboard *kbd, int x, int y); |
| void keyboardMouseMotion(Keyboard *kbd, int x, int y); |
| void keyboardMouseLongDown(Keyboard *kbd); |
| void keyboardMouseUp(Keyboard *kbd); |
| void keyboardSwitchLayout(Keyboard *kbd, int index); |
| void keyboardRelaseHeld(Keyboard *kbd); |
| |
| |
| #endif |