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 bf8a59fa 2004-04-11 devnull .IR thread (3));
53 cfa37a7b 2004-04-10 devnull programs that wish a more event-driven, single-threaded approach should use
54 bf8a59fa 2004-04-11 devnull .IR 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 cfa37a7b 2004-04-10 devnull Mouse;
92 cfa37a7b 2004-04-10 devnull 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 cfa37a7b 2004-04-10 devnull 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 bf8a59fa 2004-04-11 devnull .IR 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 bf8a59fa 2004-04-11 devnull .IR 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 cfa37a7b 2004-04-10 devnull structure held in the
146 cfa37a7b 2004-04-10 devnull .BR Mousectl ,
147 cfa37a7b 2004-04-10 devnull blocking if the state has not changed since the last
148 cfa37a7b 2004-04-10 devnull .I readmouse
149 cfa37a7b 2004-04-10 devnull or message sent on the channel.
150 cfa37a7b 2004-04-10 devnull It calls
151 cfa37a7b 2004-04-10 devnull .B flushimage
152 cfa37a7b 2004-04-10 devnull (see
153 bf8a59fa 2004-04-11 devnull .IR graphics (3))
154 cfa37a7b 2004-04-10 devnull before blocking, so any buffered graphics requests are displayed.
155 cfa37a7b 2004-04-10 devnull .PP
156 cfa37a7b 2004-04-10 devnull .I Closemouse
157 cfa37a7b 2004-04-10 devnull closes the file descriptors associated with the mouse, kills the slave processes,
158 cfa37a7b 2004-04-10 devnull and frees the
159 cfa37a7b 2004-04-10 devnull .B Mousectl
160 cfa37a7b 2004-04-10 devnull structure.
161 cfa37a7b 2004-04-10 devnull .PP
162 cfa37a7b 2004-04-10 devnull .I Moveto
163 cfa37a7b 2004-04-10 devnull moves the mouse cursor on the display to the position specified by
164 cfa37a7b 2004-04-10 devnull .IR pt .
165 cfa37a7b 2004-04-10 devnull .PP
166 cfa37a7b 2004-04-10 devnull .I Setcursor
167 cfa37a7b 2004-04-10 devnull sets the image of the cursor to that specified by
168 cfa37a7b 2004-04-10 devnull .IR c .
169 cfa37a7b 2004-04-10 devnull If
170 cfa37a7b 2004-04-10 devnull .I c
171 cfa37a7b 2004-04-10 devnull is nil, the cursor is set to the default.
172 cfa37a7b 2004-04-10 devnull The format of the cursor data is spelled out in
173 cfa37a7b 2004-04-10 devnull .B <cursor.h>
174 cfa37a7b 2004-04-10 devnull and described in
175 bf8a59fa 2004-04-11 devnull .IR graphics (3).
176 cfa37a7b 2004-04-10 devnull .PP
177 cfa37a7b 2004-04-10 devnull .I Getrect
178 cfa37a7b 2004-04-10 devnull returns the dimensions of a rectangle swept by the user, using the mouse,
179 cfa37a7b 2004-04-10 devnull in the manner
180 cfa37a7b 2004-04-10 devnull .IR rio (1)
181 cfa37a7b 2004-04-10 devnull or
182 cfa37a7b 2004-04-10 devnull .IR sam (1)
183 cfa37a7b 2004-04-10 devnull uses to create a new window.
184 cfa37a7b 2004-04-10 devnull The
185 cfa37a7b 2004-04-10 devnull .I but
186 cfa37a7b 2004-04-10 devnull argument specifies which button the user must press to sweep the window;
187 cfa37a7b 2004-04-10 devnull any other button press cancels the action.
188 cfa37a7b 2004-04-10 devnull The returned rectangle is all zeros if the user cancels.
189 cfa37a7b 2004-04-10 devnull .PP
190 cfa37a7b 2004-04-10 devnull .I Getrect
191 cfa37a7b 2004-04-10 devnull uses successive calls to
192 cfa37a7b 2004-04-10 devnull .I drawgetrect
193 cfa37a7b 2004-04-10 devnull to maintain the red rectangle showing the sweep-in-progress.
194 cfa37a7b 2004-04-10 devnull The rectangle to be drawn is specified by
195 cfa37a7b 2004-04-10 devnull .I rc
196 cfa37a7b 2004-04-10 devnull and the
197 cfa37a7b 2004-04-10 devnull .I up
198 cfa37a7b 2004-04-10 devnull parameter says whether to draw (1) or erase (0) the rectangle.
199 cfa37a7b 2004-04-10 devnull .PP
200 cfa37a7b 2004-04-10 devnull .I Menuhit
201 cfa37a7b 2004-04-10 devnull provides a simple menu mechanism.
202 cfa37a7b 2004-04-10 devnull It uses a
203 cfa37a7b 2004-04-10 devnull .B Menu
204 cfa37a7b 2004-04-10 devnull structure defined in
205 cfa37a7b 2004-04-10 devnull .BR <mouse.h> :
206 cfa37a7b 2004-04-10 devnull .IP
207 cfa37a7b 2004-04-10 devnull .EX
208 cfa37a7b 2004-04-10 devnull typedef struct Menu Menu;
209 cfa37a7b 2004-04-10 devnull struct Menu
210 cfa37a7b 2004-04-10 devnull {
211 cfa37a7b 2004-04-10 devnull char **item;
212 cfa37a7b 2004-04-10 devnull char *(*gen)(int);
213 cfa37a7b 2004-04-10 devnull int lasthit;
214 cfa37a7b 2004-04-10 devnull };
215 cfa37a7b 2004-04-10 devnull .EE
216 cfa37a7b 2004-04-10 devnull .PP
217 cfa37a7b 2004-04-10 devnull .IR Menuhit
218 cfa37a7b 2004-04-10 devnull behaves the same as its namesake
219 cfa37a7b 2004-04-10 devnull .I emenuhit
220 cfa37a7b 2004-04-10 devnull described in
221 bf8a59fa 2004-04-11 devnull .IR event (3),
222 cfa37a7b 2004-04-10 devnull with two exceptions.
223 cfa37a7b 2004-04-10 devnull First, it uses a
224 cfa37a7b 2004-04-10 devnull .B Mousectl
225 cfa37a7b 2004-04-10 devnull to access the mouse rather than using the event interface;
226 cfa37a7b 2004-04-10 devnull and second,
227 cfa37a7b 2004-04-10 devnull it creates the menu as a true window on the
228 cfa37a7b 2004-04-10 devnull .B Screen
229 cfa37a7b 2004-04-10 devnull .I scr
230 cfa37a7b 2004-04-10 devnull (see
231 bf8a59fa 2004-04-11 devnull .IR window (3)),
232 cfa37a7b 2004-04-10 devnull permitting the menu to be displayed in parallel with other activities on the display.
233 cfa37a7b 2004-04-10 devnull If
234 cfa37a7b 2004-04-10 devnull .I scr
235 cfa37a7b 2004-04-10 devnull is null,
236 cfa37a7b 2004-04-10 devnull .I menuhit
237 cfa37a7b 2004-04-10 devnull behaves like
238 cfa37a7b 2004-04-10 devnull .IR emenuhit ,
239 cfa37a7b 2004-04-10 devnull creating backing store for the menu, writing the menu directly on the display, and
240 cfa37a7b 2004-04-10 devnull restoring the display when the menu is removed.
241 cfa37a7b 2004-04-10 devnull .PP
242 cfa37a7b 2004-04-10 devnull .SH SOURCE
243 c3674de4 2005-01-11 devnull .B \*9/src/libdraw
244 cfa37a7b 2004-04-10 devnull .SH SEE ALSO
245 bf8a59fa 2004-04-11 devnull .IR graphics (3),
246 bf8a59fa 2004-04-11 devnull .IR draw (3),
247 bf8a59fa 2004-04-11 devnull .IR event (3),
248 bf8a59fa 2004-04-11 devnull .IR keyboard (3),
249 bf8a59fa 2004-04-11 devnull .IR thread (3).