Blob


1 typedef struct Memimage Memimage;
2 typedef struct Memdata Memdata;
3 typedef struct Memsubfont Memsubfont;
4 typedef struct Memlayer Memlayer;
5 typedef struct Memcmap Memcmap;
6 typedef struct Memdrawparam Memdrawparam;
8 /*
9 * Memdata is allocated from main pool, but .data from the image pool.
10 * Memdata is allocated separately to permit patching its pointer after
11 * compaction when windows share the image data.
12 * The first word of data is a back pointer to the Memdata, to find
13 * The word to patch.
14 */
16 struct Memdata
17 {
18 u32int *base; /* allocated data pointer */
19 uchar *bdata; /* pointer to first byte of actual data; word-aligned */
20 int ref; /* number of Memimages using this data */
21 void* imref;
22 int allocd; /* is this malloc'd? */
23 };
25 enum {
26 Frepl = 1<<0, /* is replicated */
27 Fsimple = 1<<1, /* is 1x1 */
28 Fgrey = 1<<2, /* is grey */
29 Falpha = 1<<3, /* has explicit alpha */
30 Fcmap = 1<<4, /* has cmap channel */
31 Fbytes = 1<<5, /* has only 8-bit channels */
32 };
34 struct Memimage
35 {
36 Rectangle r; /* rectangle in data area, local coords */
37 Rectangle clipr; /* clipping region */
38 int depth; /* number of bits of storage per pixel */
39 int nchan; /* number of channels */
40 u32int chan; /* channel descriptions */
41 Memcmap *cmap;
43 Memdata *data; /* pointer to data; shared by windows in this image */
44 int zero; /* data->bdata+zero==&byte containing (0,0) */
45 u32int width; /* width in words of a single scan line */
46 Memlayer *layer; /* nil if not a layer*/
47 u32int flags;
48 void *X;
50 int shift[NChan];
51 int mask[NChan];
52 int nbits[NChan];
53 };
55 struct Memcmap
56 {
57 uchar cmap2rgb[3*256];
58 uchar rgb2cmap[16*16*16];
59 };
61 /*
62 * Subfonts
63 *
64 * given char c, Subfont *f, Fontchar *i, and Point p, one says
65 * i = f->info+c;
66 * draw(b, Rect(p.x+i->left, p.y+i->top,
67 * p.x+i->left+((i+1)->x-i->x), p.y+i->bottom),
68 * color, f->bits, Pt(i->x, i->top));
69 * p.x += i->width;
70 * to draw characters in the specified color (itself a Memimage) in Memimage b.
71 */
73 struct Memsubfont
74 {
75 char *name;
76 short n; /* number of chars in font */
77 uchar height; /* height of bitmap */
78 char ascent; /* top of bitmap to baseline */
79 Fontchar *info; /* n+1 character descriptors */
80 Memimage *bits; /* of font */
81 };
83 /*
84 * Encapsulated parameters and information for sub-draw routines.
85 */
86 enum {
87 Simplesrc=1<<0,
88 Simplemask=1<<1,
89 Replsrc=1<<2,
90 Replmask=1<<3,
91 Fullmask=1<<4,
92 };
93 struct Memdrawparam
94 {
95 Memimage *dst;
96 Rectangle r;
97 Memimage *src;
98 Rectangle sr;
99 Memimage *mask;
100 Rectangle mr;
101 int op;
103 u32int state;
104 u32int mval; /* if Simplemask, the mask pixel in mask format */
105 u32int mrgba; /* mval in rgba */
106 u32int sval; /* if Simplesrc, the source pixel in src format */
107 u32int srgba; /* sval in rgba */
108 u32int sdval; /* sval in dst format */
109 };
111 /*
112 * Memimage management
113 */
115 extern Memimage* allocmemimage(Rectangle, u32int);
116 extern Memimage* allocmemimaged(Rectangle, u32int, Memdata*, void*);
117 extern Memimage* readmemimage(int);
118 extern Memimage* creadmemimage(int);
119 extern int writememimage(int, Memimage*);
120 extern void freememimage(Memimage*);
121 extern int loadmemimage(Memimage*, Rectangle, uchar*, int);
122 extern int cloadmemimage(Memimage*, Rectangle, uchar*, int);
123 extern int unloadmemimage(Memimage*, Rectangle, uchar*, int);
124 extern u32int* wordaddr(Memimage*, Point);
125 extern uchar* byteaddr(Memimage*, Point);
126 extern int drawclip(Memimage*, Rectangle*, Memimage*, Point*,
127 Memimage*, Point*, Rectangle*, Rectangle*);
128 extern void memfillcolor(Memimage*, u32int);
129 extern int memsetchan(Memimage*, u32int);
130 extern u32int pixelbits(Memimage*, Point);
132 /*
133 * Graphics
134 */
135 extern void memdraw(Memimage*, Rectangle, Memimage*, Point,
136 Memimage*, Point, int);
137 extern void memline(Memimage*, Point, Point, int, int, int,
138 Memimage*, Point, int);
139 extern void mempoly(Memimage*, Point*, int, int, int, int,
140 Memimage*, Point, int);
141 extern void memfillpoly(Memimage*, Point*, int, int,
142 Memimage*, Point, int);
143 extern void _memfillpolysc(Memimage*, Point*, int, int,
144 Memimage*, Point, int, int, int, int);
145 extern void memimagedraw(Memimage*, Rectangle, Memimage*, Point,
146 Memimage*, Point, int);
147 extern int hwdraw(Memdrawparam*);
148 extern void memimageline(Memimage*, Point, Point, int, int, int,
149 Memimage*, Point, int);
150 extern void _memimageline(Memimage*, Point, Point, int, int, int,
151 Memimage*, Point, Rectangle, int);
152 extern Point memimagestring(Memimage*, Point, Memimage*, Point,
153 Memsubfont*, char*);
154 extern void memellipse(Memimage*, Point, int, int, int,
155 Memimage*, Point, int);
156 extern void memarc(Memimage*, Point, int, int, int, Memimage*,
157 Point, int, int, int);
158 extern Rectangle memlinebbox(Point, Point, int, int, int);
159 extern int memlineendsize(int);
160 extern void _memmkcmap(void);
161 extern void memimageinit(void);
163 /*
164 * Subfont management
165 */
166 extern Memsubfont* allocmemsubfont(char*, int, int, int, Fontchar*, Memimage*);
167 extern Memsubfont* openmemsubfont(char*);
168 extern void freememsubfont(Memsubfont*);
169 extern Point memsubfontwidth(Memsubfont*, char*);
170 extern Memsubfont* getmemdefont(void);
172 /*
173 * Predefined
174 */
175 extern Memimage* memwhite;
176 extern Memimage* memblack;
177 extern Memimage* memopaque;
178 extern Memimage* memtransparent;
179 extern Memcmap* memdefcmap;
181 /*
182 * Kernel interface
183 */
184 void memimagemove(void*, void*);
186 /*
187 * Kernel cruft
188 */
189 extern void rdb(void);
190 extern int iprint(char*, ...);
191 extern int drawdebug;
193 /*
194 * For other implementations, like x11.
195 */
196 extern void _memfillcolor(Memimage*, u32int);
197 extern Memimage* _allocmemimage(Rectangle, u32int);
198 extern int _cloadmemimage(Memimage*, Rectangle, uchar*, int);
199 extern int _loadmemimage(Memimage*, Rectangle, uchar*, int);
200 extern void _freememimage(Memimage*);
201 extern u32int _rgbatoimg(Memimage*, u32int);
202 extern u32int _imgtorgba(Memimage*, u32int);
203 extern u32int _pixelbits(Memimage*, Point);
204 extern int _unloadmemimage(Memimage*, Rectangle, uchar*, int);
205 extern Memdrawparam* _memimagedrawsetup(Memimage*,
206 Rectangle, Memimage*, Point, Memimage*,
207 Point, int);
208 extern void _memimagedraw(Memdrawparam*);
209 extern void _drawreplacescreenimage(Memimage*);