Blame


1 cfa37a7b 2004-04-10 devnull .TH MOUSE 3
2 cfa37a7b 2004-04-10 devnull .SH NAME
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
5 cfa37a7b 2004-04-10 devnull .nf
6 cfa37a7b 2004-04-10 devnull .B
7 cfa37a7b 2004-04-10 devnull #include <u.h>
8 cfa37a7b 2004-04-10 devnull .B
9 cfa37a7b 2004-04-10 devnull #include <libc.h>
10 cfa37a7b 2004-04-10 devnull .B
11 cfa37a7b 2004-04-10 devnull #include <draw.h>
12 cfa37a7b 2004-04-10 devnull .B
13 cfa37a7b 2004-04-10 devnull #include <thread.h>
14 cfa37a7b 2004-04-10 devnull .B
15 cfa37a7b 2004-04-10 devnull #include <mouse.h>
16 cfa37a7b 2004-04-10 devnull .B
17 cfa37a7b 2004-04-10 devnull #include <cursor.h>
18 cfa37a7b 2004-04-10 devnull .PP
19 cfa37a7b 2004-04-10 devnull .B
20 cfa37a7b 2004-04-10 devnull Mousectl *initmouse(char *file, Image *i)
21 cfa37a7b 2004-04-10 devnull .PP
22 cfa37a7b 2004-04-10 devnull .B
23 cfa37a7b 2004-04-10 devnull int readmouse(Mousectl *mc)
24 cfa37a7b 2004-04-10 devnull .PP
25 cfa37a7b 2004-04-10 devnull .B
26 cfa37a7b 2004-04-10 devnull int atomouse();
27 cfa37a7b 2004-04-10 devnull .PP
28 cfa37a7b 2004-04-10 devnull .B
29 cfa37a7b 2004-04-10 devnull void closemouse(Mousectl *mc)
30 cfa37a7b 2004-04-10 devnull .PP
31 cfa37a7b 2004-04-10 devnull .B
32 cfa37a7b 2004-04-10 devnull void moveto(Mousectl *mc, Point pt)
33 cfa37a7b 2004-04-10 devnull .PP
34 cfa37a7b 2004-04-10 devnull .B
35 cfa37a7b 2004-04-10 devnull void setcursor(Mousectl *mc, Cursor *c)
36 cfa37a7b 2004-04-10 devnull .PP
37 cfa37a7b 2004-04-10 devnull .B
38 cfa37a7b 2004-04-10 devnull Rectangle getrect(int but, Mousectl *mc)
39 cfa37a7b 2004-04-10 devnull .PP
40 cfa37a7b 2004-04-10 devnull .B
41 cfa37a7b 2004-04-10 devnull void drawgetrect(Rectangle r, int up)
42 cfa37a7b 2004-04-10 devnull .PP
43 cfa37a7b 2004-04-10 devnull .B
44 cfa37a7b 2004-04-10 devnull int menuhit(int but, Mousectl *mc, Menu *menu, Screen *scr)
45 cfa37a7b 2004-04-10 devnull .fi
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
51 cfa37a7b 2004-04-10 devnull (see
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) .
55 cfa37a7b 2004-04-10 devnull .PP
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> :
60 cfa37a7b 2004-04-10 devnull .IP
61 cfa37a7b 2004-04-10 devnull .EX
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
65 cfa37a7b 2004-04-10 devnull {
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;
69 cfa37a7b 2004-04-10 devnull };
70 cfa37a7b 2004-04-10 devnull .EE
71 cfa37a7b 2004-04-10 devnull .PP
72 cfa37a7b 2004-04-10 devnull The
73 cfa37a7b 2004-04-10 devnull .B Point
74 cfa37a7b 2004-04-10 devnull .B xy
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),
79 cfa37a7b 2004-04-10 devnull and
80 cfa37a7b 2004-04-10 devnull .BR msec ,
81 cfa37a7b 2004-04-10 devnull a millisecond time stamp.
82 cfa37a7b 2004-04-10 devnull .PP
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:
86 cfa37a7b 2004-04-10 devnull .IP
87 cfa37a7b 2004-04-10 devnull .EX
88 cfa37a7b 2004-04-10 devnull typedef struct Mousectl Mousectl;
89 cfa37a7b 2004-04-10 devnull struct Mousectl
90 cfa37a7b 2004-04-10 devnull {
91 125cfe1c 2020-01-14 rsc Mouse m;
92 125cfe1c 2020-01-14 rsc Channel *c; /* chan(Mouse)[16] */
93 cfa37a7b 2004-04-10 devnull Channel *resizec; /* chan(int)[2] */
94 cfa37a7b 2004-04-10 devnull
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 */
100 cfa37a7b 2004-04-10 devnull };
101 cfa37a7b 2004-04-10 devnull .EE
102 cfa37a7b 2004-04-10 devnull .PP
103 cfa37a7b 2004-04-10 devnull The arguments to
104 cfa37a7b 2004-04-10 devnull .I initmouse
105 cfa37a7b 2004-04-10 devnull are a
106 cfa37a7b 2004-04-10 devnull .I file
107 cfa37a7b 2004-04-10 devnull naming the device file connected to the mouse and an
108 cfa37a7b 2004-04-10 devnull .I Image
109 cfa37a7b 2004-04-10 devnull (see
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
113 cfa37a7b 2004-04-10 devnull nil,
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 .
120 cfa37a7b 2004-04-10 devnull .PP
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.
132 cfa37a7b 2004-04-10 devnull .PP
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
138 cfa37a7b 2004-04-10 devnull (see
139 d32deab1 2020-08-16 rsc .MR graphics (3) )
140 cfa37a7b 2004-04-10 devnull to reconnect to the window.
141 cfa37a7b 2004-04-10 devnull .PP
142 cfa37a7b 2004-04-10 devnull .I Readmouse
143 cfa37a7b 2004-04-10 devnull updates the
144 cfa37a7b 2004-04-10 devnull .B Mouse
145 125cfe1c 2020-01-14 rsc structure
146 125cfe1c 2020-01-14 rsc .B m
147 125cfe1c 2020-01-14 rsc held in the
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
154 cfa37a7b 2004-04-10 devnull (see
155 d32deab1 2020-08-16 rsc .MR graphics (3) )
156 cfa37a7b 2004-04-10 devnull before blocking, so any buffered graphics requests are displayed.
157 cfa37a7b 2004-04-10 devnull .PP
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.
163 cfa37a7b 2004-04-10 devnull .PP
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 .
167 cfa37a7b 2004-04-10 devnull .PP
168 cfa37a7b 2004-04-10 devnull .I Setcursor
169 cfa37a7b 2004-04-10 devnull sets the image of the cursor to that specified by
170 cfa37a7b 2004-04-10 devnull .IR c .
171 cfa37a7b 2004-04-10 devnull If
172 cfa37a7b 2004-04-10 devnull .I c
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) .
178 cfa37a7b 2004-04-10 devnull .PP
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
182 d32deab1 2020-08-16 rsc .MR rio (1)
183 cfa37a7b 2004-04-10 devnull or
184 d32deab1 2020-08-16 rsc .MR sam (1)
185 cfa37a7b 2004-04-10 devnull uses to create a new window.
186 cfa37a7b 2004-04-10 devnull The
187 cfa37a7b 2004-04-10 devnull .I but
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.
191 cfa37a7b 2004-04-10 devnull .PP
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
197 cfa37a7b 2004-04-10 devnull .I rc
198 cfa37a7b 2004-04-10 devnull and the
199 cfa37a7b 2004-04-10 devnull .I up
200 cfa37a7b 2004-04-10 devnull parameter says whether to draw (1) or erase (0) the rectangle.
201 cfa37a7b 2004-04-10 devnull .PP
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
205 cfa37a7b 2004-04-10 devnull .B Menu
206 cfa37a7b 2004-04-10 devnull structure defined in
207 cfa37a7b 2004-04-10 devnull .BR <mouse.h> :
208 cfa37a7b 2004-04-10 devnull .IP
209 cfa37a7b 2004-04-10 devnull .EX
210 cfa37a7b 2004-04-10 devnull typedef struct Menu Menu;
211 cfa37a7b 2004-04-10 devnull struct Menu
212 cfa37a7b 2004-04-10 devnull {
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;
216 cfa37a7b 2004-04-10 devnull };
217 cfa37a7b 2004-04-10 devnull .EE
218 cfa37a7b 2004-04-10 devnull .PP
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
231 cfa37a7b 2004-04-10 devnull .I scr
232 cfa37a7b 2004-04-10 devnull (see
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.
235 cfa37a7b 2004-04-10 devnull If
236 cfa37a7b 2004-04-10 devnull .I scr
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.
243 cfa37a7b 2004-04-10 devnull .PP
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) .