ref: bb63f08a8acc62f17975b108c918f4ff20c1f2c0
dir: /util.c/
#include <u.h>
#include <libc.h>
#include <draw.h>
#include <memdraw.h>
#include <event.h>
#include <keyboard.h>
#include "blie.h"
#define RGB2K(r,g,b) ((156763*(r)+307758*(g)+59769*(b))>>19)
uchar
rgb2k(uchar r, uchar g, uchar b)
{
return RGB2K(r, g, b);
}
uchar
ilerp(uchar A, uchar B, uchar α)
{
return flerp((double)A / 255., (double)B / 255., (double)α / 255.) * 255;
}
uchar
imul(uchar A, uchar B)
{
return (((double)A * (double)B) / (255. * 255.)) * 255;
}
double
flerp(double A, double B, double α)
{
return (B * α) + (1.-α) * A;
}
Memimage*
dupmemimage(Memimage *i)
{
Memimage *d;
d = gencanvas(i);
memimagedraw(d, i->r, i, ZP, nil, ZP, SoverD);
return d;
}
Memimage*
gencanvas(Memimage *i)
{
i = allocmemimage(i->r, RGBA32);
memfillcolor(i, DTransparent);
return i;
}
Memimage*
gencomposite(Memimage *A, Memimage *B, Memimage *M, Drawop op)
{
Memimage *d;
d = dupmemimage(A);
memimagedraw(d, B->r, B, ZP, M, ZP, op);
return d;
}
Memimage*
ecomposite(Layer *l, Memimage *img)
{
Memimage *s;
Memimage *m;
s = l->editor->raw(l);
m = l->editor->mask(l);
if (!img) {
if (bliedebug > 1)
fprint(2, " c: raw image\n");
return dupmemimage(s);
}
if (bliedebug > 1)
fprint(2, " c: combine images\n");
return gencomposite(img, s, m, l->op);
}
Point
scalepos(Point xy)
{
xy = addpt(xy, vstate.offset);
xy.x = xy.x / vstate.zoom;
xy.y = xy.y / vstate.zoom;
return xy;
}