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