-Introduce new Requester_window to ask the user to enter a single value
-Reduce colors in the palette screen is now a dropdown for easy access to usual values. "Other" option opens a requester to enter a custom one if needed -Some cleanup to make things a little more readable -Build fixes after versionning system revert git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@1090 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
235
palette.c
235
palette.c
@@ -752,68 +752,81 @@ void Draw_all_palette_sliders(T_Scroller_button * red_slider,
|
||||
|
||||
void Button_Palette(void)
|
||||
{
|
||||
static short reducer_index=0;
|
||||
static short reduce_colors_number=256;
|
||||
short temp_color; // Variable pouvant reservir pour différents calculs intermédiaires
|
||||
dword temp;
|
||||
byte color,click; // Variables pouvant reservir pour différents calculs intermédiaires
|
||||
short clicked_button;
|
||||
word old_mouse_x;
|
||||
word old_mouse_y;
|
||||
byte old_mouse_k;
|
||||
byte block_start;
|
||||
byte block_end;
|
||||
byte first_color;
|
||||
byte last_color;
|
||||
char str[10];
|
||||
word i;
|
||||
//short x_pos,y_pos;
|
||||
static short reduce_colors_number = 256;
|
||||
short temp_color; // Variable pouvant reservir pour différents calculs intermédiaires
|
||||
dword temp;
|
||||
byte color,click; // Variables pouvant reservir pour différents calculs intermédiaires
|
||||
short clicked_button;
|
||||
word old_mouse_x;
|
||||
word old_mouse_y;
|
||||
byte old_mouse_k;
|
||||
byte block_start;
|
||||
byte block_end;
|
||||
byte first_color;
|
||||
byte last_color;
|
||||
char str[10];
|
||||
word i;
|
||||
T_Normal_button * button_used;
|
||||
T_Scroller_button * red_slider;
|
||||
T_Scroller_button * green_slider;
|
||||
T_Scroller_button * blue_slider;
|
||||
T_Scroller_button * reduce_slider;
|
||||
byte image_is_backed_up=0;
|
||||
byte need_to_remap=0;
|
||||
T_Dropdown_button * reduce_dropdown;
|
||||
byte image_is_backed_up = 0;
|
||||
byte need_to_remap = 0;
|
||||
|
||||
dword color_usage[256];
|
||||
short used_colors=-1; // -1 <=> Inconnu
|
||||
short used_colors = -1; // -1 <=> Inconnu
|
||||
byte conversion_table[256];
|
||||
|
||||
T_Components * backup_palette;
|
||||
T_Components * temp_palette;
|
||||
T_Components * working_palette;
|
||||
|
||||
backup_palette =(T_Components *)malloc(sizeof(T_Palette));
|
||||
backup_palette =(T_Components *)malloc(sizeof(T_Palette));
|
||||
temp_palette=(T_Components *)malloc(sizeof(T_Palette));
|
||||
working_palette=(T_Components *)malloc(sizeof(T_Palette));
|
||||
|
||||
Componant_unit(RGB_scale);
|
||||
|
||||
Open_window(299,188,"Palette");
|
||||
Open_window(299, 188,"Palette");
|
||||
|
||||
memcpy(working_palette,Main_palette,sizeof(T_Palette));
|
||||
memcpy(backup_palette ,Main_palette,sizeof(T_Palette));
|
||||
memcpy(temp_palette,Main_palette,sizeof(T_Palette));
|
||||
memcpy(working_palette, Main_palette, sizeof(T_Palette));
|
||||
memcpy(backup_palette, Main_palette, sizeof(T_Palette));
|
||||
memcpy(temp_palette, Main_palette, sizeof(T_Palette));
|
||||
|
||||
Window_set_palette_button(5,79); // 1
|
||||
Window_set_palette_button(5, 79); // 1
|
||||
|
||||
Window_display_frame (173, 67,121,116);
|
||||
Window_display_frame (128, 16, 91, 39);
|
||||
Window_display_frame (221, 16, 73, 39);
|
||||
// Frame creux destiné à l'affichage de la(les) couleur(s) sélectionnée(s)
|
||||
Window_display_frame_in(259, 88, 26, 74);
|
||||
Window_display_frame (173, 67, 121, 116);
|
||||
Window_display_frame (128, 16, 91, 39);
|
||||
|
||||
// Graduation des jauges de couleur
|
||||
Block(Window_pos_X+(Menu_factor_X*179),Window_pos_Y+(Menu_factor_Y*109),Menu_factor_X*17,Menu_factor_Y,MC_Dark);
|
||||
Block(Window_pos_X+(Menu_factor_X*206),Window_pos_Y+(Menu_factor_Y*109),Menu_factor_X*17,Menu_factor_Y,MC_Dark);
|
||||
Block(Window_pos_X+(Menu_factor_X*233),Window_pos_Y+(Menu_factor_Y*109),Menu_factor_X*17,Menu_factor_Y,MC_Dark);
|
||||
Block(Window_pos_X+(Menu_factor_X*179),Window_pos_Y+(Menu_factor_Y*125),Menu_factor_X*17,Menu_factor_Y,MC_Dark);
|
||||
Block(Window_pos_X+(Menu_factor_X*206),Window_pos_Y+(Menu_factor_Y*125),Menu_factor_X*17,Menu_factor_Y,MC_Dark);
|
||||
Block(Window_pos_X+(Menu_factor_X*233),Window_pos_Y+(Menu_factor_Y*125),Menu_factor_X*17,Menu_factor_Y,MC_Dark);
|
||||
Block(Window_pos_X+(Menu_factor_X*179),Window_pos_Y+(Menu_factor_Y*141),Menu_factor_X*17,Menu_factor_Y,MC_Dark);
|
||||
Block(Window_pos_X+(Menu_factor_X*206),Window_pos_Y+(Menu_factor_Y*141),Menu_factor_X*17,Menu_factor_Y,MC_Dark);
|
||||
Block(Window_pos_X+(Menu_factor_X*233),Window_pos_Y+(Menu_factor_Y*141),Menu_factor_X*17,Menu_factor_Y,MC_Dark);
|
||||
Block(Window_pos_X + (Menu_factor_X * 179),
|
||||
Window_pos_Y + (Menu_factor_Y * 109), Menu_factor_X * 17, Menu_factor_Y,
|
||||
MC_Dark);
|
||||
Block(Window_pos_X + (Menu_factor_X * 206),
|
||||
Window_pos_Y + (Menu_factor_Y * 109), Menu_factor_X * 17, Menu_factor_Y,
|
||||
MC_Dark);
|
||||
Block(Window_pos_X + (Menu_factor_X * 233),
|
||||
Window_pos_Y + (Menu_factor_Y * 109), Menu_factor_X * 17, Menu_factor_Y,
|
||||
MC_Dark);
|
||||
Block(Window_pos_X + (Menu_factor_X * 179),
|
||||
Window_pos_Y + (Menu_factor_Y * 125), Menu_factor_X * 17, Menu_factor_Y,
|
||||
MC_Dark);
|
||||
Block(Window_pos_X + (Menu_factor_X * 206),
|
||||
Window_pos_Y + (Menu_factor_Y * 125), Menu_factor_X * 17, Menu_factor_Y,
|
||||
MC_Dark);
|
||||
Block(Window_pos_X + (Menu_factor_X * 233),
|
||||
Window_pos_Y + (Menu_factor_Y * 125), Menu_factor_X * 17, Menu_factor_Y,
|
||||
MC_Dark);
|
||||
Block(Window_pos_X + (Menu_factor_X * 179),
|
||||
Window_pos_Y + (Menu_factor_Y * 141), Menu_factor_X * 17, Menu_factor_Y,
|
||||
MC_Dark);
|
||||
Block(Window_pos_X + (Menu_factor_X * 206),
|
||||
Window_pos_Y + (Menu_factor_Y * 141), Menu_factor_X * 17, Menu_factor_Y,
|
||||
MC_Dark);
|
||||
Block(Window_pos_X + (Menu_factor_X * 233),
|
||||
Window_pos_Y + (Menu_factor_Y * 141), Menu_factor_X * 17, Menu_factor_Y,
|
||||
MC_Dark);
|
||||
// Jauges de couleur
|
||||
red_slider = Window_set_scroller_button(182, 81, 88,Color_count,1,Color_max-working_palette[Fore_color].R*Color_max/255);// 2
|
||||
green_slider = Window_set_scroller_button(209, 81, 88,Color_count,1,Color_max-working_palette[Fore_color].G*Color_max/255);// 3
|
||||
@@ -853,8 +866,16 @@ void Button_Palette(void)
|
||||
Window_set_normal_button(66,32,29,14,"Cpy" ,1,1,SDLK_c); // 9
|
||||
Window_set_normal_button( 6,32,59,14,"Spread" ,4,1,SDLK_e); // 10
|
||||
|
||||
Window_set_normal_button(239,20,51,14,"Reduce" ,1,1,SDLK_r); // 11
|
||||
Print_in_window(241,41,"to",MC_Dark,MC_Light);
|
||||
reduce_dropdown = Window_set_dropdown_button(222, 18, 60, 14, 60, "Reduce", 0,
|
||||
0, 1, 1); // 11
|
||||
Window_dropdown_add_item(reduce_dropdown, 0, "to 128");
|
||||
Window_dropdown_add_item(reduce_dropdown, 1, "to 64");
|
||||
Window_dropdown_add_item(reduce_dropdown, 2, "to 32");
|
||||
Window_dropdown_add_item(reduce_dropdown, 3, "to 16");
|
||||
Window_dropdown_add_item(reduce_dropdown, 4, "to 8");
|
||||
Window_dropdown_add_item(reduce_dropdown, 5, "to 4");
|
||||
Window_dropdown_add_item(reduce_dropdown, 6, "to 2");
|
||||
Window_dropdown_add_item(reduce_dropdown, 7, "Other");
|
||||
|
||||
Window_set_normal_button( 6,168,35,14,"Undo" ,1,1,SDLK_u); // 12
|
||||
Window_set_normal_button( 62,168,51,14,"Cancel",0,1,KEY_ESC); // 13
|
||||
@@ -863,23 +884,15 @@ void Button_Palette(void)
|
||||
button_used = Window_set_normal_button(132,20,83,14,"Used: ???",4,1,SDLK_d);// 15
|
||||
Window_set_normal_button(132,37,83,14,"Zap unused",0,1,SDLK_DELETE);//16
|
||||
|
||||
// Jauge de réduction de palette
|
||||
reduce_slider = Window_set_scroller_button(225,20,31,7,1,reducer_index);// 17
|
||||
Window_set_repeatable_button(266, 74,12,11,"+",0,1,SDLK_KP_PLUS); // 17
|
||||
Window_set_repeatable_button(266,165,12,11,"-",0,1,SDLK_KP_MINUS); // 18
|
||||
|
||||
Window_set_repeatable_button(266, 74,12,11,"+",0,1,SDLK_KP_PLUS); // 18
|
||||
Window_set_repeatable_button(266,165,12,11,"-",0,1,SDLK_KP_MINUS); // 19
|
||||
Window_set_normal_button(96,17,29,14,"Neg" ,1,1,SDLK_n); // 19
|
||||
Window_set_normal_button(66,62,29,14,"Inv" ,1,1,SDLK_i); // 20
|
||||
Window_set_normal_button( 6,62,59,14,"X-Inv." ,5,1,SDLK_v); // 21
|
||||
|
||||
Window_set_normal_button(96,17,29,14,"Neg" ,1,1,SDLK_n); // 20
|
||||
Window_set_normal_button(66,62,29,14,"Inv" ,1,1,SDLK_i); // 21
|
||||
Window_set_normal_button( 6,62,59,14,"X-Inv." ,5,1,SDLK_v); // 22
|
||||
|
||||
Window_set_input_button(263,39,3); // 23
|
||||
|
||||
Window_set_normal_button(96,32,29,14,"HSL" ,1,1,SDLK_h); // 24
|
||||
Window_set_normal_button(96,47,29,14,"Srt" ,1,1,SDLK_s); // 25
|
||||
// Affichage du facteur de réduction de la palette
|
||||
Num2str(reduce_colors_number,str,3);
|
||||
Print_in_window(265,41,str,MC_Black,MC_Light);
|
||||
Window_set_normal_button(96,32,29,14,"HSL" ,1,1,SDLK_h); // 22
|
||||
Window_set_normal_button(96,47,29,14,"Srt" ,1,1,SDLK_s); // 23
|
||||
|
||||
// Dessin des petits effets spéciaux pour les boutons [+] et [-]
|
||||
Draw_thingumajig(263, 74,MC_White,-1);
|
||||
@@ -1400,29 +1413,64 @@ void Button_Palette(void)
|
||||
break;
|
||||
|
||||
case 11: // Reduce
|
||||
memcpy(backup_palette,working_palette,sizeof(T_Palette));
|
||||
memcpy(backup_palette, working_palette, sizeof(T_Palette));
|
||||
switch(Window_attribute2) // Get the dropdown value
|
||||
{
|
||||
case 0: // 128
|
||||
reduce_colors_number = 128;
|
||||
break;
|
||||
case 1: // 64
|
||||
reduce_colors_number = 64;
|
||||
break;
|
||||
case 2: // 32
|
||||
reduce_colors_number = 32;
|
||||
break;
|
||||
case 3: // 16
|
||||
reduce_colors_number = 16;
|
||||
break;
|
||||
case 4: // 8
|
||||
reduce_colors_number = 8;
|
||||
break;
|
||||
case 5: // 4
|
||||
reduce_colors_number = 4;
|
||||
break;
|
||||
case 6: // 2
|
||||
reduce_colors_number = 2;
|
||||
break;
|
||||
case 7: // other
|
||||
reduce_colors_number
|
||||
= Requester_window("Enter the max. number of colors",
|
||||
reduce_colors_number);
|
||||
if (reduce_colors_number < 2 || reduce_colors_number > 256)
|
||||
reduce_colors_number = 256;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!image_is_backed_up)
|
||||
{
|
||||
Backup();
|
||||
image_is_backed_up=1;
|
||||
image_is_backed_up = 1;
|
||||
}
|
||||
Reduce_palette(&used_colors,reduce_colors_number,working_palette,color_usage);
|
||||
|
||||
Reduce_palette(&used_colors, reduce_colors_number, working_palette,
|
||||
color_usage);
|
||||
|
||||
if ((Config.Safety_colors) && (used_colors<4))
|
||||
{
|
||||
memcpy(temp_palette,Main_palette,sizeof(T_Palette));
|
||||
memcpy(Main_palette,working_palette,sizeof(T_Palette));
|
||||
Set_nice_menu_colors(color_usage,0);
|
||||
memcpy(working_palette,Main_palette,sizeof(T_Palette));
|
||||
memcpy(Main_palette,temp_palette,sizeof(T_Palette));
|
||||
memcpy(temp_palette, Main_palette, sizeof(T_Palette));
|
||||
memcpy(Main_palette, working_palette, sizeof(T_Palette));
|
||||
Set_nice_menu_colors(color_usage, 0);
|
||||
memcpy(working_palette, Main_palette, sizeof(T_Palette));
|
||||
memcpy(Main_palette, temp_palette, sizeof(T_Palette));
|
||||
}
|
||||
|
||||
Set_palette(working_palette); // On définit la nouvelle palette
|
||||
Draw_all_palette_sliders(red_slider,green_slider,blue_slider,working_palette,block_start,block_end);
|
||||
memcpy(temp_palette,working_palette,sizeof(T_Palette));
|
||||
Set_palette(working_palette); // On définit la nouvelle palette
|
||||
Draw_all_palette_sliders(red_slider, green_slider, blue_slider,
|
||||
working_palette, block_start, block_end);
|
||||
memcpy(temp_palette, working_palette, sizeof(T_Palette));
|
||||
|
||||
End_of_modification();
|
||||
need_to_remap=1;
|
||||
need_to_remap = 1;
|
||||
break;
|
||||
|
||||
case 12: // Undo
|
||||
@@ -1470,19 +1518,7 @@ void Button_Palette(void)
|
||||
need_to_remap=1;
|
||||
break;
|
||||
|
||||
case 17 : // Jauge de réduction de palette
|
||||
if (reducer_index!=reduce_slider->Position)
|
||||
{
|
||||
reducer_index=reduce_slider->Position;
|
||||
// Affichage du facteur de réduction de la palette
|
||||
Hide_cursor();
|
||||
Print_in_window(265,41,Palette_reduce_label[reducer_index],MC_Black,MC_Light);
|
||||
Display_cursor();
|
||||
reduce_colors_number=atoi(Palette_reduce_label[reducer_index]);
|
||||
}
|
||||
break;
|
||||
|
||||
case 18 : // [+]
|
||||
case 17 : // [+]
|
||||
if (!Palette_view_is_RGB)
|
||||
break;
|
||||
Hide_cursor();
|
||||
@@ -1607,7 +1643,7 @@ void Button_Palette(void)
|
||||
Set_palette(working_palette);
|
||||
break;
|
||||
|
||||
case 19 : // [-]
|
||||
case 18 : // [-]
|
||||
if (!Palette_view_is_RGB)
|
||||
break;
|
||||
Hide_cursor();
|
||||
@@ -1732,7 +1768,7 @@ void Button_Palette(void)
|
||||
Set_palette(working_palette);
|
||||
break;
|
||||
|
||||
case 20 : // Negative
|
||||
case 19 : // Negative
|
||||
// Backup
|
||||
memcpy(backup_palette,working_palette,sizeof(T_Palette));
|
||||
// Negative
|
||||
@@ -1750,8 +1786,8 @@ void Button_Palette(void)
|
||||
need_to_remap=1;
|
||||
break;
|
||||
|
||||
case 21 : // Inversion
|
||||
case 22 : // X-Inversion
|
||||
case 20 : // Inversion
|
||||
case 21 : // X-Inversion
|
||||
// Backup
|
||||
memcpy(backup_palette,working_palette,sizeof(T_Palette));
|
||||
// On initialise la table de conversion
|
||||
@@ -1795,30 +1831,7 @@ void Button_Palette(void)
|
||||
need_to_remap=1;
|
||||
break;
|
||||
|
||||
case 23 : // Saisie du nombre de couleurs pour la réduction de palette
|
||||
Num2str(reduce_colors_number,str,3);
|
||||
|
||||
if (Readline(265,41,str,3,1))
|
||||
{
|
||||
temp_color=atoi(str);
|
||||
// Correction de la valeur lue
|
||||
if ( (temp_color>256) || (temp_color<2) )
|
||||
{
|
||||
if (temp_color>256)
|
||||
temp_color=256;
|
||||
else
|
||||
temp_color=2;
|
||||
|
||||
Num2str(temp_color,str,3);
|
||||
Window_input_content(Window_special_button_list,str);
|
||||
}
|
||||
|
||||
reduce_colors_number=temp_color;
|
||||
}
|
||||
Display_cursor();
|
||||
break;
|
||||
|
||||
case 24 : // HSL <> RGB
|
||||
case 22 : // HSL <> RGB
|
||||
|
||||
// Acte les changements en cours sur une ou plusieurs couleurs
|
||||
memcpy(temp_palette,working_palette,sizeof(T_Palette));
|
||||
@@ -1854,7 +1867,7 @@ void Button_Palette(void)
|
||||
Update_window_area(265,73,14,103);
|
||||
break;
|
||||
|
||||
case 25 : // Sort palette
|
||||
case 23 : // Sort palette
|
||||
{
|
||||
byte h = 0, l = 0, s=0;
|
||||
byte oh=0,ol=0,os=0; // Valeur pour la couleur précédente
|
||||
|
||||
Reference in New Issue
Block a user