Reverted the change of input system (mostly, still needs more testing) Changed color cycling so it no longer needs a separate thread.
git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@1581 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
parent
858bab41c4
commit
520da7d168
@ -167,7 +167,7 @@ void Button_Message_initial(void)
|
|||||||
Display_cursor();
|
Display_cursor();
|
||||||
|
|
||||||
while(!Mouse_K && !Key)
|
while(!Mouse_K && !Key)
|
||||||
Get_input();
|
Get_input(20);
|
||||||
if (Mouse_K)
|
if (Mouse_K)
|
||||||
Wait_end_of_click();
|
Wait_end_of_click();
|
||||||
|
|
||||||
@ -337,7 +337,7 @@ void Button_Select_forecolor(void)
|
|||||||
// Wait loop after initial click
|
// Wait loop after initial click
|
||||||
while(Mouse_K)
|
while(Mouse_K)
|
||||||
{
|
{
|
||||||
Get_input();
|
Get_input(20);
|
||||||
|
|
||||||
if (Button_under_mouse()==BUTTON_CHOOSE_COL)
|
if (Button_under_mouse()==BUTTON_CHOOSE_COL)
|
||||||
{
|
{
|
||||||
@ -373,7 +373,7 @@ void Button_Select_backcolor(void)
|
|||||||
// Wait loop after initial click
|
// Wait loop after initial click
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
Get_input();
|
Get_input(20);
|
||||||
|
|
||||||
if (Button_under_mouse()==BUTTON_CHOOSE_COL)
|
if (Button_under_mouse()==BUTTON_CHOOSE_COL)
|
||||||
break; // This will repeat this button's action
|
break; // This will repeat this button's action
|
||||||
|
|||||||
93
src/engine.c
93
src/engine.c
@ -599,7 +599,7 @@ void Move_separator(void)
|
|||||||
Display_cursor();
|
Display_cursor();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Get_input();
|
Get_input(20);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Effacer la barre en XOR
|
// Effacer la barre en XOR
|
||||||
@ -709,7 +709,7 @@ void Main_handler(void)
|
|||||||
Drop_file_name=NULL;
|
Drop_file_name=NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Get_input())
|
if(Get_input(0))
|
||||||
{
|
{
|
||||||
action = 0;
|
action = 0;
|
||||||
|
|
||||||
@ -1350,6 +1350,7 @@ void Main_handler(void)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Removed all SDL_Delay() timing here: relying on Get_input()
|
// Removed all SDL_Delay() timing here: relying on Get_input()
|
||||||
|
SDL_Delay(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gestion de la souris
|
// Gestion de la souris
|
||||||
@ -2310,7 +2311,8 @@ short Wait_click_in_palette(T_Palette_button * button)
|
|||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
Get_input();
|
while (Get_input(20))
|
||||||
|
;
|
||||||
|
|
||||||
if (Mouse_K==LEFT_SIDE)
|
if (Mouse_K==LEFT_SIDE)
|
||||||
{
|
{
|
||||||
@ -2391,7 +2393,7 @@ void Get_color_behind_window(byte * color, byte * click)
|
|||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
Get_input();
|
Get_input(20);
|
||||||
|
|
||||||
if ((Mouse_X!=old_x) || (Mouse_Y!=old_y))
|
if ((Mouse_X!=old_x) || (Mouse_Y!=old_y))
|
||||||
{
|
{
|
||||||
@ -2480,7 +2482,7 @@ void Move_window(short dx, short dy)
|
|||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
Get_input();
|
Get_input(20);
|
||||||
} while(new_x==Mouse_X-dx && new_y==Mouse_Y-dy);
|
} while(new_x==Mouse_X-dx && new_y==Mouse_Y-dy);
|
||||||
|
|
||||||
new_x=Mouse_X-dx;
|
new_x=Mouse_X-dx;
|
||||||
@ -2683,7 +2685,7 @@ T_Dropdown_choice * Dropdown_activate(T_Dropdown_button *button, short off_x, sh
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
// Attente
|
// Attente
|
||||||
Get_input();
|
Get_input(20);
|
||||||
// Mise à jour du survol
|
// Mise à jour du survol
|
||||||
selected_index=Window_click_in_rectangle(2,2,button->Dropdown_width-2,box_height-1)?
|
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;
|
(((Mouse_Y-Window_pos_Y)/Menu_factor_Y-2)>>3) : -1;
|
||||||
@ -2754,7 +2756,7 @@ short Window_normal_button_onclick(word x_pos, word y_pos, word width, word heig
|
|||||||
Display_cursor();
|
Display_cursor();
|
||||||
while (Window_click_in_rectangle(x_pos,y_pos,x_pos+width-1,y_pos+height-1))
|
while (Window_click_in_rectangle(x_pos,y_pos,x_pos+width-1,y_pos+height-1))
|
||||||
{
|
{
|
||||||
Get_input();
|
Get_input(20);
|
||||||
if (!Mouse_K)
|
if (!Mouse_K)
|
||||||
{
|
{
|
||||||
Hide_cursor();
|
Hide_cursor();
|
||||||
@ -2768,7 +2770,7 @@ short Window_normal_button_onclick(word x_pos, word y_pos, word width, word heig
|
|||||||
Display_cursor();
|
Display_cursor();
|
||||||
while (!(Window_click_in_rectangle(x_pos,y_pos,x_pos+width-1,y_pos+height-1)))
|
while (!(Window_click_in_rectangle(x_pos,y_pos,x_pos+width-1,y_pos+height-1)))
|
||||||
{
|
{
|
||||||
Get_input();
|
Get_input(20);
|
||||||
if (!Mouse_K)
|
if (!Mouse_K)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -2802,7 +2804,6 @@ short Window_get_clicked_button(void)
|
|||||||
Display_cursor();
|
Display_cursor();
|
||||||
Delay_with_active_mouse((Mouse_K==1)? Config.Delay_left_click_on_slider : Config.Delay_right_click_on_slider);
|
Delay_with_active_mouse((Mouse_K==1)? Config.Delay_left_click_on_slider : Config.Delay_right_click_on_slider);
|
||||||
Hide_cursor();
|
Hide_cursor();
|
||||||
Need_timer_for_tool=1;
|
|
||||||
Window_unselect_normal_button(temp1->Pos_X,temp1->Pos_Y,temp1->Width,temp1->Height);
|
Window_unselect_normal_button(temp1->Pos_X,temp1->Pos_Y,temp1->Width,temp1->Height);
|
||||||
Display_cursor();
|
Display_cursor();
|
||||||
return temp1->Number;
|
return temp1->Number;
|
||||||
@ -3033,7 +3034,7 @@ short Window_clicked_button(void)
|
|||||||
{
|
{
|
||||||
short Button;
|
short Button;
|
||||||
|
|
||||||
Get_input();
|
Get_input(20);
|
||||||
|
|
||||||
// Handle clicks
|
// Handle clicks
|
||||||
if (Mouse_K)
|
if (Mouse_K)
|
||||||
@ -3345,77 +3346,13 @@ void Remap_window_backgrounds(byte * conversion_table, int Min_Y, int Max_Y)
|
|||||||
|
|
||||||
void Delay_with_active_mouse(int speed)
|
void Delay_with_active_mouse(int speed)
|
||||||
{
|
{
|
||||||
Uint32 now;
|
|
||||||
Uint32 end;
|
Uint32 end;
|
||||||
|
byte original_mouse_k = Mouse_K;
|
||||||
|
|
||||||
end = SDL_GetTicks()+speed*10;
|
end = SDL_GetTicks()+speed*10;
|
||||||
|
|
||||||
Need_timer_for_tool=1;
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
Get_input();
|
Get_input(20);
|
||||||
now = SDL_GetTicks();
|
} while (Mouse_K == original_mouse_k && SDL_GetTicks()<end);
|
||||||
} while (now<end);
|
|
||||||
Need_timer_for_tool=0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ======== Timer stuff =========
|
|
||||||
// This system is installed whenever Grafx2 needs to wait
|
|
||||||
// for some input, but wants to be called back anyway
|
|
||||||
// if a specified amount of time has elapsed.
|
|
||||||
|
|
||||||
/// Pointer to the current timer, NULL if disabled at the moment.
|
|
||||||
static SDL_TimerID Current_timer=NULL;
|
|
||||||
|
|
||||||
///
|
|
||||||
/// This callback is meant to post SDL_USEREVENT in the event queue.
|
|
||||||
/// It is designed especially to "wake" grafx2 in some situations where
|
|
||||||
/// an animation or something is running, even if the mouse and keyboard
|
|
||||||
/// are untouched.
|
|
||||||
Uint32 Push_timer_event(Uint32 i, __attribute__((unused)) void* p)
|
|
||||||
{
|
|
||||||
if (Need_timer_for_tool || Need_timer_for_cursor)
|
|
||||||
{
|
|
||||||
SDL_Event event;
|
|
||||||
SDL_UserEvent user_event;
|
|
||||||
|
|
||||||
user_event.type = SDL_USEREVENT;
|
|
||||||
user_event.code = 0;
|
|
||||||
user_event.data1 = NULL;
|
|
||||||
user_event.data2 = NULL;
|
|
||||||
|
|
||||||
event.type = SDL_USEREVENT;
|
|
||||||
event.user = user_event;
|
|
||||||
|
|
||||||
SDL_PushEvent(&event);
|
|
||||||
}
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Activate the timer that runs Push_timer_event()
|
|
||||||
/// This function can safely be called while it's active.
|
|
||||||
void Activate_timer(int speed)
|
|
||||||
{
|
|
||||||
if (Current_timer)
|
|
||||||
{
|
|
||||||
if (SDL_RemoveTimer(Current_timer)==SDL_FALSE)
|
|
||||||
// Problem ?... keep running.
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Current_timer = SDL_AddTimer(speed, Push_timer_event, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Remove the running timer that runs Push_timer_event()
|
|
||||||
/// This function can safely be called while it's disabled.
|
|
||||||
void Disable_timer(void)
|
|
||||||
{
|
|
||||||
if (Current_timer)
|
|
||||||
{
|
|
||||||
if (SDL_RemoveTimer(Current_timer)==SDL_FALSE)
|
|
||||||
// Problem ?... can't really do anything.
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Current_timer=NULL;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -116,13 +116,4 @@ void Status_print_palette_color(byte color);
|
|||||||
/// though the mouse still works.
|
/// though the mouse still works.
|
||||||
void Delay_with_active_mouse(int delay);
|
void Delay_with_active_mouse(int delay);
|
||||||
|
|
||||||
///
|
|
||||||
/// Activate the timer that runs Push_timer_event()
|
|
||||||
/// This function can safely be called while it's active.
|
|
||||||
void Activate_timer(int speed);
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Remove the running timer that runs Push_timer_event()
|
|
||||||
/// This function can safely be called while it's disabled.
|
|
||||||
void Disable_timer(void);
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -94,7 +94,7 @@ void Redefine_control(word *shortcut, int x_pos, int y_pos)
|
|||||||
Display_cursor();
|
Display_cursor();
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
Get_input();
|
Get_input(20);
|
||||||
if (Key==KEY_ESC)
|
if (Key==KEY_ESC)
|
||||||
return;
|
return;
|
||||||
if (Key!=0)
|
if (Key!=0)
|
||||||
|
|||||||
88
src/input.c
88
src/input.c
@ -43,6 +43,7 @@
|
|||||||
|
|
||||||
void Handle_window_resize(SDL_ResizeEvent event);
|
void Handle_window_resize(SDL_ResizeEvent event);
|
||||||
void Handle_window_exit(SDL_QuitEvent event);
|
void Handle_window_exit(SDL_QuitEvent event);
|
||||||
|
int Color_cycling(__attribute__((unused)) void* useless);
|
||||||
|
|
||||||
// public Globals (available as extern)
|
// public Globals (available as extern)
|
||||||
|
|
||||||
@ -51,9 +52,6 @@ int Snap_axis = 0;
|
|||||||
int Snap_axis_origin_X;
|
int Snap_axis_origin_X;
|
||||||
int Snap_axis_origin_Y;
|
int Snap_axis_origin_Y;
|
||||||
|
|
||||||
volatile int Need_timer_for_tool;
|
|
||||||
volatile int Need_timer_for_cursor;
|
|
||||||
|
|
||||||
char * Drop_file_name = NULL;
|
char * Drop_file_name = NULL;
|
||||||
|
|
||||||
// --
|
// --
|
||||||
@ -234,8 +232,6 @@ int Move_cursor_with_constraints()
|
|||||||
if (Input_new_mouse_K == 0)
|
if (Input_new_mouse_K == 0)
|
||||||
{
|
{
|
||||||
Input_sticky_control = 0;
|
Input_sticky_control = 0;
|
||||||
Need_timer_for_tool=0;
|
|
||||||
Need_timer_for_cursor=0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Hide cursor, because even just a click change needs it
|
// Hide cursor, because even just a click change needs it
|
||||||
@ -678,7 +674,7 @@ int Cursor_displace(short delta_x, short delta_y)
|
|||||||
|
|
||||||
// Main input handling function
|
// Main input handling function
|
||||||
|
|
||||||
int Get_input(void)
|
int Get_input(int sleep_time)
|
||||||
{
|
{
|
||||||
SDL_Event event;
|
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
|
int user_feedback_required = 0; // Flag qui indique si on doit arrêter de traiter les évènements ou si on peut enchainer
|
||||||
@ -687,6 +683,7 @@ int Get_input(void)
|
|||||||
// This is done in this function because it's called after reading
|
// This is done in this function because it's called after reading
|
||||||
// some user input.
|
// some user input.
|
||||||
Flush_update();
|
Flush_update();
|
||||||
|
Color_cycling(NULL);
|
||||||
|
|
||||||
Key_ANSI = 0;
|
Key_ANSI = 0;
|
||||||
Key = 0;
|
Key = 0;
|
||||||
@ -695,7 +692,8 @@ int Get_input(void)
|
|||||||
Input_new_mouse_Y = Mouse_Y;
|
Input_new_mouse_Y = Mouse_Y;
|
||||||
if (!SDL_PollEvent(&event))
|
if (!SDL_PollEvent(&event))
|
||||||
{
|
{
|
||||||
SDL_WaitEvent(&event);
|
SDL_Delay(sleep_time);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
// Process as much events as possible without redrawing the screen.
|
// Process as much events as possible without redrawing the screen.
|
||||||
// This mostly allows us to merge mouse events for people with an high
|
// This mostly allows us to merge mouse events for people with an high
|
||||||
@ -735,7 +733,6 @@ int Get_input(void)
|
|||||||
|
|
||||||
case SDL_KEYUP:
|
case SDL_KEYUP:
|
||||||
Handle_key_release(event.key);
|
Handle_key_release(event.key);
|
||||||
user_feedback_required = 1; // new
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Start of Joystik handling
|
// Start of Joystik handling
|
||||||
@ -802,9 +799,6 @@ int Get_input(void)
|
|||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SDL_USEREVENT:
|
|
||||||
//user_feedback_required = 1;
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
//DEBUG("Unhandled SDL event number : ",event.type);
|
//DEBUG("Unhandled SDL event number : ",event.type);
|
||||||
break;
|
break;
|
||||||
@ -822,7 +816,6 @@ int Get_input(void)
|
|||||||
Directional_left||Directional_up_left))
|
Directional_left||Directional_up_left))
|
||||||
{
|
{
|
||||||
Directional_delay=-1;
|
Directional_delay=-1;
|
||||||
Need_timer_for_cursor=1;
|
|
||||||
Directional_last_move=SDL_GetTicks();
|
Directional_last_move=SDL_GetTicks();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -913,3 +906,74 @@ void Set_mouse_position(void)
|
|||||||
Mouse_virtual_y_position = 12*Mouse_Y*Pixel_height;
|
Mouse_virtual_y_position = 12*Mouse_Y*Pixel_height;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Color_cycling(__attribute__((unused)) void* useless)
|
||||||
|
{
|
||||||
|
static byte offset[16];
|
||||||
|
int i, color;
|
||||||
|
static SDL_Color PaletteSDL[256];
|
||||||
|
int changed; // boolean : true if the palette needs a change in this tick.
|
||||||
|
|
||||||
|
long now;
|
||||||
|
static long start=0;
|
||||||
|
|
||||||
|
if (start==0)
|
||||||
|
{
|
||||||
|
// First run
|
||||||
|
start = SDL_GetTicks();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (!Allow_colorcycling)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
|
||||||
|
now = SDL_GetTicks();
|
||||||
|
changed=0;
|
||||||
|
|
||||||
|
// Check all cycles for a change at this tick
|
||||||
|
for (i=0; i<16; i++)
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
|
||||||
|
len=Gradient_array[i].End-Gradient_array[i].Start+1;
|
||||||
|
if (len>1 && Gradient_array[i].Speed)
|
||||||
|
{
|
||||||
|
int new_offset;
|
||||||
|
|
||||||
|
new_offset=(now-start)/(int)(1000.0/(Gradient_array[i].Speed*0.2856)) % len;
|
||||||
|
if (!Gradient_array[i].Inverse)
|
||||||
|
new_offset=len - new_offset;
|
||||||
|
|
||||||
|
if (new_offset!=offset[i])
|
||||||
|
changed=1;
|
||||||
|
offset[i]=new_offset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (changed)
|
||||||
|
{
|
||||||
|
// Initialize the palette
|
||||||
|
for(color=0;color<256;color++)
|
||||||
|
{
|
||||||
|
PaletteSDL[color].r=Main_palette[color].R;
|
||||||
|
PaletteSDL[color].g=Main_palette[color].G;
|
||||||
|
PaletteSDL[color].b=Main_palette[color].B;
|
||||||
|
}
|
||||||
|
for (i=0; i<16; i++)
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
|
||||||
|
len=Gradient_array[i].End-Gradient_array[i].Start+1;
|
||||||
|
if (len>1 && Gradient_array[i].Speed)
|
||||||
|
{
|
||||||
|
for(color=Gradient_array[i].Start;color<=Gradient_array[i].End;color++)
|
||||||
|
{
|
||||||
|
PaletteSDL[color].r=Main_palette[Gradient_array[i].Start+((color-Gradient_array[i].Start+offset[i])%len)].R;
|
||||||
|
PaletteSDL[color].g=Main_palette[Gradient_array[i].Start+((color-Gradient_array[i].Start+offset[i])%len)].G;
|
||||||
|
PaletteSDL[color].b=Main_palette[Gradient_array[i].Start+((color-Gradient_array[i].Start+offset[i])%len)].B;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SDL_SetPalette(Screen_SDL, SDL_PHYSPAL | SDL_LOGPAL, PaletteSDL,0,256);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|||||||
11
src/input.h
11
src/input.h
@ -33,7 +33,7 @@
|
|||||||
/// The latest input variables are held in ::Key, ::Key_ANSI, ::Mouse_X, ::Mouse_Y, ::Mouse_K.
|
/// The latest input variables are held in ::Key, ::Key_ANSI, ::Mouse_X, ::Mouse_Y, ::Mouse_K.
|
||||||
/// Note that ::Key and ::Key_ANSI are not persistent, they will be reset to 0
|
/// Note that ::Key and ::Key_ANSI are not persistent, they will be reset to 0
|
||||||
/// on subsequent calls to ::Get_input().
|
/// on subsequent calls to ::Get_input().
|
||||||
int Get_input(void);
|
int Get_input(int sleep_time);
|
||||||
|
|
||||||
/// Returns true if the keycode has been set as a keyboard shortcut for the function.
|
/// Returns true if the keycode has been set as a keyboard shortcut for the function.
|
||||||
int Is_shortcut(word key, word function);
|
int Is_shortcut(word key, word function);
|
||||||
@ -60,15 +60,6 @@ extern int Snap_axis_origin_X;
|
|||||||
/// For the :Snap_axis mode, sets the origin's point (in image coordinates)
|
/// For the :Snap_axis mode, sets the origin's point (in image coordinates)
|
||||||
extern int Snap_axis_origin_Y;
|
extern int Snap_axis_origin_Y;
|
||||||
|
|
||||||
///
|
|
||||||
/// Boolean, true if the timer should put "ticks" in the SDL queue.
|
|
||||||
/// This one flag is for tools (airbrush) or windows (repeatable button) that require it.
|
|
||||||
extern volatile int Need_timer_for_tool;
|
|
||||||
///
|
|
||||||
/// Boolean, true if the timer should put "ticks" in the SDL queue.
|
|
||||||
/// This one flag is for the mouse emulation, by keyboard/joystick.
|
|
||||||
extern volatile int Need_timer_for_cursor;
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// This malloced string is set when a drag-and-drop event
|
/// This malloced string is set when a drag-and-drop event
|
||||||
/// brings a file to Grafx2's window.
|
/// brings a file to Grafx2's window.
|
||||||
|
|||||||
88
src/main.c
88
src/main.c
@ -86,86 +86,6 @@
|
|||||||
extern DECLSPEC int SDLCALL SDL_putenv(const char *variable);
|
extern DECLSPEC int SDLCALL SDL_putenv(const char *variable);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int Color_cycling(__attribute__((unused)) void* useless)
|
|
||||||
{
|
|
||||||
byte offset[16];
|
|
||||||
int i, color;
|
|
||||||
static SDL_Color PaletteSDL[256];
|
|
||||||
int changed; // boolean : true if the palette needs a change in this tick.
|
|
||||||
|
|
||||||
long now;
|
|
||||||
long start;
|
|
||||||
|
|
||||||
while(!Quitting)
|
|
||||||
{
|
|
||||||
start = SDL_GetTicks();
|
|
||||||
memset(offset, 0, sizeof(offset));
|
|
||||||
|
|
||||||
// Init palette
|
|
||||||
while (Allow_colorcycling)
|
|
||||||
{
|
|
||||||
now = SDL_GetTicks();
|
|
||||||
changed=0;
|
|
||||||
|
|
||||||
// Check all cycles for a change at this tick
|
|
||||||
for (i=0; i<16; i++)
|
|
||||||
{
|
|
||||||
int len;
|
|
||||||
|
|
||||||
len=Gradient_array[i].End-Gradient_array[i].Start+1;
|
|
||||||
if (len>1 && Gradient_array[i].Speed)
|
|
||||||
{
|
|
||||||
int new_offset;
|
|
||||||
|
|
||||||
new_offset=(now-start)/(int)(1000.0/(Gradient_array[i].Speed*0.2856)) % len;
|
|
||||||
if (!Gradient_array[i].Inverse)
|
|
||||||
new_offset=len - new_offset;
|
|
||||||
|
|
||||||
if (new_offset!=offset[i])
|
|
||||||
changed=1;
|
|
||||||
offset[i]=new_offset;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (changed)
|
|
||||||
{
|
|
||||||
// Initialize the palette
|
|
||||||
for(color=0;color<256;color++)
|
|
||||||
{
|
|
||||||
PaletteSDL[color].r=Main_palette[color].R;
|
|
||||||
PaletteSDL[color].g=Main_palette[color].G;
|
|
||||||
PaletteSDL[color].b=Main_palette[color].B;
|
|
||||||
}
|
|
||||||
for (i=0; i<16; i++)
|
|
||||||
{
|
|
||||||
int len;
|
|
||||||
|
|
||||||
len=Gradient_array[i].End-Gradient_array[i].Start+1;
|
|
||||||
if (len>1 && Gradient_array[i].Speed)
|
|
||||||
{
|
|
||||||
for(color=Gradient_array[i].Start;color<=Gradient_array[i].End;color++)
|
|
||||||
{
|
|
||||||
PaletteSDL[color].r=Main_palette[Gradient_array[i].Start+((color-Gradient_array[i].Start+offset[i])%len)].R;
|
|
||||||
PaletteSDL[color].g=Main_palette[Gradient_array[i].Start+((color-Gradient_array[i].Start+offset[i])%len)].G;
|
|
||||||
PaletteSDL[color].b=Main_palette[Gradient_array[i].Start+((color-Gradient_array[i].Start+offset[i])%len)].B;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SDL_SetPalette(Screen_SDL, SDL_PHYSPAL | SDL_LOGPAL, PaletteSDL,0,256);
|
|
||||||
}
|
|
||||||
SDL_Delay(20);
|
|
||||||
}
|
|
||||||
// Restore normal palette
|
|
||||||
Set_palette(Main_palette);
|
|
||||||
while (!Allow_colorcycling)
|
|
||||||
{
|
|
||||||
SDL_Delay(20);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--- Affichage de la syntaxe, et de la liste des modes vidéos disponibles ---
|
//--- Affichage de la syntaxe, et de la liste des modes vidéos disponibles ---
|
||||||
void Display_syntax(void)
|
void Display_syntax(void)
|
||||||
{
|
{
|
||||||
@ -588,17 +508,13 @@ int Init_program(int argc,char * argv[])
|
|||||||
|
|
||||||
|
|
||||||
// SDL
|
// SDL
|
||||||
if(SDL_Init(SDL_INIT_TIMER|SDL_INIT_VIDEO|SDL_INIT_JOYSTICK) < 0)
|
if(SDL_Init(SDL_INIT_VIDEO|SDL_INIT_JOYSTICK) < 0)
|
||||||
{
|
{
|
||||||
// The program can't continue without that anyway
|
// The program can't continue without that anyway
|
||||||
printf("Couldn't initialize SDL.\n");
|
printf("Couldn't initialize SDL.\n");
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start the timer that will push about 60 "wake up" events
|
|
||||||
// per second in the event queue.
|
|
||||||
Activate_timer(16);
|
|
||||||
|
|
||||||
Joystick = SDL_JoystickOpen(0);
|
Joystick = SDL_JoystickOpen(0);
|
||||||
SDL_EnableKeyRepeat(250, 32);
|
SDL_EnableKeyRepeat(250, 32);
|
||||||
SDL_EnableUNICODE(SDL_ENABLE);
|
SDL_EnableUNICODE(SDL_ENABLE);
|
||||||
@ -905,7 +821,7 @@ int Init_program(int argc,char * argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 1
|
#if 0
|
||||||
// Color cycling test
|
// Color cycling test
|
||||||
{
|
{
|
||||||
SDL_Thread* t = SDL_CreateThread(Color_cycling, NULL);
|
SDL_Thread* t = SDL_CreateThread(Color_cycling, NULL);
|
||||||
|
|||||||
@ -178,7 +178,7 @@ void Wait_end_of_click(void)
|
|||||||
// On désactive tous les raccourcis clavier
|
// On désactive tous les raccourcis clavier
|
||||||
|
|
||||||
while(Mouse_K)
|
while(Mouse_K)
|
||||||
Get_input();
|
Get_input(20);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Clear_current_image_with_stencil(byte color, byte * stencil)
|
void Clear_current_image_with_stencil(byte color, byte * stencil)
|
||||||
|
|||||||
@ -1908,7 +1908,6 @@ void Airbrush_1_0(void)
|
|||||||
Backup();
|
Backup();
|
||||||
Shade_table=Shade_table_left;
|
Shade_table=Shade_table_left;
|
||||||
|
|
||||||
Need_timer_for_tool=1;
|
|
||||||
if (SDL_GetTicks()>Airbrush_next_time)
|
if (SDL_GetTicks()>Airbrush_next_time)
|
||||||
{
|
{
|
||||||
Airbrush(LEFT_SIDE);
|
Airbrush(LEFT_SIDE);
|
||||||
@ -1934,7 +1933,6 @@ void Airbrush_2_0(void)
|
|||||||
Init_start_operation();
|
Init_start_operation();
|
||||||
Backup();
|
Backup();
|
||||||
Shade_table=Shade_table_right;
|
Shade_table=Shade_table_right;
|
||||||
Need_timer_for_tool=1;
|
|
||||||
if (SDL_GetTicks()>Airbrush_next_time)
|
if (SDL_GetTicks()>Airbrush_next_time)
|
||||||
{
|
{
|
||||||
Airbrush(RIGHT_SIDE);
|
Airbrush(RIGHT_SIDE);
|
||||||
@ -1991,7 +1989,6 @@ void Airbrush_0_2(void)
|
|||||||
//
|
//
|
||||||
{
|
{
|
||||||
Operation_stack_size-=2;
|
Operation_stack_size-=2;
|
||||||
//Need_timer_for_tool=0; // Not needed, mouse release did it in Get_input()
|
|
||||||
End_of_modification();
|
End_of_modification();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -196,7 +196,7 @@ byte Readline_ex(word x_pos,word y_pos,char * str,byte visible_size,byte max_siz
|
|||||||
Display_cursor();
|
Display_cursor();
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
Get_input();
|
Get_input(20);
|
||||||
input_key=Key_ANSI;
|
input_key=Key_ANSI;
|
||||||
} while(input_key==0 && Mouse_K == 0);
|
} while(input_key==0 && Mouse_K == 0);
|
||||||
Hide_cursor();
|
Hide_cursor();
|
||||||
|
|||||||
@ -348,7 +348,7 @@ short Wait_click_in_shade_table()
|
|||||||
|
|
||||||
while (selected_cell<0)
|
while (selected_cell<0)
|
||||||
{
|
{
|
||||||
Get_input();
|
Get_input(20);
|
||||||
|
|
||||||
if ( (Mouse_K==LEFT_SIDE)
|
if ( (Mouse_K==LEFT_SIDE)
|
||||||
&& ( ( (Window_click_in_rectangle(8,127,263,179)) && (((((Mouse_Y-Window_pos_Y)/Menu_factor_Y)-127)%7)<4) )
|
&& ( ( (Window_click_in_rectangle(8,127,263,179)) && (((((Mouse_Y-Window_pos_Y)/Menu_factor_Y)-127)%7)<4) )
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user