211
212
case BUTTON_SHAPE_RECTANGLE :
212
213
// On colorie le point haut droit
213
214
Pixel_in_menu(end_x,start_y,color_diagonal);
214
GFX_menu_block[start_y][end_x]=color_diagonal;
215
Gfx->Menu_block[start_y][end_x]=color_diagonal;
215
216
// On colorie le point bas gauche
216
217
Pixel_in_menu(start_x,end_y,color_diagonal);
217
GFX_menu_block[end_y][start_x]=color_diagonal;
218
Gfx->Menu_block[end_y][start_x]=color_diagonal;
218
219
// On colorie la partie haute
219
220
for (x_pos=start_x;x_pos<=end_x-1;x_pos++)
221
222
Pixel_in_menu(x_pos,start_y,color_top_left);
222
GFX_menu_block[start_y][x_pos]=color_top_left;
223
Gfx->Menu_block[start_y][x_pos]=color_top_left;
224
225
for (y_pos=start_y+1;y_pos<=end_y-1;y_pos++)
226
227
// On colorie la partie gauche
227
228
Pixel_in_menu(start_x,y_pos,color_top_left);
228
GFX_menu_block[y_pos][start_x]=color_top_left;
229
Gfx->Menu_block[y_pos][start_x]=color_top_left;
229
230
// On colorie la partie droite
230
231
Pixel_in_menu(end_x,y_pos,color_bottom_right);
231
GFX_menu_block[y_pos][end_x]=color_bottom_right;
232
Gfx->Menu_block[y_pos][end_x]=color_bottom_right;
233
234
// On colorie la partie basse
234
235
for (x_pos=start_x+1;x_pos<=end_x;x_pos++)
236
237
Pixel_in_menu(x_pos,end_y,color_bottom_right);
237
GFX_menu_block[end_y][x_pos]=color_bottom_right;
238
Gfx->Menu_block[end_y][x_pos]=color_bottom_right;
240
241
case BUTTON_SHAPE_TRIANGLE_TOP_LEFT:
241
242
// On colorie le point haut droit
242
243
Pixel_in_menu(end_x,start_y,color_diagonal);
243
GFX_menu_block[start_y][end_x]=color_diagonal;
244
Gfx->Menu_block[start_y][end_x]=color_diagonal;
244
245
// On colorie le point bas gauche
245
246
Pixel_in_menu(start_x,end_y,color_diagonal);
246
GFX_menu_block[end_y][start_x]=color_diagonal;
247
Gfx->Menu_block[end_y][start_x]=color_diagonal;
247
248
// On colorie le coin haut gauche
248
249
for (x_pos=0;x_pos<Buttons_Pool[btn_number].Width;x_pos++)
250
251
Pixel_in_menu(start_x+x_pos,start_y,color_top_left);
251
GFX_menu_block[start_y][start_x+x_pos]=color_top_left;
252
Gfx->Menu_block[start_y][start_x+x_pos]=color_top_left;
252
253
Pixel_in_menu(start_x,start_y+x_pos,color_top_left);
253
GFX_menu_block[start_y+x_pos][start_x]=color_top_left;
254
Gfx->Menu_block[start_y+x_pos][start_x]=color_top_left;
255
256
// On colorie la diagonale
256
257
for (x_pos=1;x_pos<Buttons_Pool[btn_number].Width;x_pos++)
258
259
Pixel_in_menu(start_x+x_pos,end_y-x_pos,color_bottom_right);
259
GFX_menu_block[end_y-x_pos][start_x+x_pos]=color_bottom_right;
260
Gfx->Menu_block[end_y-x_pos][start_x+x_pos]=color_bottom_right;
262
263
case BUTTON_SHAPE_TRIANGLE_BOTTOM_RIGHT:
263
264
// On colorie le point haut droit
264
265
Pixel_in_menu(end_x,start_y,color_diagonal);
265
GFX_menu_block[start_y][end_x]=color_diagonal;
266
Gfx->Menu_block[start_y][end_x]=color_diagonal;
266
267
// On colorie le point bas gauche
267
268
Pixel_in_menu(start_x,end_y,color_diagonal);
268
GFX_menu_block[end_y][start_x]=color_diagonal;
269
Gfx->Menu_block[end_y][start_x]=color_diagonal;
269
270
// On colorie la diagonale
270
271
for (x_pos=1;x_pos<Buttons_Pool[btn_number].Width;x_pos++)
272
273
Pixel_in_menu(start_x+x_pos,end_y-x_pos,color_top_left);
273
GFX_menu_block[end_y-x_pos][start_x+x_pos]=color_top_left;
274
Gfx->Menu_block[end_y-x_pos][start_x+x_pos]=color_top_left;
275
276
// On colorie le coin bas droite
276
277
for (x_pos=0;x_pos<Buttons_Pool[btn_number].Width;x_pos++)
278
279
Pixel_in_menu(end_x-x_pos,end_y,color_bottom_right);
279
GFX_menu_block[end_y][end_x-x_pos]=color_bottom_right;
280
Gfx->Menu_block[end_y][end_x-x_pos]=color_bottom_right;
280
281
Pixel_in_menu(end_x,end_y-x_pos,color_bottom_right);
281
GFX_menu_block[end_y-x_pos][end_x]=color_bottom_right;
282
Gfx->Menu_block[end_y-x_pos][end_x]=color_bottom_right;
284
285
if (Menu_is_visible)
1727
//----------------------- Create a List control -----------------------
1728
// These controls are special. They work over two controls previously created:
1729
// - entry_button is the textual area where the list values will be printed.
1730
// - scroller is a scroller button attached to it
1732
T_List_button * Window_set_list_button(T_Special_button * entry_button, T_Scroller_button * scroller, Func_draw_list_item draw_list_item)
1734
T_List_button *temp;
1736
temp=(T_List_button *)malloc(sizeof(T_List_button));
1737
temp->Number =++Window_nb_buttons;
1738
temp->List_start = 0;
1739
temp->Cursor_position = 0;
1740
temp->Entry_button = entry_button;
1741
temp->Scroller = scroller;
1742
temp->Draw_list_item = draw_list_item;
1744
temp->Next=Window_list_button_list;
1745
Window_list_button_list=temp;
1749
void Window_redraw_list(T_List_button * list)
1753
for (i=Min(list->Scroller->Nb_visibles-1, list->Scroller->Nb_elements-1); i>=0; i--)
1755
list->Draw_list_item(
1756
list->Entry_button->Pos_X,
1757
list->Entry_button->Pos_Y + i * 8,
1758
list->List_start + i,
1759
i == list->Cursor_position);
1616
1763
//----------------------- Ouverture d'un pop-up -----------------------
1618
1765
void Open_popup(word x_pos, word y_pos, word width,word height)
1835
1989
// -------------- R�cup�ration d'une couleur derri�re un menu ----------------
1836
1990
void Get_color_behind_window(byte * color, byte * click)
1838
short width=Window_width*Menu_factor_X;
1839
short height=Window_height*Menu_factor_Y;
1840
1992
short old_x=-1;
1841
1993
short old_y=-1;
1843
1995
short a,b,c,d; // Variables temporaires et multit�ches...
1996
byte * buffer = NULL;
1846
1998
byte cursor_was_hidden;
1849
if ((buffer=(byte *) malloc(width*height)))
1853
cursor_was_hidden=Cursor_hidden;
1856
for (index=0; index<height; index++)
1857
Read_line(Window_pos_X,Window_pos_Y+index,width,buffer+((int)index*width*Pixel_width));
1859
Menu_Y=Menu_Y_before_window;
1861
Menu_is_visible=Menu_is_visible_before_window;
1862
Display_all_screen();
1867
Cursor_shape=CURSOR_SHAPE_COLORPICKER;
1868
b=Paintbrush_hidden;
1869
Paintbrush_hidden=1;
1870
c=-1; // color point�e: au d�but aucune, comme �a on initialise tout
1871
if (Menu_is_visible_before_window)
1872
Print_in_menu(Menu_tooltip[BUTTON_CHOOSE_COL],0);
1878
if(!Get_input())SDL_Delay(20);
1880
if ((Mouse_X!=old_x) || (Mouse_Y!=old_y))
1883
a=Read_pixel(Mouse_X,Mouse_Y);
1886
c=a; // Mise � jour de la couleur point�e
1887
if (Menu_is_visible_before_window)
1889
sprintf(str,"%d",a);
1892
sprintf(str+strlen(str),"%d",Main_palette[a].R);
1894
sprintf(str+strlen(str),"%d",Main_palette[a].G);
1896
sprintf(str+strlen(str),"%d",Main_palette[a].B);
1899
for (index=strlen(str); index<a; index++)
1902
Print_in_menu(str,strlen(Menu_tooltip[BUTTON_CHOOSE_COL]));
1904
Print_general((26+((d+strlen(Menu_tooltip[BUTTON_CHOOSE_COL]))<<3))*Menu_factor_X,
1905
Menu_status_Y," ",0,c);
1913
} while (!(Mouse_K || (Key==KEY_ESC)));
1919
*color=Read_pixel(Mouse_X,Mouse_Y);
1927
for (index=0; index<height; index++)
1928
Display_line(Window_pos_X,Window_pos_Y+index,width,buffer+((int)index*width));
1929
Update_rect(Window_pos_X, Window_pos_Y, Window_width*Menu_factor_X, Window_height*Menu_factor_Y);
1930
Cursor_shape=CURSOR_SHAPE_ARROW;
1931
Paintbrush_hidden=b;
1932
Cursor_hidden=cursor_was_hidden;
2003
cursor_was_hidden=Cursor_hidden;
2006
Save_background(&buffer,Window_pos_X,Window_pos_Y,Window_width,Window_height);
2008
Menu_Y=Menu_Y_before_window;
2010
Menu_is_visible=Menu_is_visible_before_window;
2011
Display_all_screen();
2016
Cursor_shape=CURSOR_SHAPE_COLORPICKER;
2017
b=Paintbrush_hidden;
2018
Paintbrush_hidden=1;
2019
c=-1; // color point�e: au d�but aucune, comme �a on initialise tout
2020
if (Menu_is_visible_before_window)
2021
Print_in_menu(Menu_tooltip[BUTTON_CHOOSE_COL],0);
2027
if(!Get_input())SDL_Delay(20);
2029
if ((Mouse_X!=old_x) || (Mouse_Y!=old_y))
2032
a=Read_pixel(Mouse_X,Mouse_Y);
2035
c=a; // Mise � jour de la couleur point�e
2036
if (Menu_is_visible_before_window)
2038
sprintf(str,"%d",a);
2041
sprintf(str+strlen(str),"%d",Main_palette[a].R);
2043
sprintf(str+strlen(str),"%d",Main_palette[a].G);
2045
sprintf(str+strlen(str),"%d",Main_palette[a].B);
2048
for (index=strlen(str); index<a; index++)
2051
Print_in_menu(str,strlen(Menu_tooltip[BUTTON_CHOOSE_COL]));
2053
Print_general((26+((d+strlen(Menu_tooltip[BUTTON_CHOOSE_COL]))<<3))*Menu_factor_X,
2054
Menu_status_Y," ",0,c);
2062
} while (!(Mouse_K || (Key==KEY_ESC)));
2068
*color=Read_pixel(Mouse_X,Mouse_Y);
2076
Restore_background(buffer,Window_pos_X,Window_pos_Y,Window_width,Window_height);
2077
Update_rect(Window_pos_X, Window_pos_Y, Window_width*Menu_factor_X, Window_height*Menu_factor_Y);
2078
Cursor_shape=CURSOR_SHAPE_ARROW;
2079
Paintbrush_hidden=b;
2080
Cursor_hidden=cursor_was_hidden;
2271
// Test du click sur les zones "palette"
2417
// Test click on "Palette" buttons
2272
2418
for (temp2=Window_palette_button_list; temp2; temp2=temp2->Next)
2274
if (Window_click_in_rectangle(temp2->Pos_X+5,temp2->Pos_Y+3,temp2->Pos_X+160,temp2->Pos_Y+82))
2420
if ((Input_sticky_control == 0 || Input_sticky_control == temp2->Number)
2421
&& Window_click_in_rectangle(temp2->Pos_X+5,temp2->Pos_Y+3,temp2->Pos_X+160,temp2->Pos_Y+82))
2276
// On stocke dans Attribut2 le numero de couleur cliqu�
2423
Input_sticky_control = temp2->Number;
2424
// We store the clicked color in Attribute2
2277
2425
Window_attribute2 = (((Mouse_X-Window_pos_X)/Menu_factor_X)-(temp2->Pos_X+2)) / 10 * 16 +
2278
2426
(((Mouse_Y-Window_pos_Y)/Menu_factor_Y)-(temp2->Pos_Y+3)) / 5;
2279
2427
return temp2->Number;
2283
// Test du click sur les barres de d�filement
2431
// Test click oin slider/scroller bars
2284
2432
for (temp3=Window_scroller_button_list; temp3; temp3=temp3->Next)
2286
if (Window_click_in_rectangle(temp3->Pos_X,temp3->Pos_Y,temp3->Pos_X+10,temp3->Pos_Y+temp3->Height-1))
2288
// Button fl�che Haut
2289
if (Window_click_in_rectangle(temp3->Pos_X,temp3->Pos_Y,temp3->Pos_X+10,temp3->Pos_Y+10))
2292
Window_select_normal_button(temp3->Pos_X,temp3->Pos_Y,11,11);
2294
if (temp3->Position)
2297
Window_attribute1=1;
2298
Window_attribute2=temp3->Position;
2435
if ((Input_sticky_control == 0 || Input_sticky_control == (temp3->Number|1024))
2436
&& Window_click_in_rectangle(temp3->Pos_X,temp3->Pos_Y,temp3->Pos_X+10,temp3->Pos_Y+10))
2438
Input_sticky_control = temp3->Number | 1024;
2440
Window_select_normal_button(temp3->Pos_X,temp3->Pos_Y,11,11);
2442
if (temp3->Position)
2445
Window_attribute1=1;
2446
Window_attribute2=temp3->Position;
2447
Window_draw_slider(temp3);
2450
Window_attribute1=0;
2454
Slider_timer((Mouse_K==1)? Config.Delay_left_click_on_slider : Config.Delay_right_click_on_slider);
2457
Window_unselect_normal_button(temp3->Pos_X,temp3->Pos_Y,11,11);
2460
return (Window_attribute1)? temp3->Number : 0;
2463
// Button Down arrow
2464
if ((Input_sticky_control == 0 || Input_sticky_control == (temp3->Number|2048))
2465
&& Window_click_in_rectangle(temp3->Pos_X,temp3->Pos_Y+temp3->Height-11,temp3->Pos_X+10,temp3->Pos_Y+temp3->Height-1))
2467
Input_sticky_control = temp3->Number | 2048;
2469
Window_select_normal_button(temp3->Pos_X,temp3->Pos_Y+temp3->Height-11,11,11);
2471
if (temp3->Position+temp3->Nb_visibles<temp3->Nb_elements)
2474
Window_attribute1=2;
2475
Window_attribute2=temp3->Position;
2476
Window_draw_slider(temp3);
2479
Window_attribute1=0;
2483
Slider_timer((Mouse_K==1)? Config.Delay_left_click_on_slider : Config.Delay_right_click_on_slider);
2486
Window_unselect_normal_button(temp3->Pos_X,temp3->Pos_Y+temp3->Height-11,11,11);
2489
return (Window_attribute1)? temp3->Number : 0;
2492
if ((Input_sticky_control == temp3->Number) || (Input_sticky_control==0 &&
2493
Window_click_in_rectangle(temp3->Pos_X,temp3->Pos_Y+12,temp3->Pos_X+10,temp3->Pos_Y+temp3->Height-13)))
2495
Input_sticky_control = temp3->Number;
2496
if (temp3->Nb_elements>temp3->Nb_visibles)
2498
// If there is enough room to make the cursor move:
2500
max_slider_height=(temp3->Height-24);
2502
// Window_attribute2 receives the position of the cursor.
2503
Window_attribute2 =(Mouse_Y-Window_pos_Y) / Menu_factor_Y;
2504
Window_attribute2-=(temp3->Pos_Y+12+((temp3->Cursor_height-1)>>1));
2505
Window_attribute2*=(temp3->Nb_elements-temp3->Nb_visibles);
2507
if (Window_attribute2<0)
2508
Window_attribute2=0;
2511
Window_attribute2 =Round_div(Window_attribute2,max_slider_height-temp3->Cursor_height);
2512
if (Window_attribute2+temp3->Nb_visibles>temp3->Nb_elements)
2513
Window_attribute2=temp3->Nb_elements-temp3->Nb_visibles;
2516
// If the cursor moved
2518
if (temp3->Position!=Window_attribute2)
2520
temp3->Position=Window_attribute2;
2521
Window_attribute1=3;
2299
2523
Window_draw_slider(temp3);
2527
// If the cursor moved
2302
2528
Window_attribute1=0;
2531
// If there's not enough room to make the cursor move:
2532
Window_attribute1=0;
2306
Slider_timer((Mouse_K==1)? Config.Delay_left_click_on_slider : Config.Delay_right_click_on_slider);
2309
Window_unselect_normal_button(temp3->Pos_X,temp3->Pos_Y,11,11);
2313
// Button fl�che Bas
2314
if (Window_click_in_rectangle(temp3->Pos_X,temp3->Pos_Y+temp3->Height-11,temp3->Pos_X+10,temp3->Pos_Y+temp3->Height-1))
2317
Window_select_normal_button(temp3->Pos_X,temp3->Pos_Y+temp3->Height-11,11,11);
2319
if (temp3->Position+temp3->Nb_visibles<temp3->Nb_elements)
2322
Window_attribute1=2;
2323
Window_attribute2=temp3->Position;
2324
Window_draw_slider(temp3);
2327
Window_attribute1=0;
2331
Slider_timer((Mouse_K==1)? Config.Delay_left_click_on_slider : Config.Delay_right_click_on_slider);
2334
Window_unselect_normal_button(temp3->Pos_X,temp3->Pos_Y+temp3->Height-11,11,11);
2339
if (Window_click_in_rectangle(temp3->Pos_X,temp3->Pos_Y+12,temp3->Pos_X+10,temp3->Pos_Y+temp3->Height-13))
2341
if (temp3->Nb_elements>temp3->Nb_visibles)
2343
// S'il y a la place de faire scroller le curseur:
2345
max_slider_height=(temp3->Height-24);
2347
// Window_attribute2 re�oit la position dans la jauge correspondant au click
2348
Window_attribute2 =(Mouse_Y-Window_pos_Y) / Menu_factor_Y;
2349
Window_attribute2-=(temp3->Pos_Y+12+((temp3->Cursor_height-1)>>1));
2350
Window_attribute2*=(temp3->Nb_elements-temp3->Nb_visibles);
2352
if (Window_attribute2<0)
2353
Window_attribute2=0;
2356
Window_attribute2 =Round_div(Window_attribute2,max_slider_height-temp3->Cursor_height);
2357
if (Window_attribute2+temp3->Nb_visibles>temp3->Nb_elements)
2358
Window_attribute2=temp3->Nb_elements-temp3->Nb_visibles;
2361
// Si le curseur de la jauge bouge:
2363
if (temp3->Position!=Window_attribute2)
2365
temp3->Position=Window_attribute2;
2366
Window_attribute1=3;
2368
Window_draw_slider(temp3);
2372
// Si le curseur de la jauge ne bouge pas:
2373
Window_attribute1=0;
2376
// S'il n'y a pas la place de bouger le curseur de la jauge:
2377
Window_attribute1=0;
2380
// Le click se situe dans la zone de la jauge mais n'est sur aucune
2381
// des 3 parties importantes de la jauge
2382
Window_attribute1=0;
2384
return (Window_attribute1)? temp3->Number : 0;
2534
return (Window_attribute1)? temp3->Number : 0;
2388
// Test du click sur une zone sp�ciale
2538
// Test click on a special button
2389
2539
for (temp4=Window_special_button_list; temp4; temp4=temp4->Next)
2391
if (Window_click_in_rectangle(temp4->Pos_X,temp4->Pos_Y,temp4->Pos_X+temp4->Width-1,temp4->Pos_Y+temp4->Height-1))
2392
return temp4->Number;
2541
if ((Input_sticky_control == 0 || Input_sticky_control == temp4->Number)
2542
&& Window_click_in_rectangle(temp4->Pos_X,temp4->Pos_Y,temp4->Pos_X+temp4->Width-1,temp4->Pos_Y+temp4->Height-1))
2544
Input_sticky_control = temp4->Number;
2545
return temp4->Number;
2395
// Test du click sur une dropdown
2549
// Test click on a dropdown box
2396
2550
for (temp5=Window_dropdown_button_list; temp5; temp5=temp5->Next)
2398
if (Window_click_in_rectangle(temp5->Pos_X,temp5->Pos_Y,temp5->Pos_X+temp5->Width-1,temp5->Pos_Y+temp5->Height-1))
2552
if ((Input_sticky_control == 0 || Input_sticky_control == temp5->Number)
2553
&& Window_click_in_rectangle(temp5->Pos_X,temp5->Pos_Y,temp5->Pos_X+temp5->Width-1,temp5->Pos_Y+temp5->Height-1))
2555
Input_sticky_control = temp5->Number;
2400
2556
if (Mouse_K & temp5->Active_button)
2401
2557
return Window_dropdown_on_click(temp5);
2465
2639
if(!Get_input())SDL_Delay(20);
2467
// Gestion des clicks
2470
2644
if ((Mouse_X<Window_pos_X) || (Mouse_Y<Window_pos_Y)
2471
2645
|| (Mouse_X>=Window_pos_X+(Window_width*Menu_factor_X))
2472
2646
|| (Mouse_Y>=Window_pos_Y+(Window_height*Menu_factor_Y)))
2648
if (Input_sticky_control == 0 || Input_sticky_control == -1)
2650
Input_sticky_control = -1;
2659
if (!Input_sticky_control && Mouse_Y < Window_pos_Y+(12*Menu_factor_Y))
2661
Move_window(Mouse_X-Window_pos_X,Mouse_Y-Window_pos_Y);
2476
if (Mouse_Y < Window_pos_Y+(12*Menu_factor_Y))
2477
Move_window(Mouse_X-Window_pos_X,Mouse_Y-Window_pos_Y);
2479
return Window_get_clicked_button();
2665
short clicked_button;
2666
T_List_button * list;
2668
// Check which controls was clicked (by rectangular area)
2669
clicked_button = Window_get_clicked_button();
2671
// Check if it's part of a list control
2672
for (list=Window_list_button_list; list!=NULL; list=list->Next)
2674
if (list->Entry_button->Number == clicked_button)
2676
// Click in the textual part of a list.
2678
clicked_line = (((Mouse_Y-Window_pos_Y)/Menu_factor_Y)-list->Entry_button->Pos_Y)>>3;
2679
if (clicked_line == list->Cursor_position || // Same as before
2680
clicked_line >= list->Scroller->Nb_elements) // Below last line
2684
// Redraw one item as disabled
2685
if (list->Cursor_position>=0 && list->Cursor_position<list->Scroller->Nb_visibles)
2686
list->Draw_list_item(
2687
list->Entry_button->Pos_X,
2688
list->Entry_button->Pos_Y + list->Cursor_position * 8,
2689
list->List_start + list->Cursor_position,
2691
list->Cursor_position = clicked_line;
2692
// Redraw one item as enabled
2693
if (list->Cursor_position>=0 && list->Cursor_position<list->Scroller->Nb_visibles)
2694
list->Draw_list_item(
2695
list->Entry_button->Pos_X,
2696
list->Entry_button->Pos_Y + list->Cursor_position * 8,
2697
list->List_start + list->Cursor_position,
2701
// Store the selected value as attribute2
2702
Window_attribute2=list->List_start + list->Cursor_position;
2703
// Return the control ID of the list.
2704
return list->Number;
2706
else if (list->Scroller->Number == clicked_button)
2708
// Click in the scroller part of a list
2709
if (list->List_start == list->Scroller->Position)
2710
return 0; // Didn't actually move
2711
// Update scroller indices
2712
list->Cursor_position += list->List_start;
2713
list->List_start = list->Scroller->Position;
2714
list->Cursor_position -= list->List_start;
2715
// Need to redraw all
2717
Window_redraw_list(list);
2721
return clicked_button;
2483
// Gestion des touches
2728
T_List_button * list;
2486
2730
Button=Window_get_button_shortcut();
2736
// Check if there's a list control and the keys can control it
2737
for (list=Window_list_button_list; list!=NULL; list=list->Next)
2739
// FIXME: Make only one list have the keyboard focus.
2742
if (Key==SDLK_UP && (list->Cursor_position+list->List_start)>0)
2746
list->Cursor_position--;
2747
if (list->Cursor_position<0)
2749
list->List_start=list->List_start+list->Cursor_position;
2750
list->Cursor_position=0;
2751
// Mise � jour du scroller
2752
list->Scroller->Position=list->List_start;
2753
Window_draw_slider(list->Scroller);
2755
Window_redraw_list(list);
2757
// Store the selected value as attribute2
2758
Window_attribute2=list->List_start + list->Cursor_position;
2759
// Return the control ID of the list.
2760
return list->Number;
2762
if (Key==SDLK_DOWN && (list->Cursor_position+list->List_start)<(list->Scroller->Nb_elements-1))
2766
list->Cursor_position++;
2767
if (list->Cursor_position>(list->Scroller->Nb_visibles-1))
2769
list->List_start=list->List_start+list->Cursor_position-(list->Scroller->Nb_visibles-1);
2770
list->Cursor_position=(list->Scroller->Nb_visibles-1);
2771
// Mise � jour du scroller
2772
list->Scroller->Position=list->List_start;
2773
Window_draw_slider(list->Scroller);
2775
Window_redraw_list(list);
2777
// Store the selected value as attribute2
2778
Window_attribute2=list->List_start + list->Cursor_position;
2779
// Return the control ID of the list.
2780
return list->Number;
2782
if (Key==SDLK_HOME && (list->Cursor_position!=0 || list->List_start!=0))
2786
list->Cursor_position=0;
2788
// Mise � jour du scroller
2789
list->Scroller->Position=list->List_start;
2790
Window_draw_slider(list->Scroller);
2791
Window_redraw_list(list);
2793
// Store the selected value as attribute2
2794
Window_attribute2=list->List_start + list->Cursor_position;
2795
// Return the control ID of the list.
2796
return list->Number;
2798
if (Key==SDLK_END && (list->Cursor_position+list->List_start)<(list->Scroller->Nb_elements-1))
2802
list->Cursor_position=(list->Scroller->Nb_elements-1)-list->List_start;
2803
if (list->Cursor_position>(list->Scroller->Nb_visibles-1))
2805
list->List_start=list->List_start+list->Cursor_position-(list->Scroller->Nb_visibles-1);
2806
list->Cursor_position=(list->Scroller->Nb_visibles-1);
2807
// Mise � jour du scroller
2808
list->Scroller->Position=list->List_start;
2809
Window_draw_slider(list->Scroller);
2811
Window_redraw_list(list);
2813
// Store the selected value as attribute2
2814
Window_attribute2=list->List_start + list->Cursor_position;
2815
// Return the control ID of the list.
2816
return list->Number;
2818
if (Key==SDLK_PAGEDOWN && (list->Cursor_position+list->List_start)<(list->Scroller->Nb_elements-1))
2822
if (list->Scroller->Nb_elements<list->Scroller->Nb_visibles)
2824
list->Cursor_position=list->Scroller->Nb_elements-1;
2826
else if(list->Cursor_position!=list->Scroller->Nb_visibles-1)
2828
list->Cursor_position=list->Scroller->Nb_visibles-1;
2832
list->List_start+=list->Scroller->Nb_visibles;
2833
if (list->List_start+list->Scroller->Nb_visibles>list->Scroller->Nb_elements)
2835
list->List_start=list->Scroller->Nb_elements-list->Scroller->Nb_visibles;
2837
// Mise � jour du scroller
2838
list->Scroller->Position=list->List_start;
2839
Window_draw_slider(list->Scroller);
2841
Window_redraw_list(list);
2843
// Store the selected value as attribute2
2844
Window_attribute2=list->List_start + list->Cursor_position;
2845
// Return the control ID of the list.
2846
return list->Number;
2848
if (Key==SDLK_PAGEUP && (list->Cursor_position+list->List_start)>0)
2852
if(list->Cursor_position!=0)
2854
list->Cursor_position=0;
2858
list->List_start-=list->Scroller->Nb_visibles;
2859
if (list->List_start<0)
2863
// Mise � jour du scroller
2864
list->Scroller->Position=list->List_start;
2865
Window_draw_slider(list->Scroller);
2867
Window_redraw_list(list);
2869
// Store the selected value as attribute2
2870
Window_attribute2=list->List_start + list->Cursor_position;
2871
// Return the control ID of the list.
2872
return list->Number;
2874
if (Key == KEY_MOUSEWHEELUP && list->List_start>0)
2876
list->Cursor_position+=list->List_start;
2877
if (list->List_start>=3)
2878
list->List_start-=3;
2881
list->Cursor_position-=list->List_start;
2882
// On affiche � nouveau la liste
2884
Window_redraw_list(list);
2885
// Mise � jour du scroller
2886
list->Scroller->Position=list->List_start;
2887
Window_draw_slider(list->Scroller);
2890
if (Key==KEY_MOUSEWHEELDOWN && list->List_start<list->Scroller->Nb_elements-list->Scroller->Nb_visibles)
2892
list->Cursor_position+=list->List_start;
2893
list->List_start+=3;
2894
if (list->List_start+list->Scroller->Nb_visibles>list->Scroller->Nb_elements)
2896
list->List_start=list->Scroller->Nb_elements-list->Scroller->Nb_visibles;
2898
list->Cursor_position-=list->List_start;
2899
// On affiche � nouveau la liste
2901
Window_redraw_list(list);
2902
// Mise � jour du scroller
2903
list->Scroller->Position=list->List_start;
2904
Window_draw_slider(list->Scroller);