ref: 5b7bb5370a455e3a61d16ea71c2fe69cfeb051e3
dir: /libwidget/base.h/
#pragma lib "libwidget.a"
typedef struct Widget Widget;
typedef struct Widgetctl Widgetctl;
typedef struct Widgetmsg Widgetmsg;
typedef struct Menumsg Menumsg;
struct Widget
{
int id;
char *kind;
void *aux; /* for the user */
Image *bg, *fg;
Point (*redraw)(Widget*, Image*, Rectangle);
/* can be nil if the widget doesn't take events */
int (*kbdevent)(Widget*, Image*, Rectangle, Rune, Channel* /*(Widgetmsg*)*/);
int (*mouseevent)(Widget*, Image*, Rectangle, Mouse, Channel* /*(Widgetmsg*)*/);
void (*cleanup)(Widget*);
};
struct Widgetctl
{
Channel *c; /* chan(Widgetmsg*)[16] */
Channel *kbdc; /* chan(Rune)[20] */
Channel *menuc; /* chan(Menumsg)[16] */
Channel *mousec; /* chan(Mouse)[16] */
Channel *resizec;
/* NOTE user retains ownership of the root widget */
Widget *root;
Keyboardctl *kbd;
Mousectl *mouse;
/* if non-nil, shown when widgets don't handle the respective mouse events */
Menu *left, *middle, *right;
Image *image;
int flags;
/* user shouln't care about anything below this point */
int pflags;
int wthread;
};
enum /* flags */
{
FORWARD_KBD = 1<<0,
FORWARD_MOUSE = 1<<1
};
enum /* mouse buttons */
{
M_LEFT = 1<<0,
M_MIDDLE = 1<<1,
M_RIGHT = 1<<2
/* TODO add scroll up/down */
};
struct Menumsg
{
Menu *menu;
int button, hit;
};
struct Widgetmsg
{
Widget *sender;
u32int what;
};
Widgetctl* initwidget(Image*, Keyboardctl*, Mousectl*, Widget *root, int flags);
void redrawwctl(Widgetctl*);
void closewidget(Widgetctl*);
Point redrawwidget(Widget*, Image*, Rectangle);
void freewidget(Widget*);
int kbdevent(Widget*, Image*, Rectangle, Rune, Channel* /*(Widgetmsg*)*/);
int mouseevent(Widget*, Image*, Rectangle, Mouse, Channel* /*(Widgetmsg*)*/);
void wdefaults(Widget*);
int nextid(void);
Widgetmsg* newmsg(Widget*, u32int what);
#define C2I(a, b, c, d) ((a) << 24 | (b) << 16 | (c) << 8 | (d))
extern void (*werror)(char*, ...);