Blame


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