Implemented double-click in Brush factory window. Still need to check/fix all other occurences of the listbox control (need to eliminate unnecessary refresh on double-click, or trigger a specific action instead)
git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@1733 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
parent
5b332bfa25
commit
107779edf5
26
src/engine.c
26
src/engine.c
@ -3145,9 +3145,10 @@ short Window_get_button_shortcut(void)
|
|||||||
short Window_clicked_button(void)
|
short Window_clicked_button(void)
|
||||||
{
|
{
|
||||||
short Button;
|
short Button;
|
||||||
|
byte old_mouse_k;
|
||||||
|
|
||||||
|
old_mouse_k=Mouse_K;
|
||||||
Get_input(20);
|
Get_input(20);
|
||||||
|
|
||||||
// Handle clicks
|
// Handle clicks
|
||||||
if (Mouse_K)
|
if (Mouse_K)
|
||||||
{
|
{
|
||||||
@ -3174,6 +3175,9 @@ short Window_clicked_button(void)
|
|||||||
{
|
{
|
||||||
short clicked_button;
|
short clicked_button;
|
||||||
T_List_button * list;
|
T_List_button * list;
|
||||||
|
static Uint32 time_last_click = 0;
|
||||||
|
static int last_list_number = -1;
|
||||||
|
Uint32 time_now;
|
||||||
|
|
||||||
// Check which controls was clicked (by rectangular area)
|
// Check which controls was clicked (by rectangular area)
|
||||||
clicked_button = Window_get_clicked_button();
|
clicked_button = Window_get_clicked_button();
|
||||||
@ -3186,9 +3190,25 @@ short Window_clicked_button(void)
|
|||||||
// Click in the textual part of a list.
|
// Click in the textual part of a list.
|
||||||
short clicked_line;
|
short clicked_line;
|
||||||
clicked_line = (((Mouse_Y-Window_pos_Y)/Menu_factor_Y)-list->Entry_button->Pos_Y)>>3;
|
clicked_line = (((Mouse_Y-Window_pos_Y)/Menu_factor_Y)-list->Entry_button->Pos_Y)>>3;
|
||||||
if (clicked_line == list->Cursor_position || // Same as before
|
if (clicked_line >= list->Scroller->Nb_elements) // Below last line
|
||||||
clicked_line >= list->Scroller->Nb_elements) // Below last line
|
|
||||||
return 0;
|
return 0;
|
||||||
|
time_now = SDL_GetTicks();
|
||||||
|
if (clicked_line == list->Cursor_position)
|
||||||
|
{
|
||||||
|
// Double click check
|
||||||
|
if (old_mouse_k==0 && last_list_number==list->Number && time_now - time_last_click < Config.Double_click_speed)
|
||||||
|
{
|
||||||
|
time_last_click = time_now;
|
||||||
|
// Store the selected value as attribute2
|
||||||
|
Window_attribute2=list->List_start + list->Cursor_position;
|
||||||
|
// Return the control ID of the list.
|
||||||
|
return list->Number;
|
||||||
|
}
|
||||||
|
time_last_click = time_now;
|
||||||
|
last_list_number=list->Number;
|
||||||
|
// Already selected : don't activate anything
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
Hide_cursor();
|
Hide_cursor();
|
||||||
// Redraw one item as disabled
|
// Redraw one item as disabled
|
||||||
|
|||||||
@ -1632,7 +1632,7 @@ void Button_Brush_Factory(void)
|
|||||||
T_Special_button* scriptarea;
|
T_Special_button* scriptarea;
|
||||||
char scriptdir[MAX_PATH_CHARACTERS];
|
char scriptdir[MAX_PATH_CHARACTERS];
|
||||||
T_Fileselector_item *item;
|
T_Fileselector_item *item;
|
||||||
|
int last_selected_item=-1;
|
||||||
// Reinitialize the list
|
// Reinitialize the list
|
||||||
Free_fileselector_list(&Scripts_selector);
|
Free_fileselector_list(&Scripts_selector);
|
||||||
strcpy(scriptdir, Data_directory);
|
strcpy(scriptdir, Data_directory);
|
||||||
@ -1675,6 +1675,12 @@ void Button_Brush_Factory(void)
|
|||||||
|
|
||||||
Update_window_area(0, 0, Window_width, Window_height);
|
Update_window_area(0, 0, Window_width, Window_height);
|
||||||
Display_cursor();
|
Display_cursor();
|
||||||
|
// Wait for mouse release (needed for example after a double-click
|
||||||
|
// that navigates to a subdirectory)
|
||||||
|
while (last_selected_item==-1 && Mouse_K)
|
||||||
|
{
|
||||||
|
Get_input(20);
|
||||||
|
}
|
||||||
|
|
||||||
Reset_quicksearch();
|
Reset_quicksearch();
|
||||||
|
|
||||||
@ -1701,28 +1707,17 @@ void Button_Brush_Factory(void)
|
|||||||
switch (clicked_button)
|
switch (clicked_button)
|
||||||
{
|
{
|
||||||
case 4:
|
case 4:
|
||||||
|
if (last_selected_item == scriptlist->List_start + scriptlist->Cursor_position)
|
||||||
|
{
|
||||||
|
// Double click
|
||||||
|
clicked_button=5;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
last_selected_item = scriptlist->List_start + scriptlist->Cursor_position;
|
||||||
Hide_cursor();
|
Hide_cursor();
|
||||||
Draw_script_information(Get_item_by_index(&Scripts_selector,
|
Draw_script_information(Get_item_by_index(&Scripts_selector,
|
||||||
scriptlist->List_start + scriptlist->Cursor_position));
|
scriptlist->List_start + scriptlist->Cursor_position));
|
||||||
Display_cursor();
|
Display_cursor();
|
||||||
{
|
|
||||||
// Test double-click
|
|
||||||
static long time_click = 0;
|
|
||||||
static int last_selected_item=-1;
|
|
||||||
static long time_previous;
|
|
||||||
|
|
||||||
time_previous = time_click;
|
|
||||||
time_click = SDL_GetTicks();
|
|
||||||
if (scriptlist->List_start + scriptlist->Cursor_position == last_selected_item)
|
|
||||||
{
|
|
||||||
if (time_click - time_previous < Config.Double_click_speed)
|
|
||||||
clicked_button=5;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
last_selected_item=scriptlist->List_start + scriptlist->Cursor_position;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 6:
|
case 6:
|
||||||
@ -1807,7 +1802,7 @@ void Button_Brush_Factory(void)
|
|||||||
|
|
||||||
scriptlist->Scroller->Nb_elements=Scripts_selector.Nb_elements;
|
scriptlist->Scroller->Nb_elements=Scripts_selector.Nb_elements;
|
||||||
Compute_slider_cursor_length(scriptlist->Scroller);
|
Compute_slider_cursor_length(scriptlist->Scroller);
|
||||||
|
last_selected_item = -1;
|
||||||
Hide_cursor();
|
Hide_cursor();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user