1 cfa37a7b 2004-04-10 devnull .TH GRAPHICS 3
3 16d00819 2018-11-16 rsc Display, Point, Rectangle, Cursor, initdraw, geninitdraw, drawerror, initdisplay, closedisplay, 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
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>
14 cfa37a7b 2004-04-10 devnull .ta \w'\fLFont* 'u
16 cfa37a7b 2004-04-10 devnull int initdraw(void (*errfun)(Display*, char*), char *font,
18 cfa37a7b 2004-04-10 devnull char *label)
21 cfa37a7b 2004-04-10 devnull int geninitdraw(char *devdir, void(*errfun)(Display*, char*),
24 cfa37a7b 2004-04-10 devnull char *font, char *label, char *mousedir, char *windir,
29 cfa37a7b 2004-04-10 devnull int newwindow(char *str)
32 cfa37a7b 2004-04-10 devnull void drawerror(Display *d, char *msg)
35 cfa37a7b 2004-04-10 devnull Display* initdisplay(char *devdir, char *win, void(*errfun)(Display*, char*))
38 cfa37a7b 2004-04-10 devnull void closedisplay(Display *d)
41 cfa37a7b 2004-04-10 devnull int flushimage(Display *d, int vis)
44 cfa37a7b 2004-04-10 devnull int bufimage(Display *d, int n)
47 cfa37a7b 2004-04-10 devnull int lockdisplay(Display *d)
50 cfa37a7b 2004-04-10 devnull int unlockdisplay(Display *d)
53 cfa37a7b 2004-04-10 devnull int getwindow(Display *d, int ref)
56 cfa37a7b 2004-04-10 devnull int gengetwindow(Display *d, char *winname,
59 cfa37a7b 2004-04-10 devnull Image **ip, Screen **sp, int ref)
62 9f385187 2012-11-26 rsc int scalesize(Display *d, int n)
65 cfa37a7b 2004-04-10 devnull void cursorswitch(Cursor *curs)
68 cfa37a7b 2004-04-10 devnull void cursorset(Point p)
71 cfa37a7b 2004-04-10 devnull Font* openfont(Display *d, char *name)
74 cfa37a7b 2004-04-10 devnull Font* buildfont(Display *d, char *desc, char *name)
77 cfa37a7b 2004-04-10 devnull void freefont(Font *f)
80 cfa37a7b 2004-04-10 devnull int Pfmt(Fmt*)
83 cfa37a7b 2004-04-10 devnull int Rfmt(Fmt*)
86 cfa37a7b 2004-04-10 devnull ulong strtochan(char *s)
89 cfa37a7b 2004-04-10 devnull char* chantostr(char *s, ulong chan)
92 cfa37a7b 2004-04-10 devnull int chantodepth(ulong chan)
95 cfa37a7b 2004-04-10 devnull extern Display *display
98 cfa37a7b 2004-04-10 devnull extern Image *screen
101 cfa37a7b 2004-04-10 devnull extern Screen *_screen
104 cfa37a7b 2004-04-10 devnull extern Font *font
106 cfa37a7b 2004-04-10 devnull .SH DESCRIPTION
108 cfa37a7b 2004-04-10 devnull .B Display
109 cfa37a7b 2004-04-10 devnull structure represents a connection to the graphics device,
110 d32deab1 2020-08-16 rsc .MR draw (3) ,
111 cfa37a7b 2004-04-10 devnull holding all graphics resources associated with the connection,
112 cfa37a7b 2004-04-10 devnull including in particular raster image data in use by the client program.
113 cfa37a7b 2004-04-10 devnull The structure is defined (in part) as:
116 cfa37a7b 2004-04-10 devnull .ta 6n +10n
118 cfa37a7b 2004-04-10 devnull struct Display
121 cfa37a7b 2004-04-10 devnull void (*error)(Display*, char*);
123 cfa37a7b 2004-04-10 devnull Image *black;
124 cfa37a7b 2004-04-10 devnull Image *white;
125 cfa37a7b 2004-04-10 devnull Image *opaque;
126 cfa37a7b 2004-04-10 devnull Image *transparent;
127 cfa37a7b 2004-04-10 devnull Image *image;
128 cfa37a7b 2004-04-10 devnull Font *defaultfont;
129 cfa37a7b 2004-04-10 devnull Subfont *defaultsubfont;
135 cfa37a7b 2004-04-10 devnull .B Point
136 cfa37a7b 2004-04-10 devnull is a location in an Image
137 cfa37a7b 2004-04-10 devnull (see below and
138 d32deab1 2020-08-16 rsc .MR draw (3) ),
139 cfa37a7b 2004-04-10 devnull such as the display, and is defined as:
144 cfa37a7b 2004-04-10 devnull struct Point {
147 cfa37a7b 2004-04-10 devnull } Point;
150 cfa37a7b 2004-04-10 devnull The coordinate system has
152 cfa37a7b 2004-04-10 devnull increasing to the right and
154 cfa37a7b 2004-04-10 devnull increasing down.
157 cfa37a7b 2004-04-10 devnull .B Rectangle
158 cfa37a7b 2004-04-10 devnull is a rectangular area in an image.
163 cfa37a7b 2004-04-10 devnull struct Rectangle {
164 cfa37a7b 2004-04-10 devnull Point min; /* upper left */
165 cfa37a7b 2004-04-10 devnull Point max; /* lower right */
166 cfa37a7b 2004-04-10 devnull } Rectangle;
169 cfa37a7b 2004-04-10 devnull By definition,
170 cfa37a7b 2004-04-10 devnull .BR min.x ≤ max.x
172 cfa37a7b 2004-04-10 devnull .BR min.y ≤ max.y .
173 cfa37a7b 2004-04-10 devnull By convention, the right (maximum
175 cfa37a7b 2004-04-10 devnull and bottom (maximum
177 cfa37a7b 2004-04-10 devnull edges are
178 cfa37a7b 2004-04-10 devnull excluded from the represented rectangle, so abutting rectangles have no
179 cfa37a7b 2004-04-10 devnull points in common.
182 cfa37a7b 2004-04-10 devnull contains the coordinates of the first point beyond the rectangle.
185 cfa37a7b 2004-04-10 devnull .B Image
186 cfa37a7b 2004-04-10 devnull data structure is defined in
187 d32deab1 2020-08-16 rsc .MR draw (3) .
191 cfa37a7b 2004-04-10 devnull is a set of character images, indexed by runes (see
192 d32deab1 2020-08-16 rsc .MR utf (7) ).
193 cfa37a7b 2004-04-10 devnull The images are organized into
194 cfa37a7b 2004-04-10 devnull .BR Subfonts ,
195 cfa37a7b 2004-04-10 devnull each containing the images for a small, contiguous set of runes.
196 cfa37a7b 2004-04-10 devnull The detailed format of these data structures,
197 cfa37a7b 2004-04-10 devnull which are described in detail in
198 d32deab1 2020-08-16 rsc .MR cachechars (3) ,
199 cfa37a7b 2004-04-10 devnull is immaterial for most applications.
202 cfa37a7b 2004-04-10 devnull .B Subfont
203 cfa37a7b 2004-04-10 devnull structures contain two interrelated fields:
204 cfa37a7b 2004-04-10 devnull .LR ascent ,
205 cfa37a7b 2004-04-10 devnull the distance from the top of the highest character
206 cfa37a7b 2004-04-10 devnull (actually the top of the image holding all the characters)
207 cfa37a7b 2004-04-10 devnull to the baseline,
209 cfa37a7b 2004-04-10 devnull .LR height ,
210 cfa37a7b 2004-04-10 devnull the distance from the top of the highest character to the bottom of
211 cfa37a7b 2004-04-10 devnull the lowest character (and hence, the interline spacing).
213 d32deab1 2020-08-16 rsc .MR cachechars (3)
214 cfa37a7b 2004-04-10 devnull for more details.
216 cfa37a7b 2004-04-10 devnull .I Buildfont
217 cfa37a7b 2004-04-10 devnull parses the font description in the buffer
218 cfa37a7b 2004-04-10 devnull .BR desc ,
219 cfa37a7b 2004-04-10 devnull returning a
220 cfa37a7b 2004-04-10 devnull .B Font*
221 cfa37a7b 2004-04-10 devnull pointer that can be used by
222 cfa37a7b 2004-04-10 devnull .B string
224 d32deab1 2020-08-16 rsc .MR draw (3) )
225 cfa37a7b 2004-04-10 devnull to draw characters from the font.
226 cfa37a7b 2004-04-10 devnull .I Openfont
227 cfa37a7b 2004-04-10 devnull does the same, but reads the description
228 b3a110af 2015-02-17 rsc from the named font.
229 cfa37a7b 2004-04-10 devnull .I Freefont
230 cfa37a7b 2004-04-10 devnull frees a font.
231 b3a110af 2015-02-17 rsc In contrast to Plan 9, font names in Plan 9 from User Space are
232 b3a110af 2015-02-17 rsc a small language describing the desired font.
234 d32deab1 2020-08-16 rsc .MR font (7)
235 b3a110af 2015-02-17 rsc for details.
238 cfa37a7b 2004-04-10 devnull .I Cursor
239 cfa37a7b 2004-04-10 devnull is defined:
242 cfa37a7b 2004-04-10 devnull .ta 6n +\w'Point 'u
243 cfa37a7b 2004-04-10 devnull typedef struct
244 cfa37a7b 2004-04-10 devnull Cursor {
245 cfa37a7b 2004-04-10 devnull Point offset;
246 cfa37a7b 2004-04-10 devnull uchar clr[2*16];
247 cfa37a7b 2004-04-10 devnull uchar set[2*16];
248 cfa37a7b 2004-04-10 devnull } Cursor;
251 cfa37a7b 2004-04-10 devnull The arrays are arranged in rows, two bytes per row, left to
252 cfa37a7b 2004-04-10 devnull right in big-endian order to give 16 rows
253 cfa37a7b 2004-04-10 devnull of 16 bits each.
254 cfa37a7b 2004-04-10 devnull A cursor is displayed on the screen by adding
255 cfa37a7b 2004-04-10 devnull .B offset
256 cfa37a7b 2004-04-10 devnull to the current mouse position, using
258 cfa37a7b 2004-04-10 devnull as a mask to draw white at the pixels where
260 cfa37a7b 2004-04-10 devnull is one, and then drawing black at the pixels where
264 cfa37a7b 2004-04-10 devnull The routine
265 cfa37a7b 2004-04-10 devnull .I initdraw
266 cfa37a7b 2004-04-10 devnull connects to the display; it returns \-1 if it fails and sets the error string.
267 cfa37a7b 2004-04-10 devnull .I Initdraw
268 cfa37a7b 2004-04-10 devnull sets up the global variables
269 cfa37a7b 2004-04-10 devnull .B display
271 cfa37a7b 2004-04-10 devnull .B Display
272 cfa37a7b 2004-04-10 devnull structure representing the connection),
273 cfa37a7b 2004-04-10 devnull .B screen
275 cfa37a7b 2004-04-10 devnull .B Image
276 cfa37a7b 2004-04-10 devnull representing the display memory itself or, if
278 cfa37a7b 2004-04-10 devnull is running, the client's window),
281 cfa37a7b 2004-04-10 devnull (the default font for text).
282 cfa37a7b 2004-04-10 devnull The arguments to
283 cfa37a7b 2004-04-10 devnull .I initdraw
284 cfa37a7b 2004-04-10 devnull include a
285 cfa37a7b 2004-04-10 devnull .IR label ,
286 cfa37a7b 2004-04-10 devnull which is written to
287 cfa37a7b 2004-04-10 devnull .B /dev/label
288 cfa37a7b 2004-04-10 devnull if non-nil
289 cfa37a7b 2004-04-10 devnull so that it can be used to identify the window when hidden (see
290 d32deab1 2020-08-16 rsc .MR rio (1) ).
291 cfa37a7b 2004-04-10 devnull The font is created by reading the named
293 cfa37a7b 2004-04-10 devnull file. If
295 cfa37a7b 2004-04-10 devnull is null,
296 cfa37a7b 2004-04-10 devnull .I initdraw
297 cfa37a7b 2004-04-10 devnull reads the file named in the environment variable
298 cfa37a7b 2004-04-10 devnull .BR $font ;
300 cfa37a7b 2004-04-10 devnull .B $font
301 cfa37a7b 2004-04-10 devnull is not set, it imports the default (usually minimal)
302 cfa37a7b 2004-04-10 devnull font from the operating system.
304 d32deab1 2020-08-16 rsc .MR font (7)
305 b3a110af 2015-02-17 rsc for a full discussion of font syntaxes.)
306 cfa37a7b 2004-04-10 devnull The global
308 cfa37a7b 2004-04-10 devnull will be set to point to the resulting
310 cfa37a7b 2004-04-10 devnull structure.
312 cfa37a7b 2004-04-10 devnull .I errfun
313 cfa37a7b 2004-04-10 devnull argument is a
314 cfa37a7b 2004-04-10 devnull .I graphics error function
315 cfa37a7b 2004-04-10 devnull to call in the event of a fatal error in the library; it must never return.
316 cfa37a7b 2004-04-10 devnull Its arguments are the
317 cfa37a7b 2004-04-10 devnull display pointer and an error string.
319 cfa37a7b 2004-04-10 devnull .I errfun
320 cfa37a7b 2004-04-10 devnull is nil, the library provides a default, called
321 cfa37a7b 2004-04-10 devnull .IR drawerror .
322 cfa37a7b 2004-04-10 devnull Another effect of
323 cfa37a7b 2004-04-10 devnull .I initdraw
324 cfa37a7b 2004-04-10 devnull is that it installs
325 d32deab1 2020-08-16 rsc .MR print (3)
334 cfa37a7b 2004-04-10 devnull for printing
335 cfa37a7b 2004-04-10 devnull .B Points
337 cfa37a7b 2004-04-10 devnull .BR Rectangles .
340 cfa37a7b 2004-04-10 devnull .I geninitdraw
341 cfa37a7b 2004-04-10 devnull function provides a less automated way to establish a connection, for programs
342 cfa37a7b 2004-04-10 devnull that wish to connect to multiple displays.
343 cfa37a7b 2004-04-10 devnull .I Devdir
344 cfa37a7b 2004-04-10 devnull is the name of the directory containing the device files for the display
345 cfa37a7b 2004-04-10 devnull (if nil, default
346 cfa37a7b 2004-04-10 devnull .BR /dev );
347 cfa37a7b 2004-04-10 devnull .IR errfun ,
348 cfa37a7b 2004-04-10 devnull .IR font ,
350 cfa37a7b 2004-04-10 devnull .I label
351 cfa37a7b 2004-04-10 devnull are as in
352 cfa37a7b 2004-04-10 devnull .IR initdraw ;
353 cfa37a7b 2004-04-10 devnull .I mousedir
355 cfa37a7b 2004-04-10 devnull .I windir
356 cfa37a7b 2004-04-10 devnull are the directories holding the
357 cfa37a7b 2004-04-10 devnull .B mouse
359 cfa37a7b 2004-04-10 devnull .B winname
360 cfa37a7b 2004-04-10 devnull files; and
362 cfa37a7b 2004-04-10 devnull specifies the refresh function to be used to create the window, if running under
365 d32deab1 2020-08-16 rsc .MR window (3) ).
367 058b0118 2005-01-03 devnull .\" The function
368 058b0118 2005-01-03 devnull .\" .I newwindow
369 058b0118 2005-01-03 devnull .\" may be called before
370 058b0118 2005-01-03 devnull .\" .I initdraw
372 058b0118 2005-01-03 devnull .\" .IR geninitdraw
373 058b0118 2005-01-03 devnull .\" to cause the program to occupy a newly created window rather than take over the one in
374 058b0118 2005-01-03 devnull .\" which it is running when it starts.
376 058b0118 2005-01-03 devnull .\" .I str
377 058b0118 2005-01-03 devnull .\" argument, if non-null, is concatenated to the string \f5\&"new\ "\fP
378 058b0118 2005-01-03 devnull .\" that is used to create the window (see
379 058b0118 2005-01-03 devnull .\" .IR rio (4)).
380 058b0118 2005-01-03 devnull .\" For example,
381 058b0118 2005-01-03 devnull .\" .B newwindow("-hide -dy 100")
382 058b0118 2005-01-03 devnull .\" will cause the program to run in a newly created, hidden window
383 058b0118 2005-01-03 devnull .\" 100 pixels high.
385 cfa37a7b 2004-04-10 devnull .I Initdisplay
386 cfa37a7b 2004-04-10 devnull is part of
387 cfa37a7b 2004-04-10 devnull .IR geninitdraw ;
388 cfa37a7b 2004-04-10 devnull it sets up the display structures but does not allocate any fonts or call
389 cfa37a7b 2004-04-10 devnull .IR getwindow .
390 cfa37a7b 2004-04-10 devnull The arguments are similar to those of
391 cfa37a7b 2004-04-10 devnull .IR initdraw ;
393 cfa37a7b 2004-04-10 devnull names the directory, default
394 cfa37a7b 2004-04-10 devnull .BR /dev ,
395 cfa37a7b 2004-04-10 devnull in which the files associated with the window reside.
396 cfa37a7b 2004-04-10 devnull .I Closedisplay
397 cfa37a7b 2004-04-10 devnull disconnects the display and frees the associated data structures.
398 16d00819 2018-11-16 rsc Neither of these routines is needed by most programs, since
399 cfa37a7b 2004-04-10 devnull .I initdraw
400 cfa37a7b 2004-04-10 devnull calls them as needed.
402 cfa37a7b 2004-04-10 devnull The data structures associated with the display must be protected in a multi-process program,
403 cfa37a7b 2004-04-10 devnull because they assume only one process will be using them at a time.
404 cfa37a7b 2004-04-10 devnull Multi-process programs should set
405 cfa37a7b 2004-04-10 devnull .B display->locking
408 cfa37a7b 2004-04-10 devnull to notify the library to use a locking protocol for its own accesses,
409 cfa37a7b 2004-04-10 devnull and call
410 cfa37a7b 2004-04-10 devnull .I lockdisplay
412 cfa37a7b 2004-04-10 devnull .I unlockdisplay
413 cfa37a7b 2004-04-10 devnull around any calls to the graphics library that will cause messages to be sent to the display device.
414 cfa37a7b 2004-04-10 devnull .I Initdraw
416 cfa37a7b 2004-04-10 devnull .I geninitdraw
417 cfa37a7b 2004-04-10 devnull initialize the display to the locked state.
419 cfa37a7b 2004-04-10 devnull .I Getwindow
420 cfa37a7b 2004-04-10 devnull returns a pointer to the window associated with the application; it is called
421 cfa37a7b 2004-04-10 devnull automatically by
422 cfa37a7b 2004-04-10 devnull .I initdraw
423 cfa37a7b 2004-04-10 devnull to establish the
424 cfa37a7b 2004-04-10 devnull .B screen
425 cfa37a7b 2004-04-10 devnull pointer but must be called after each resizing of the window to restore
426 cfa37a7b 2004-04-10 devnull the library's connection to the window.
429 cfa37a7b 2004-04-10 devnull is not running, it returns
430 cfa37a7b 2004-04-10 devnull .BR display->image ;
431 cfa37a7b 2004-04-10 devnull otherwise it negotiates with
433 cfa37a7b 2004-04-10 devnull by looking in
434 cfa37a7b 2004-04-10 devnull .B /dev/winname
435 cfa37a7b 2004-04-10 devnull to find the name of the window and opening it using
436 cfa37a7b 2004-04-10 devnull .B namedimage
438 d32deab1 2020-08-16 rsc .MR allocimage (3) ).
439 cfa37a7b 2004-04-10 devnull The resulting window will be created using the refresh method
442 d32deab1 2020-08-16 rsc .MR window (3) );
443 cfa37a7b 2004-04-10 devnull this should almost always be
444 cfa37a7b 2004-04-10 devnull .B Refnone
447 cfa37a7b 2004-04-10 devnull provides backing store for the window.
449 cfa37a7b 2004-04-10 devnull .I Getwindow
450 cfa37a7b 2004-04-10 devnull overwrites the global variables
451 cfa37a7b 2004-04-10 devnull .BR screen ,
452 cfa37a7b 2004-04-10 devnull a pointer to the
453 cfa37a7b 2004-04-10 devnull .B Image
454 cfa37a7b 2004-04-10 devnull defining the window (or the overall display, if no window system is running); and
455 cfa37a7b 2004-04-10 devnull .BR _screen ,
456 cfa37a7b 2004-04-10 devnull a pointer to the
457 cfa37a7b 2004-04-10 devnull .B Screen
458 cfa37a7b 2004-04-10 devnull representing the root of the window's hierarchy. (See
459 d32deab1 2020-08-16 rsc .MR window (3) .
460 cfa37a7b 2004-04-10 devnull The overloading of the
461 cfa37a7b 2004-04-10 devnull .B screen
462 cfa37a7b 2004-04-10 devnull word is an unfortunate historical accident.)
463 cfa37a7b 2004-04-10 devnull .I Getwindow
464 cfa37a7b 2004-04-10 devnull arranges that
465 cfa37a7b 2004-04-10 devnull .B screen
466 cfa37a7b 2004-04-10 devnull point to the portion of the window inside the border;
467 cfa37a7b 2004-04-10 devnull sophisticated clients may use
468 cfa37a7b 2004-04-10 devnull .B _screen
469 cfa37a7b 2004-04-10 devnull to make further subwindows.
471 213fc4f6 2015-02-17 rsc .I getwindow
472 213fc4f6 2015-02-17 rsc is being called due to a resizing of the window,
473 213fc4f6 2015-02-17 rsc the resize may be accompanied by a change in screen pixel density (DPI),
474 213fc4f6 2015-02-17 rsc in which case the value of the
475 213fc4f6 2015-02-17 rsc .BR Display 's
477 213fc4f6 2015-02-17 rsc field and any open
482 213fc4f6 2015-02-17 rsc fields may be updated during the call to
483 213fc4f6 2015-02-17 rsc .IR getwindow .
484 213fc4f6 2015-02-17 rsc Programs should discard any cached information about display or font sizes.
485 058b0118 2005-01-03 devnull .\" Programs desiring multiple independent windows
486 058b0118 2005-01-03 devnull .\" may use the mechanisms of
487 058b0118 2005-01-03 devnull .\" .IR rio (4)
488 058b0118 2005-01-03 devnull .\" to create more windows (usually by a fresh mount of the window sytem
489 058b0118 2005-01-03 devnull .\" in a directory other than
490 058b0118 2005-01-03 devnull .\" .BR /dev ),
491 058b0118 2005-01-03 devnull .\" then use
492 058b0118 2005-01-03 devnull .\" .I gengetwindow
493 058b0118 2005-01-03 devnull .\" to connect to them.
494 cfa37a7b 2004-04-10 devnull .IR Gengetwindow 's
495 cfa37a7b 2004-04-10 devnull extra arguments are the full path of the window's
496 cfa37a7b 2004-04-10 devnull .B winname
497 cfa37a7b 2004-04-10 devnull file and pointers to be overwritten with the values of the `global'
498 cfa37a7b 2004-04-10 devnull .B Image
500 cfa37a7b 2004-04-10 devnull .B Screen
501 cfa37a7b 2004-04-10 devnull variables for the new window.
503 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.
504 9f385187 2012-11-26 rsc The new field
505 9f385187 2012-11-26 rsc .B display->dpi
506 9f385187 2012-11-26 rsc contains the display's actual density if known, or else
507 9f385187 2012-11-26 rsc .B DefaultDPI
509 9f385187 2012-11-26 rsc .I Scalesize
510 9f385187 2012-11-26 rsc scales the fixed pixel count
513 9f385187 2012-11-26 rsc .BR display->dpi / DefaultDPI ,
514 9f385187 2012-11-26 rsc rounding appropriately.
516 cfa37a7b 2004-04-10 devnull The mouse cursor is always displayed.
517 cfa37a7b 2004-04-10 devnull The initial cursor is an arrow.
518 cfa37a7b 2004-04-10 devnull .I Cursorswitch
519 cfa37a7b 2004-04-10 devnull causes the argument cursor to be displayed instead.
520 cfa37a7b 2004-04-10 devnull A zero argument causes a switch back to the arrow cursor.
521 cfa37a7b 2004-04-10 devnull .I Cursorset
522 cfa37a7b 2004-04-10 devnull moves the mouse cursor to position
524 cfa37a7b 2004-04-10 devnull provided (if in a window) that the requesting program is
525 cfa37a7b 2004-04-10 devnull executing in the current window and the mouse is within
526 cfa37a7b 2004-04-10 devnull the window boundaries; otherwise
527 cfa37a7b 2004-04-10 devnull .I cursorset
528 cfa37a7b 2004-04-10 devnull is a no-op.
530 cfa37a7b 2004-04-10 devnull The graphics functions described in
531 d32deab1 2020-08-16 rsc .MR draw (3) ,
532 d32deab1 2020-08-16 rsc .MR allocimage (3) ,
533 d32deab1 2020-08-16 rsc .MR cachechars (3) ,
535 d32deab1 2020-08-16 rsc .MR subfont (3)
536 cfa37a7b 2004-04-10 devnull are implemented by writing commands to files under
537 cfa37a7b 2004-04-10 devnull .B /dev/draw
539 d32deab1 2020-08-16 rsc .MR draw (3) );
540 cfa37a7b 2004-04-10 devnull the writes are buffered, so the functions may not take effect immediately.
541 cfa37a7b 2004-04-10 devnull .I Flushimage
542 cfa37a7b 2004-04-10 devnull flushes the buffer, doing all pending graphics operations.
545 cfa37a7b 2004-04-10 devnull is non-zero, any changes are also copied from the `soft screen' (if any) in the
546 cfa37a7b 2004-04-10 devnull driver to the visible frame buffer.
547 cfa37a7b 2004-04-10 devnull The various allocation routines in the library flush automatically, as does the event
548 cfa37a7b 2004-04-10 devnull package (see
549 d32deab1 2020-08-16 rsc .MR event (3) );
550 cfa37a7b 2004-04-10 devnull most programs do not need to call
551 cfa37a7b 2004-04-10 devnull .IR flushimage .
552 cfa37a7b 2004-04-10 devnull It returns \-1 on error.
554 cfa37a7b 2004-04-10 devnull .I Bufimage
555 cfa37a7b 2004-04-10 devnull is used to allocate space for
557 cfa37a7b 2004-04-10 devnull bytes in the display buffer.
558 cfa37a7b 2004-04-10 devnull It is used by all the graphics routines to send messages to the display.
560 cfa37a7b 2004-04-10 devnull The functions
561 cfa37a7b 2004-04-10 devnull .I strtochan
563 cfa37a7b 2004-04-10 devnull .I chantostr
564 cfa37a7b 2004-04-10 devnull convert between the channel descriptor strings
566 d32deab1 2020-08-16 rsc .MR image (7)
567 cfa37a7b 2004-04-10 devnull and the internal
568 cfa37a7b 2004-04-10 devnull .B ulong
569 cfa37a7b 2004-04-10 devnull representation
570 cfa37a7b 2004-04-10 devnull used by the graphics protocol
572 d32deab1 2020-08-16 rsc .MR draw (3) 's
574 cfa37a7b 2004-04-10 devnull message).
575 cfa37a7b 2004-04-10 devnull .B Chantostr
576 cfa37a7b 2004-04-10 devnull writes at most nine bytes into the buffer pointed at by
578 cfa37a7b 2004-04-10 devnull and returns
580 cfa37a7b 2004-04-10 devnull on success,
582 cfa37a7b 2004-04-10 devnull on failure.
583 cfa37a7b 2004-04-10 devnull .B Chantodepth
584 cfa37a7b 2004-04-10 devnull returns the number of bits per pixel used by the
585 cfa37a7b 2004-04-10 devnull format specified by
586 cfa37a7b 2004-04-10 devnull .IR chan .
588 cfa37a7b 2004-04-10 devnull .B chantodepth
590 cfa37a7b 2004-04-10 devnull .B strtochan
591 cfa37a7b 2004-04-10 devnull return 0 when presented
592 cfa37a7b 2004-04-10 devnull with bad input.
593 cfa37a7b 2004-04-10 devnull .SH EXAMPLES
594 cfa37a7b 2004-04-10 devnull To reconnect to the window after a resize event,
597 cfa37a7b 2004-04-10 devnull if(getwindow(display, Refnone) < 0)
598 cfa37a7b 2004-04-10 devnull sysfatal("resize failed: %r");
601 cfa37a7b 2004-04-10 devnull To create and set up a new
606 cfa37a7b 2004-04-10 devnull Image *screen2;
607 cfa37a7b 2004-04-10 devnull Screen *_screen2;
609 cfa37a7b 2004-04-10 devnull srvwsys = getenv("wsys");
610 cfa37a7b 2004-04-10 devnull if(srvwsys == nil)
611 cfa37a7b 2004-04-10 devnull sysfatal("can't find $wsys: %r");
612 cfa37a7b 2004-04-10 devnull rfork(RFNAMEG); /* keep mount of rio private */
614 cfa37a7b 2004-04-10 devnull fd = open(srvwsys, ORDWR);
615 cfa37a7b 2004-04-10 devnull if(fd < 0)
616 cfa37a7b 2004-04-10 devnull sysfatal("can't open $wsys: %r");
618 cfa37a7b 2004-04-10 devnull /* mount creates window; see \f2rio\fP(4) */
619 cfa37a7b 2004-04-10 devnull if(mount(fd, -1, "/tmp", MREPL, "new -dx 300-dy 200") < 0)
620 cfa37a7b 2004-04-10 devnull sysfatal("can't mount new window: %r");
621 cfa37a7b 2004-04-10 devnull if(gengetwindow(display, "/tmp/winname",
622 cfa37a7b 2004-04-10 devnull &screen2, &_screen2, Refnone) < 0)
623 cfa37a7b 2004-04-10 devnull sysfatal("resize failed: %r");
625 cfa37a7b 2004-04-10 devnull /* now open /tmp/cons, /tmp/mouse */
628 cfa37a7b 2004-04-10 devnull .SH FILES
629 c8b6342d 2005-01-13 devnull .BR \*9/font/bit " directory of fonts
630 cfa37a7b 2004-04-10 devnull .SH SOURCE
631 c3674de4 2005-01-11 devnull .B \*9/src/libdraw
632 cfa37a7b 2004-04-10 devnull .SH "SEE ALSO"
633 d32deab1 2020-08-16 rsc .MR rio (1) ,
634 d32deab1 2020-08-16 rsc .MR addpt (3) ,
635 d32deab1 2020-08-16 rsc .MR allocimage (3) ,
636 d32deab1 2020-08-16 rsc .MR cachechars (3) ,
637 d32deab1 2020-08-16 rsc .MR subfont (3) ,
638 d32deab1 2020-08-16 rsc .MR draw (3) ,
639 d32deab1 2020-08-16 rsc .MR event (3) ,
640 d32deab1 2020-08-16 rsc .MR frame (3) ,
641 d32deab1 2020-08-16 rsc .MR print (3) ,
642 d32deab1 2020-08-16 rsc .MR window (3) ,
643 d32deab1 2020-08-16 rsc .MR draw (3) ,
644 058b0118 2005-01-03 devnull .\" .IR rio (4),
645 d32deab1 2020-08-16 rsc .MR image (7) ,
646 d32deab1 2020-08-16 rsc .MR font (7)
647 cfa37a7b 2004-04-10 devnull .SH DIAGNOSTICS
648 cfa37a7b 2004-04-10 devnull An error function may call
649 d32deab1 2020-08-16 rsc .MR errstr (3)
650 cfa37a7b 2004-04-10 devnull for further diagnostics.
651 cfa37a7b 2004-04-10 devnull .SH BUGS
652 cfa37a7b 2004-04-10 devnull The names
657 cfa37a7b 2004-04-10 devnull .B Cursor
658 cfa37a7b 2004-04-10 devnull structure are reminders of an archaic color map
659 cfa37a7b 2004-04-10 devnull and might be more appropriately called
660 cfa37a7b 2004-04-10 devnull .B white
662 cfa37a7b 2004-04-10 devnull .BR black .
664 c8b6342d 2005-01-13 devnull These manual pages contain many references to
665 c8b6342d 2005-01-13 devnull the now-fictitious
666 c8b6342d 2005-01-13 devnull .BR /dev/draw .