Still work on SDL events. Airbrush seems to work. Need to do repeatable buttons.

git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@1565 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
Yves Rizoud 2010-08-08 19:59:17 +00:00
parent 80b8c4e5a5
commit 951ec2d48a
9 changed files with 55 additions and 51 deletions

View File

@ -166,7 +166,8 @@ void Button_Message_initial(void)
Display_cursor();
while(!Mouse_K && !Key) if(!Get_input()) SDL_Delay(20);
while(!Mouse_K && !Key)
Get_input();
if (Mouse_K)
Wait_end_of_click();
@ -336,8 +337,7 @@ void Button_Select_forecolor(void)
// Wait loop after initial click
while(Mouse_K)
{
if(!Get_input())
SDL_Delay(20);
Get_input();
if (Button_under_mouse()==BUTTON_CHOOSE_COL)
{
@ -373,8 +373,7 @@ void Button_Select_backcolor(void)
// Wait loop after initial click
do
{
if(!Get_input())
SDL_Delay(20);
Get_input();
if (Button_under_mouse()==BUTTON_CHOOSE_COL)
break; // This will repeat this button's action

View File

@ -598,7 +598,7 @@ void Move_separator(void)
Display_cursor();
}
}
if(!Get_input())SDL_Delay(20);
Get_input();
}
// Effacer la barre en XOR
@ -1299,21 +1299,7 @@ void Main_handler(void)
}
else
{
// No event : we go asleep for a while, but we try to get waked up at constant intervals of time
// no matter the machine speed or system load. The time is fixed to 10ms (that should be about a cpu slice on most systems)
// This allows nice smooth mouse movement.
const int delay = 10;
Uint32 debut;
debut = SDL_GetTicks();
// Première attente : le complément de "delay" millisecondes
SDL_Delay(delay - (debut % delay));
// Si ça ne suffit pas, on complète par des attentes successives de "1ms".
// (Remarque, Windows arrondit généralement aux 10ms supérieures)
while ( SDL_GetTicks()/delay <= debut/delay)
{
SDL_Delay(1);
}
// Removed all SDL_Delay() timing here: relying on Get_input()
}
// Gestion de la souris
@ -2272,7 +2258,7 @@ short Wait_click_in_palette(T_Palette_button * button)
for (;;)
{
while(!Get_input())SDL_Delay(20);
Get_input();
if (Mouse_K==LEFT_SIDE)
{
@ -2353,7 +2339,7 @@ void Get_color_behind_window(byte * color, byte * click)
do
{
if(!Get_input())SDL_Delay(20);
Get_input();
if ((Mouse_X!=old_x) || (Mouse_Y!=old_y))
{
@ -2440,7 +2426,10 @@ void Move_window(short dx, short dy)
old_x=new_x;
old_y=new_y;
while(!Get_input() && new_x==Mouse_X-dx && new_y==Mouse_Y-dy) SDL_Delay(20);
do
{
Get_input();
} while(new_x==Mouse_X-dx && new_y==Mouse_Y-dy);
new_x=Mouse_X-dx;
@ -2642,7 +2631,7 @@ T_Dropdown_choice * Dropdown_activate(T_Dropdown_button *button, short off_x, sh
do
{
// Attente
if(!Get_input()) SDL_Delay(20);
Get_input();
// Mise à jour du survol
selected_index=Window_click_in_rectangle(2,2,button->Dropdown_width-2,box_height-1)?
(((Mouse_Y-Window_pos_Y)/Menu_factor_Y-2)>>3) : -1;
@ -2713,7 +2702,7 @@ short Window_normal_button_onclick(word x_pos, word y_pos, word width, word heig
Display_cursor();
while (Window_click_in_rectangle(x_pos,y_pos,x_pos+width-1,y_pos+height-1))
{
if(!Get_input()) SDL_Delay(20);
Get_input();
if (!Mouse_K)
{
Hide_cursor();
@ -2727,7 +2716,7 @@ short Window_normal_button_onclick(word x_pos, word y_pos, word width, word heig
Display_cursor();
while (!(Window_click_in_rectangle(x_pos,y_pos,x_pos+width-1,y_pos+height-1)))
{
if(!Get_input()) SDL_Delay(20);
Get_input();
if (!Mouse_K)
return 0;
}
@ -2991,7 +2980,7 @@ short Window_clicked_button(void)
{
short Button;
if(!Get_input())SDL_Delay(20);
Get_input();
// Handle clicks
if (Mouse_K)

View File

@ -94,7 +94,7 @@ void Redefine_control(word *shortcut, int x_pos, int y_pos)
Display_cursor();
while (1)
{
while(!Get_input())SDL_Delay(20);
Get_input();
if (Key==KEY_ESC)
return;
if (Key!=0)

View File

@ -51,6 +51,8 @@ int Snap_axis = 0;
int Snap_axis_origin_X;
int Snap_axis_origin_Y;
volatile int Need_Timer_events;
// --
byte Directional_up;
@ -675,6 +677,11 @@ int Get_input(void)
SDL_Event event;
int user_feedback_required = 0; // Flag qui indique si on doit arrêter de traiter les évènements ou si on peut enchainer
// Commit any pending screen update.
// This is done in this function because it's called after reading
// some user input.
Flush_update();
Key_ANSI = 0;
Key = 0;
Mouse_moved=0;
@ -719,6 +726,7 @@ int Get_input(void)
case SDL_KEYUP:
Handle_key_release(event.key);
user_feedback_required = 1; // new
break;
// Start of Joystik handling
@ -772,7 +780,7 @@ int Get_input(void)
user_feedback_required = 1;
break;
default:
// DEBUG("Unhandled SDL event number : ",event.type);
//DEBUG("Unhandled SDL event number : ",event.type);
break;
}
}
@ -839,13 +847,8 @@ int Get_input(void)
Compute_paintbrush_coordinates();
Display_cursor();
}
// Commit any pending screen update.
// This is done in this function because it's called after reading
// some user input.
Flush_update();
return (Mouse_moved!=0) || user_feedback_required;
return 1;//(Mouse_moved!=0) || user_feedback_required;
}
void Adjust_mouse_sensitivity(word fullscreen)

View File

@ -59,3 +59,6 @@ extern int Snap_axis;
extern int Snap_axis_origin_X;
/// For the :Snap_axis mode, sets the origin's point (in image coordinates)
extern int Snap_axis_origin_Y;
/// Boolean, true if Push_timer_event() should put "ticks" in the SDL queue
extern volatile int Need_Timer_events;

View File

@ -65,6 +65,7 @@
#include "brush.h"
#include "palette.h"
#include "realpath.h"
#include "input.h"
#if defined(__WIN32__)
#include <windows.h>
@ -149,6 +150,12 @@ void Error_function(int error_code, const char *filename, int line_number, const
temp_palette[index].R=255;
Set_palette(temp_palette);
SDL_Delay(500);
// TODO: Replace the above by a loop where cursor is active:
// Need_Timer_events=1
// Compute target=now+500
// Do
// Get_input()
// While now<target
Set_palette(Main_palette);
}
else
@ -410,25 +417,23 @@ int Analyze_command_line(int argc, char * argv[], char *main_filename, char *mai
}
Uint32 putTimerEvent(Uint32 i, void* p)
Uint32 Push_timer_event(Uint32 i, void* p)
{
if (Need_Timer_events)
{
SDL_Event event;
SDL_UserEvent userevent;
SDL_UserEvent user_event;
/* Dans cet exemple, notre fonction de rappel pousse
un evenement SDL_USEREVENT dans la file... */
userevent.type = SDL_USEREVENT;
userevent.code = 0;
userevent.data1 = NULL;
userevent.data2 = NULL;
user_event.type = SDL_USEREVENT;
user_event.code = 0;
user_event.data1 = NULL;
user_event.data2 = NULL;
event.type = SDL_USEREVENT;
event.user = userevent;
event.user = user_event;
SDL_PushEvent(&event);
}
return i;
}
@ -546,7 +551,7 @@ int Init_program(int argc,char * argv[])
printf("Couldn't initialize SDL.\n");
return(0);
}
tid = SDL_AddTimer(10, putTimerEvent, NULL);
tid = SDL_AddTimer(10, Push_timer_event, NULL);
Joystick = SDL_JoystickOpen(0);
SDL_EnableKeyRepeat(250, 32);

View File

@ -177,7 +177,8 @@ void Wait_end_of_click(void)
{
// On désactive tous les raccourcis clavier
while(Mouse_K) if(!Get_input()) SDL_Delay(20);
while(Mouse_K)
Get_input();
}
void Clear_current_image_with_stencil(byte color, byte * stencil)

View File

@ -36,6 +36,7 @@
#include "sdlscreen.h"
#include "brush.h"
#include "windows.h"
#include "input.h"
// PI is NOT part of math.h according to C standards...
#if defined(__GP2X__) || defined(__VBCC__)
@ -1908,6 +1909,7 @@ void Airbrush_1_0(void)
Shade_table=Shade_table_left;
Airbrush_next_time = SDL_GetTicks()+Airbrush_delay*10;
Need_Timer_events=1;
Airbrush(LEFT_SIDE);
Operation_push(Paintbrush_X);
@ -1930,6 +1932,7 @@ void Airbrush_2_0(void)
Backup();
Shade_table=Shade_table_right;
Airbrush_next_time = SDL_GetTicks()+Airbrush_delay*10;
Need_Timer_events=1;
Airbrush(RIGHT_SIDE);
Operation_push(Paintbrush_X);
@ -1977,6 +1980,7 @@ void Airbrush_0_2(void)
//
{
Operation_stack_size-=2;
Need_Timer_events=0;
End_of_modification();
}

View File

@ -196,7 +196,7 @@ byte Readline_ex(word x_pos,word y_pos,char * str,byte visible_size,byte max_siz
Display_cursor();
do
{
if(!Get_input()) SDL_Delay(20);
Get_input();
input_key=Key_ANSI;
} while(input_key==0 && Mouse_K == 0);
Hide_cursor();