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);
80 draw(l->screen, r, l->image->image, nil, l->image->image->r.min);
82 border(l->screen, r, l->border, l->bordercolor->image, l->bordercolor->image->r.min);
83 r = insetrect(r, l->border);
86 stringwidth(l->font->font, l->text),
87 l->font->font->height, l->align);
88 _string(l->screen, p, l->textcolor->image,
89 ZP, l->font->font, l->text, nil, strlen(l->text),
91 flushimage(display, 1);
95 labelctl(Control *c, CParse *cp)
102 cmd = _ctllookup(cp->args[0], cmds, nelem(cmds));
105 ctlerror("%q: unrecognized message '%s'", l->name, cp->str);
108 _ctlargcount(l, cp, 2);
109 l->align = _ctlalignment(cp->args[1]);
112 _ctlargcount(l, cp, 2);
114 ctlerror("%q: bad border: %c", l->name, cp->str);
115 l->border = cp->iargs[1];
118 _ctlargcount(l, cp, 2);
119 _setctlimage(l, &l->bordercolor, cp->args[1]);
122 /* ignore focus change */
125 _ctlargcount(l, cp, 2);
126 _setctlfont(l, &l->font, cp->args[1]);
129 _ctlargcount(l, cp, 1);
133 _ctlargcount(l, cp, 2);
134 _setctlimage(l, &l->image, cp->args[1]);
137 _ctlargcount(l, cp, 5);
138 r.min.x = cp->iargs[1];
139 r.min.y = cp->iargs[2];
140 r.max.x = cp->iargs[3];
141 r.max.y = cp->iargs[4];
142 if(Dx(r)<=0 || Dy(r)<=0)
143 ctlerror("%q: bad rectangle: %s", l->name, cp->str);
147 _ctlargcount(l, cp, 1);
152 _ctlargcount(l, cp, 1);
155 _ctlargcount(l, cp, 2);
156 _setctlimage(l, &l->textcolor, cp->args[1]);
161 r.max = Pt(0x7fffffff, 0x7fffffff);
163 _ctlargcount(l, cp, 5);
164 r.max.x = cp->iargs[3];
165 r.max.y = cp->iargs[4];
167 r.min.x = cp->iargs[1];
168 r.min.y = cp->iargs[2];
169 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)
170 ctlerror("%q: bad sizes: %s", l->name, cp->str);
175 _ctlargcount(l, cp, 2);
176 _setctlimage(l, &l->textcolor, cp->args[1]);
179 _ctlargcount(l, cp, 2);
180 if(strcmp(cp->args[1], l->text) != 0){
182 l->text = ctlstrdup(cp->args[1]);
190 createlabel(Controlset *cs, char *name)
194 l = (Label*)_createctl(cs, "label", sizeof(Label), name);
195 l->text = ctlstrdup("");
196 l->image = _getctlimage("white");
197 l->textcolor = _getctlimage("black");
198 l->bordercolor = _getctlimage("black");
199 l->font = _getctlfont("font");