1 #pragma src "/sys/src/libmemdraw"
2 #pragma lib "libmemdraw.a"
4 typedef struct Memimage Memimage;
5 typedef struct Memdata Memdata;
6 typedef struct Memsubfont Memsubfont;
7 typedef struct Memlayer Memlayer;
8 typedef struct Memcmap Memcmap;
9 typedef struct Memdrawparam Memdrawparam;
11 #pragma incomplete Memlayer
14 * Memdata is allocated from main pool, but .data from the image pool.
15 * Memdata is allocated separately to permit patching its pointer after
16 * compaction when windows share the image data.
17 * The first word of data is a back pointer to the Memdata, to find
23 ulong *base; /* allocated data pointer */
24 uchar *bdata; /* pointer to first byte of actual data; word-aligned */
25 int ref; /* number of Memimages using this data */
27 int allocd; /* is this malloc'd? */
31 Frepl = 1<<0, /* is replicated */
32 Fsimple = 1<<1, /* is 1x1 */
33 Fgrey = 1<<2, /* is grey */
34 Falpha = 1<<3, /* has explicit alpha */
35 Fcmap = 1<<4, /* has cmap channel */
36 Fbytes = 1<<5, /* has only 8-bit channels */
41 Rectangle r; /* rectangle in data area, local coords */
42 Rectangle clipr; /* clipping region */
43 int depth; /* number of bits of storage per pixel */
44 int nchan; /* number of channels */
45 ulong chan; /* channel descriptions */
48 Memdata *data; /* pointer to data; shared by windows in this image */
49 int zero; /* data->bdata+zero==&byte containing (0,0) */
50 ulong width; /* width in words of a single scan line */
51 Memlayer *layer; /* nil if not a layer*/
61 uchar cmap2rgb[3*256];
62 uchar rgb2cmap[16*16*16];
68 * given char c, Subfont *f, Fontchar *i, and Point p, one says
70 * draw(b, Rect(p.x+i->left, p.y+i->top,
71 * p.x+i->left+((i+1)->x-i->x), p.y+i->bottom),
72 * color, f->bits, Pt(i->x, i->top));
74 * to draw characters in the specified color (itself a Memimage) in Memimage b.
80 short n; /* number of chars in font */
81 uchar height; /* height of bitmap */
82 char ascent; /* top of bitmap to baseline */
83 Fontchar *info; /* n+1 character descriptors */
84 Memimage *bits; /* of font */
88 * Encapsulated parameters and information for sub-draw routines.
108 ulong mval; /* if Simplemask, the mask pixel in mask format */
109 ulong mrgba; /* mval in rgba */
110 ulong sval; /* if Simplesrc, the source pixel in src format */
111 ulong srgba; /* sval in rgba */
112 ulong sdval; /* sval in dst format */
116 * Memimage management
119 extern Memimage* allocmemimage(Rectangle, ulong);
120 extern Memimage* allocmemimaged(Rectangle, ulong, Memdata*);
121 extern Memimage* readmemimage(int);
122 extern Memimage* creadmemimage(int);
123 extern int writememimage(int, Memimage*);
124 extern void freememimage(Memimage*);
125 extern int loadmemimage(Memimage*, Rectangle, uchar*, int);
126 extern int cloadmemimage(Memimage*, Rectangle, uchar*, int);
127 extern int unloadmemimage(Memimage*, Rectangle, uchar*, int);
128 extern ulong* wordaddr(Memimage*, Point);
129 extern uchar* byteaddr(Memimage*, Point);
130 extern int drawclip(Memimage*, Rectangle*, Memimage*, Point*, Memimage*, Point*, Rectangle*, Rectangle*);
131 extern void memfillcolor(Memimage*, ulong);
132 extern int memsetchan(Memimage*, ulong);
137 extern void memdraw(Memimage*, Rectangle, Memimage*, Point, Memimage*, Point, int);
138 extern void memline(Memimage*, Point, Point, int, int, int, Memimage*, Point, int);
139 extern void mempoly(Memimage*, Point*, int, int, int, int, Memimage*, Point, int);
140 extern void memfillpoly(Memimage*, Point*, int, int, Memimage*, Point, int);
141 extern void _memfillpolysc(Memimage*, Point*, int, int, Memimage*, Point, int, int, int, int);
142 extern void memimagedraw(Memimage*, Rectangle, Memimage*, Point, Memimage*, Point, int);
143 extern int hwdraw(Memdrawparam*);
144 extern void memimageline(Memimage*, Point, Point, int, int, int, Memimage*, Point, int);
145 extern void _memimageline(Memimage*, Point, Point, int, int, int, Memimage*, Point, Rectangle, int);
146 extern Point memimagestring(Memimage*, Point, Memimage*, Point, Memsubfont*, char*);
147 extern void memellipse(Memimage*, Point, int, int, int, Memimage*, Point, int);
148 extern void memarc(Memimage*, Point, int, int, int, Memimage*, Point, int, int, int);
149 extern Rectangle memlinebbox(Point, Point, int, int, int);
150 extern int memlineendsize(int);
151 extern void _memmkcmap(void);
152 extern void memimageinit(void);
157 extern Memsubfont* allocmemsubfont(char*, int, int, int, Fontchar*, Memimage*);
158 extern Memsubfont* openmemsubfont(char*);
159 extern void freememsubfont(Memsubfont*);
160 extern Point memsubfontwidth(Memsubfont*, char*);
161 extern Memsubfont* getmemdefont(void);
166 extern Memimage* memwhite;
167 extern Memimage* memblack;
168 extern Memimage* memopaque;
169 extern Memimage* memtransparent;
170 extern Memcmap *memdefcmap;
175 void memimagemove(void*, void*);
180 extern void rdb(void);
181 extern int iprint(char*, ...);
182 #pragma varargck argpos iprint 1
183 extern int drawdebug;
186 * doprint interface: numbconv bit strings
188 #pragma varargck type "llb" vlong
189 #pragma varargck type "llb" uvlong
190 #pragma varargck type "lb" long
191 #pragma varargck type "lb" ulong
192 #pragma varargck type "b" int
193 #pragma varargck type "b" uint