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