Blame keyboard.h

452870
#ifndef KEYBOARD_H
452870
#define KEYBOARD_H
452870
452870
452870
#include "graph.h"
452870
#include "input.h"
452870
452870
d3e9d7
#define K_LBL_SIZE TL_MAXLEN
63daec
63daec
843e7a
// key flags
843e7a
enum {
63daec
  KF_HOLD   = 1 << 0,   // key will be hold until it will pressed again or non-hold key will pressed
63daec
  KF_MOD    = 1 << 1,   // visible value depends on modifier state (using optValue field)
63daec
  KF_LAYOUT = 1 << 2,   // key to switch layout (using optValue field);
63daec
  KF_MOVE   = 1 << 3,   // handle to move the window
63daec
  KF_SIZE   = 1 << 4,   // key to resize the window
63daec
  KF_CLOSE  = 1 << 5 }; // key to close the window
843e7a
843e7a
// special layout indices
843e7a
enum {
843e7a
  LI_PREV   = -1,   // switch to previous layout in the list
843e7a
  LI_NEXT   = -2,   // switch to next layout in the list
843e7a
  LI_REVERT = -3 }; // switch to previously used layout
843e7a
843e7a
  
843e7a
  
843e7a
struct Key;
843e7a
struct Layout;
452870
struct Keyboard;
843e7a
typedef struct Key Key;
843e7a
typedef struct Layout Layout;
452870
typedef struct Keyboard Keyboard;
452870
452870
843e7a
struct Key {
452870
  // keep these filds at the begining for easyest static initialization
061fcf
  int ox, oy, ow, oh;
452870
  unsigned int keySym;
843e7a
  unsigned int keySym2;
63daec
  char label[K_LBL_SIZE];
63daec
  char label2[K_LBL_SIZE];
843e7a
  unsigned int flags;
63daec
  int optValue;
452870
  
452870
  // these fields will be set while initialization
843e7a
  Layout *l;
63daec
  int isLetter;
63daec
  int isKeypad;
452870
  TextLayout tl;
452870
  TextLayout tl2;
452870
  
452870
  // dynamic fields
061fcf
  int x, y, w, h;
452870
  int down;
843e7a
  int downKeycode;
63daec
  int mx, my; // values for move and size buttons
843e7a
  Key *nextHeld, *prevHeld;
843e7a
};
452870
452870
843e7a
struct Layout {
452870
  // keep these filds at the begining for easyest static initialization
452870
  Key *keys;
452870
  int keysCount;
061fcf
  int ow, oh;
452870
  
452870
  // these fields will be set while initialization
843e7a
  Keyboard *kbd;
843e7a
843e7a
  // dynamic fields
061fcf
  int w, h;
843e7a
  Layout *prev; // previously used layout
843e7a
  Key *downKey; // key that received the last mouse down event
843e7a
};
843e7a
843e7a
843e7a
struct Keyboard {
843e7a
  // keep these filds at the begining for easyest static initialization
843e7a
  Layout *layouts;
843e7a
  int layoutsCount;
061fcf
  int ow, oh;
843e7a
  
843e7a
  // these fields will be set while initialization
452870
  App *app;
452870
  
452870
  // dynamic fields
061fcf
  unsigned int lastModifiers;
843e7a
  Layout *current;
843e7a
  Key *firstHeld;
452870
};
452870
452870
843e7a
int keyInit(Key *k, Layout *l);
452870
void keyDeinit(Key *k);
452870
void keyDraw(Key *k, int cx, int cy, int cw, int ch);
843e7a
void keyDown(Key *k, int x, int y);
843e7a
void keyMotion(Key *k, int x, int y);
843e7a
void keyUp(Key *k, int force);
843e7a
843e7a
int layoutInit(Layout *l, Keyboard *kbd);
843e7a
void layoutDeinit(Layout *l);
061fcf
void layoutResize(Layout *l);
843e7a
void layoutDraw(Layout *l, int cx, int cy, int cw, int ch);
843e7a
void layoutMouseDown(Layout *l, int x, int y);
843e7a
void layoutMouseMotion(Layout *l, int x, int y);
843e7a
void layoutMouseUp(Layout *l);
452870
452870
int keyboardInit(Keyboard *kbd, App *app);
452870
void keyboardDeinit(Keyboard *kbd);
843e7a
void keyboardResize(Keyboard *kbd);
061fcf
void keyboardUpdateModifiers(Keyboard *kbd);
452870
void keyboardDraw(Keyboard *kbd, int cx, int cy, int cw, int ch);
452870
void keyboardMouseDown(Keyboard *kbd, int x, int y);
843e7a
void keyboardMouseMotion(Keyboard *kbd, int x, int y);
452870
void keyboardMouseUp(Keyboard *kbd);
843e7a
void keyboardSwitchLayout(Keyboard *kbd, int index);
843e7a
void keyboardRelaseHeld(Keyboard *kbd);
452870
452870
452870
#endif