1 /********************************************************************
2 This file is part of the abs 0.907 distribution. abs is a spreadsheet
3 with graphical user interface.
4
5 Copyright (C) 1998-2001 Andr� Bertin (Andre.Bertin@ping.be)
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version if in the same spirit as version 2.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20
21 Concact: abs@pi.be
22 http://home.pi.be/bertin/abs.shtml
23
24 *********************************************************************/
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 #include "cursor.h"
54 #include <X11/cursorfont.h>
55
56
57 static int CURSOR = 0;
58
59 int
getcursortype()60 getcursortype ()
61 {
62 return CURSOR;
63 };
64
65 int
setcursortype(cursor_type type)66 setcursortype (cursor_type type)
67 {
68
69
70
71
72
73
74
75
76
77
78 return 0;
79 }
80
81 void
TurnOnCross(Widget w)82 TurnOnCross (
83 Widget w)
84 {
85 Cursor cursor;
86 cursor = XCreateFontCursor (XtDisplay (w), XC_sizing);
87 XDefineCursor (XtDisplay (w), XtWindow (w), cursor);
88 XFlush (XtDisplay (w));
89 CURSOR = CROSS;
90 }
91
92 void
TurnOnSpray(Widget w)93 TurnOnSpray (
94 Widget w)
95 {
96 Cursor cursor;
97
98 cursor = XCreateFontCursor (XtDisplay (w), XC_spraycan);
99 XDefineCursor (XtDisplay (w), XtWindow (w), cursor);
100 XFlush (XtDisplay (w));
101 CURSOR = SPRAY;
102 }
103
104 void
TurnOnPencil(Widget w)105 TurnOnPencil (Widget w)
106 {
107 Cursor cursor;
108
109 cursor = XCreateFontCursor (XtDisplay (w), XC_pencil);
110 XDefineCursor (XtDisplay (w), XtWindow (w), cursor);
111 XFlush (XtDisplay (w));
112 CURSOR = PENCIL;
113 }
114
115
116 void
TurnOnMove(Widget w)117 TurnOnMove (
118 Widget w)
119 {
120 Cursor cursor;
121
122 cursor = XCreateFontCursor (XtDisplay (w), XC_fleur);
123 XDefineCursor (XtDisplay (w), XtWindow (w), cursor);
124 XFlush (XtDisplay (w));
125 CURSOR = CMOVE;
126 }
127
128 void
TurnOnHand(Widget w)129 TurnOnHand (
130 Widget w)
131 {
132 Cursor cursor;
133
134 cursor = XCreateFontCursor (XtDisplay (w), XC_hand1);
135 XDefineCursor (XtDisplay (w), XtWindow (w), cursor);
136 XFlush (XtDisplay (w));
137 CURSOR = HAND;
138 }
139
140 void
TurnOnBottomLeft(Widget w)141 TurnOnBottomLeft (
142 Widget w)
143 {
144 Cursor cursor;
145
146 cursor = XCreateFontCursor (XtDisplay (w), XC_bottom_left_corner);
147 XDefineCursor (XtDisplay (w), XtWindow (w), cursor);
148 XFlush (XtDisplay (w));
149 CURSOR = BOTTOM_LEFT;
150 }
151
152 void
TurnOnBottomRight(Widget w)153 TurnOnBottomRight (
154 Widget w)
155 {
156 Cursor cursor;
157
158 cursor = XCreateFontCursor (XtDisplay (w), XC_bottom_right_corner);
159 XDefineCursor (XtDisplay (w), XtWindow (w), cursor);
160 XFlush (XtDisplay (w));
161 CURSOR = BOTTOM_RIGHT;
162 }
163 void
TurnOnTopLeft(Widget w)164 TurnOnTopLeft (
165 Widget w)
166 {
167 Cursor cursor;
168
169 cursor = XCreateFontCursor (XtDisplay (w), XC_top_left_corner);
170 XDefineCursor (XtDisplay (w), XtWindow (w), cursor);
171 XFlush (XtDisplay (w));
172 CURSOR = TOP_LEFT;
173 }
174 void
TurnOnTopRight(Widget w)175 TurnOnTopRight (
176 Widget w)
177 {
178 Cursor cursor;
179
180 cursor = XCreateFontCursor (XtDisplay (w), XC_top_right_corner);
181 XDefineCursor (XtDisplay (w), XtWindow (w), cursor);
182 XFlush (XtDisplay (w));
183 CURSOR = TOP_RIGHT;
184 }
185 void
TurnOnTopSide(Widget w)186 TurnOnTopSide (
187 Widget w)
188 {
189 Cursor cursor;
190
191 cursor = XCreateFontCursor (XtDisplay (w), XC_top_side);
192 XDefineCursor (XtDisplay (w), XtWindow (w), cursor);
193 XFlush (XtDisplay (w));
194 CURSOR = TOP_SIDE;
195 }
196 void
TurnOnLeftSide(Widget w)197 TurnOnLeftSide (
198 Widget w)
199 {
200 Cursor cursor;
201
202 cursor = XCreateFontCursor (XtDisplay (w), XC_left_side);
203 XDefineCursor (XtDisplay (w), XtWindow (w), cursor);
204 XFlush (XtDisplay (w));
205 CURSOR = LEFT_SIDE;
206 }
207 void
TurnOnRightSide(Widget w)208 TurnOnRightSide (
209 Widget w)
210 {
211 Cursor cursor;
212
213 cursor = XCreateFontCursor (XtDisplay (w), XC_right_side);
214 XDefineCursor (XtDisplay (w), XtWindow (w), cursor);
215 XFlush (XtDisplay (w));
216 CURSOR = RIGHT_SIDE;
217 }
218 void
TurnOnBottomSide(Widget w)219 TurnOnBottomSide (
220 Widget w)
221 {
222 Cursor cursor;
223
224 cursor = XCreateFontCursor (XtDisplay (w), XC_bottom_side);
225 XDefineCursor (XtDisplay (w), XtWindow (w), cursor);
226 XFlush (XtDisplay (w));
227 CURSOR = BOTTOM_SIDE;
228 }
229
230
231
232 void
TurnOffMove(Widget w)233 TurnOffMove (
234 Widget w)
235
236 {
237
238 XUndefineCursor (XtDisplay (w), XtWindow (w));
239 XFlush (XtDisplay (w));
240 CURSOR = ARROW;
241 }
242
243
244
245 void
TurnOffCursor(Widget w)246 TurnOffCursor (
247 Widget w)
248 {
249
250 XUndefineCursor (XtDisplay (w), XtWindow (w));
251 XFlush (XtDisplay (w));
252 CURSOR = ARROW;
253 }
254
255 void
TurnOffCross(Widget w)256 TurnOffCross (
257 Widget w)
258
259 {
260
261 XUndefineCursor (XtDisplay (w), XtWindow (w));
262 XFlush (XtDisplay (w));
263 CURSOR = ARROW;
264 }
265
266 int
TurnOnLimitCursor(Widget draw,int xa,int ya,int xb,int yb,int x,int y)267 TurnOnLimitCursor (Widget draw, int xa, int ya, int xb, int yb, int x, int y)
268 {
269 if (xa - 4 <= x && x <= xa + 4 && yb - 4 <= y && y <= yb + 4)
270 {
271 if (CURSOR != BOTTOM_LEFT)
272 TurnOnBottomLeft (draw);
273 return BOTTOM_LEFT;
274 }
275 else if (CURSOR == BOTTOM_LEFT)
276 {
277 TurnOffCursor (draw);
278 }
279 if (xb - 4 <= x && x <= xb + 4 && yb - 4 <= y && y <= yb + 4)
280 {
281 if (CURSOR != BOTTOM_RIGHT)
282 TurnOnBottomRight (draw);
283 return BOTTOM_RIGHT;
284 }
285 else if (CURSOR == BOTTOM_RIGHT)
286 {
287 TurnOffCursor (draw);
288 }
289 if (xa - 4 <= x && x <= xa + 4 && ya - 4 <= y && y <= ya + 4)
290 {
291 if (CURSOR != TOP_LEFT)
292 TurnOnTopLeft (draw);
293 return TOP_LEFT;
294 }
295 else if (CURSOR == TOP_LEFT)
296 {
297 TurnOffCursor (draw);
298 }
299 if (xb - 4 <= x && x <= xb + 4 && ya - 4 <= y && y <= ya + 4)
300 {
301 if (CURSOR != TOP_RIGHT)
302 TurnOnTopRight (draw);
303 return TOP_RIGHT;
304 }
305 else if (CURSOR == TOP_RIGHT)
306 {
307 TurnOffCursor (draw);
308 }
309 if ((xa + xb) / 2 - 4 <= x && x <= (xa + xb) / 2 + 4 && yb - 4 <= y && y <= yb + 4)
310 {
311 if (CURSOR != BOTTOM_SIDE)
312 TurnOnBottomSide (draw);
313 return BOTTOM_SIDE;
314 }
315 else if (CURSOR == BOTTOM_SIDE)
316 {
317 TurnOffCursor (draw);
318 }
319 if (xb - 4 <= x && x <= xb + 4 && (yb + ya) / 2 - 4 <= y && y <= (yb + ya) / 2 + 4)
320 {
321 if (CURSOR != RIGHT_SIDE)
322 TurnOnRightSide (draw);
323 return RIGHT_SIDE;
324 }
325 else if (CURSOR == RIGHT_SIDE)
326 {
327 TurnOffCursor (draw);
328 }
329 if ((xa + xb) / 2 - 4 <= x && x <= (xa + xb) / 2 + 4 && ya - 4 <= y && y <= ya + 4)
330 {
331 if (CURSOR != TOP_SIDE)
332 TurnOnTopSide (draw);
333 return TOP_SIDE;
334 }
335 else if (CURSOR == TOP_SIDE)
336 {
337 TurnOffCursor (draw);
338 }
339 if (xa - 4 <= x && x <= xa + 4 && (yb + ya) / 2 - 4 <= y && y <= (yb + ya) / 2 + 4)
340 {
341 if (CURSOR != LEFT_SIDE)
342 TurnOnLeftSide (draw);
343 return LEFT_SIDE;
344 }
345 else if (CURSOR == LEFT_SIDE)
346 {
347 TurnOffCursor (draw);
348 }
349
350
351
352
353
354
355
356
357
358 TurnOffCursor (draw);
359
360
361 return CURSOR;
362 }
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407