17dd7cddfSDavid du Colombier #include <u.h>
27dd7cddfSDavid du Colombier #include <libc.h>
37dd7cddfSDavid du Colombier #include <draw.h>
47dd7cddfSDavid du Colombier
57dd7cddfSDavid du Colombier Image*
allocimagemix(Display * d,ulong color1,ulong color3)67dd7cddfSDavid du Colombier allocimagemix(Display *d, ulong color1, ulong color3)
77dd7cddfSDavid du Colombier {
87dd7cddfSDavid du Colombier Image *t, *b;
97dd7cddfSDavid du Colombier static Image *qmask;
107dd7cddfSDavid du Colombier
117dd7cddfSDavid du Colombier if(qmask == nil)
127dd7cddfSDavid du Colombier qmask = allocimage(d, Rect(0,0,1,1), GREY8, 1, 0x3F3F3FFF);
137dd7cddfSDavid du Colombier
14*9a747e4fSDavid du Colombier if(d->screenimage->depth <= 8){ /* create a 2×2 texture */
15*9a747e4fSDavid du Colombier t = allocimage(d, Rect(0,0,1,1), d->screenimage->chan, 0, color1);
167dd7cddfSDavid du Colombier if(t == nil)
177dd7cddfSDavid du Colombier return nil;
187dd7cddfSDavid du Colombier
19*9a747e4fSDavid du Colombier b = allocimage(d, Rect(0,0,2,2), d->screenimage->chan, 1, color3);
207dd7cddfSDavid du Colombier if(b == nil){
217dd7cddfSDavid du Colombier freeimage(t);
227dd7cddfSDavid du Colombier return nil;
237dd7cddfSDavid du Colombier }
247dd7cddfSDavid du Colombier
257dd7cddfSDavid du Colombier draw(b, Rect(0,0,1,1), t, nil, ZP);
267dd7cddfSDavid du Colombier freeimage(t);
277dd7cddfSDavid du Colombier return b;
287dd7cddfSDavid du Colombier }else{ /* use a solid color, blended using alpha */
29*9a747e4fSDavid du Colombier t = allocimage(d, Rect(0,0,1,1), d->screenimage->chan, 1, color1);
307dd7cddfSDavid du Colombier if(t == nil)
317dd7cddfSDavid du Colombier return nil;
327dd7cddfSDavid du Colombier
33*9a747e4fSDavid du Colombier b = allocimage(d, Rect(0,0,1,1), d->screenimage->chan, 1, color3);
347dd7cddfSDavid du Colombier if(b == nil){
357dd7cddfSDavid du Colombier freeimage(t);
367dd7cddfSDavid du Colombier return nil;
377dd7cddfSDavid du Colombier }
387dd7cddfSDavid du Colombier
397dd7cddfSDavid du Colombier draw(b, b->r, t, qmask, ZP);
407dd7cddfSDavid du Colombier freeimage(t);
417dd7cddfSDavid du Colombier return b;
427dd7cddfSDavid du Colombier }
437dd7cddfSDavid du Colombier }
44