Fix missing preview of palette formats. Fixed JASC PAL saving that didn't close file (!), so saving more than once would make empty file. Fixed loading palette formats that didn't have any effect.

git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@1280 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
Yves Rizoud 2010-01-23 20:51:32 +00:00
parent bece65fcbb
commit b07ab82b20
2 changed files with 109 additions and 113 deletions

View File

@ -285,6 +285,18 @@ void Palette_loaded(T_IO_Context *context)
} }
*/ */
Remap_screen_after_menu_colors_change(); Remap_screen_after_menu_colors_change();
// Preview palette
if (Get_fileformat(context->Format)->Palette_only)
{
short index;
if (context->Type == CONTEXT_PREVIEW)
for (index=0; index<256; index++)
Window_rectangle(183+(index/16)*7,95+(index&15)*5,5,5,index);
Update_window_area(183,95,120,80);
}
break; break;
case CONTEXT_MAIN_IMAGE: case CONTEXT_MAIN_IMAGE:
@ -621,6 +633,7 @@ void Load_image(T_IO_Context *context)
if (File_error) if (File_error)
{ {
context->Format = DEFAULT_FILEFORMAT;
// Last try: with SDL_image // Last try: with SDL_image
Load_SDL_Image(context); Load_SDL_Image(context);
@ -637,6 +650,7 @@ void Load_image(T_IO_Context *context)
else else
// Si on a su déterminer avec succès le format du fichier: // Si on a su déterminer avec succès le format du fichier:
{ {
context->Format = format->Identifier;
// On peut charger le fichier: // On peut charger le fichier:
// Dans certains cas il est possible que le chargement plante // Dans certains cas il est possible que le chargement plante
// après avoir modifié la palette. TODO // après avoir modifié la palette. TODO
@ -698,42 +712,42 @@ void Load_image(T_IO_Context *context)
if (context->Type == CONTEXT_MAIN_IMAGE) if (context->Type == CONTEXT_MAIN_IMAGE)
{ {
if ( (File_error!=1) && (!format->Palette_only) ) if ( File_error!=1)
{ {
/* Shouldn't happen ??? if (format->Palette_only)
if (Pixel_load_function==Pixel_load_in_preview)
{ {
dword color_usage[256]; // Make a backup step
Count_used_colors_screen_area(color_usage,context->Preview_pos_X,context->Preview_pos_Y,context->Width/context->Preview_factor_X,context->Height/context->Preview_factor_Y); Backup_layers(0);
//Count_used_colors(color_usage);
Display_cursor();
Set_nice_menu_colors(color_usage,1);
Hide_cursor();
} }
*/ // Copy the loaded palette
strcpy(Main_backups->Pages->Filename,context->File_name);
strcpy(Main_backups->Pages->File_directory,context->File_directory);
// On considère que l'image chargée n'est plus modifiée
Main_image_is_modified=0;
// Et on documente la variable Main_fileformat avec la valeur:
Main_fileformat=format->Identifier;
// already done initially on Backup_with_new_dimensions
//Main_image_width= context->Width;
//Main_image_height= context->Height;
memcpy(Main_palette, context->Palette, sizeof(T_Palette)); memcpy(Main_palette, context->Palette, sizeof(T_Palette));
memcpy(Main_backups->Pages->Palette, context->Palette, sizeof(T_Palette)); memcpy(Main_backups->Pages->Palette, context->Palette, sizeof(T_Palette));
Main_current_layer = context->Nb_layers - 1; // For formats that handle more than just the palette:
Main_layers_visible = (2<<Main_current_layer)-1; // Transfer the data to main image.
if (!format->Palette_only)
{
strcpy(Main_backups->Pages->Filename,context->File_name);
strcpy(Main_backups->Pages->File_directory,context->File_directory);
// Correction des dimensions // On considère que l'image chargée n'est plus modifiée
if (Main_image_width<1) Main_image_is_modified=0;
Main_image_width=1; // Et on documente la variable Main_fileformat avec la valeur:
if (Main_image_height<1) Main_fileformat=format->Identifier;
Main_image_height=1;
// already done initially on Backup_with_new_dimensions
//Main_image_width= context->Width;
//Main_image_height= context->Height;
Main_current_layer = context->Nb_layers - 1;
Main_layers_visible = (2<<Main_current_layer)-1;
// Correction des dimensions
if (Main_image_width<1)
Main_image_width=1;
if (Main_image_height<1)
Main_image_height=1;
}
} }
else if (File_error!=1) else if (File_error!=1)
{ {

View File

@ -39,18 +39,6 @@
//////////////////////////////////// PAL //////////////////////////////////// //////////////////////////////////// PAL ////////////////////////////////////
// //
void Draw_palette_preview(T_IO_Context * context)
{
short index;
if (context->Type == CONTEXT_PREVIEW)
for (index=0; index<256; index++)
Window_rectangle(183+(index/16)*7,95+(index&15)*5,5,5,index);
Update_window_area(183,95,120,80);
}
// -- Tester si un fichier est au format PAL -------------------------------- // -- Tester si un fichier est au format PAL --------------------------------
void Test_PAL(T_IO_Context * context) void Test_PAL(T_IO_Context * context)
@ -71,14 +59,14 @@ void Test_PAL(T_IO_Context * context)
// Le fichier ne peut être au format PAL que si sa taille vaut 768 octets // Le fichier ne peut être au format PAL que si sa taille vaut 768 octets
if (file_size == sizeof(T_Palette)) if (file_size == sizeof(T_Palette))
File_error = 0; File_error = 0;
else { else {
// Sinon c'est peut être un fichier palette ASCII "Jasc" // Sinon c'est peut être un fichier palette ASCII "Jasc"
fread(filename, 1, 8, file); fread(filename, 1, 8, file);
if (strncmp(filename,"JASC-PAL",8) == 0) if (strncmp(filename,"JASC-PAL",8) == 0)
{ {
File_error = 0; File_error = 0;
} }
} }
fclose(file); fclose(file);
} }
} }
@ -101,51 +89,44 @@ void Load_PAL(T_IO_Context * context)
long file_size = File_length_file(file); long file_size = File_length_file(file);
// Le fichier ne peut être au format PAL que si sa taille vaut 768 octets // Le fichier ne peut être au format PAL que si sa taille vaut 768 octets
if (file_size == sizeof(T_Palette)) if (file_size == sizeof(T_Palette))
{ {
T_Palette palette_64; T_Palette palette_64;
// Pre_load(context, ?); // Pas possible... pas d'image... // Pre_load(context, ?); // Pas possible... pas d'image...
// Lecture du fichier dans context->Palette // Lecture du fichier dans context->Palette
if (Read_bytes(file, palette_64, sizeof(T_Palette))) if (Read_bytes(file, palette_64, sizeof(T_Palette)))
{ {
Palette_64_to_256(palette_64); Palette_64_to_256(palette_64);
memcpy(context->Palette, palette_64, sizeof(T_Palette)); memcpy(context->Palette, palette_64, sizeof(T_Palette));
Palette_loaded(context); Palette_loaded(context);
}
else
File_error = 2;
} else {
fread(filename, 1, 8, file);
if (strncmp(filename,"JASC-PAL",8) == 0)
{
int i, n, r, g, b;
fscanf(file, "%d",&n);
if(n != 100)
{
File_error = 2;
fclose(file);
return;
}
// Read color count
fscanf(file, "%d",&n);
for (i = 0; i < n; i++)
{
fscanf(file, "%d %d %d",&r, &g, &b);
context->Palette[i].R = r;
context->Palette[i].G = g;
context->Palette[i].B = b;
}
Palette_loaded(context);
} else File_error = 2;
// On dessine une preview de la palette (si chargement = preview) }
Draw_palette_preview(context);
}
else
File_error = 2;
} else {
fread(filename, 1, 8, file);
if (strncmp(filename,"JASC-PAL",8) == 0)
{
int i, n, r, g, b;
fscanf(file, "%d",&n);
if(n != 100)
{
File_error = 2;
fclose(file);
return;
}
// Read color count
fscanf(file, "%d",&n);
for (i = 0; i < n; i++)
{
fscanf(file, "%d %d %d",&r, &g, &b);
context->Palette[i].R = r;
context->Palette[i].G = g;
context->Palette[i].B = b;
Palette_loaded(context);
// On dessine une preview de la palette (si chargement = preview)
Draw_palette_preview(context);
}
} else File_error = 2;
}
// Fermeture du fichier // Fermeture du fichier
fclose(file); fclose(file);
@ -159,31 +140,34 @@ void Load_PAL(T_IO_Context * context)
// -- Sauver un fichier au format PAL --------------------------------------- // -- Sauver un fichier au format PAL ---------------------------------------
void Save_PAL(T_IO_Context * context) void Save_PAL(T_IO_Context * context)
{ {
FILE *file; // Fichier du fichier FILE *file;
char filename[MAX_PATH_CHARACTERS]; // Nom complet du fichier char filename[MAX_PATH_CHARACTERS]; ///< full filename
//long file_size; // Taille du fichier
Get_full_filename(filename, context->File_name, context->File_directory); Get_full_filename(filename, context->File_name, context->File_directory);
File_error=0; File_error=0;
// Ouverture du fichier // Open output file
if ((file=fopen(filename,"w"))) if ((file=fopen(filename,"w")))
{ {
int i; int i;
fputs("JASC-PAL\n0100\n256\n", file); if (fputs("JASC-PAL\n0100\n256\n", file)==EOF)
for (i = 0; i < 256; i++) File_error=1;
fprintf(file,"%d %d %d\n",context->Palette[i].R, context->Palette[i].G, context->Palette[i].B); for (i = 0; i < 256 && File_error==0; i++)
} {
else // Si on n'a pas réussi à ouvrir le fichier, alors il y a eu une erreur if (fprintf(file,"%d %d %d\n",context->Palette[i].R, context->Palette[i].G, context->Palette[i].B) <= 0)
{ File_error=1;
File_error=1; }
fclose(file); fclose(file);
remove(filename);
// On se fout du résultat de l'opération car si ça if (File_error)
// renvoie 0 c'est que le fichier avait été partiel- remove(filename);
// -lement écrit, sinon pas du tout. Or dans tous les }
// cas ça revient au même pour nous: Sauvegarde ratée! else
{
// unable to open output file, nothing saved.
File_error=1;
} }
} }
@ -1171,8 +1155,6 @@ void Load_KCF(T_IO_Context * context)
} }
else else
File_error=1; File_error=1;
if (!File_error) Draw_palette_preview(context);
} }