1 cfa37a7b 2004-04-10 devnull .TH MOUSE 3
3 cfa37a7b 2004-04-10 devnull initmouse, readmouse, closemouse, moveto, cursorswitch, getrect, drawgetrect, menuhit, setcursor \- mouse control
4 cfa37a7b 2004-04-10 devnull .SH SYNOPSIS
7 cfa37a7b 2004-04-10 devnull #include <u.h>
9 cfa37a7b 2004-04-10 devnull #include <libc.h>
11 cfa37a7b 2004-04-10 devnull #include <draw.h>
13 cfa37a7b 2004-04-10 devnull #include <thread.h>
15 cfa37a7b 2004-04-10 devnull #include <mouse.h>
17 cfa37a7b 2004-04-10 devnull #include <cursor.h>
20 cfa37a7b 2004-04-10 devnull Mousectl *initmouse(char *file, Image *i)
23 cfa37a7b 2004-04-10 devnull int readmouse(Mousectl *mc)
26 cfa37a7b 2004-04-10 devnull int atomouse();
29 cfa37a7b 2004-04-10 devnull void closemouse(Mousectl *mc)
32 cfa37a7b 2004-04-10 devnull void moveto(Mousectl *mc, Point pt)
35 cfa37a7b 2004-04-10 devnull void setcursor(Mousectl *mc, Cursor *c)
38 cfa37a7b 2004-04-10 devnull Rectangle getrect(int but, Mousectl *mc)
41 cfa37a7b 2004-04-10 devnull void drawgetrect(Rectangle r, int up)
44 cfa37a7b 2004-04-10 devnull int menuhit(int but, Mousectl *mc, Menu *menu, Screen *scr)
46 cfa37a7b 2004-04-10 devnull .SH DESCRIPTION
47 cfa37a7b 2004-04-10 devnull These functions access and control a mouse in a multi-threaded environment.
48 cfa37a7b 2004-04-10 devnull They use the message-passing
49 cfa37a7b 2004-04-10 devnull .B Channel
50 cfa37a7b 2004-04-10 devnull interface in the threads library
52 d32deab1 2020-08-16 rsc .MR thread (3) );
53 cfa37a7b 2004-04-10 devnull programs that wish a more event-driven, single-threaded approach should use
54 d32deab1 2020-08-16 rsc .MR event (3) .
56 cfa37a7b 2004-04-10 devnull The state of the mouse is recorded in a structure,
57 cfa37a7b 2004-04-10 devnull .BR Mouse ,
58 cfa37a7b 2004-04-10 devnull defined in
59 cfa37a7b 2004-04-10 devnull .BR <mouse.h> :
62 cfa37a7b 2004-04-10 devnull .ta 6n +\w'Rectangle 'u +\w'buttons; 'u
63 cfa37a7b 2004-04-10 devnull typedef struct Mouse Mouse;
64 cfa37a7b 2004-04-10 devnull struct Mouse
66 cfa37a7b 2004-04-10 devnull int buttons; /* bit array: LMR=124 */
67 cfa37a7b 2004-04-10 devnull Point xy;
68 cfa37a7b 2004-04-10 devnull ulong msec;
75 cfa37a7b 2004-04-10 devnull records the position of the cursor,
76 cfa37a7b 2004-04-10 devnull .B buttons
77 cfa37a7b 2004-04-10 devnull the state of the buttons (three bits representing, from bit 0 up, the buttons from left to right,
78 cfa37a7b 2004-04-10 devnull 0 if the button is released, 1 if it is pressed),
80 cfa37a7b 2004-04-10 devnull .BR msec ,
81 cfa37a7b 2004-04-10 devnull a millisecond time stamp.
83 cfa37a7b 2004-04-10 devnull The routine
84 cfa37a7b 2004-04-10 devnull .B initmouse
85 cfa37a7b 2004-04-10 devnull returns a structure through which one may access the mouse:
88 cfa37a7b 2004-04-10 devnull typedef struct Mousectl Mousectl;
89 cfa37a7b 2004-04-10 devnull struct Mousectl
92 125cfe1c 2020-01-14 rsc Channel *c; /* chan(Mouse)[16] */
93 cfa37a7b 2004-04-10 devnull Channel *resizec; /* chan(int)[2] */
95 cfa37a7b 2004-04-10 devnull char *file;
96 cfa37a7b 2004-04-10 devnull int mfd; /* to mouse file */
97 cfa37a7b 2004-04-10 devnull int cfd; /* to cursor file */
98 cfa37a7b 2004-04-10 devnull int pid; /* of slave proc */
99 125cfe1c 2020-01-14 rsc Image* image; /* of associated window/display */
103 cfa37a7b 2004-04-10 devnull The arguments to
104 cfa37a7b 2004-04-10 devnull .I initmouse
107 cfa37a7b 2004-04-10 devnull naming the device file connected to the mouse and an
108 cfa37a7b 2004-04-10 devnull .I Image
110 d32deab1 2020-08-16 rsc .MR draw (3) )
111 cfa37a7b 2004-04-10 devnull on which the mouse will be visible.
112 cfa37a7b 2004-04-10 devnull Typically the file is
114 cfa37a7b 2004-04-10 devnull which requests the default
115 cfa37a7b 2004-04-10 devnull .BR /dev/mouse ;
116 cfa37a7b 2004-04-10 devnull and the image is the window in which the program is running, held in the variable
117 cfa37a7b 2004-04-10 devnull .B screen
118 cfa37a7b 2004-04-10 devnull after a call to
119 cfa37a7b 2004-04-10 devnull .IR initdraw .
121 cfa37a7b 2004-04-10 devnull Once the
122 cfa37a7b 2004-04-10 devnull .B Mousectl
123 cfa37a7b 2004-04-10 devnull is set up,
124 cfa37a7b 2004-04-10 devnull mouse motion will be reported by messages of type
125 cfa37a7b 2004-04-10 devnull .B Mouse
126 cfa37a7b 2004-04-10 devnull sent on the
127 cfa37a7b 2004-04-10 devnull .B Channel
128 cfa37a7b 2004-04-10 devnull .BR Mousectl.c .
129 cfa37a7b 2004-04-10 devnull Typically, a message will be sent every time a read of
130 cfa37a7b 2004-04-10 devnull .B /dev/mouse
131 cfa37a7b 2004-04-10 devnull succeeds, which is every time the state of the mouse changes.
133 cfa37a7b 2004-04-10 devnull When the window is resized, a message is sent on
134 cfa37a7b 2004-04-10 devnull .BR Mousectl.resizec .
135 cfa37a7b 2004-04-10 devnull The actual value sent may be discarded; the receipt of the message
136 cfa37a7b 2004-04-10 devnull tells the program that it should call
137 cfa37a7b 2004-04-10 devnull .B getwindow
139 d32deab1 2020-08-16 rsc .MR graphics (3) )
140 cfa37a7b 2004-04-10 devnull to reconnect to the window.
142 cfa37a7b 2004-04-10 devnull .I Readmouse
143 cfa37a7b 2004-04-10 devnull updates the
144 cfa37a7b 2004-04-10 devnull .B Mouse
148 cfa37a7b 2004-04-10 devnull .BR Mousectl ,
149 cfa37a7b 2004-04-10 devnull blocking if the state has not changed since the last
150 cfa37a7b 2004-04-10 devnull .I readmouse
151 cfa37a7b 2004-04-10 devnull or message sent on the channel.
152 cfa37a7b 2004-04-10 devnull It calls
153 cfa37a7b 2004-04-10 devnull .B flushimage
155 d32deab1 2020-08-16 rsc .MR graphics (3) )
156 cfa37a7b 2004-04-10 devnull before blocking, so any buffered graphics requests are displayed.
158 cfa37a7b 2004-04-10 devnull .I Closemouse
159 cfa37a7b 2004-04-10 devnull closes the file descriptors associated with the mouse, kills the slave processes,
160 cfa37a7b 2004-04-10 devnull and frees the
161 cfa37a7b 2004-04-10 devnull .B Mousectl
162 cfa37a7b 2004-04-10 devnull structure.
164 cfa37a7b 2004-04-10 devnull .I Moveto
165 cfa37a7b 2004-04-10 devnull moves the mouse cursor on the display to the position specified by
166 cfa37a7b 2004-04-10 devnull .IR pt .
168 cfa37a7b 2004-04-10 devnull .I Setcursor
169 cfa37a7b 2004-04-10 devnull sets the image of the cursor to that specified by
173 cfa37a7b 2004-04-10 devnull is nil, the cursor is set to the default.
174 cfa37a7b 2004-04-10 devnull The format of the cursor data is spelled out in
175 cfa37a7b 2004-04-10 devnull .B <cursor.h>
176 cfa37a7b 2004-04-10 devnull and described in
177 d32deab1 2020-08-16 rsc .MR graphics (3) .
179 cfa37a7b 2004-04-10 devnull .I Getrect
180 cfa37a7b 2004-04-10 devnull returns the dimensions of a rectangle swept by the user, using the mouse,
181 cfa37a7b 2004-04-10 devnull in the manner
185 cfa37a7b 2004-04-10 devnull uses to create a new window.
188 cfa37a7b 2004-04-10 devnull argument specifies which button the user must press to sweep the window;
189 cfa37a7b 2004-04-10 devnull any other button press cancels the action.
190 cfa37a7b 2004-04-10 devnull The returned rectangle is all zeros if the user cancels.
192 cfa37a7b 2004-04-10 devnull .I Getrect
193 cfa37a7b 2004-04-10 devnull uses successive calls to
194 cfa37a7b 2004-04-10 devnull .I drawgetrect
195 cfa37a7b 2004-04-10 devnull to maintain the red rectangle showing the sweep-in-progress.
196 cfa37a7b 2004-04-10 devnull The rectangle to be drawn is specified by
200 cfa37a7b 2004-04-10 devnull parameter says whether to draw (1) or erase (0) the rectangle.
202 cfa37a7b 2004-04-10 devnull .I Menuhit
203 cfa37a7b 2004-04-10 devnull provides a simple menu mechanism.
204 cfa37a7b 2004-04-10 devnull It uses a
206 cfa37a7b 2004-04-10 devnull structure defined in
207 cfa37a7b 2004-04-10 devnull .BR <mouse.h> :
210 cfa37a7b 2004-04-10 devnull typedef struct Menu Menu;
211 cfa37a7b 2004-04-10 devnull struct Menu
213 cfa37a7b 2004-04-10 devnull char **item;
214 cfa37a7b 2004-04-10 devnull char *(*gen)(int);
215 cfa37a7b 2004-04-10 devnull int lasthit;
219 cfa37a7b 2004-04-10 devnull .IR Menuhit
220 cfa37a7b 2004-04-10 devnull behaves the same as its namesake
221 cfa37a7b 2004-04-10 devnull .I emenuhit
222 cfa37a7b 2004-04-10 devnull described in
223 d32deab1 2020-08-16 rsc .MR event (3) ,
224 cfa37a7b 2004-04-10 devnull with two exceptions.
225 cfa37a7b 2004-04-10 devnull First, it uses a
226 cfa37a7b 2004-04-10 devnull .B Mousectl
227 cfa37a7b 2004-04-10 devnull to access the mouse rather than using the event interface;
228 cfa37a7b 2004-04-10 devnull and second,
229 cfa37a7b 2004-04-10 devnull it creates the menu as a true window on the
230 cfa37a7b 2004-04-10 devnull .B Screen
233 d32deab1 2020-08-16 rsc .MR window (3) ),
234 cfa37a7b 2004-04-10 devnull permitting the menu to be displayed in parallel with other activities on the display.
237 cfa37a7b 2004-04-10 devnull is null,
238 cfa37a7b 2004-04-10 devnull .I menuhit
239 cfa37a7b 2004-04-10 devnull behaves like
240 cfa37a7b 2004-04-10 devnull .IR emenuhit ,
241 cfa37a7b 2004-04-10 devnull creating backing store for the menu, writing the menu directly on the display, and
242 cfa37a7b 2004-04-10 devnull restoring the display when the menu is removed.
244 cfa37a7b 2004-04-10 devnull .SH SOURCE
245 c3674de4 2005-01-11 devnull .B \*9/src/libdraw
246 cfa37a7b 2004-04-10 devnull .SH SEE ALSO
247 d32deab1 2020-08-16 rsc .MR graphics (3) ,
248 d32deab1 2020-08-16 rsc .MR draw (3) ,
249 d32deab1 2020-08-16 rsc .MR event (3) ,
250 d32deab1 2020-08-16 rsc .MR keyboard (3) ,
251 d32deab1 2020-08-16 rsc .MR thread (3) .