Introduction
Introduction Statistics Contact Development Disclaimer Help
tdraw.h - plan9port - [fork] Plan 9 from user space
git clone git://src.adamsgaard.dk/plan9port
Log
Files
Refs
README
LICENSE
---
tdraw.h (17881B)
---
1 #ifndef _DRAW_H_
2 #define _DRAW_H_ 1
3 #if defined(__cplusplus)
4 extern "C" {
5 #endif
6
7 AUTOLIB(draw)
8 #ifdef __APPLE__
9 AUTOFRAMEWORK(Carbon)
10 #endif
11
12 typedef struct Cachefont Cachefont;
13 typedef struct Cacheinfo Cacheinfo;
14 typedef struct Cachesubf Cachesubf;
15 typedef struct Display Display;
16 typedef struct Font Font;
17 typedef struct Fontchar Fontchar;
18 typedef struct Image Image;
19 typedef struct Mouse Mouse;
20 typedef struct Point Point;
21 typedef struct Rectangle Rectangle;
22 typedef struct RGB RGB;
23 typedef struct Screen Screen;
24 typedef struct Subfont Subfont;
25
26 struct Mux;
27
28 extern int Rfmt(Fmt*);
29 extern int Pfmt(Fmt*);
30
31 #define DOpaque 0xFFFFFFFF
32 #define DTransparent 0x00000000 /* only us…
33 #define DBlack 0x000000FF
34 #define DWhite 0xFFFFFFFF
35 #define DRed 0xFF0000FF
36 #define DGreen 0x00FF00FF
37 #define DBlue 0x0000FFFF
38 #define DCyan 0x00FFFFFF
39 #define DMagenta 0xFF00FFFF
40 #define DYellow 0xFFFF00FF
41 #define DPaleyellow 0xFFFFAAFF
42 #define DDarkyellow 0xEEEE9EFF
43 #define DDarkgreen 0x448844FF
44 #define DPalegreen 0xAAFFAAFF
45 #define DMedgreen 0x88CC88FF
46 #define DDarkblue 0x000055FF
47 #define DPalebluegreen 0xAAFFFFFF
48 #define DPaleblue 0x0000BBFF
49 #define DBluegreen 0x008888FF
50 #define DGreygreen 0x55AAAAFF
51 #define DPalegreygreen 0x9EEEEEFF
52 #define DYellowgreen 0x99994CFF
53 #define DMedblue 0x000099FF
54 #define DGreyblue 0x005DBBFF
55 #define DPalegreyblue 0x4993DDFF
56 #define DPurpleblue 0x8888CCFF
57
58 #define DNotacolor 0xFFFFFF00
59 #define DNofill DNotacolor
60
61 enum
62 {
63 Displaybufsize = 8000,
64 ICOSSCALE = 1024,
65 Borderwidth = 4,
66 DefaultDPI = 133
67 };
68
69 enum
70 {
71 /* refresh methods */
72 Refbackup = 0,
73 Refnone = 1,
74 Refmesg = 2
75 };
76 #define NOREFRESH ((void*)-1)
77
78 enum
79 {
80 /* line ends */
81 Endsquare = 0,
82 Enddisc = 1,
83 Endarrow = 2,
84 Endmask = 0x1F
85 };
86
87 #define ARROW(a, b, c) (Endarrow|((a)<<5)|((b)<<14)|((c)<<…
88
89 typedef enum
90 {
91 /* Porter-Duff compositing operators */
92 Clear = 0,
93
94 SinD = 8,
95 DinS = 4,
96 SoutD = 2,
97 DoutS = 1,
98
99 S = SinD|SoutD,
100 SoverD = SinD|SoutD|DoutS,
101 SatopD = SinD|DoutS,
102 SxorD = SoutD|DoutS,
103
104 D = DinS|DoutS,
105 DoverS = DinS|DoutS|SoutD,
106 DatopS = DinS|SoutD,
107 DxorS = DoutS|SoutD, /* == SxorD */
108
109 Ncomp = 12
110 } Drawop;
111
112 /*
113 * image channel descriptors
114 */
115 enum {
116 CRed = 0,
117 CGreen,
118 CBlue,
119 CGrey,
120 CAlpha,
121 CMap,
122 CIgnore,
123 NChan
124 };
125
126 #define __DC(type, nbits) ((((type)&15)<<4)|((nbits)&15))
127 #define CHAN1(a,b) __DC(a,b)
128 #define CHAN2(a,b,c,d) (CHAN1((a),(b))<<8|__DC((c),(d)))
129 #define CHAN3(a,b,c,d,e,f) (CHAN2((a),(b),(c),(d))<<8|__DC((e),(f…
130 #define CHAN4(a,b,c,d,e,f,g,h) (CHAN3((a),(b),(c),(d),(e),(f))<<8…
131
132 #define NBITS(c) ((c)&15)
133 #define TYPE(c) (((c)>>4)&15)
134
135 enum {
136 GREY1 = CHAN1(CGrey, 1),
137 GREY2 = CHAN1(CGrey, 2),
138 GREY4 = CHAN1(CGrey, 4),
139 GREY8 = CHAN1(CGrey, 8),
140 CMAP8 = CHAN1(CMap, 8),
141 RGB15 = CHAN4(CIgnore, 1, CRed, 5, CGreen, 5, CBlue, 5),
142 RGB16 = CHAN3(CRed, 5, CGreen, 6, CBlue, 5),
143 RGB24 = CHAN3(CRed, 8, CGreen, 8, CBlue, 8),
144 BGR24 = CHAN3(CBlue, 8, CGreen, 8, CRed, 8),
145 RGBA32 = CHAN4(CRed, 8, CGreen, 8, CBlue, 8, CAlpha, 8),
146 ARGB32 = CHAN4(CAlpha, 8, CRed, 8, CGreen, 8, CBlue, 8), …
147 ABGR32 = CHAN4(CAlpha, 8, CBlue, 8, CGreen, 8, CRed, 8),
148 XRGB32 = CHAN4(CIgnore, 8, CRed, 8, CGreen, 8, CBlue, 8),
149 XBGR32 = CHAN4(CIgnore, 8, CBlue, 8, CGreen, 8, CRed, 8)
150 };
151
152 extern char* chantostr(char*, u32int);
153 extern u32int strtochan(char*);
154 extern int chantodepth(u32int);
155
156 struct Point
157 {
158 int x;
159 int y;
160 };
161
162 struct Rectangle
163 {
164 Point min;
165 Point max;
166 };
167
168 typedef void (*Reffn)(Image*, Rectangle, void*);
169
170 struct Screen
171 {
172 Display *display; /* display holding data */
173 int id; /* id of system-held Screen */
174 Image *image; /* unused; for reference onl…
175 Image *fill; /* color to paint behind wind…
176 };
177
178 struct Display
179 {
180 QLock qlock;
181 int locking; /*program is using lockdispla…
182 int dirno;
183 int imageid;
184 int local;
185 void (*error)(Display*, char*);
186 char *devdir;
187 char *windir;
188 char oldlabel[64];
189 u32int dataqid;
190 Image *image;
191 Image *white;
192 Image *black;
193 Image *opaque;
194 Image *transparent;
195 uchar *buf;
196 int bufsize;
197 uchar *bufp;
198 uchar *obuf;
199 int obufsize;
200 uchar *obufp;
201 Font *defaultfont;
202 Image *windows;
203 Image *screenimage;
204 int _isnewdisplay;
205 struct Mux *mux;
206 int srvfd;
207 int dpi;
208
209 Font *firstfont;
210 Font *lastfont;
211 };
212
213 struct Image
214 {
215 Display *display; /* display holding data …
216 int id; /* id of system-held Image…
217 Rectangle r; /* rectangle in data area, lo…
218 Rectangle clipr; /* clipping region */
219 int depth; /* number of bits per p…
220 u32int chan;
221 int repl; /* flag: data replicates…
222 Screen *screen; /* 0 if not a window */
223 Image *next; /* next in list of windows */
224 };
225
226 struct RGB
227 {
228 u32int red;
229 u32int green;
230 u32int blue;
231 };
232
233 /*
234 * Subfonts
235 *
236 * given char c, Subfont *f, Fontchar *i, and Point p, one says
237 * i = f->info+c;
238 * void(b, Rect(p.x+i->left, p.y+i->top,
239 * p.x+i->left+((i+1)->x-i->x), p.y+i->bottom),
240 * color, f->bits, Pt(i->x, i->top));
241 * p.x += i->width;
242 * to draw characters in the specified color (itself an Image) in Image …
243 */
244
245 struct Fontchar
246 {
247 int x; /* left edge of bits */
248 uchar top; /* first non-zero scan-…
249 uchar bottom; /* last non-zero sca…
250 char left; /* offset of baseline */
251 uchar width; /* width of baseline …
252 };
253
254 struct Subfont
255 {
256 char *name;
257 short n; /* number of chars in fon…
258 uchar height; /* height of image */
259 char ascent; /* top of image to ba…
260 Fontchar *info; /* n+1 character descript…
261 Image *bits; /* of font */
262 int ref;
263 };
264
265 enum
266 {
267 /* starting values */
268 LOG2NFCACHE = 6,
269 NFCACHE = (1<<LOG2NFCACHE), /* #chars cached */
270 NFLOOK = 5, /* #chars to scan in c…
271 NFSUBF = 2, /* #subfonts to cache …
272 /* max value */
273 MAXFCACHE = 1024+NFLOOK, /* upper limit */
274 MAXSUBF = 50, /* generous upper li…
275 /* deltas */
276 DSUBF = 4,
277 /* expiry ages */
278 SUBFAGE = 10000,
279 CACHEAGE = 10000
280 };
281
282 struct Cachefont
283 {
284 Rune min; /* lowest rune value to be taken…
285 Rune max; /* highest rune value+1 to be ta…
286 int offset; /* position in subfont of char…
287 char *name; /* stored in f…
288 char *subfontname; /* to access su…
289 };
290
291 struct Cacheinfo
292 {
293 int x; /* left edge of bits */
294 uchar width; /* width of baseline …
295 schar left; /* offset of baseline …
296 Rune value; /* value of character at this …
297 ushort age;
298 };
299
300 struct Cachesubf
301 {
302 u32int age; /* for replacement */
303 Cachefont *cf; /* font info that owns us */
304 Subfont *f; /* attached subfont */
305 };
306
307 struct Font
308 {
309 char *name;
310 char *namespec;
311 Display *display;
312 short height; /* max height of image, inte…
313 short ascent; /* top of image to baseline …
314 short width; /* widest so far; used in cac…
315 int nsub; /* number of subfonts */
316 u32int age; /* increasing counter; used fo…
317 int maxdepth; /* maximum depth of all load…
318 int ncache; /* size of cache */
319 int nsubf; /* size of subfont list */
320 int scale; /* pixel scaling to apply */
321 Cacheinfo *cache;
322 Cachesubf *subf;
323 Cachefont **sub; /* as read from file */
324 Image *cacheimage;
325
326 /* doubly linked list of fonts known to display */
327 int ondisplaylist;
328 Font *next;
329 Font *prev;
330
331 /* on hi-dpi systems, one of these is set to f and the other is …
332 Font *lodpi;
333 Font *hidpi;
334 };
335
336 #define Dx(r) ((r).max.x-(r).min.x)
337 #define Dy(r) ((r).max.y-(r).min.y)
338
339 /*
340 * Image management
341 */
342 extern Image* _allocimage(Image*, Display*, Rectangle, u32int, in…
343 extern Image* allocimage(Display*, Rectangle, u32int, int, u32int…
344 extern uchar* bufimage(Display*, int);
345 extern int bytesperline(Rectangle, int);
346 extern void closedisplay(Display*);
347 extern void drawerror(Display*, char*);
348 extern int flushimage(Display*, int);
349 extern int freeimage(Image*);
350 extern int _freeimage1(Image*);
351 extern int geninitdraw(char*, void(*)(Display*, char*), char*, ch…
352 extern int initdraw(void(*)(Display*, char*), char*, char*);
353 extern int newwindow(char*);
354 extern int loadimage(Image*, Rectangle, uchar*, int);
355 extern int cloadimage(Image*, Rectangle, uchar*, int);
356 extern int getwindow(Display*, int);
357 extern int gengetwindow(Display*, char*, Image**, Screen**, int);
358 extern Image* readimage(Display*, int, int);
359 extern Image* creadimage(Display*, int, int);
360 extern int unloadimage(Image*, Rectangle, uchar*, int);
361 extern int wordsperline(Rectangle, int);
362 extern int writeimage(int, Image*, int);
363 extern Image* namedimage(Display*, char*);
364 extern int nameimage(Image*, char*, int);
365 extern Image* allocimagemix(Display*, u32int, u32int);
366 extern int drawsetlabel(char*);
367 extern int scalesize(Display*, int);
368
369 /*
370 * Colors
371 */
372 extern void readcolmap(Display*, RGB*);
373 extern void writecolmap(Display*, RGB*);
374 extern u32int setalpha(u32int, uchar);
375
376 /*
377 * Windows
378 */
379 extern Screen* allocscreen(Image*, Image*, int);
380 extern Image* _allocwindow(Image*, Screen*, Rectangle, int, u32in…
381 extern Image* allocwindow(Screen*, Rectangle, int, u32int);
382 extern void bottomnwindows(Image**, int);
383 extern void bottomwindow(Image*);
384 extern int freescreen(Screen*);
385 extern Screen* publicscreen(Display*, int, u32int);
386 extern void topnwindows(Image**, int);
387 extern void topwindow(Image*);
388 extern int originwindow(Image*, Point, Point);
389
390 /*
391 * Geometry
392 */
393 extern Point Pt(int, int);
394 extern Rectangle Rect(int, int, int, int);
395 extern Rectangle Rpt(Point, Point);
396 extern Point addpt(Point, Point);
397 extern Point subpt(Point, Point);
398 extern Point divpt(Point, int);
399 extern Point mulpt(Point, int);
400 extern int eqpt(Point, Point);
401 extern int eqrect(Rectangle, Rectangle);
402 extern Rectangle insetrect(Rectangle, int);
403 extern Rectangle rectaddpt(Rectangle, Point);
404 extern Rectangle rectsubpt(Rectangle, Point);
405 extern Rectangle canonrect(Rectangle);
406 extern int rectXrect(Rectangle, Rectangle);
407 extern int rectinrect(Rectangle, Rectangle);
408 extern void combinerect(Rectangle*, Rectangle);
409 extern int rectclip(Rectangle*, Rectangle);
410 extern int ptinrect(Point, Rectangle);
411 extern void replclipr(Image*, int, Rectangle);
412 extern int drawreplxy(int, int, int); /* used to b…
413 extern Point drawrepl(Rectangle, Point);
414 extern int rgb2cmap(int, int, int);
415 extern int cmap2rgb(int);
416 extern int cmap2rgba(int);
417 extern void icossin(int, int*, int*);
418 extern void icossin2(int, int, int*, int*);
419
420 /*
421 * Graphics
422 */
423 extern void draw(Image*, Rectangle, Image*, Image*, Point);
424 extern void drawop(Image*, Rectangle, Image*, Image*, Point, Draw…
425 extern void gendraw(Image*, Rectangle, Image*, Point, Image*, Poi…
426 extern void gendrawop(Image*, Rectangle, Image*, Point, Image*, P…
427 extern void line(Image*, Point, Point, int, int, int, Image*, Poi…
428 extern void lineop(Image*, Point, Point, int, int, int, Image*, P…
429 extern void poly(Image*, Point*, int, int, int, int, Image*, Poin…
430 extern void polyop(Image*, Point*, int, int, int, int, Image*, Po…
431 extern void fillpoly(Image*, Point*, int, int, Image*, Point);
432 extern void fillpolyop(Image*, Point*, int, int, Image*, Point, D…
433 extern Point string(Image*, Point, Image*, Point, Font*, char*);
434 extern Point stringop(Image*, Point, Image*, Point, Font*, char*,…
435 extern Point stringn(Image*, Point, Image*, Point, Font*, char*, …
436 extern Point stringnop(Image*, Point, Image*, Point, Font*, char*…
437 extern Point runestring(Image*, Point, Image*, Point, Font*, Rune…
438 extern Point runestringop(Image*, Point, Image*, Point, Font*, Ru…
439 extern Point runestringn(Image*, Point, Image*, Point, Font*, Run…
440 extern Point runestringnop(Image*, Point, Image*, Point, Font*, R…
441 extern Point stringbg(Image*, Point, Image*, Point, Font*, char*,…
442 extern Point stringbgop(Image*, Point, Image*, Point, Font*, char…
443 extern Point stringnbg(Image*, Point, Image*, Point, Font*, char*…
444 extern Point stringnbgop(Image*, Point, Image*, Point, Font*, cha…
445 extern Point runestringbg(Image*, Point, Image*, Point, Font*, Ru…
446 extern Point runestringbgop(Image*, Point, Image*, Point, Font*, …
447 extern Point runestringnbg(Image*, Point, Image*, Point, Font*, R…
448 extern Point runestringnbgop(Image*, Point, Image*, Point, Font*,…
449 extern Point _string(Image*, Point, Image*, Point, Font*, char*, …
450 extern Point stringsubfont(Image*, Point, Image*, Subfont*, char*…
451 extern int bezier(Image*, Point, Point, Point, Point, int…
452 extern int bezierop(Image*, Point, Point, Point, Point, i…
453 extern int bezspline(Image*, Point*, int, int, int, int, …
454 extern int bezsplineop(Image*, Point*, int, int, int, int…
455 extern int bezsplinepts(Point*, int, Point**);
456 extern int fillbezier(Image*, Point, Point, Point, Point,…
457 extern int fillbezierop(Image*, Point, Point, Point, Poin…
458 extern int fillbezspline(Image*, Point*, int, int, Image*…
459 extern int fillbezsplineop(Image*, Point*, int, int, Imag…
460 extern void ellipse(Image*, Point, int, int, int, Image*, Point);
461 extern void ellipseop(Image*, Point, int, int, int, Image*, Point…
462 extern void fillellipse(Image*, Point, int, int, Image*, Point);
463 extern void fillellipseop(Image*, Point, int, int, Image*, Point,…
464 extern void arc(Image*, Point, int, int, int, Image*, Point, int,…
465 extern void arcop(Image*, Point, int, int, int, Image*, Point, in…
466 extern void fillarc(Image*, Point, int, int, Image*, Point, int, …
467 extern void fillarcop(Image*, Point, int, int, Image*, Point, int…
468 extern void border(Image*, Rectangle, int, Image*, Point);
469 extern void borderop(Image*, Rectangle, int, Image*, Point, Drawo…
470
471 /*
472 * Font management
473 */
474 extern Font* openfont(Display*, char*);
475 extern int parsefontscale(char*, char**);
476 extern Font* buildfont(Display*, char*, char*);
477 extern void freefont(Font*);
478 extern Font* mkfont(Subfont*, Rune);
479 extern int cachechars(Font*, char**, Rune**, ushort*, int, int*, …
480 extern void agefont(Font*);
481 extern Subfont* allocsubfont(char*, int, int, int, Fontchar*, Ima…
482 extern Subfont* lookupsubfont(Display*, char*);
483 extern void installsubfont(char*, Subfont*);
484 extern void uninstallsubfont(Subfont*);
485 extern void freesubfont(Subfont*);
486 extern Subfont* readsubfont(Display*, char*, int, int);
487 extern Subfont* readsubfonti(Display*, char*, int, Image*, int);
488 extern int writesubfont(int, Subfont*);
489 extern void _unpackinfo(Fontchar*, uchar*, int);
490 extern Point stringsize(Font*, char*);
491 extern int stringwidth(Font*, char*);
492 extern int stringnwidth(Font*, char*, int);
493 extern Point runestringsize(Font*, Rune*);
494 extern int runestringwidth(Font*, Rune*);
495 extern int runestringnwidth(Font*, Rune*, int);
496 extern Point strsubfontwidth(Subfont*, char*);
497 extern int loadchar(Font*, Rune, Cacheinfo*, int, int, char**);
498 extern char* subfontname(char*, char*, int);
499 extern Subfont* _getsubfont(Display*, char*);
500 extern void lockdisplay(Display*);
501 extern void unlockdisplay(Display*);
502 extern int drawlsetrefresh(u32int, int, void*, void*);
503 extern void loadhidpi(Font*);
504 extern void swapfont(Font*, Font**, Font**);
505
506 /*
507 * Predefined
508 */
509 extern Point ZP;
510 extern Rectangle ZR;
511
512 /*
513 * Set up by initdraw()
514 */
515 extern Display *display;
516 extern Font *font;
517 extern Image *screen;
518 extern Screen *_screen;
519 extern int drawmousemask; /* set bits to disable receiving…
520 extern int _cursorfd;
521 extern int _drawdebug; /* set to 1 to see errors fr…
522 extern void _setdrawop(Display*, Drawop);
523 extern Display *_initdisplay(void(*)(Display*,char*), char…
524
525 extern void needdisplay(void); /* call instead of initdraw…
526
527 #define BGSHORT(p) (((p)[0]<<0) | ((p)[1]<<8))
528 #define BGLONG(p) ((BGSHORT(p)<<0) | (BGSHORT(p+2)…
529 #define BPSHORT(p, v) ((p)[0]=(v), (p)[1]=((v)>>8))
530 #define BPLONG(p, v) (BPSHORT(p, (v)), BPSHORT(p+2…
531
532 /*
533 * Compressed image file parameters and helper routines
534 */
535 #define NMATCH 3 /* shortest match possible…
536 #define NRUN (NMATCH+31) /* longest match possible …
537 #define NMEM 1024 /* window size */
538 #define NDUMP 128 /* maximum length of dump…
539 #define NCBLOCK 6000 /* size of compressed …
540 extern void _twiddlecompressed(uchar*, int);
541 extern int _compblocksize(Rectangle, int);
542
543 /* XXX backwards helps; should go */
544 extern u32int drawld2chan[];
545 extern void drawsetdebug(int);
546
547 /*
548 * Snarf buffer
549 */
550 enum
551 {
552 SnarfSize = 64*1024
553 };
554 char *getsnarf(void);
555 void putsnarf(char*);
556
557 void drawtopwindow(void);
558 void drawresizewindow(Rectangle);
559 extern char *winsize;
560
561 int mousescrollsize(int);
562
563 /*
564 * RPC interface to draw server.
565 */
566 struct Mouse;
567 struct Cursor;
568 struct Cursor2;
569 int _displaybouncemouse(Display *d, struct Mouse *m);
570 int _displayconnect(Display *d);
571 int _displaycursor(Display *d, struct Cursor *c, struct C…
572 int _displayinit(Display *d, char *label, char *winsize);
573 int _displaylabel(Display *d, char *label);
574 int _displaymoveto(Display *d, Point p);
575 int _displaymux(Display *d);
576 int _displayrddraw(Display *d, void *v, int n);
577 int _displayrdkbd(Display *d, Rune *r);
578 int _displayrdmouse(Display *d, struct Mouse *m, int *res…
579 char* _displayrdsnarf(Display *d);
580 int _displaywrdraw(Display *d, void *v, int n);
581 int _displaywrsnarf(Display *d, char *snarf);
582 int _displaytop(Display *d);
583 int _displayresize(Display *d, Rectangle rect);
584
585 #if defined(__cplusplus)
586 }
587 #endif
588 #endif
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.