From 0ad54d136ef33d61172658e97b538f7cd6a91c26 Mon Sep 17 00:00:00 2001 From: Peter Mikkelsen Date: Sun, 11 Feb 2024 16:39:26 +0000 Subject: Add a basic textbox element --- props.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 85 insertions(+), 9 deletions(-) (limited to 'props.c') diff --git a/props.c b/props.c index c36144d..2937845 100644 --- a/props.c +++ b/props.c @@ -22,34 +22,89 @@ allspace(char *r) } PropVal -defbackground(void) +defcolour(int gtag, int ptag) { PropVal v; - v.colour = mkcolour(DWhite); + ulong col = DTransparent; + + switch(ptag){ + case Pbackground: + switch(gtag){ + case Gcontainer: + col = DWhite; + break; + case Gtextbox: + col = 0xFFFFEAFF; + break; + } + break; + case Pbordercolour: + switch(gtag){ + case Gtextbox: + col = DYellowgreen; + break; + default: + col = DRed; + break; + } + break; + case Ptextcolour: + col = DBlack; + break; + } + + v.colour = mkcolour(col); return v; } PropVal -defspacing(void) +defspacing(int gtag, int ptag) { PropVal v; v.spacing = emalloc(sizeof(Spacing)); + + int space = 0; + + switch(ptag){ + case Pborder: + switch(gtag){ + case Gtextbox: + space = 4; + break; + } + break; + case Ppadding: + switch(gtag){ + case Gtextbox: + space = 2; + break; + } + break; + } + v.spacing->up = v.spacing->down = v.spacing->left = v.spacing->right = space; return v; } PropVal -deforientation(void) +deforientation(int gtag, int ptag) { + USED(gtag); + USED(ptag); + PropVal v; v.orientation = Horizontal; return v; } PropVal -defbordercolour(void) +deftext(int gtag, int ptag) { + USED(gtag); + USED(ptag); + PropVal v; - v.colour = mkcolour(DRed); + v.text = emalloc(sizeof(Rune)); + v.text[0] = 0; return v; } @@ -89,6 +144,15 @@ printorientation(PropVal p) return str; } +char * +printtext(PropVal p) +{ + char *str = smprint("%S", p.text); + if(str == nil) + sysfatal("smprint failed"); + return str; +} + char * parsecolour(char *str, PropVal *p) { @@ -151,6 +215,16 @@ parseorientation(char *str, PropVal *p) return nil; } +char * +parsetext(char *str, PropVal *p) +{ + Rune *rstr = runesmprint("%s", str); + if(rstr == nil) + sysfatal("runesmprint failed"); + (*p).text = rstr; + return nil; +} + PropVal getprop(GuiElement *g, int tag) { @@ -180,12 +254,14 @@ setprop(GuiElement *g, int tag, PropVal val) } PropSpec propspecs[Pmax] = { - [Pbackground] = {"background", defbackground, printcolour, parsecolour}, + [Pbackground] = {"background", defcolour, printcolour, parsecolour}, [Pborder] = {"border", defspacing, printspacing, parsespacing}, [Pmargin] = {"margin", defspacing, printspacing, parsespacing}, [Ppadding] = {"padding", defspacing, printspacing, parsespacing}, [Porientation] = {"orientation", deforientation, printorientation, parseorientation}, - [Pbordercolour] = {"bordercolour", defbordercolour, printcolour, parsecolour}, + [Pbordercolour] = {"bordercolour", defcolour, printcolour, parsecolour}, + [Ptext] = {"text", deftext, printtext, parsetext}, + [Ptextcolour] = {"textcolour", defcolour, printcolour, parsecolour}, }; -int baseprops[nbaseprops] = {Pborder, Pmargin, Ppadding, Pbordercolour}; \ No newline at end of file +int baseprops[nbaseprops] = {Pbackground, Pborder, Pmargin, Ppadding, Pbordercolour}; \ No newline at end of file -- cgit v1.2.3