TORCS  1.3.9
The Open Racing Car Simulator
guiscrollbar.cpp
Go to the documentation of this file.
1 /***************************************************************************
2 
3  file : guiscrollbar.cpp
4  created : Mon Aug 23 22:11:37 CEST 1999
5  copyright : (C) 1999 by Eric Espie
6  email : torcs@free.fr
7  version : $Id$
8 
9  ***************************************************************************/
10 
11 /***************************************************************************
12  * *
13  * This program is free software; you can redistribute it and/or modify *
14  * it under the terms of the GNU General Public License as published by *
15  * the Free Software Foundation; either version 2 of the License, or *
16  * (at your option) any later version. *
17  * *
18  ***************************************************************************/
19 
27 #include <stdlib.h>
28 #ifdef WIN32
29 #include <windows.h>
30 #endif
31 #include <tgfclient.h>
32 #include "gui.h"
33 
34 void
36 {
37 }
38 
39 static void
40 gfuiScrollPlus(void *idv)
41 {
42  tGfuiObject *object;
43  tGfuiScrollBar *scrollbar;
44  tScrollBarInfo info;
45 
46  object = (tGfuiObject *) idv;
47 
48  if(object == NULL) {
49  return;
50  }
51 
52  scrollbar = &(object->u.scrollbar);
53  scrollbar->pos++;
54 
55  if(scrollbar->pos > scrollbar->max) {
56  scrollbar->pos = scrollbar->max;
57  } else if(scrollbar->onScroll != NULL) {
58  info.pos = scrollbar->pos;
59  info.userData = scrollbar->userData;
60  scrollbar->onScroll(&info);
61  }
62 }
63 
64 static void
65 gfuiScrollMinus(void *idv)
66 {
67  tGfuiObject *object;
68  tGfuiScrollBar *scrollbar;
69  tScrollBarInfo info;
70 
71  object = (tGfuiObject *) idv;
72 
73  if(object == NULL) {
74  return;
75  }
76 
77  scrollbar = &(object->u.scrollbar);
78  scrollbar->pos--;
79 
80  if(scrollbar->pos < scrollbar->min) {
81  scrollbar->pos = scrollbar->min;
82  } else if(scrollbar->onScroll != NULL) {
83  info.pos = scrollbar->pos;
84  info.userData = scrollbar->userData;
85  scrollbar->onScroll(&info);
86  }
87 }
88 
117 int
118 GfuiScrollBarCreate(void *scr, int x, int y, int align, int width, int orientation,
119  int min, int max, int len, int start,
120  void *userData, tfuiSBCallback onScroll)
121 {
122  tGfuiObject *object;
123  tGfuiScrollBar *scrollbar;
124  tGfuiScreen *screen = (tGfuiScreen *)scr;
125 
126  object = (tGfuiObject *)calloc(1, sizeof(tGfuiObject));
127  object->widget = GFUI_SCROLLBAR;
128  object->focusMode = GFUI_FOCUS_MOUSE_CLICK;
129  object->id = screen->curId++;
130  object->visible = 1;
131 
132  scrollbar = &(object->u.scrollbar);
133  scrollbar->userData = userData;
134  scrollbar->onScroll = onScroll;
135 
136  switch(orientation) {
137  case GFUI_HORI_SCROLLBAR:
138 
139  switch(align) {
140  case GFUI_ALIGN_HR_VB:
141  GfuiGrButtonCreate(scr, "data/img/arrow-right.png", "data/img/arrow-right.png",
142  "data/img/arrow-right.png", "data/img/arrow-right-pushed.png",
143  x, y, GFUI_ALIGN_HR_VB, 1,
144  (void *)(object), gfuiScrollPlus,
145  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
146  GfuiGrButtonCreate(scr, "data/img/arrow-left.png", "data/img/arrow-left.png",
147  "data/img/arrow-left.png", "data/img/arrow-left-pushed.png",
148  x - width, y, GFUI_ALIGN_HL_VB, 1,
149  (void *)(object), gfuiScrollMinus,
150  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
151  break;
152  case GFUI_ALIGN_HR_VC:
153  GfuiGrButtonCreate(scr, "data/img/arrow-right.png", "data/img/arrow-right.png",
154  "data/img/arrow-right.png", "data/img/arrow-right-pushed.png",
155  x, y, GFUI_ALIGN_HR_VC, 1,
156  (void *)(object), gfuiScrollPlus,
157  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
158  GfuiGrButtonCreate(scr, "data/img/arrow-left.png", "data/img/arrow-left.png",
159  "data/img/arrow-left.png", "data/img/arrow-left-pushed.png",
160  x - width, y, GFUI_ALIGN_HL_VC, 1,
161  (void *)(object), gfuiScrollMinus,
162  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
163  break;
164  case GFUI_ALIGN_HR_VT:
165  GfuiGrButtonCreate(scr, "data/img/arrow-right.png", "data/img/arrow-right.png",
166  "data/img/arrow-right.png", "data/img/arrow-right-pushed.png",
167  x, y, GFUI_ALIGN_HR_VT, 1,
168  (void *)(object), gfuiScrollPlus,
169  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
170  GfuiGrButtonCreate(scr, "data/img/arrow-left.png", "data/img/arrow-left.png",
171  "data/img/arrow-left.png", "data/img/arrow-left-pushed.png",
172  x - width, y, GFUI_ALIGN_HL_VT, 1,
173  (void *)(object), gfuiScrollMinus,
174  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
175  break;
176  case GFUI_ALIGN_HC_VB:
177  GfuiGrButtonCreate(scr, "data/img/arrow-right.png", "data/img/arrow-right.png",
178  "data/img/arrow-right.png", "data/img/arrow-right-pushed.png",
179  x + width / 2, y, GFUI_ALIGN_HR_VB, 1,
180  (void *)(object), gfuiScrollPlus,
181  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
182  GfuiGrButtonCreate(scr, "data/img/arrow-left.png", "data/img/arrow-left.png",
183  "data/img/arrow-left.png", "data/img/arrow-left-pushed.png",
184  x - width / 2, y, GFUI_ALIGN_HL_VB, 1,
185  (void *)(object), gfuiScrollMinus,
186  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
187  break;
188  case GFUI_ALIGN_HC_VC:
189  GfuiGrButtonCreate(scr, "data/img/arrow-right.png", "data/img/arrow-right.png",
190  "data/img/arrow-right.png", "data/img/arrow-right-pushed.png",
191  x + width / 2, y, GFUI_ALIGN_HR_VC, 1,
192  (void *)(object), gfuiScrollPlus,
193  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
194  GfuiGrButtonCreate(scr, "data/img/arrow-left.png", "data/img/arrow-left.png",
195  "data/img/arrow-left.png", "data/img/arrow-left-pushed.png",
196  x - width / 2, y, GFUI_ALIGN_HL_VC, 1,
197  (void *)(object), gfuiScrollMinus,
198  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
199  break;
200  case GFUI_ALIGN_HC_VT:
201  GfuiGrButtonCreate(scr, "data/img/arrow-right.png", "data/img/arrow-right.png",
202  "data/img/arrow-right.png", "data/img/arrow-right-pushed.png",
203  x + width / 2, y, GFUI_ALIGN_HR_VT, 1,
204  (void *)(object), gfuiScrollPlus,
205  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
206  GfuiGrButtonCreate(scr, "data/img/arrow-left.png", "data/img/arrow-left.png",
207  "data/img/arrow-left.png", "data/img/arrow-left-pushed.png",
208  x - width / 2, y, GFUI_ALIGN_HL_VT, 1,
209  (void *)(object), gfuiScrollMinus,
210  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
211  break;
212  case GFUI_ALIGN_HL_VB:
213  GfuiGrButtonCreate(scr, "data/img/arrow-right.png", "data/img/arrow-right.png",
214  "data/img/arrow-right.png", "data/img/arrow-right-pushed.png",
215  x + width, y, GFUI_ALIGN_HR_VB, 1,
216  (void *)(object), gfuiScrollPlus,
217  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
218  GfuiGrButtonCreate(scr, "data/img/arrow-left.png", "data/img/arrow-left.png",
219  "data/img/arrow-left.png", "data/img/arrow-left-pushed.png",
220  x, y, GFUI_ALIGN_HL_VB, 1,
221  (void *)(object), gfuiScrollMinus,
222  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
223  break;
224  case GFUI_ALIGN_HL_VC:
225  GfuiGrButtonCreate(scr, "data/img/arrow-right.png", "data/img/arrow-right.png",
226  "data/img/arrow-right.png", "data/img/arrow-right-pushed.png",
227  x + width, y, GFUI_ALIGN_HR_VC, 1,
228  (void *)(object), gfuiScrollPlus,
229  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
230  GfuiGrButtonCreate(scr, "data/img/arrow-left.png", "data/img/arrow-left.png",
231  "data/img/arrow-left.png", "data/img/arrow-left-pushed.png",
232  x, y, GFUI_ALIGN_HL_VC, 1,
233  (void *)(object), gfuiScrollMinus,
234  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
235  break;
236  case GFUI_ALIGN_HL_VT:
237  GfuiGrButtonCreate(scr, "data/img/arrow-right.png", "data/img/arrow-right.png",
238  "data/img/arrow-right.png", "data/img/arrow-right-pushed.png",
239  x + width, y, GFUI_ALIGN_HR_VT, 1,
240  (void *)(object), gfuiScrollPlus,
241  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
242  GfuiGrButtonCreate(scr, "data/img/arrow-left.png", "data/img/arrow-left.png",
243  "data/img/arrow-left.png", "data/img/arrow-left-pushed.png",
244  x, y, GFUI_ALIGN_HL_VT, 1,
245  (void *)(object), gfuiScrollMinus,
246  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
247  break;
248  default:
249  break;
250  }
251 
252  break;
253  case GFUI_VERT_SCROLLBAR:
254 
255  switch(align) {
256  case GFUI_ALIGN_HR_VB:
257  GfuiGrButtonCreate(scr, "data/img/arrow-up.png", "data/img/arrow-up.png",
258  "data/img/arrow-up.png", "data/img/arrow-up-pushed.png",
259  x, y + width, GFUI_ALIGN_HR_VT, 1,
260  (void *)(object), gfuiScrollMinus,
261  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
262  GfuiGrButtonCreate(scr, "data/img/arrow-down.png", "data/img/arrow-down.png",
263  "data/img/arrow-down.png", "data/img/arrow-down-pushed.png",
264  x, y, GFUI_ALIGN_HR_VB, 1,
265  (void *)(object), gfuiScrollPlus,
266  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
267  break;
268  case GFUI_ALIGN_HR_VC:
269  GfuiGrButtonCreate(scr, "data/img/arrow-up.png", "data/img/arrow-up.png",
270  "data/img/arrow-up.png", "data/img/arrow-up-pushed.png",
271  x, y + width / 2, GFUI_ALIGN_HR_VT, 1,
272  (void *)(object), gfuiScrollMinus,
273  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
274  GfuiGrButtonCreate(scr, "data/img/arrow-down.png", "data/img/arrow-down.png",
275  "data/img/arrow-down.png", "data/img/arrow-down-pushed.png",
276  x, y - width / 2, GFUI_ALIGN_HR_VB, 1,
277  (void *)(object), gfuiScrollPlus,
278  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
279  break;
280  case GFUI_ALIGN_HR_VT:
281  GfuiGrButtonCreate(scr, "data/img/arrow-up.png", "data/img/arrow-up.png",
282  "data/img/arrow-up.png", "data/img/arrow-up-pushed.png",
283  x, y, GFUI_ALIGN_HR_VT, 1,
284  (void *)(object), gfuiScrollMinus,
285  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
286  GfuiGrButtonCreate(scr, "data/img/arrow-down.png", "data/img/arrow-down.png",
287  "data/img/arrow-down.png", "data/img/arrow-down-pushed.png",
288  x, y - width, GFUI_ALIGN_HR_VB, 1,
289  (void *)(object), gfuiScrollPlus,
290  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
291  break;
292  case GFUI_ALIGN_HC_VB:
293  GfuiGrButtonCreate(scr, "data/img/arrow-up.png", "data/img/arrow-up.png",
294  "data/img/arrow-up.png", "data/img/arrow-up-pushed.png",
295  x, y + width, GFUI_ALIGN_HC_VT, 1,
296  (void *)(object), gfuiScrollMinus,
297  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
298  GfuiGrButtonCreate(scr, "data/img/arrow-down.png", "data/img/arrow-down.png",
299  "data/img/arrow-down.png", "data/img/arrow-down-pushed.png",
300  x, y, GFUI_ALIGN_HC_VB, 1,
301  (void *)(object), gfuiScrollPlus,
302  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
303  break;
304  case GFUI_ALIGN_HC_VC:
305  GfuiGrButtonCreate(scr, "data/img/arrow-up.png", "data/img/arrow-up.png",
306  "data/img/arrow-up.png", "data/img/arrow-up-pushed.png",
307  x, y + width / 2, GFUI_ALIGN_HC_VT, 1,
308  (void *)(object), gfuiScrollMinus,
309  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
310  GfuiGrButtonCreate(scr, "data/img/arrow-down.png", "data/img/arrow-down.png",
311  "data/img/arrow-down.png", "data/img/arrow-down-pushed.png",
312  x, y - width / 2, GFUI_ALIGN_HC_VB, 1,
313  (void *)(object), gfuiScrollPlus,
314  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
315  break;
316  case GFUI_ALIGN_HC_VT:
317  GfuiGrButtonCreate(scr, "data/img/arrow-up.png", "data/img/arrow-up.png",
318  "data/img/arrow-up.png", "data/img/arrow-up-pushed.png",
319  x, y, GFUI_ALIGN_HC_VT, 1,
320  (void *)(object), gfuiScrollMinus,
321  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
322  GfuiGrButtonCreate(scr, "data/img/arrow-down.png", "data/img/arrow-down.png",
323  "data/img/arrow-down.png", "data/img/arrow-down-pushed.png",
324  x, y - width, GFUI_ALIGN_HC_VB, 1,
325  (void *)(object), gfuiScrollPlus,
326  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
327  break;
328  case GFUI_ALIGN_HL_VB:
329  GfuiGrButtonCreate(scr, "data/img/arrow-up.png", "data/img/arrow-up.png",
330  "data/img/arrow-up.png", "data/img/arrow-up-pushed.png",
331  x, y + width, GFUI_ALIGN_HL_VT, 1,
332  (void *)(object), gfuiScrollMinus,
333  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
334  GfuiGrButtonCreate(scr, "data/img/arrow-down.png", "data/img/arrow-down.png",
335  "data/img/arrow-down.png", "data/img/arrow-down-pushed.png",
336  x, y, GFUI_ALIGN_HL_VB, 1,
337  (void *)(object), gfuiScrollPlus,
338  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
339  break;
340  case GFUI_ALIGN_HL_VC:
341  GfuiGrButtonCreate(scr, "data/img/arrow-up.png", "data/img/arrow-up.png",
342  "data/img/arrow-up.png", "data/img/arrow-up-pushed.png",
343  x, y + width / 2, GFUI_ALIGN_HL_VT, 1,
344  (void *)(object), gfuiScrollMinus,
345  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
346  GfuiGrButtonCreate(scr, "data/img/arrow-down.png", "data/img/arrow-down.png",
347  "data/img/arrow-down.png", "data/img/arrow-down-pushed.png",
348  x, y - width / 2, GFUI_ALIGN_HL_VB, 1,
349  (void *)(object), gfuiScrollPlus,
350  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
351  break;
352  case GFUI_ALIGN_HL_VT:
353  GfuiGrButtonCreate(scr, "data/img/arrow-up.png", "data/img/arrow-up.png",
354  "data/img/arrow-up.png", "data/img/arrow-up-pushed.png",
355  x, y, GFUI_ALIGN_HL_VT, 1,
356  (void *)(object), gfuiScrollMinus,
357  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
358  GfuiGrButtonCreate(scr, "data/img/arrow-down.png", "data/img/arrow-down.png",
359  "data/img/arrow-down.png", "data/img/arrow-down-pushed.png",
360  x, y - width, GFUI_ALIGN_HL_VB, 1,
361  (void *)(object), gfuiScrollPlus,
362  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
363  break;
364  default:
365  break;
366  }
367 
368  break;
369  default:
370  break;
371  }
372 
373 
374  gfuiAddObject(screen, object);
375  GfuiScrollBarPosSet(scr, object->id, min, max, len, start);
376  return object->id;
377 }
378 
386 int
387 GfuiScrollBarPosGet(void *scr, int id)
388 {
389  tGfuiObject *object;
390  tGfuiScrollBar *scrollbar;
391 
392  object = gfuiGetObject(scr, id);
393 
394  if(object == NULL) {
395  return -1;
396  }
397 
398  scrollbar = &(object->u.scrollbar);
399 
400  return scrollbar->pos;
401 }
402 
412 void
413 GfuiScrollBarPosSet(void *scr, int id, int min, int max, int len, int start)
414 {
415  tGfuiObject *object;
416  tGfuiScrollBar *scrollbar;
417 
418  object = gfuiGetObject(scr, id);
419 
420  if(object == NULL) {
421  return;
422  }
423 
424  scrollbar = &(object->u.scrollbar);
425 
426  scrollbar->min = min;
427  scrollbar->max = max;
428  scrollbar->len = len;
429  scrollbar->pos = start;
430 }
431 
432 void
434 {
435  free(curObject);
436 }
void gfuiReleaseScrollbar(tGfuiObject *curObject)
Scalar max(Scalar x, Scalar y)
Definition: Basic.h:50
static void gfuiScrollPlus(void *idv)
int id
Definition: gui.h:200
void GfuiScrollBarPosSet(void *scr, int id, int min, int max, int len, int start)
Set new values for position.
#define GFUI_SCROLLBAR
Definition: tgfclient.h:65
int len
Definition: gui.h:168
Scroll bar call-back information.
Definition: tgfclient.h:99
void * userData
Associated user data.
Definition: tgfclient.h:102
#define GFUI_ALIGN_HL_VT
Definition: tgfclient.h:71
#define GFUI_ALIGN_HR_VB
Definition: tgfclient.h:75
int curId
Definition: gui.h:245
The Gaming Framework API (client part).
void * userData
Definition: gui.h:170
int min
Definition: gui.h:168
#define GFUI_ALIGN_HC_VT
Definition: tgfclient.h:74
tfuiSBCallback onScroll
Definition: gui.h:171
#define GFUI_ALIGN_HC_VC
Definition: tgfclient.h:73
int pos
Definition: gui.h:168
#define GFUI_ALIGN_HL_VC
Definition: tgfclient.h:70
int GfuiScrollBarCreate(void *scr, int x, int y, int align, int width, int orientation, int min, int max, int len, int start, void *userData, tfuiSBCallback onScroll)
Create a new scroll bar.
#define GFUI_ALIGN_HR_VT
Definition: tgfclient.h:77
void gfuiScrollBarInit(void)
void(* tfuiCallback)(void *)
Definition: tgfclient.h:105
#define GFUI_FOCUS_MOUSE_CLICK
Definition: gui.h:134
tGfuiObject * gfuiGetObject(void *scr, int id)
Definition: guiobject.cpp:501
int GfuiScrollBarPosGet(void *scr, int id)
Get the current position of a scroll bar.
void gfuiAddObject(tGfuiScreen *screen, tGfuiObject *object)
Definition: guiobject.cpp:485
#define GFUI_ALIGN_HC_VB
Definition: tgfclient.h:72
#define GFUI_ALIGN_HL_VB
Definition: tgfclient.h:69
Scalar min(Scalar x, Scalar y)
Definition: Basic.h:49
static Vector y[4]
Definition: Convex.cpp:56
int pos
Current scroll bar position.
Definition: tgfclient.h:101
#define GFUI_ALIGN_HR_VC
Definition: tgfclient.h:76
int GfuiGrButtonCreate(void *scr, const char *disabled, const char *enabled, const char *focused, const char *pushed, int x, int y, int align, int mouse, void *userDataOnPush, tfuiCallback onPush, void *userDataOnFocus, tfuiCallback onFocus, tfuiCallback onFocusLost)
Add a graphical button to a screen.
Definition: guibutton.cpp:62
static void gfuiScrollMinus(void *idv)
int max
Definition: gui.h:168
void(* tfuiSBCallback)(tScrollBarInfo *)
Definition: tgfclient.h:106
#define GFUI_VERT_SCROLLBAR
Definition: tgfclient.h:96
#define GFUI_HORI_SCROLLBAR
Definition: tgfclient.h:95