| 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 |