|
|
1.1 root 1: #include <u.h>
2: #include <libc.h>
3: #include <libg.h>
4: #include <gnot.h>
5:
6: #define OKRECT(r) ((r).min.x<(r).max.x && (r).min.y<(r).max.y)
7:
8: GBitmap *
9: gballoc(Rectangle r, int ldepth)
10: {
11: long lsize;
12: int wsize; /* word size in pixels */
13: GBitmap *bp;
14:
15: if(ldepth<0 || ldepth>3 || !OKRECT(r))
16: return 0;
17: wsize = 1<<(5-ldepth); /* ldepth==0 is 32 pixels per word */
18: if(r.max.x >= 0)
19: lsize = (r.max.x+wsize-1)/wsize;
20: else
21: lsize = r.max.x/wsize;
22: if(r.min.x >= 0)
23: lsize -= r.min.x/wsize;
24: else
25: lsize -= (r.min.x-wsize+1)/wsize;
26: if((bp=malloc(sizeof(GBitmap))) == 0)
27: return 0;
28: bp->zero = lsize*r.min.y;
29: if(r.min.x >= 0)
30: bp->zero += r.min.x/wsize;
31: else
32: bp->zero += (r.min.x-wsize+1)/wsize;
33: bp->zero = -bp->zero;
34: bp->width = lsize;
35: bp->ldepth = ldepth;
36: bp->r = r;
37: bp->clipr = r;
38: bp->cache = 0;
39: lsize *= Dy(r);
40: lsize *= sizeof(ulong);
41: bp->base = malloc(lsize);
42: if(bp->base == 0){
43: free(bp);
44: return 0;
45: }
46: memset(bp->base, 0, lsize);
47: return bp;
48: }
49:
50: void
51: gbfree(GBitmap *bp)
52: {
53: if(bp){
54: if(bp->base)
55: free(bp->base);
56: free(bp);
57: }
58: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.