xref: /inferno-os/libprefab/iconelement.c (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsyth #include <lib9.h>
2*37da2899SCharles.Forsyth #include <draw.h>
3*37da2899SCharles.Forsyth #include <interp.h>
4*37da2899SCharles.Forsyth #include <isa.h>
5*37da2899SCharles.Forsyth #include "../libinterp/runt.h"
6*37da2899SCharles.Forsyth #include <drawif.h>
7*37da2899SCharles.Forsyth #include <prefab.h>
8*37da2899SCharles.Forsyth 
9*37da2899SCharles.Forsyth static
10*37da2899SCharles.Forsyth PElement*
iconelement1(Prefab_Environ * e,Draw_Rect r,Draw_Image * icon,Draw_Image * mask,enum Elementtype kind)11*37da2899SCharles.Forsyth iconelement1(Prefab_Environ *e, Draw_Rect r, Draw_Image *icon, Draw_Image *mask, enum Elementtype kind)
12*37da2899SCharles.Forsyth {
13*37da2899SCharles.Forsyth 	PElement *pelem;
14*37da2899SCharles.Forsyth 	Prefab_Element *elem;
15*37da2899SCharles.Forsyth 
16*37da2899SCharles.Forsyth 	if(badenviron(e, 0) || icon==H || mask==H)
17*37da2899SCharles.Forsyth 		return H;
18*37da2899SCharles.Forsyth 	pelem = mkelement(e, kind);
19*37da2899SCharles.Forsyth 	if(pelem == H)
20*37da2899SCharles.Forsyth 		return H;
21*37da2899SCharles.Forsyth 	elem = &pelem->e;
22*37da2899SCharles.Forsyth 
23*37da2899SCharles.Forsyth 	if(Dx(r))
24*37da2899SCharles.Forsyth 		elem->r = r;
25*37da2899SCharles.Forsyth 	else{
26*37da2899SCharles.Forsyth 		elem->r.min = r.min;
27*37da2899SCharles.Forsyth 		elem->r.max.x = r.min.x + Dx(icon->r);
28*37da2899SCharles.Forsyth 		elem->r.max.y = r.min.y + Dy(icon->r);
29*37da2899SCharles.Forsyth 	}
30*37da2899SCharles.Forsyth 	elem->mask = mask;
31*37da2899SCharles.Forsyth 	D2H(mask)->ref++;
32*37da2899SCharles.Forsyth 	elem->image = icon;
33*37da2899SCharles.Forsyth 	D2H(icon)->ref++;
34*37da2899SCharles.Forsyth 	pelem->drawpt = IPOINT(r.min);
35*37da2899SCharles.Forsyth 	pelem->nkids = 1;
36*37da2899SCharles.Forsyth 	pelem->pkind = kind;
37*37da2899SCharles.Forsyth 	return pelem;
38*37da2899SCharles.Forsyth }
39*37da2899SCharles.Forsyth 
40*37da2899SCharles.Forsyth PElement*
iconelement(Prefab_Environ * e,Draw_Rect r,Draw_Image * icon,Draw_Image * mask)41*37da2899SCharles.Forsyth iconelement(Prefab_Environ *e, Draw_Rect r, Draw_Image *icon, Draw_Image *mask)
42*37da2899SCharles.Forsyth {
43*37da2899SCharles.Forsyth 	return iconelement1(e, r, icon, mask, EIcon);
44*37da2899SCharles.Forsyth }
45*37da2899SCharles.Forsyth 
46*37da2899SCharles.Forsyth PElement*
separatorelement(Prefab_Environ * e,Draw_Rect r,Draw_Image * icon,Draw_Image * mask)47*37da2899SCharles.Forsyth separatorelement(Prefab_Environ *e, Draw_Rect r, Draw_Image *icon, Draw_Image *mask)
48*37da2899SCharles.Forsyth {
49*37da2899SCharles.Forsyth 	return iconelement1(e, r, icon, mask, ESeparator);
50*37da2899SCharles.Forsyth }
51