Blob


1 #include <u.h>
2 #include <libc.h>
3 #include <draw.h>
5 Image*
6 allocimagemix(Display *d, u32int color1, u32int color3)
7 {
8 Image *t, *b;
9 static Image *qmask;
11 if(qmask == nil)
12 qmask = allocimage(d, Rect(0,0,1,1), GREY8, 1, 0x3F3F3FFF);
14 if(d->screenimage->depth <= 8){ /* create a 2×2 texture */
15 t = allocimage(d, Rect(0,0,1,1), d->screenimage->chan, 0, color1);
16 if(t == nil)
17 return nil;
19 b = allocimage(d, Rect(0,0,2,2), d->screenimage->chan, 1, color3);
20 if(b == nil){
21 freeimage(t);
22 return nil;
23 }
25 draw(b, Rect(0,0,1,1), t, nil, ZP);
26 freeimage(t);
27 return b;
28 }else{ /* use a solid color, blended using alpha */
29 t = allocimage(d, Rect(0,0,1,1), d->screenimage->chan, 1, color1);
30 if(t == nil)
31 return nil;
33 b = allocimage(d, Rect(0,0,1,1), d->screenimage->chan, 1, color3);
34 if(b == nil){
35 freeimage(t);
36 return nil;
37 }
39 draw(b, b->r, t, qmask, ZP);
40 freeimage(t);
41 return b;
42 }
43 }