Blame


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