mirror of
https://github.com/9fans/plan9port.git
synced 2025-01-15 11:20:03 +00:00
44 lines
926 B
C
44 lines
926 B
C
|
#include <u.h>
|
|||
|
#include <libc.h>
|
|||
|
#include <draw.h>
|
|||
|
|
|||
|
Image*
|
|||
|
allocimagemix(Display *d, u32int color1, u32int color3)
|
|||
|
{
|
|||
|
Image *t, *b;
|
|||
|
static Image *qmask;
|
|||
|
|
|||
|
if(qmask == nil)
|
|||
|
qmask = allocimage(d, Rect(0,0,1,1), GREY8, 1, 0x3F3F3FFF);
|
|||
|
|
|||
|
if(d->screenimage->depth <= 8){ /* create a 2×2 texture */
|
|||
|
t = allocimage(d, Rect(0,0,1,1), d->screenimage->chan, 0, color1);
|
|||
|
if(t == nil)
|
|||
|
return nil;
|
|||
|
|
|||
|
b = allocimage(d, Rect(0,0,2,2), d->screenimage->chan, 1, color3);
|
|||
|
if(b == nil){
|
|||
|
freeimage(t);
|
|||
|
return nil;
|
|||
|
}
|
|||
|
|
|||
|
draw(b, Rect(0,0,1,1), t, nil, ZP);
|
|||
|
freeimage(t);
|
|||
|
return b;
|
|||
|
}else{ /* use a solid color, blended using alpha */
|
|||
|
t = allocimage(d, Rect(0,0,1,1), d->screenimage->chan, 1, color1);
|
|||
|
if(t == nil)
|
|||
|
return nil;
|
|||
|
|
|||
|
b = allocimage(d, Rect(0,0,1,1), d->screenimage->chan, 1, color3);
|
|||
|
if(b == nil){
|
|||
|
freeimage(t);
|
|||
|
return nil;
|
|||
|
}
|
|||
|
|
|||
|
draw(b, b->r, t, qmask, ZP);
|
|||
|
freeimage(t);
|
|||
|
return b;
|
|||
|
}
|
|||
|
}
|