ref: 3a0e0b8bb6e7fd9bcf510167980d9715e3faeb7b
dir: /guifs.h/
enum { Pbackground, Pborder, Pmargin, Ppadding, Porientation, Pbordercolour, Ptext, Ptextcolour, Pmax, }; enum { nbaseprops = 5 }; enum { Gcontainer, Gtextbox, Gmax, }; enum { Horizontal, Vertical, }; typedef struct Colour Colour; typedef struct Spacing Spacing; typedef union PropVal PropVal; typedef struct PropSpec PropSpec; typedef struct Prop Prop; typedef struct Event Event; typedef struct GuiSpec GuiSpec; typedef struct GuiElement GuiElement; struct Colour { Image *image; ulong code; }; struct Spacing { int up; int right; int down; int left; }; union PropVal { Colour *colour; Spacing *spacing; int orientation; Rune *text; }; struct PropSpec { char *name; PropVal (*def)(int, int); char *(*print)(PropVal); char *(*parse)(char *, PropVal *); }; struct Prop { int tag; PropVal val; Qid qid; }; struct Event { Rune r; }; struct GuiSpec { char *name; void (*draw)(GuiElement *); void (*layout)(GuiElement *, Rectangle); int leafnode; int nprops; int *proptags; }; struct GuiElement { RWLock lock; int type; int id; Qid qid; Qid qclone; Qid qevent; Qid qtype; Qid qprops; Qid qwait; int nchildren; GuiElement **children; GuiElement *parent; int nprops; Prop *props; int listening; /* the user is reading from the 'event' file */ Channel *events; char *currentevents; Rectangle border; Rectangle rect; Rectangle content; }; extern Point mousexy; extern GuiElement *root; extern PropSpec propspecs[Pmax]; extern GuiSpec guispecs[Gmax]; extern int baseprops[nbaseprops]; void *emalloc(ulong); int allspace(char *); Colour *mkcolour(ulong); void initgraphics(void); void layout(GuiElement *, Rectangle); void updategui(int); void drawcontainer(GuiElement *); void drawtextbox(GuiElement *); void layoutcontainer(GuiElement *, Rectangle); void layouttextbox(GuiElement *, Rectangle); PropVal getprop(GuiElement *, int, int); void setprop(GuiElement *, int, PropVal, int); int mouseevent(int); int keyboardevent(Rune);