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