Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#ifdef PLAN9
2
#pragma	src	"/sys/src/libmemdraw"
3
#pragma	lib	"libmemdraw.a"
4
#endif
5
 
6
typedef struct	Memimage Memimage;
7
typedef struct	Memdata Memdata;
8
typedef struct	Memsubfont Memsubfont;
9
typedef struct	Memlayer Memlayer;
10
typedef struct	Memcmap Memcmap;
11
typedef struct	Memdrawparam	Memdrawparam;
12
 
13
/*
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
18
 * The word to patch.
19
 */
20
 
21
struct Memdata
22
{
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 */
26
	void*	imref;
27
	int		allocd;	/* is this malloc'd? */
28
};
29
 
30
enum {
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 */
37
};
38
 
39
struct Memimage
40
{
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 */
46
	Memcmap	*cmap;
47
 
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*/
52
	ulong	flags;
53
 
54
	int		shift[NChan];
55
	int		mask[NChan];
56
	int		nbits[NChan];
57
 
58
	void	*X;
59
};
60
 
61
struct Memcmap
62
{
63
	uchar	cmap2rgb[3*256];
64
	uchar	rgb2cmap[16*16*16];
65
};
66
 
67
/*
68
 * Subfonts
69
 *
70
 * given char c, Subfont *f, Fontchar *i, and Point p, one says
71
 *	i = f->info+c;
72
 *	draw(b, Rect(p.x+i->left, p.y+i->top,
73
 *		p.x+i->left+((i+1)->x-i->x), p.y+i->bottom),
74
 *		color, f->bits, Pt(i->x, i->top));
75
 *	p.x += i->width;
76
 * to draw characters in the specified color (itself a Memimage) in Memimage b.
77
 */
78
 
79
struct	Memsubfont
80
{
81
	char		*name;
82
	short	n;		/* number of chars in font */
83
	uchar	height;		/* height of bitmap */
84
	char	ascent;		/* top of bitmap to baseline */
85
	Fontchar *info;		/* n+1 character descriptors */
86
	Memimage	*bits;		/* of font */
87
};
88
 
89
/*
90
 * Encapsulated parameters and information for sub-draw routines.
91
 */
92
enum {
93
	Simplesrc=1<<0,
94
	Simplemask=1<<1,
95
	Replsrc=1<<2,
96
	Replmask=1<<3,
97
	Fullmask=1<<4,
98
};
99
struct	Memdrawparam
100
{
101
	Memimage *dst;
102
	Rectangle	r;
103
	Memimage *src;
104
	Rectangle sr;
105
	Memimage *mask;
106
	Rectangle mr;
107
	int op;
108
 
109
	ulong state;
110
	ulong mval;	/* if Simplemask, the mask pixel in mask format */
111
	ulong mrgba;	/* mval in rgba */
112
	ulong sval;	/* if Simplesrc, the source pixel in src format */
113
	ulong srgba;	/* sval in rgba */
114
	ulong sdval;	/* sval in dst format */
115
};
116
 
117
/*
118
 * Memimage management
119
 */
120
 
121
extern Memimage*	allocmemimage(Rectangle, ulong);
122
extern Memimage*	_allocmemimage(Rectangle, ulong);
123
extern Memimage*	allocmemimaged(Rectangle, ulong, Memdata*, void*);
124
extern Memimage*	readmemimage(int);
125
extern Memimage*	creadmemimage(int);
126
extern int	writememimage(int, Memimage*);
127
extern void	freememimage(Memimage*);
128
extern void	_freememimage(Memimage*);
129
extern int		_loadmemimage(Memimage*, Rectangle, uchar*, int);
130
extern int		_cloadmemimage(Memimage*, Rectangle, uchar*, int);
131
extern int		_unloadmemimage(Memimage*, Rectangle, uchar*, int);
132
extern int		loadmemimage(Memimage*, Rectangle, uchar*, int);
133
extern int		cloadmemimage(Memimage*, Rectangle, uchar*, int);
134
extern int		unloadmemimage(Memimage*, Rectangle, uchar*, int);
135
extern ulong*	wordaddr(Memimage*, Point);
136
extern uchar*	byteaddr(Memimage*, Point);
137
extern int		drawclip(Memimage*, Rectangle*, Memimage*, Point*, Memimage*, Point*, Rectangle*, Rectangle*);
138
extern void	memfillcolor(Memimage*, ulong);
139
extern void	_memfillcolor(Memimage*, ulong);
140
extern int		memsetchan(Memimage*, ulong);
141
extern ulong	_rgbatoimg(Memimage*, ulong);
142
 
143
/*
144
 * Graphics
145
 */
146
extern void	memdraw(Memimage*, Rectangle, Memimage*, Point, Memimage*, Point, int);
147
extern void	memline(Memimage*, Point, Point, int, int, int, Memimage*, Point, int);
148
extern void	mempoly(Memimage*, Point*, int, int, int, int, Memimage*, Point, int);
149
extern void	memfillpoly(Memimage*, Point*, int, int, Memimage*, Point, int);
150
extern void	_memfillpolysc(Memimage*, Point*, int, int, Memimage*, Point, int, int, int, int);
151
extern Memdrawparam*	_memimagedrawsetup(Memimage*, Rectangle, Memimage*, Point, Memimage*, Point, int);
152
extern void	_memimagedraw(Memdrawparam*);
153
extern void	memimagedraw(Memimage*, Rectangle, Memimage*, Point, Memimage*, Point, int);
154
extern int	hwdraw(Memdrawparam*);
155
extern void	memimageline(Memimage*, Point, Point, int, int, int, Memimage*, Point, int);
156
extern void	_memimageline(Memimage*, Point, Point, int, int, int, Memimage*, Point, Rectangle, int);
157
extern Point	memimagestring(Memimage*, Point, Memimage*, Point, Memsubfont*, char*);
158
extern void	memellipse(Memimage*, Point, int, int, int, Memimage*, Point, int);
159
extern void	memarc(Memimage*, Point, int, int, int, Memimage*, Point, int, int, int);
160
extern Rectangle	memlinebbox(Point, Point, int, int, int);
161
extern int	memlineendsize(int);
162
extern void	_memmkcmap(void);
163
extern void	_memimageinit(void);
164
extern void	memimageinit(void);
165
 
166
/*
167
 * Subfont management
168
 */
169
extern Memsubfont*	allocmemsubfont(char*, int, int, int, Fontchar*, Memimage*);
170
extern Memsubfont*	openmemsubfont(char*);
171
extern void	freememsubfont(Memsubfont*);
172
extern Point	memsubfontwidth(Memsubfont*, char*);
173
extern Memsubfont*	getmemdefont(void);
174
 
175
/*
176
 * Predefined 
177
 */
178
extern	Memimage*	memwhite;
179
extern	Memimage*	memblack;
180
extern	Memimage*	memopaque;
181
extern	Memimage*	memtransparent;
182
extern	Memcmap	*memdefcmap;
183
 
184
/*
185
 * Kernel interface
186
 */
187
void		memimagemove(void*, void*);
188
 
189
/*
190
 * Kernel cruft
191
 */
192
extern void	rdb(void);
193
extern int		iprint(char*, ...);
194
extern int		drawdebug;
195
 
196
/*
197
 * doprint interface: numbconv bit strings
198
 */
199
#ifdef VARARGCK
200
#pragma varargck argpos iprint 1
201
#pragma varargck type "llb" vlong
202
#pragma varargck type "llb" uvlong
203
#pragma varargck type "lb" long
204
#pragma varargck type "lb" ulong
205
#pragma varargck type "b" int
206
#pragma varargck type "b" uint
207
#endif
208
 
209
extern ulong _pixelbits(Memimage*,Point);
210
extern ulong pixelbits(Memimage*, Point);