Blame


1 cfa37a7b 2004-04-10 devnull .TH GRAPHICS 3
2 cfa37a7b 2004-04-10 devnull .SH NAME
3 cfa37a7b 2004-04-10 devnull Display, Point, Rectangle, Cursor, initdraw, geninitdraw, drawerror, initdisplay, closedisplay, getdefont, getwindow, gengetwindow, flushimage, bufimage, lockdisplay, unlockdisplay, cursorswitch, cursorset, openfont, buildfont, freefont, Pfmt, Rfmt, strtochan, chantostr, chantodepth \- interactive graphics
4 cfa37a7b 2004-04-10 devnull .SH SYNOPSIS
5 cfa37a7b 2004-04-10 devnull .nf
6 cfa37a7b 2004-04-10 devnull .PP
7 cfa37a7b 2004-04-10 devnull .ft L
8 cfa37a7b 2004-04-10 devnull #include <u.h>
9 cfa37a7b 2004-04-10 devnull #include <libc.h>
10 cfa37a7b 2004-04-10 devnull #include <draw.h>
11 cfa37a7b 2004-04-10 devnull #include <cursor.h>
12 cfa37a7b 2004-04-10 devnull .ft P
13 cfa37a7b 2004-04-10 devnull .PP
14 cfa37a7b 2004-04-10 devnull .ta \w'\fLFont* 'u
15 cfa37a7b 2004-04-10 devnull .B
16 cfa37a7b 2004-04-10 devnull int initdraw(void (*errfun)(Display*, char*), char *font,
17 cfa37a7b 2004-04-10 devnull .B
18 cfa37a7b 2004-04-10 devnull char *label)
19 cfa37a7b 2004-04-10 devnull .PP
20 cfa37a7b 2004-04-10 devnull .B
21 cfa37a7b 2004-04-10 devnull int geninitdraw(char *devdir, void(*errfun)(Display*, char*),
22 cfa37a7b 2004-04-10 devnull .PP
23 cfa37a7b 2004-04-10 devnull .B
24 cfa37a7b 2004-04-10 devnull char *font, char *label, char *mousedir, char *windir,
25 cfa37a7b 2004-04-10 devnull .B
26 cfa37a7b 2004-04-10 devnull int ref)
27 cfa37a7b 2004-04-10 devnull .PP
28 cfa37a7b 2004-04-10 devnull .B
29 cfa37a7b 2004-04-10 devnull int newwindow(char *str)
30 cfa37a7b 2004-04-10 devnull .PP
31 cfa37a7b 2004-04-10 devnull .B
32 cfa37a7b 2004-04-10 devnull void drawerror(Display *d, char *msg)
33 cfa37a7b 2004-04-10 devnull .PP
34 cfa37a7b 2004-04-10 devnull .B
35 cfa37a7b 2004-04-10 devnull Display* initdisplay(char *devdir, char *win, void(*errfun)(Display*, char*))
36 cfa37a7b 2004-04-10 devnull .PP
37 cfa37a7b 2004-04-10 devnull .B
38 cfa37a7b 2004-04-10 devnull void closedisplay(Display *d)
39 cfa37a7b 2004-04-10 devnull .PP
40 cfa37a7b 2004-04-10 devnull .B
41 cfa37a7b 2004-04-10 devnull Font* getdefont(Display *d)
42 cfa37a7b 2004-04-10 devnull .PP
43 cfa37a7b 2004-04-10 devnull .B
44 cfa37a7b 2004-04-10 devnull int flushimage(Display *d, int vis)
45 cfa37a7b 2004-04-10 devnull .PP
46 cfa37a7b 2004-04-10 devnull .B
47 cfa37a7b 2004-04-10 devnull int bufimage(Display *d, int n)
48 cfa37a7b 2004-04-10 devnull .PP
49 cfa37a7b 2004-04-10 devnull .B
50 cfa37a7b 2004-04-10 devnull int lockdisplay(Display *d)
51 cfa37a7b 2004-04-10 devnull .PP
52 cfa37a7b 2004-04-10 devnull .B
53 cfa37a7b 2004-04-10 devnull int unlockdisplay(Display *d)
54 cfa37a7b 2004-04-10 devnull .PP
55 cfa37a7b 2004-04-10 devnull .B
56 cfa37a7b 2004-04-10 devnull int getwindow(Display *d, int ref)
57 cfa37a7b 2004-04-10 devnull .PP
58 cfa37a7b 2004-04-10 devnull .B
59 cfa37a7b 2004-04-10 devnull int gengetwindow(Display *d, char *winname,
60 cfa37a7b 2004-04-10 devnull .br
61 cfa37a7b 2004-04-10 devnull .B
62 cfa37a7b 2004-04-10 devnull Image **ip, Screen **sp, int ref)
63 9f385187 2012-11-26 rsc .PP
64 9f385187 2012-11-26 rsc .B
65 9f385187 2012-11-26 rsc int scalesize(Display *d, int n)
66 cfa37a7b 2004-04-10 devnull .PP
67 cfa37a7b 2004-04-10 devnull .B
68 cfa37a7b 2004-04-10 devnull void cursorswitch(Cursor *curs)
69 cfa37a7b 2004-04-10 devnull .PP
70 cfa37a7b 2004-04-10 devnull .B
71 cfa37a7b 2004-04-10 devnull void cursorset(Point p)
72 cfa37a7b 2004-04-10 devnull .PP
73 cfa37a7b 2004-04-10 devnull .B
74 cfa37a7b 2004-04-10 devnull Font* openfont(Display *d, char *name)
75 cfa37a7b 2004-04-10 devnull .PP
76 cfa37a7b 2004-04-10 devnull .B
77 cfa37a7b 2004-04-10 devnull Font* buildfont(Display *d, char *desc, char *name)
78 cfa37a7b 2004-04-10 devnull .PP
79 cfa37a7b 2004-04-10 devnull .B
80 cfa37a7b 2004-04-10 devnull void freefont(Font *f)
81 cfa37a7b 2004-04-10 devnull .PP
82 cfa37a7b 2004-04-10 devnull .B
83 cfa37a7b 2004-04-10 devnull int Pfmt(Fmt*)
84 cfa37a7b 2004-04-10 devnull .PP
85 cfa37a7b 2004-04-10 devnull .B
86 cfa37a7b 2004-04-10 devnull int Rfmt(Fmt*)
87 cfa37a7b 2004-04-10 devnull .PP
88 cfa37a7b 2004-04-10 devnull .B
89 cfa37a7b 2004-04-10 devnull ulong strtochan(char *s)
90 cfa37a7b 2004-04-10 devnull .PP
91 cfa37a7b 2004-04-10 devnull .B
92 cfa37a7b 2004-04-10 devnull char* chantostr(char *s, ulong chan)
93 cfa37a7b 2004-04-10 devnull .PP
94 cfa37a7b 2004-04-10 devnull .B
95 cfa37a7b 2004-04-10 devnull int chantodepth(ulong chan)
96 cfa37a7b 2004-04-10 devnull .PP
97 cfa37a7b 2004-04-10 devnull .B
98 cfa37a7b 2004-04-10 devnull extern Display *display
99 cfa37a7b 2004-04-10 devnull .PP
100 cfa37a7b 2004-04-10 devnull .B
101 cfa37a7b 2004-04-10 devnull extern Image *screen
102 cfa37a7b 2004-04-10 devnull .PP
103 cfa37a7b 2004-04-10 devnull .B
104 cfa37a7b 2004-04-10 devnull extern Screen *_screen
105 cfa37a7b 2004-04-10 devnull .PP
106 cfa37a7b 2004-04-10 devnull .B
107 cfa37a7b 2004-04-10 devnull extern Font *font
108 cfa37a7b 2004-04-10 devnull .fi
109 cfa37a7b 2004-04-10 devnull .SH DESCRIPTION
110 cfa37a7b 2004-04-10 devnull A
111 cfa37a7b 2004-04-10 devnull .B Display
112 cfa37a7b 2004-04-10 devnull structure represents a connection to the graphics device,
113 cfa37a7b 2004-04-10 devnull .IR draw (3),
114 cfa37a7b 2004-04-10 devnull holding all graphics resources associated with the connection,
115 cfa37a7b 2004-04-10 devnull including in particular raster image data in use by the client program.
116 cfa37a7b 2004-04-10 devnull The structure is defined (in part) as:
117 cfa37a7b 2004-04-10 devnull .IP
118 cfa37a7b 2004-04-10 devnull .EX
119 cfa37a7b 2004-04-10 devnull .ta 6n +10n
120 cfa37a7b 2004-04-10 devnull typedef
121 cfa37a7b 2004-04-10 devnull struct Display
122 cfa37a7b 2004-04-10 devnull {
123 cfa37a7b 2004-04-10 devnull ...
124 cfa37a7b 2004-04-10 devnull void (*error)(Display*, char*);
125 cfa37a7b 2004-04-10 devnull ...
126 cfa37a7b 2004-04-10 devnull Image *black;
127 cfa37a7b 2004-04-10 devnull Image *white;
128 cfa37a7b 2004-04-10 devnull Image *opaque;
129 cfa37a7b 2004-04-10 devnull Image *transparent;
130 cfa37a7b 2004-04-10 devnull Image *image;
131 cfa37a7b 2004-04-10 devnull Font *defaultfont;
132 cfa37a7b 2004-04-10 devnull Subfont *defaultsubfont;
133 cfa37a7b 2004-04-10 devnull ...
134 cfa37a7b 2004-04-10 devnull };
135 cfa37a7b 2004-04-10 devnull .EE
136 cfa37a7b 2004-04-10 devnull .PP
137 cfa37a7b 2004-04-10 devnull A
138 cfa37a7b 2004-04-10 devnull .B Point
139 cfa37a7b 2004-04-10 devnull is a location in an Image
140 cfa37a7b 2004-04-10 devnull (see below and
141 bf8a59fa 2004-04-11 devnull .IR draw (3)),
142 cfa37a7b 2004-04-10 devnull such as the display, and is defined as:
143 cfa37a7b 2004-04-10 devnull .IP
144 cfa37a7b 2004-04-10 devnull .EX
145 cfa37a7b 2004-04-10 devnull .ta 6n
146 cfa37a7b 2004-04-10 devnull typedef
147 cfa37a7b 2004-04-10 devnull struct Point {
148 cfa37a7b 2004-04-10 devnull int x;
149 cfa37a7b 2004-04-10 devnull int y;
150 cfa37a7b 2004-04-10 devnull } Point;
151 cfa37a7b 2004-04-10 devnull .EE
152 cfa37a7b 2004-04-10 devnull .PP
153 cfa37a7b 2004-04-10 devnull The coordinate system has
154 cfa37a7b 2004-04-10 devnull .I x
155 cfa37a7b 2004-04-10 devnull increasing to the right and
156 cfa37a7b 2004-04-10 devnull .I y
157 cfa37a7b 2004-04-10 devnull increasing down.
158 cfa37a7b 2004-04-10 devnull .PP
159 cfa37a7b 2004-04-10 devnull A
160 cfa37a7b 2004-04-10 devnull .B Rectangle
161 cfa37a7b 2004-04-10 devnull is a rectangular area in an image.
162 cfa37a7b 2004-04-10 devnull .IP
163 cfa37a7b 2004-04-10 devnull .EX
164 cfa37a7b 2004-04-10 devnull .ta 6n
165 cfa37a7b 2004-04-10 devnull typedef
166 cfa37a7b 2004-04-10 devnull struct Rectangle {
167 cfa37a7b 2004-04-10 devnull Point min; /* upper left */
168 cfa37a7b 2004-04-10 devnull Point max; /* lower right */
169 cfa37a7b 2004-04-10 devnull } Rectangle;
170 cfa37a7b 2004-04-10 devnull .EE
171 cfa37a7b 2004-04-10 devnull .PP
172 cfa37a7b 2004-04-10 devnull By definition,
173 cfa37a7b 2004-04-10 devnull .BR min.x ≤ max.x
174 cfa37a7b 2004-04-10 devnull and
175 cfa37a7b 2004-04-10 devnull .BR min.y ≤ max.y .
176 cfa37a7b 2004-04-10 devnull By convention, the right (maximum
177 cfa37a7b 2004-04-10 devnull .IR x )
178 cfa37a7b 2004-04-10 devnull and bottom (maximum
179 cfa37a7b 2004-04-10 devnull .IR y )
180 cfa37a7b 2004-04-10 devnull edges are
181 cfa37a7b 2004-04-10 devnull excluded from the represented rectangle, so abutting rectangles have no
182 cfa37a7b 2004-04-10 devnull points in common.
183 cfa37a7b 2004-04-10 devnull Thus,
184 cfa37a7b 2004-04-10 devnull .B max
185 cfa37a7b 2004-04-10 devnull contains the coordinates of the first point beyond the rectangle.
186 cfa37a7b 2004-04-10 devnull .PP
187 cfa37a7b 2004-04-10 devnull The
188 cfa37a7b 2004-04-10 devnull .B Image
189 cfa37a7b 2004-04-10 devnull data structure is defined in
190 bf8a59fa 2004-04-11 devnull .IR draw (3).
191 cfa37a7b 2004-04-10 devnull .PP
192 cfa37a7b 2004-04-10 devnull A
193 cfa37a7b 2004-04-10 devnull .B Font
194 cfa37a7b 2004-04-10 devnull is a set of character images, indexed by runes (see
195 058b0118 2005-01-03 devnull .IR utf (7)).
196 cfa37a7b 2004-04-10 devnull The images are organized into
197 cfa37a7b 2004-04-10 devnull .BR Subfonts ,
198 cfa37a7b 2004-04-10 devnull each containing the images for a small, contiguous set of runes.
199 cfa37a7b 2004-04-10 devnull The detailed format of these data structures,
200 cfa37a7b 2004-04-10 devnull which are described in detail in
201 bf8a59fa 2004-04-11 devnull .IR cachechars (3),
202 cfa37a7b 2004-04-10 devnull is immaterial for most applications.
203 cfa37a7b 2004-04-10 devnull .B Font
204 cfa37a7b 2004-04-10 devnull and
205 cfa37a7b 2004-04-10 devnull .B Subfont
206 cfa37a7b 2004-04-10 devnull structures contain two interrelated fields:
207 cfa37a7b 2004-04-10 devnull .LR ascent ,
208 cfa37a7b 2004-04-10 devnull the distance from the top of the highest character
209 cfa37a7b 2004-04-10 devnull (actually the top of the image holding all the characters)
210 cfa37a7b 2004-04-10 devnull to the baseline,
211 cfa37a7b 2004-04-10 devnull and
212 cfa37a7b 2004-04-10 devnull .LR height ,
213 cfa37a7b 2004-04-10 devnull the distance from the top of the highest character to the bottom of
214 cfa37a7b 2004-04-10 devnull the lowest character (and hence, the interline spacing).
215 cfa37a7b 2004-04-10 devnull See
216 bf8a59fa 2004-04-11 devnull .IR cachechars (3)
217 cfa37a7b 2004-04-10 devnull for more details.
218 cfa37a7b 2004-04-10 devnull .PP
219 cfa37a7b 2004-04-10 devnull .I Buildfont
220 cfa37a7b 2004-04-10 devnull parses the font description in the buffer
221 cfa37a7b 2004-04-10 devnull .BR desc ,
222 cfa37a7b 2004-04-10 devnull returning a
223 cfa37a7b 2004-04-10 devnull .B Font*
224 cfa37a7b 2004-04-10 devnull pointer that can be used by
225 cfa37a7b 2004-04-10 devnull .B string
226 cfa37a7b 2004-04-10 devnull (see
227 bf8a59fa 2004-04-11 devnull .IR draw (3))
228 cfa37a7b 2004-04-10 devnull to draw characters from the font.
229 cfa37a7b 2004-04-10 devnull .I Openfont
230 cfa37a7b 2004-04-10 devnull does the same, but reads the description
231 cfa37a7b 2004-04-10 devnull from the named file.
232 cfa37a7b 2004-04-10 devnull .I Freefont
233 cfa37a7b 2004-04-10 devnull frees a font.
234 cfa37a7b 2004-04-10 devnull The convention for naming font files is:
235 cfa37a7b 2004-04-10 devnull .IP
236 cfa37a7b 2004-04-10 devnull .B /lib/font/bit/\fIname\fP/\fIrange\fP.\fIsize\fP.font
237 cfa37a7b 2004-04-10 devnull .PD
238 cfa37a7b 2004-04-10 devnull .PP
239 cfa37a7b 2004-04-10 devnull where
240 cfa37a7b 2004-04-10 devnull .I size
241 cfa37a7b 2004-04-10 devnull is approximately the height in pixels of the lower case letters
242 cfa37a7b 2004-04-10 devnull (without ascenders or descenders).
243 cfa37a7b 2004-04-10 devnull .I Range
244 cfa37a7b 2004-04-10 devnull gives some indication of which characters will be available: for example
245 cfa37a7b 2004-04-10 devnull .BR ascii ,
246 cfa37a7b 2004-04-10 devnull .BR latin1 ,
247 cfa37a7b 2004-04-10 devnull .BR euro ,
248 cfa37a7b 2004-04-10 devnull or
249 cfa37a7b 2004-04-10 devnull .BR unicode .
250 cfa37a7b 2004-04-10 devnull .B Euro
251 cfa37a7b 2004-04-10 devnull includes most European languages, punctuation marks, the International Phonetic
252 cfa37a7b 2004-04-10 devnull Alphabet, etc., but no Oriental languages.
253 cfa37a7b 2004-04-10 devnull .B Unicode
254 cfa37a7b 2004-04-10 devnull includes every character for which appropriate-sized images exist on the system.
255 cfa37a7b 2004-04-10 devnull .PP
256 cfa37a7b 2004-04-10 devnull A
257 cfa37a7b 2004-04-10 devnull .I Cursor
258 cfa37a7b 2004-04-10 devnull is defined:
259 cfa37a7b 2004-04-10 devnull .IP
260 cfa37a7b 2004-04-10 devnull .EX
261 cfa37a7b 2004-04-10 devnull .ta 6n +\w'Point 'u
262 cfa37a7b 2004-04-10 devnull typedef struct
263 cfa37a7b 2004-04-10 devnull Cursor {
264 cfa37a7b 2004-04-10 devnull Point offset;
265 cfa37a7b 2004-04-10 devnull uchar clr[2*16];
266 cfa37a7b 2004-04-10 devnull uchar set[2*16];
267 cfa37a7b 2004-04-10 devnull } Cursor;
268 cfa37a7b 2004-04-10 devnull .EE
269 cfa37a7b 2004-04-10 devnull .PP
270 cfa37a7b 2004-04-10 devnull The arrays are arranged in rows, two bytes per row, left to
271 cfa37a7b 2004-04-10 devnull right in big-endian order to give 16 rows
272 cfa37a7b 2004-04-10 devnull of 16 bits each.
273 cfa37a7b 2004-04-10 devnull A cursor is displayed on the screen by adding
274 cfa37a7b 2004-04-10 devnull .B offset
275 cfa37a7b 2004-04-10 devnull to the current mouse position, using
276 cfa37a7b 2004-04-10 devnull .B clr
277 cfa37a7b 2004-04-10 devnull as a mask to draw white at the pixels where
278 cfa37a7b 2004-04-10 devnull .B clr
279 cfa37a7b 2004-04-10 devnull is one, and then drawing black at the pixels where
280 cfa37a7b 2004-04-10 devnull .B set
281 cfa37a7b 2004-04-10 devnull is one.
282 cfa37a7b 2004-04-10 devnull .PP
283 cfa37a7b 2004-04-10 devnull The routine
284 cfa37a7b 2004-04-10 devnull .I initdraw
285 cfa37a7b 2004-04-10 devnull connects to the display; it returns \-1 if it fails and sets the error string.
286 cfa37a7b 2004-04-10 devnull .I Initdraw
287 cfa37a7b 2004-04-10 devnull sets up the global variables
288 cfa37a7b 2004-04-10 devnull .B display
289 cfa37a7b 2004-04-10 devnull (the
290 cfa37a7b 2004-04-10 devnull .B Display
291 cfa37a7b 2004-04-10 devnull structure representing the connection),
292 cfa37a7b 2004-04-10 devnull .B screen
293 cfa37a7b 2004-04-10 devnull (an
294 cfa37a7b 2004-04-10 devnull .B Image
295 cfa37a7b 2004-04-10 devnull representing the display memory itself or, if
296 cfa37a7b 2004-04-10 devnull .IR rio (1)
297 cfa37a7b 2004-04-10 devnull is running, the client's window),
298 cfa37a7b 2004-04-10 devnull and
299 cfa37a7b 2004-04-10 devnull .B font
300 cfa37a7b 2004-04-10 devnull (the default font for text).
301 cfa37a7b 2004-04-10 devnull The arguments to
302 cfa37a7b 2004-04-10 devnull .I initdraw
303 cfa37a7b 2004-04-10 devnull include a
304 cfa37a7b 2004-04-10 devnull .IR label ,
305 cfa37a7b 2004-04-10 devnull which is written to
306 cfa37a7b 2004-04-10 devnull .B /dev/label
307 cfa37a7b 2004-04-10 devnull if non-nil
308 cfa37a7b 2004-04-10 devnull so that it can be used to identify the window when hidden (see
309 cfa37a7b 2004-04-10 devnull .IR rio (1)).
310 cfa37a7b 2004-04-10 devnull The font is created by reading the named
311 cfa37a7b 2004-04-10 devnull .I font
312 cfa37a7b 2004-04-10 devnull file. If
313 cfa37a7b 2004-04-10 devnull .B font
314 cfa37a7b 2004-04-10 devnull is null,
315 cfa37a7b 2004-04-10 devnull .I initdraw
316 cfa37a7b 2004-04-10 devnull reads the file named in the environment variable
317 cfa37a7b 2004-04-10 devnull .BR $font ;
318 cfa37a7b 2004-04-10 devnull if
319 cfa37a7b 2004-04-10 devnull .B $font
320 cfa37a7b 2004-04-10 devnull is not set, it imports the default (usually minimal)
321 cfa37a7b 2004-04-10 devnull font from the operating system.
322 cfa37a7b 2004-04-10 devnull The global
323 cfa37a7b 2004-04-10 devnull .I font
324 cfa37a7b 2004-04-10 devnull will be set to point to the resulting
325 cfa37a7b 2004-04-10 devnull .B Font
326 cfa37a7b 2004-04-10 devnull structure.
327 cfa37a7b 2004-04-10 devnull The
328 cfa37a7b 2004-04-10 devnull .I errfun
329 cfa37a7b 2004-04-10 devnull argument is a
330 cfa37a7b 2004-04-10 devnull .I graphics error function
331 cfa37a7b 2004-04-10 devnull to call in the event of a fatal error in the library; it must never return.
332 cfa37a7b 2004-04-10 devnull Its arguments are the
333 cfa37a7b 2004-04-10 devnull display pointer and an error string.
334 cfa37a7b 2004-04-10 devnull If
335 cfa37a7b 2004-04-10 devnull .I errfun
336 cfa37a7b 2004-04-10 devnull is nil, the library provides a default, called
337 cfa37a7b 2004-04-10 devnull .IR drawerror .
338 cfa37a7b 2004-04-10 devnull Another effect of
339 cfa37a7b 2004-04-10 devnull .I initdraw
340 cfa37a7b 2004-04-10 devnull is that it installs
341 bf8a59fa 2004-04-11 devnull .IR print (3)
342 cfa37a7b 2004-04-10 devnull formats
343 cfa37a7b 2004-04-10 devnull .I Pfmt
344 cfa37a7b 2004-04-10 devnull and
345 cfa37a7b 2004-04-10 devnull .I Rfmt
346 cfa37a7b 2004-04-10 devnull as
347 cfa37a7b 2004-04-10 devnull .L %P
348 cfa37a7b 2004-04-10 devnull and
349 cfa37a7b 2004-04-10 devnull .L %R
350 cfa37a7b 2004-04-10 devnull for printing
351 cfa37a7b 2004-04-10 devnull .B Points
352 cfa37a7b 2004-04-10 devnull and
353 cfa37a7b 2004-04-10 devnull .BR Rectangles .
354 cfa37a7b 2004-04-10 devnull .PP
355 cfa37a7b 2004-04-10 devnull The
356 cfa37a7b 2004-04-10 devnull .I geninitdraw
357 cfa37a7b 2004-04-10 devnull function provides a less automated way to establish a connection, for programs
358 cfa37a7b 2004-04-10 devnull that wish to connect to multiple displays.
359 cfa37a7b 2004-04-10 devnull .I Devdir
360 cfa37a7b 2004-04-10 devnull is the name of the directory containing the device files for the display
361 cfa37a7b 2004-04-10 devnull (if nil, default
362 cfa37a7b 2004-04-10 devnull .BR /dev );
363 cfa37a7b 2004-04-10 devnull .IR errfun ,
364 cfa37a7b 2004-04-10 devnull .IR font ,
365 cfa37a7b 2004-04-10 devnull and
366 cfa37a7b 2004-04-10 devnull .I label
367 cfa37a7b 2004-04-10 devnull are as in
368 cfa37a7b 2004-04-10 devnull .IR initdraw ;
369 cfa37a7b 2004-04-10 devnull .I mousedir
370 cfa37a7b 2004-04-10 devnull and
371 cfa37a7b 2004-04-10 devnull .I windir
372 cfa37a7b 2004-04-10 devnull are the directories holding the
373 cfa37a7b 2004-04-10 devnull .B mouse
374 cfa37a7b 2004-04-10 devnull and
375 cfa37a7b 2004-04-10 devnull .B winname
376 cfa37a7b 2004-04-10 devnull files; and
377 cfa37a7b 2004-04-10 devnull .I ref
378 cfa37a7b 2004-04-10 devnull specifies the refresh function to be used to create the window, if running under
379 cfa37a7b 2004-04-10 devnull .IR rio (1)
380 cfa37a7b 2004-04-10 devnull (see
381 bf8a59fa 2004-04-11 devnull .IR window (3)).
382 058b0118 2005-01-03 devnull .\" .PP
383 058b0118 2005-01-03 devnull .\" The function
384 058b0118 2005-01-03 devnull .\" .I newwindow
385 058b0118 2005-01-03 devnull .\" may be called before
386 058b0118 2005-01-03 devnull .\" .I initdraw
387 058b0118 2005-01-03 devnull .\" or
388 058b0118 2005-01-03 devnull .\" .IR geninitdraw
389 058b0118 2005-01-03 devnull .\" to cause the program to occupy a newly created window rather than take over the one in
390 058b0118 2005-01-03 devnull .\" which it is running when it starts.
391 058b0118 2005-01-03 devnull .\" The
392 058b0118 2005-01-03 devnull .\" .I str
393 058b0118 2005-01-03 devnull .\" argument, if non-null, is concatenated to the string \f5\&"new\ "\fP
394 058b0118 2005-01-03 devnull .\" that is used to create the window (see
395 058b0118 2005-01-03 devnull .\" .IR rio (4)).
396 058b0118 2005-01-03 devnull .\" For example,
397 058b0118 2005-01-03 devnull .\" .B newwindow("-hide -dy 100")
398 058b0118 2005-01-03 devnull .\" will cause the program to run in a newly created, hidden window
399 058b0118 2005-01-03 devnull .\" 100 pixels high.
400 cfa37a7b 2004-04-10 devnull .PP
401 cfa37a7b 2004-04-10 devnull .I Initdisplay
402 cfa37a7b 2004-04-10 devnull is part of
403 cfa37a7b 2004-04-10 devnull .IR geninitdraw ;
404 cfa37a7b 2004-04-10 devnull it sets up the display structures but does not allocate any fonts or call
405 cfa37a7b 2004-04-10 devnull .IR getwindow .
406 cfa37a7b 2004-04-10 devnull The arguments are similar to those of
407 cfa37a7b 2004-04-10 devnull .IR initdraw ;
408 cfa37a7b 2004-04-10 devnull .I win
409 cfa37a7b 2004-04-10 devnull names the directory, default
410 cfa37a7b 2004-04-10 devnull .BR /dev ,
411 cfa37a7b 2004-04-10 devnull in which the files associated with the window reside.
412 cfa37a7b 2004-04-10 devnull .I Closedisplay
413 cfa37a7b 2004-04-10 devnull disconnects the display and frees the associated data structures.
414 cfa37a7b 2004-04-10 devnull .I Getdefont
415 cfa37a7b 2004-04-10 devnull builds a
416 cfa37a7b 2004-04-10 devnull .B Font
417 cfa37a7b 2004-04-10 devnull structure from in-core data describing a default font.
418 cfa37a7b 2004-04-10 devnull None of these routines is needed by most programs, since
419 cfa37a7b 2004-04-10 devnull .I initdraw
420 cfa37a7b 2004-04-10 devnull calls them as needed.
421 cfa37a7b 2004-04-10 devnull .PP
422 cfa37a7b 2004-04-10 devnull The data structures associated with the display must be protected in a multi-process program,
423 cfa37a7b 2004-04-10 devnull because they assume only one process will be using them at a time.
424 cfa37a7b 2004-04-10 devnull Multi-process programs should set
425 cfa37a7b 2004-04-10 devnull .B display->locking
426 cfa37a7b 2004-04-10 devnull to
427 cfa37a7b 2004-04-10 devnull .BR 1 ,
428 cfa37a7b 2004-04-10 devnull to notify the library to use a locking protocol for its own accesses,
429 cfa37a7b 2004-04-10 devnull and call
430 cfa37a7b 2004-04-10 devnull .I lockdisplay
431 cfa37a7b 2004-04-10 devnull and
432 cfa37a7b 2004-04-10 devnull .I unlockdisplay
433 cfa37a7b 2004-04-10 devnull around any calls to the graphics library that will cause messages to be sent to the display device.
434 cfa37a7b 2004-04-10 devnull .I Initdraw
435 cfa37a7b 2004-04-10 devnull and
436 cfa37a7b 2004-04-10 devnull .I geninitdraw
437 cfa37a7b 2004-04-10 devnull initialize the display to the locked state.
438 cfa37a7b 2004-04-10 devnull .PP
439 cfa37a7b 2004-04-10 devnull .I Getwindow
440 cfa37a7b 2004-04-10 devnull returns a pointer to the window associated with the application; it is called
441 cfa37a7b 2004-04-10 devnull automatically by
442 cfa37a7b 2004-04-10 devnull .I initdraw
443 cfa37a7b 2004-04-10 devnull to establish the
444 cfa37a7b 2004-04-10 devnull .B screen
445 cfa37a7b 2004-04-10 devnull pointer but must be called after each resizing of the window to restore
446 cfa37a7b 2004-04-10 devnull the library's connection to the window.
447 cfa37a7b 2004-04-10 devnull If
448 cfa37a7b 2004-04-10 devnull .B rio
449 cfa37a7b 2004-04-10 devnull is not running, it returns
450 cfa37a7b 2004-04-10 devnull .BR display->image ;
451 cfa37a7b 2004-04-10 devnull otherwise it negotiates with
452 cfa37a7b 2004-04-10 devnull .B rio
453 cfa37a7b 2004-04-10 devnull by looking in
454 cfa37a7b 2004-04-10 devnull .B /dev/winname
455 cfa37a7b 2004-04-10 devnull to find the name of the window and opening it using
456 cfa37a7b 2004-04-10 devnull .B namedimage
457 cfa37a7b 2004-04-10 devnull (see
458 bf8a59fa 2004-04-11 devnull .IR allocimage (3)).
459 cfa37a7b 2004-04-10 devnull The resulting window will be created using the refresh method
460 cfa37a7b 2004-04-10 devnull .I ref
461 cfa37a7b 2004-04-10 devnull (see
462 bf8a59fa 2004-04-11 devnull .IR window (3));
463 cfa37a7b 2004-04-10 devnull this should almost always be
464 cfa37a7b 2004-04-10 devnull .B Refnone
465 cfa37a7b 2004-04-10 devnull because
466 cfa37a7b 2004-04-10 devnull .B rio
467 cfa37a7b 2004-04-10 devnull provides backing store for the window.
468 cfa37a7b 2004-04-10 devnull .PP
469 cfa37a7b 2004-04-10 devnull .I Getwindow
470 cfa37a7b 2004-04-10 devnull overwrites the global variables
471 cfa37a7b 2004-04-10 devnull .BR screen ,
472 cfa37a7b 2004-04-10 devnull a pointer to the
473 cfa37a7b 2004-04-10 devnull .B Image
474 cfa37a7b 2004-04-10 devnull defining the window (or the overall display, if no window system is running); and
475 cfa37a7b 2004-04-10 devnull .BR _screen ,
476 cfa37a7b 2004-04-10 devnull a pointer to the
477 cfa37a7b 2004-04-10 devnull .B Screen
478 cfa37a7b 2004-04-10 devnull representing the root of the window's hierarchy. (See
479 bf8a59fa 2004-04-11 devnull .IR window (3).
480 cfa37a7b 2004-04-10 devnull The overloading of the
481 cfa37a7b 2004-04-10 devnull .B screen
482 cfa37a7b 2004-04-10 devnull word is an unfortunate historical accident.)
483 cfa37a7b 2004-04-10 devnull .I Getwindow
484 cfa37a7b 2004-04-10 devnull arranges that
485 cfa37a7b 2004-04-10 devnull .B screen
486 cfa37a7b 2004-04-10 devnull point to the portion of the window inside the border;
487 cfa37a7b 2004-04-10 devnull sophisticated clients may use
488 cfa37a7b 2004-04-10 devnull .B _screen
489 cfa37a7b 2004-04-10 devnull to make further subwindows.
490 058b0118 2005-01-03 devnull .\" Programs desiring multiple independent windows
491 058b0118 2005-01-03 devnull .\" may use the mechanisms of
492 058b0118 2005-01-03 devnull .\" .IR rio (4)
493 058b0118 2005-01-03 devnull .\" to create more windows (usually by a fresh mount of the window sytem
494 058b0118 2005-01-03 devnull .\" in a directory other than
495 058b0118 2005-01-03 devnull .\" .BR /dev ),
496 058b0118 2005-01-03 devnull .\" then use
497 058b0118 2005-01-03 devnull .\" .I gengetwindow
498 058b0118 2005-01-03 devnull .\" to connect to them.
499 cfa37a7b 2004-04-10 devnull .IR Gengetwindow 's
500 cfa37a7b 2004-04-10 devnull extra arguments are the full path of the window's
501 cfa37a7b 2004-04-10 devnull .B winname
502 cfa37a7b 2004-04-10 devnull file and pointers to be overwritten with the values of the `global'
503 cfa37a7b 2004-04-10 devnull .B Image
504 cfa37a7b 2004-04-10 devnull and
505 cfa37a7b 2004-04-10 devnull .B Screen
506 cfa37a7b 2004-04-10 devnull variables for the new window.
507 9f385187 2012-11-26 rsc .PP
508 9f385187 2012-11-26 rsc Historically, Plan 9 graphics programs have used fixed-size graphics features that assume a narrow range of display densities, around 100 dpi: pixels (or dots) per inch.
509 9f385187 2012-11-26 rsc The new field
510 9f385187 2012-11-26 rsc .B display->dpi
511 9f385187 2012-11-26 rsc contains the display's actual density if known, or else
512 9f385187 2012-11-26 rsc .B DefaultDPI
513 9f385187 2012-11-26 rsc (100).
514 9f385187 2012-11-26 rsc .I Scalesize
515 9f385187 2012-11-26 rsc scales the fixed pixel count
516 9f385187 2012-11-26 rsc .I n
517 9f385187 2012-11-26 rsc by
518 9f385187 2012-11-26 rsc .BR display->dpi / DefaultDPI ,
519 9f385187 2012-11-26 rsc rounding appropriately.
520 cfa37a7b 2004-04-10 devnull .PP
521 cfa37a7b 2004-04-10 devnull The mouse cursor is always displayed.
522 cfa37a7b 2004-04-10 devnull The initial cursor is an arrow.
523 cfa37a7b 2004-04-10 devnull .I Cursorswitch
524 cfa37a7b 2004-04-10 devnull causes the argument cursor to be displayed instead.
525 cfa37a7b 2004-04-10 devnull A zero argument causes a switch back to the arrow cursor.
526 cfa37a7b 2004-04-10 devnull .I Cursorset
527 cfa37a7b 2004-04-10 devnull moves the mouse cursor to position
528 cfa37a7b 2004-04-10 devnull .IR p ,
529 cfa37a7b 2004-04-10 devnull provided (if in a window) that the requesting program is
530 cfa37a7b 2004-04-10 devnull executing in the current window and the mouse is within
531 cfa37a7b 2004-04-10 devnull the window boundaries; otherwise
532 cfa37a7b 2004-04-10 devnull .I cursorset
533 cfa37a7b 2004-04-10 devnull is a no-op.
534 cfa37a7b 2004-04-10 devnull .PP
535 cfa37a7b 2004-04-10 devnull The graphics functions described in
536 bf8a59fa 2004-04-11 devnull .IR draw (3),
537 bf8a59fa 2004-04-11 devnull .IR allocimage (3),
538 bf8a59fa 2004-04-11 devnull .IR cachechars (3),
539 cfa37a7b 2004-04-10 devnull and
540 bf8a59fa 2004-04-11 devnull .IR subfont (3)
541 cfa37a7b 2004-04-10 devnull are implemented by writing commands to files under
542 cfa37a7b 2004-04-10 devnull .B /dev/draw
543 cfa37a7b 2004-04-10 devnull (see
544 cfa37a7b 2004-04-10 devnull .IR draw (3));
545 cfa37a7b 2004-04-10 devnull the writes are buffered, so the functions may not take effect immediately.
546 cfa37a7b 2004-04-10 devnull .I Flushimage
547 cfa37a7b 2004-04-10 devnull flushes the buffer, doing all pending graphics operations.
548 cfa37a7b 2004-04-10 devnull If
549 cfa37a7b 2004-04-10 devnull .I vis
550 cfa37a7b 2004-04-10 devnull is non-zero, any changes are also copied from the `soft screen' (if any) in the
551 cfa37a7b 2004-04-10 devnull driver to the visible frame buffer.
552 cfa37a7b 2004-04-10 devnull The various allocation routines in the library flush automatically, as does the event
553 cfa37a7b 2004-04-10 devnull package (see
554 bf8a59fa 2004-04-11 devnull .IR event (3));
555 cfa37a7b 2004-04-10 devnull most programs do not need to call
556 cfa37a7b 2004-04-10 devnull .IR flushimage .
557 cfa37a7b 2004-04-10 devnull It returns \-1 on error.
558 cfa37a7b 2004-04-10 devnull .PP
559 cfa37a7b 2004-04-10 devnull .I Bufimage
560 cfa37a7b 2004-04-10 devnull is used to allocate space for
561 cfa37a7b 2004-04-10 devnull .I n
562 cfa37a7b 2004-04-10 devnull bytes in the display buffer.
563 cfa37a7b 2004-04-10 devnull It is used by all the graphics routines to send messages to the display.
564 cfa37a7b 2004-04-10 devnull .PP
565 cfa37a7b 2004-04-10 devnull The functions
566 cfa37a7b 2004-04-10 devnull .I strtochan
567 cfa37a7b 2004-04-10 devnull and
568 cfa37a7b 2004-04-10 devnull .I chantostr
569 cfa37a7b 2004-04-10 devnull convert between the channel descriptor strings
570 cfa37a7b 2004-04-10 devnull used by
571 058b0118 2005-01-03 devnull .IR image (7)
572 cfa37a7b 2004-04-10 devnull and the internal
573 cfa37a7b 2004-04-10 devnull .B ulong
574 cfa37a7b 2004-04-10 devnull representation
575 cfa37a7b 2004-04-10 devnull used by the graphics protocol
576 cfa37a7b 2004-04-10 devnull (see
577 cfa37a7b 2004-04-10 devnull .IR draw (3)'s
578 cfa37a7b 2004-04-10 devnull .B b
579 cfa37a7b 2004-04-10 devnull message).
580 cfa37a7b 2004-04-10 devnull .B Chantostr
581 cfa37a7b 2004-04-10 devnull writes at most nine bytes into the buffer pointed at by
582 cfa37a7b 2004-04-10 devnull .I s
583 cfa37a7b 2004-04-10 devnull and returns
584 cfa37a7b 2004-04-10 devnull .I s
585 cfa37a7b 2004-04-10 devnull on success,
586 cfa37a7b 2004-04-10 devnull 0
587 cfa37a7b 2004-04-10 devnull on failure.
588 cfa37a7b 2004-04-10 devnull .B Chantodepth
589 cfa37a7b 2004-04-10 devnull returns the number of bits per pixel used by the
590 cfa37a7b 2004-04-10 devnull format specified by
591 cfa37a7b 2004-04-10 devnull .IR chan .
592 cfa37a7b 2004-04-10 devnull Both
593 cfa37a7b 2004-04-10 devnull .B chantodepth
594 cfa37a7b 2004-04-10 devnull and
595 cfa37a7b 2004-04-10 devnull .B strtochan
596 cfa37a7b 2004-04-10 devnull return 0 when presented
597 cfa37a7b 2004-04-10 devnull with bad input.
598 cfa37a7b 2004-04-10 devnull .SH EXAMPLES
599 cfa37a7b 2004-04-10 devnull To reconnect to the window after a resize event,
600 cfa37a7b 2004-04-10 devnull .IP
601 cfa37a7b 2004-04-10 devnull .EX
602 cfa37a7b 2004-04-10 devnull if(getwindow(display, Refnone) < 0)
603 cfa37a7b 2004-04-10 devnull sysfatal("resize failed: %r");
604 cfa37a7b 2004-04-10 devnull .EE
605 cfa37a7b 2004-04-10 devnull .PP
606 cfa37a7b 2004-04-10 devnull To create and set up a new
607 cfa37a7b 2004-04-10 devnull .IR rio (1)
608 cfa37a7b 2004-04-10 devnull window,
609 cfa37a7b 2004-04-10 devnull .IP
610 cfa37a7b 2004-04-10 devnull .EX
611 cfa37a7b 2004-04-10 devnull Image *screen2;
612 cfa37a7b 2004-04-10 devnull Screen *_screen2;
613 cfa37a7b 2004-04-10 devnull
614 cfa37a7b 2004-04-10 devnull srvwsys = getenv("wsys");
615 cfa37a7b 2004-04-10 devnull if(srvwsys == nil)
616 cfa37a7b 2004-04-10 devnull sysfatal("can't find $wsys: %r");
617 cfa37a7b 2004-04-10 devnull rfork(RFNAMEG); /* keep mount of rio private */
618 cfa37a7b 2004-04-10 devnull
619 cfa37a7b 2004-04-10 devnull fd = open(srvwsys, ORDWR);
620 cfa37a7b 2004-04-10 devnull if(fd < 0)
621 cfa37a7b 2004-04-10 devnull sysfatal("can't open $wsys: %r");
622 cfa37a7b 2004-04-10 devnull
623 cfa37a7b 2004-04-10 devnull /* mount creates window; see \f2rio\fP(4) */
624 cfa37a7b 2004-04-10 devnull if(mount(fd, -1, "/tmp", MREPL, "new -dx 300-dy 200") < 0)
625 cfa37a7b 2004-04-10 devnull sysfatal("can't mount new window: %r");
626 cfa37a7b 2004-04-10 devnull if(gengetwindow(display, "/tmp/winname",
627 cfa37a7b 2004-04-10 devnull &screen2, &_screen2, Refnone) < 0)
628 cfa37a7b 2004-04-10 devnull sysfatal("resize failed: %r");
629 cfa37a7b 2004-04-10 devnull
630 cfa37a7b 2004-04-10 devnull /* now open /tmp/cons, /tmp/mouse */
631 cfa37a7b 2004-04-10 devnull \&...
632 cfa37a7b 2004-04-10 devnull .EE
633 cfa37a7b 2004-04-10 devnull .SH FILES
634 c8b6342d 2005-01-13 devnull .BR \*9/font/bit " directory of fonts
635 cfa37a7b 2004-04-10 devnull .SH SOURCE
636 c3674de4 2005-01-11 devnull .B \*9/src/libdraw
637 cfa37a7b 2004-04-10 devnull .SH "SEE ALSO"
638 cfa37a7b 2004-04-10 devnull .IR rio (1),
639 bf8a59fa 2004-04-11 devnull .IR addpt (3),
640 bf8a59fa 2004-04-11 devnull .IR allocimage (3),
641 bf8a59fa 2004-04-11 devnull .IR cachechars (3),
642 bf8a59fa 2004-04-11 devnull .IR subfont (3),
643 cfa37a7b 2004-04-10 devnull .IR draw (3),
644 bf8a59fa 2004-04-11 devnull .IR event (3),
645 bf8a59fa 2004-04-11 devnull .IR frame (3),
646 bf8a59fa 2004-04-11 devnull .IR print (3),
647 bf8a59fa 2004-04-11 devnull .IR window (3),
648 bf8a59fa 2004-04-11 devnull .IR draw (3),
649 058b0118 2005-01-03 devnull .\" .IR rio (4),
650 058b0118 2005-01-03 devnull .IR image (7),
651 058b0118 2005-01-03 devnull .IR font (7)
652 cfa37a7b 2004-04-10 devnull .SH DIAGNOSTICS
653 cfa37a7b 2004-04-10 devnull An error function may call
654 bf8a59fa 2004-04-11 devnull .IR errstr (3)
655 cfa37a7b 2004-04-10 devnull for further diagnostics.
656 cfa37a7b 2004-04-10 devnull .SH BUGS
657 cfa37a7b 2004-04-10 devnull The names
658 cfa37a7b 2004-04-10 devnull .B clr
659 cfa37a7b 2004-04-10 devnull and
660 cfa37a7b 2004-04-10 devnull .B set
661 cfa37a7b 2004-04-10 devnull in the
662 cfa37a7b 2004-04-10 devnull .B Cursor
663 cfa37a7b 2004-04-10 devnull structure are reminders of an archaic color map
664 cfa37a7b 2004-04-10 devnull and might be more appropriately called
665 cfa37a7b 2004-04-10 devnull .B white
666 cfa37a7b 2004-04-10 devnull and
667 cfa37a7b 2004-04-10 devnull .BR black .
668 c8b6342d 2005-01-13 devnull .PP
669 c8b6342d 2005-01-13 devnull These manual pages contain many references to
670 c8b6342d 2005-01-13 devnull the now-fictitious
671 c8b6342d 2005-01-13 devnull .BR /dev/draw .