Blame


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