plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

event.3 (7533B)


      1 .TH EVENT 3
      2 .SH NAME
      3 event, einit, estart, estartfn, etimer, eread, emouse, ekbd, ecanread, ecanmouse, ecankbd, ereadmouse, eatomouse, eresized, egetrect, edrawgetrect, emenuhit, emoveto, esetcursor, Event, Mouse, Menu \- graphics events
      4 .SH SYNOPSIS
      5 .nf
      6 .PP
      7 .B
      8 #include	<u.h>
      9 .B
     10 #include	<libc.h>
     11 .B
     12 #include	<draw.h>
     13 .B
     14 #include	<event.h>
     15 .B
     16 #include	<cursor.h>
     17 .ta \w'\fLRectangle 'u
     18 .PP
     19 .B
     20 void	einit(ulong keys)
     21 .PP
     22 .B
     23 ulong	event(Event *e)
     24 .PP
     25 .B
     26 Mouse	emouse(void)
     27 .PP
     28 .B
     29 int	ekbd(void)
     30 .PP
     31 .B
     32 int	ecanmouse(void)
     33 .PP
     34 .B
     35 int	ecankbd(void)
     36 .PP
     37 .B
     38 int	ereadmouse(Mouse *m)
     39 .PP
     40 .B
     41 int	eatomouse(Mouse *m, char *buf, int n)
     42 .PP
     43 .B
     44 ulong	estart(ulong key, int fd, int n)
     45 .PP
     46 .B
     47 ulong	estartfn(int id, ulong key, int fd, int n,
     48 .B
     49 		    int (*fn)(Event*, uchar*, int))
     50 .PP
     51 .B
     52 ulong	etimer(ulong key, int n)
     53 .PP
     54 .B
     55 ulong	eread(ulong keys, Event *e)
     56 .PP
     57 .B
     58 int	ecanread(ulong keys)
     59 .PP
     60 .B
     61 void	eresized(int new)
     62 .PP
     63 .B
     64 Rectangle	egetrect(int but, Mouse *m)
     65 .PP
     66 .B
     67 void	edrawgetrect(Rectangle r, int up)
     68 .PP
     69 .B
     70 int	emenuhit(int but, Mouse *m, Menu *menu)
     71 .PP
     72 .PP
     73 .B
     74 int	emoveto(Point p)
     75 .PP
     76 .PP
     77 .B
     78 int	esetcursor(Cursor *c)
     79 .PP
     80 .B
     81 extern Mouse    *mouse
     82 .PP
     83 .B
     84 enum{
     85 .B
     86 	Emouse = 1,
     87 .B
     88 	Ekeyboard = 2,
     89 .B
     90 };
     91 .PP
     92 .SH DESCRIPTION
     93 These routines provide an interface to multiple sources of input for unthreaded
     94 programs.
     95 Threaded programs (see
     96 .MR thread (3) )
     97 should instead use the threaded mouse and keyboard interface described
     98 in
     99 .MR mouse (3)
    100 and
    101 .MR keyboard (3) .
    102 .PP
    103 .I Einit
    104 must be called first.
    105 If the argument to
    106 .I einit
    107 has the
    108 .B Emouse
    109 and
    110 .B Ekeyboard
    111 bits set,
    112 the mouse and keyboard events will be enabled;
    113 in this case,
    114 .IR initdraw
    115 (see
    116 .MR graphics (3) )
    117 must have already been called.
    118 The user must provide a function called
    119 .IR eresized
    120 to be called whenever the window in which the process
    121 is running has been resized; the argument
    122 .I new
    123 is a flag specifying whether the program must call
    124 .I getwindow
    125 (see
    126 .MR graphics (3) )
    127 to re-establish a connection to its window.
    128 After resizing (and perhaps calling
    129 .IR getwindow ),
    130 the global variable
    131 .B screen
    132 will be updated to point to the new window's
    133 .B Image
    134 structure.
    135 .PP
    136 As characters are typed on the keyboard, they are read by the
    137 event mechanism and put in a queue.
    138 .I Ekbd
    139 returns the next rune from the queue, blocking until the
    140 queue is non-empty.
    141 The characters are read in raw mode,
    142 .\" (see
    143 .\" .IR cons (3)),
    144 so they are available as soon as a complete rune is typed.
    145 .PP
    146 When the mouse moves or a mouse button is pressed or released,
    147 a new mouse event is queued by the event mechanism.
    148 .I Emouse
    149 returns the next mouse event from the queue, blocking until the
    150 queue is non-empty.
    151 .I Emouse
    152 returns a
    153 .B Mouse
    154 structure:
    155 .IP
    156 .EX
    157 .ta 6n +\w'Point 'u
    158 struct Mouse
    159 {
    160 	int	buttons;
    161 	Point	xy;
    162 	ulong	msec;
    163 };
    164 .EE
    165 .PP
    166 .B Buttons&1
    167 is set when the left mouse button is pressed,
    168 .B buttons&2
    169 when the middle button is pressed,
    170 and
    171 .B buttons&4
    172 when the right button is pressed.
    173 The current mouse position is always returned in
    174 .BR xy .
    175 .B Msec
    176 is a time stamp in units of milliseconds.
    177 .PP
    178 .I Ecankbd
    179 and
    180 .I ecanmouse
    181 return non-zero when there are keyboard or mouse events available
    182 to be read.
    183 .PP
    184 .I Ereadmouse
    185 reads the next mouse event from the file descriptor connected to the mouse,
    186 converts the textual data into a
    187 .B Mouse
    188 structure by calling
    189 .I eatomouse
    190 with the buffer and count from the read call,
    191 and returns the number of bytes read, or \-1 for an error.
    192 .PP
    193 .I Estart
    194 can be used to register additional file descriptors to scan for input.
    195 It takes as arguments the file descriptor to register,
    196 the maximum length of an event message on that descriptor,
    197 and a key to be used in accessing the event.
    198 The key must be a power of 2 and must not conflict with any previous keys.
    199 If a zero key is given, a key will be allocated and returned.
    200 .I Estartfn
    201 is similar to
    202 .IR estart ,
    203 but processes the data received by calling
    204 .I fn
    205 before returning the event to the user.
    206 The function
    207 .I fn
    208 is called with the
    209 .B id
    210 of the event; it should return
    211 .B id
    212 if the event is to be passed to the user,
    213 .B 0
    214 if it is to be ignored.
    215 The variable
    216 .B Event.v
    217 can be used by
    218 .I fn
    219 to attach an arbitrary data item to the returned
    220 .B Event
    221 structure.
    222 .B
    223 Ekeyboard
    224 and
    225 .B Emouse
    226 are the keyboard and mouse event keys.
    227 .PP
    228 .I Etimer
    229 starts a repeating timer with a period of
    230 .I n
    231 milliseconds; it returns the timer event key, or zero if it fails.
    232 Only one timer can be started.
    233 Extra timer events are not queued and the timer channel has no associated data.
    234 .PP
    235 .I Eread
    236 waits for the next event specified by the mask
    237 .I keys
    238 of event keys submitted to
    239 .IR estart .
    240 It fills in the appropriate field of the argument
    241 .B Event
    242 structure, which looks like:
    243 .IP
    244 .EX
    245 struct Event
    246 {
    247 	int	kbdc;
    248 	Mouse	mouse;
    249 	int	n;
    250 	void	*v;
    251 	uchar	data[EMAXMSG];
    252 };
    253 .EE
    254 .PP
    255 .B Data
    256 is an array which is large enough to hold a 9P message.
    257 .I Eread
    258 returns the key for the event which was chosen.
    259 For example, if a mouse event was read,
    260 .B Emouse
    261 will be returned.
    262 .PP
    263 .I Event
    264 waits for the next event of any kind.
    265 The return is the same as for
    266 .IR eread .
    267 .PP
    268 As described in
    269 .MR graphics (3) ,
    270 the graphics functions are buffered.
    271 .IR Event ,
    272 .IR eread ,
    273 .IR emouse ,
    274 and
    275 .I ekbd
    276 all cause a buffer flush unless there is an event of the
    277 appropriate type already queued.
    278 .PP
    279 .I Ecanread
    280 checks whether a call to
    281 .B eread(keys)
    282 would block, returning 0 if it would, 1 if it would not.
    283 .PP
    284 .I Getrect
    285 prompts the user to sweep a rectangle.
    286 It should be called with
    287 .I m
    288 holding the mouse event that triggered the
    289 .I egetrect
    290 (or, if none, a
    291 .B Mouse
    292 with
    293 .B buttons
    294 set to 7).
    295 It changes to the sweep cursor,
    296 waits for the buttons all to be released,
    297 and then waits for button number
    298 .I but
    299 to be pressed, marking the initial corner.
    300 If another button is pressed instead,
    301 .I egetrect
    302 returns a rectangle
    303 with zero for both corners, after
    304 waiting for all the buttons to be released.
    305 Otherwise,
    306 .I egetrect
    307 continually draws the swept rectangle
    308 until the button is released again, and returns the swept rectangle.
    309 The mouse structure pointed to by
    310 .I m
    311 will contain the final mouse event.
    312 .PP
    313 .I Egetrect
    314 uses successive calls to
    315 .I edrawgetrect
    316 to maintain the red rectangle showing the sweep-in-progress.
    317 The rectangle to be drawn is specified by
    318 .I rc
    319 and the
    320 .I up
    321 parameter says whether to draw (1) or erase (0) the rectangle.
    322 .PP
    323 .I Emenuhit
    324 displays a menu and returns a selected menu item number.
    325 It should be called with
    326 .I m
    327 holding the mouse event that triggered the
    328 .IR emenuhit ;
    329 it will call
    330 .I emouse
    331 to update it.
    332 A
    333 .B Menu
    334 is a structure:
    335 .IP
    336 .EX
    337 struct Menu
    338 {
    339 	char	**item;
    340 	char	*(*gen)(int);
    341 	int	lasthit;
    342 };
    343 .EE
    344 .PP
    345 If
    346 .B item
    347 is nonzero, it should be a null-terminated array of the character strings
    348 to be displayed as menu items.
    349 Otherwise,
    350 .B gen
    351 should be a function that, given an item number, returns the character
    352 string for that item, or zero if the number is past the end of the list.
    353 Items are numbered starting at zero.
    354 .I Menuhit
    355 waits until
    356 .I but
    357 is released, and then returns the number of the selection,
    358 or \-1 for no selection.
    359 The
    360 .I m
    361 argument is filled in with the final mouse event.
    362 .PP
    363 .I Emoveto
    364 moves the mouse cursor to the position
    365 .B p
    366 on the screen.
    367 .PP
    368 .I Esetcursor
    369 changes the cursor image to that described by the
    370 .B Cursor
    371 .I c
    372 (see
    373 .MR mouse (3) ).
    374 If
    375 .B c
    376 is nil, it restores the image to the default arrow.
    377 .SH SOURCE
    378 .B \*9/src/libdraw
    379 .SH "SEE ALSO"
    380 .MR rio (1) ,
    381 .MR graphics (3) ,
    382 .MR plumb (3) ,
    383 .\" .IR cons (3),
    384 .MR draw (3)