blob: e3a389dedd425642c01addfd6de2dd15acc2cea4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#include <u.h>
#include <libc.h>
#include <draw.h>
#include <geometry.h>
#include "dat.h"
#include "fns.h"
static int
alphachan(ulong chan)
{
for(; chan; chan >>= 8)
if(TYPE(chan) == CAlpha)
return 1;
return 0;
}
Layer*
newlayer(Canvas *c)
{
Layer *l;
l = emalloc(sizeof(Layer));
l->p = Pt2(0,0,1);
l->bx = c->bx;
l->by = c->by;
l->image = eallocimage(display, c->image->r, c->image->chan, 0, alphachan(c->image->chan)? DTransparent: DNofill);
l->prev = c->layers.prev;
l->next = &c->layers;
c->layers.prev->next = l;
c->layers.prev = l;
return l;
}
void
rmlayer(Layer *l)
{
l->prev->next = l->next;
l->next->prev = l->prev;
freeimage(l->image);
free(l);
}
|