9 typedef struct Label Label;
39 static char *cmds[] = {
42 [EBordercolor] = "bordercolor",
51 [ETextcolor] = "textcolor",
56 static void labelshow(Label*);
65 _putctlimage(l->image);
66 _putctlimage(l->textcolor);
67 _putctlimage(l->bordercolor);
81 draw(l->screen, r, l->image->image, nil, l->image->image->r.min);
83 border(l->screen, r, l->border, l->bordercolor->image, l->bordercolor->image->r.min);
84 r = insetrect(r, l->border);
87 stringwidth(l->font->font, l->text),
88 l->font->font->height, l->align);
89 _string(l->screen, p, l->textcolor->image,
90 ZP, l->font->font, l->text, nil, strlen(l->text),
92 flushimage(display, 1);
96 labelctl(Control *c, CParse *cp)
103 cmd = _ctllookup(cp->args[0], cmds, nelem(cmds));
106 ctlerror("%q: unrecognized message '%s'", l->name, cp->str);
109 _ctlargcount(l, cp, 2);
110 l->align = _ctlalignment(cp->args[1]);
113 _ctlargcount(l, cp, 2);
115 ctlerror("%q: bad border: %c", l->name, cp->str);
116 l->border = cp->iargs[1];
119 _ctlargcount(l, cp, 2);
120 _setctlimage(l, &l->bordercolor, cp->args[1]);
123 /* ignore focus change */
126 _ctlargcount(l, cp, 2);
127 _setctlfont(l, &l->font, cp->args[1]);
130 _ctlargcount(l, cp, 1);
134 _ctlargcount(l, cp, 2);
135 _setctlimage(l, &l->image, cp->args[1]);
138 _ctlargcount(l, cp, 5);
139 r.min.x = cp->iargs[1];
140 r.min.y = cp->iargs[2];
141 r.max.x = cp->iargs[3];
142 r.max.y = cp->iargs[4];
143 if(Dx(r)<=0 || Dy(r)<=0)
144 ctlerror("%q: bad rectangle: %s", l->name, cp->str);
148 _ctlargcount(l, cp, 1);
153 _ctlargcount(l, cp, 1);
156 _ctlargcount(l, cp, 2);
157 _setctlimage(l, &l->textcolor, cp->args[1]);
162 r.max = Pt(0x7fffffff, 0x7fffffff);
164 _ctlargcount(l, cp, 5);
165 r.max.x = cp->iargs[3];
166 r.max.y = cp->iargs[4];
168 r.min.x = cp->iargs[1];
169 r.min.y = cp->iargs[2];
170 if(r.min.x<=0 || r.min.y<=0 || r.max.x<=0 || r.max.y<=0 || r.max.x < r.min.x || r.max.y < r.min.y)
171 ctlerror("%q: bad sizes: %s", l->name, cp->str);
176 _ctlargcount(l, cp, 2);
177 _setctlimage(l, &l->textcolor, cp->args[1]);
180 _ctlargcount(l, cp, 2);
181 if(strcmp(cp->args[1], l->text) != 0){
183 l->text = ctlstrdup(cp->args[1]);
191 createlabel(Controlset *cs, char *name)
195 l = (Label*)_createctl(cs, "label", sizeof(Label), name);
196 l->text = ctlstrdup("");
197 l->image = _getctlimage("white");
198 l->textcolor = _getctlimage("black");
199 l->bordercolor = _getctlimage("black");
200 l->font = _getctlfont("font");