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