Convert comments to UTF-8

most were encoded in Latin1 / CP1252
but a few lines in op_c.c were using IBM437/850 !
This commit is contained in:
Thomas Bernard 2018-06-26 10:54:47 +02:00
parent 6731a57999
commit 92facef46d
53 changed files with 2424 additions and 2424 deletions

View File

@ -2,7 +2,7 @@
#
# Copyright 2018 Thomas Bernard
# Copyright 2012 Franck Charlet
# Copyright 2011 Pawel Góralski
# Copyright 2011 Pawel Góralski
# Copyright 2009 Per Olofsson
# Copyright 2008 Peter Gordon
# Copyright 2008-2010 Yves Rizoud

View File

@ -42,8 +42,8 @@ static byte * Brush_rotate_buffer;
static int Brush_rotate_width;
static int Brush_rotate_height;
// Calcul de redimensionnement du pinceau pour éviter les débordements de
// l'écran et de l'image
// Calcul de redimensionnement du pinceau pour éviter les débordements de
// l'écran et de l'image
void Compute_clipped_dimensions(short * x,short * y,short * width,short * height)
{
if ((*x)<Limit_left)
@ -69,8 +69,8 @@ void Compute_clipped_dimensions(short * x,short * y,short * width,short * height
}
}
// -- Calcul de redimensionnement du pinceau pour éviter les débordements
// de l'écran zoomé et de l'image --
// -- Calcul de redimensionnement du pinceau pour éviter les débordements
// de l'écran zoomé et de l'image --
void Compute_clipped_dimensions_zoom(short * x,short * y,short * width,short * height)
{
@ -101,19 +101,19 @@ void Compute_clipped_dimensions_zoom(short * x,short * y,short * width,short * h
/// Display the paintbrush (preview : on screen only)
void Display_paintbrush(short x,short y,byte color)
// x,y: position du centre du pinceau
// color: couleur à appliquer au pinceau
// color: couleur à appliquer au pinceau
{
short start_x; // Position X (dans l'image) à partir de laquelle on
short start_x; // Position X (dans l'image) à partir de laquelle on
// affiche la brosse/pinceau
short start_y; // Position Y (dans l'image) à partir de laquelle on
short start_y; // Position Y (dans l'image) à partir de laquelle on
// affiche la brosse/pinceau
short width; // width dans l'écran selon laquelle on affiche la
short width; // width dans l'écran selon laquelle on affiche la
// brosse/pinceau
short height; // height dans l'écran selon laquelle on affiche la
short height; // height dans l'écran selon laquelle on affiche la
// brosse/pinceau
short start_x_counter; // Position X (dans la brosse/pinceau) à partir
short start_x_counter; // Position X (dans la brosse/pinceau) à partir
// de laquelle on affiche la brosse/pinceau
short start_y_counter; // Position Y (dans la brosse/pinceau) à partir
short start_y_counter; // Position Y (dans la brosse/pinceau) à partir
// de laquelle on affiche la brosse/pinceau
byte * temp;
@ -256,19 +256,19 @@ void Display_paintbrush(short x,short y,byte color)
/// Draw the paintbrush in the image buffer
void Draw_paintbrush(short x,short y,byte color)
// x,y: position du centre du pinceau
// color: couleur à appliquer au pinceau
// color: couleur à appliquer au pinceau
{
short start_x; // Position X (dans l'image) à partir de laquelle on
short start_x; // Position X (dans l'image) à partir de laquelle on
// affiche la brosse/pinceau
short start_y; // Position Y (dans l'image) à partir de laquelle on
short start_y; // Position Y (dans l'image) à partir de laquelle on
// affiche la brosse/pinceau
short width; // width dans l'écran selon laquelle on affiche la
short width; // width dans l'écran selon laquelle on affiche la
// brosse/pinceau
short height; // height dans l'écran selon laquelle on affiche la
short height; // height dans l'écran selon laquelle on affiche la
// brosse/pinceau
short start_x_counter; // Position X (dans la brosse/pinceau) à partir
short start_x_counter; // Position X (dans la brosse/pinceau) à partir
// de laquelle on affiche la brosse/pinceau
short start_y_counter; // Position Y (dans la brosse/pinceau) à partir
short start_y_counter; // Position Y (dans la brosse/pinceau) à partir
// de laquelle on affiche la brosse/pinceau
short x_pos; // Position X (dans l'image) en cours d'affichage
short y_pos; // Position Y (dans l'image) en cours d'affichage
@ -276,9 +276,9 @@ void Draw_paintbrush(short x,short y,byte color)
// d'affichage
short counter_y; // Position Y (dans la brosse/pinceau) en cours
// d'affichage
short end_counter_x; // Position X ou s'arrête l'affichade de la
short end_counter_x; // Position X ou s'arrête l'affichade de la
// brosse/pinceau
short end_counter_y; // Position Y ou s'arrête l'affichade de la
short end_counter_y; // Position Y ou s'arrête l'affichade de la
// brosse/pinceau
byte temp_color; // color de la brosse en cours d'affichage
int position;
@ -688,17 +688,17 @@ byte Realloc_brush(word new_brush_width, word new_brush_height, byte *new_brush,
void Hide_paintbrush(short x,short y)
// x,y: position du centre du pinceau
{
short start_x; // Position X (dans l'image) à partir de laquelle on
short start_x; // Position X (dans l'image) à partir de laquelle on
// affiche la brosse/pinceau
short start_y; // Position Y (dans l'image) à partir de laquelle on
short start_y; // Position Y (dans l'image) à partir de laquelle on
// affiche la brosse/pinceau
short width; // width dans l'écran selon laquelle on affiche la
short width; // width dans l'écran selon laquelle on affiche la
// brosse/pinceau
short height; // height dans l'écran selon laquelle on affiche la
short height; // height dans l'écran selon laquelle on affiche la
// brosse/pinceau
short start_x_counter; // Position X (dans la brosse/pinceau) à partir
short start_x_counter; // Position X (dans la brosse/pinceau) à partir
// de laquelle on affiche la brosse/pinceau
short start_y_counter; // Position Y (dans la brosse/pinceau) à partir
short start_y_counter; // Position Y (dans la brosse/pinceau) à partir
// de laquelle on affiche la brosse/pinceau
//short x_pos; // Position X (dans l'image) en cours d'affichage
//short y_pos; // Position Y (dans l'image) en cours d'affichage
@ -839,10 +839,10 @@ void Capture_brush(short start_x,short start_y,short end_x,short end_y,short cle
if ((start_x<Main.image_width) && (start_y<Main.image_height))
{
// On met les décalages du tiling à 0 pour eviter toute incohérence.
// Si par hasard on voulait les mettre à
// On met les décalages du tiling à 0 pour eviter toute incohérence.
// Si par hasard on voulait les mettre à
// min(Tiling_Decalage_?,Brosse_?a??eur-1)
// il faudrait penser à les initialiser à 0 dans "MAIN.C".
// il faudrait penser à les initialiser à 0 dans "MAIN.C".
Tiling_offset_X=0;
Tiling_offset_Y=0;
@ -922,7 +922,7 @@ void Remap_brush(void)
int color;
// On commence par initialiser le tableau de booléens à faux
// On commence par initialiser le tableau de booléens à faux
for (color=0;color<=255;color++)
Brush_colormap[color]=0;
@ -931,18 +931,18 @@ void Remap_brush(void)
for (x_pos=0;x_pos<Brush_width;x_pos++)
Brush_colormap[*(Brush_original_pixels + y_pos * Brush_width + x_pos)]=1;
// On n'est pas censé remapper la couleur de transparence, sinon la brosse
// changera de forme, donc on dit pour l'instant qu'elle n'est pas utilisée
// ainsi on ne s'embêtera pas à la recalculer
// On n'est pas censé remapper la couleur de transparence, sinon la brosse
// changera de forme, donc on dit pour l'instant qu'elle n'est pas utilisée
// ainsi on ne s'embêtera pas à la recalculer
Brush_colormap[Back_color]=0;
// On va maintenant se servir de la table comme table de
// conversion: pour chaque indice, la table donne une couleur de
// remplacement.
// Note : Seules les couleurs utilisées on besoin d'êtres recalculées: les
// autres ne seront jamais consultées dans la nouvelle table de
// Note : Seules les couleurs utilisées on besoin d'êtres recalculées: les
// autres ne seront jamais consultées dans la nouvelle table de
// conversion puisque elles n'existent pas dans la brosse, donc elles
// ne seront pas utilisées par Remap_general_lowlevel.
// ne seront pas utilisées par Remap_general_lowlevel.
for (color=0;color<=255;color++)
if (Brush_colormap[color] != 0)
{
@ -959,16 +959,16 @@ void Remap_brush(void)
Brush_colormap[color]=Best_color_perceptual_except(r,g,b,Back_color);
}
// Il reste une couleur non calculée dans la table qu'il faut mettre à
// jour: c'est la couleur de fond. On l'avait inhibée pour éviter son
// calcul inutile, mais comme il est possible qu'elle soit quand même dans
// la brosse, on va mettre dans la table une relation d'équivalence entre
// les deux palettes: comme on ne veut pas que la couleur soit remplacée,
// on va dire qu'on veut qu'elle soit remplacée par la couleur en question.
// Il reste une couleur non calculée dans la table qu'il faut mettre à
// jour: c'est la couleur de fond. On l'avait inhibée pour éviter son
// calcul inutile, mais comme il est possible qu'elle soit quand même dans
// la brosse, on va mettre dans la table une relation d'équivalence entre
// les deux palettes: comme on ne veut pas que la couleur soit remplacée,
// on va dire qu'on veut qu'elle soit remplacée par la couleur en question.
Brush_colormap[Back_color]=Back_color;
// Maintenant qu'on a une super table de conversion qui n'a que le nom
// qui craint un peu, on peut faire l'échange dans la brosse de toutes les
// qui craint un peu, on peut faire l'échange dans la brosse de toutes les
// teintes.
Remap_general_lowlevel(Brush_colormap,Brush_original_pixels,Brush,Brush_width,Brush_height,Brush_width);
@ -996,7 +996,7 @@ void Outline_brush(void)
return;
}
// On remplit la bordure ajoutée par la Backcolor
// On remplit la bordure ajoutée par la Backcolor
memset(Brush,Back_color,((long)Brush_width)*Brush_height);
// On copie la brosse courante dans la nouvelle
@ -1005,7 +1005,7 @@ void Outline_brush(void)
Brush, // Destination
1, 1, Brush_width);
// Si on "outline" avec une couleur différente de la Back_color on y va!
// Si on "outline" avec une couleur différente de la Back_color on y va!
if (Fore_color!=Back_color)
{
// 1er balayage (horizontal)
@ -1028,12 +1028,12 @@ void Outline_brush(void)
state=1;
}
}
// Cas du dernier pixel à droite de la ligne
// Cas du dernier pixel à droite de la ligne
if (state != 0)
Pixel_in_brush(x_pos,y_pos,Fore_color);
}
// 2ème balayage (vertical)
// 2ème balayage (vertical)
for (x_pos=1; x_pos<Brush_width-1; x_pos++)
{
state=0;
@ -1069,7 +1069,7 @@ void Outline_brush(void)
Brush_offset_X=(Brush_width>>1);
Brush_offset_Y=(Brush_height>>1);
free(old_brush); // Libération de l'ancienne brosse
free(old_brush); // Libération de l'ancienne brosse
}
@ -1131,12 +1131,12 @@ void Nibble_brush(void)
}
}
}
// Cas du dernier pixel à droite de la ligne
// Cas du dernier pixel à droite de la ligne
if (old_brush[((y_pos+1)*old_width)+x_pos+1]==Back_color)
Pixel_in_brush(x_pos-1,y_pos,Back_color);
}
// 2ème balayage (vertical)
// 2ème balayage (vertical)
for (x_pos=0; x_pos<Brush_width; x_pos++)
{
state=(old_brush[old_width+x_pos+1]!=Back_color);;
@ -1209,7 +1209,7 @@ void Capture_brush_with_lasso(int vertices, short * points,short clear)
end_y=y_pos;
}
// On clippe ces bornes à l'écran:
// On clippe ces bornes à l'écran:
if (start_x<Limit_left)
start_x=Limit_left;
if (end_x>Limit_right)
@ -1224,10 +1224,10 @@ void Capture_brush_with_lasso(int vertices, short * points,short clear)
if ((start_x<Main.image_width) && (start_y<Main.image_height))
{
// On met les décalages du tiling à 0 pour eviter toute incohérence.
// Si par hasard on voulait les mettre à
// On met les décalages du tiling à 0 pour eviter toute incohérence.
// Si par hasard on voulait les mettre à
// min(Tiling_Decalage_?,Brosse_?a??eur-1)
// il faudrait penser à les initialiser à 0 dans "MAIN.C".
// il faudrait penser à les initialiser à 0 dans "MAIN.C".
Tiling_offset_X=0;
Tiling_offset_Y=0;
@ -1260,7 +1260,7 @@ void Capture_brush_with_lasso(int vertices, short * points,short clear)
points[0],points[1],
xor_lut[Back_color]);
// On scanne la brosse pour remplacer tous les pixels affectés par le
// On scanne la brosse pour remplacer tous les pixels affectés par le
// polyfill par ceux de l'image:
for (y_pos=start_y;y_pos<=end_y;y_pos++)
for (x_pos=start_x;x_pos<=end_x;x_pos++)
@ -1367,7 +1367,7 @@ void Stretch_brush_preview(short x1, short y1, short x2, short y2)
dest_width=final_dest_x_pos-initial_dest_x_pos+1;
dest_height=final_dest_y_pos-initial_dest_y_pos+1;
// Calcul des vecteurs d'incrémentation :
// Calcul des vecteurs d'incrémentation :
delta_x=(Brush_width<<16)/dest_width;
delta_y=(Brush_height<<16)/dest_height;
@ -1691,7 +1691,7 @@ void Interpolate_texture(int start_x,int start_y,int xt1,int yt1,
{
xt=(((float)((x_pos-start_x)*delta_xt))/(float)delta_x2) + (float)xt1;
yt=(((float)((x_pos-start_x)*delta_yt))/(float)delta_x2) + (float)yt1;
if (isnan(ScanY_X[0][y_pos])) // Gauche non défini
if (isnan(ScanY_X[0][y_pos])) // Gauche non défini
{
ScanY_X[0][y_pos]=(float)x_pos;
ScanY_Xt[0][y_pos]=xt;
@ -1701,7 +1701,7 @@ void Interpolate_texture(int start_x,int start_y,int xt1,int yt1,
{
if ((float)x_pos>=ScanY_X[0][y_pos])
{
if (isnan(ScanY_X[1][y_pos]) // Droit non défini
if (isnan(ScanY_X[1][y_pos]) // Droit non défini
|| (x_pos>ScanY_X[1][y_pos]))
{
ScanY_X[1][y_pos]=(float)x_pos;
@ -1711,7 +1711,7 @@ void Interpolate_texture(int start_x,int start_y,int xt1,int yt1,
}
else
{
if (isnan(ScanY_X[1][y_pos])) // Droit non défini
if (isnan(ScanY_X[1][y_pos])) // Droit non défini
{
ScanY_X[1][y_pos]=ScanY_X[0][y_pos];
ScanY_Xt[1][y_pos]=ScanY_Xt[0][y_pos];
@ -1748,7 +1748,7 @@ void Interpolate_texture(int start_x,int start_y,int xt1,int yt1,
{
xt=(((float)((y_pos-start_y)*delta_xt))/(float)delta_y2) + (float)xt1;
yt=(((float)((y_pos-start_y)*delta_yt))/(float)delta_y2) + (float)yt1;
if (isnan(ScanY_X[0][y_pos])) // Gauche non défini
if (isnan(ScanY_X[0][y_pos])) // Gauche non défini
{
ScanY_X[0][y_pos]=(float)x_pos;
ScanY_Xt[0][y_pos]=xt;
@ -1758,7 +1758,7 @@ void Interpolate_texture(int start_x,int start_y,int xt1,int yt1,
{
if ((float)x_pos>=ScanY_X[0][y_pos])
{
if (isnan(ScanY_X[1][y_pos]) // Droit non défini
if (isnan(ScanY_X[1][y_pos]) // Droit non défini
|| (x_pos>ScanY_X[1][y_pos]))
{
ScanY_X[1][y_pos]=(float)x_pos;
@ -1768,7 +1768,7 @@ void Interpolate_texture(int start_x,int start_y,int xt1,int yt1,
}
else
{
if (isnan(ScanY_X[1][y_pos])) // Droit non défini
if (isnan(ScanY_X[1][y_pos])) // Droit non défini
{
ScanY_X[1][y_pos]=ScanY_X[0][y_pos];
ScanY_Xt[1][y_pos]=ScanY_Xt[0][y_pos];
@ -1817,7 +1817,7 @@ void Compute_quad_texture( byte *texture, int texture_width,
ScanY_X[0] =(float *)malloc(height*sizeof(float));
ScanY_X[1] =(float *)malloc(height*sizeof(float));
// Fill_general avec des valeurs égales à NAN.
// Fill_general avec des valeurs égales à NAN.
for (y=0; y<height; y++)
{
ScanY_X[0][y]=NAN ;
@ -1947,7 +1947,7 @@ void Rotate_brush(float angle)
float cos_a=cos(angle);
float sin_a=sin(angle);
// Calcul des coordonnées des 4 coins:
// Calcul des coordonnées des 4 coins:
// 1 2
// 3 4
@ -1978,7 +1978,7 @@ void Rotate_brush(float angle)
Error(0);
return;
}
// Et maintenant on calcule la nouvelle brosse tournée.
// Et maintenant on calcule la nouvelle brosse tournée.
Compute_quad_texture( Brush_rotate_buffer, Brush_rotate_width,
x1,y1, offset, offset,
x2,y2,Brush_rotate_width-offset-1, offset,
@ -2026,7 +2026,7 @@ void Draw_quad_texture_preview(byte *texture, int texture_width,
ScanY_X[0] =(float *)malloc(height*sizeof(float));
ScanY_X[1] =(float *)malloc(height*sizeof(float));
// Fill_general avec des valeurs égales à NAN.
// Fill_general avec des valeurs égales à NAN.
for (y=0; y<height; y++)
{
ScanY_X[0][y]=NAN;
@ -2086,7 +2086,7 @@ void Rotate_brush_preview(float angle)
float sin_a=sin(angle);
int offset=0;
// Calcul des coordonnées des 4 coins:
// Calcul des coordonnées des 4 coins:
// 1 2
// 3 4
@ -2110,7 +2110,7 @@ void Rotate_brush_preview(float angle)
x4+=Brush_rotation_center_X;
y4+=Brush_rotation_center_Y;
// Et maintenant on dessine la brosse tournée.
// Et maintenant on dessine la brosse tournée.
Draw_quad_texture_preview(Brush_rotate_buffer, Brush_rotate_width,
x1, y1, offset, offset,
x2, y2, Brush_rotate_width-offset-1, offset,

View File

@ -47,20 +47,20 @@ void Return_to_draw_mode(void)
{
// Comme l'enclenchement du bouton efface le curseur, il faut l'afficher au
// préalable:
// préalable:
Display_cursor();
if (Mouse_K)
Wait_end_of_click();
// !!! Efface la croix puis affiche le viseur !!!
Select_button(BUTTON_DRAW,LEFT_SIDE); // Désenclenche au passage le bouton brosse
Select_button(BUTTON_DRAW,LEFT_SIDE); // Désenclenche au passage le bouton brosse
if (Config.Auto_discontinuous)
{
// On se place en mode Dessin discontinu à la main
// On se place en mode Dessin discontinu à la main
while (Current_operation!=OPERATION_DISCONTINUOUS_DRAW)
Select_button(BUTTON_DRAW,RIGHT_SIDE);
}
// Maintenant, il faut réeffacer le curseur parce qu'il sera raffiché en fin
// d'appel à cette action:
// Maintenant, il faut réeffacer le curseur parce qu'il sera raffiché en fin
// d'appel à cette action:
Hide_cursor();
// On passe en brosse couleur:
@ -76,40 +76,40 @@ void Return_to_draw_mode(void)
void Magnifier_12_0(void)
// Opération : 4 (item d'une Loupe)
// Opération : 4 (item d'une Loupe)
// Click Souris: 1 ou 2
// Taille_Pile : 0
//
// Souris effacée: Oui
// Souris effacée: Oui
{
// On passe en mode loupe
Main.magnifier_mode=1;
// La fonction d'affichage dans la partie image est désormais un affichage
// spécial loupe.
// La fonction d'affichage dans la partie image est désormais un affichage
// spécial loupe.
Pixel_preview=Pixel_preview_magnifier;
// On calcule l'origine de la loupe
Main.magnifier_offset_X=Mouse_X-(Main.magnifier_width>>1);
Main.magnifier_offset_Y=Mouse_Y-(Main.magnifier_height>>1);
// Calcul des coordonnées absolues de ce coin DANS L'IMAGE
// Calcul des coordonnées absolues de ce coin DANS L'IMAGE
Main.magnifier_offset_X+=Main.offset_X;
Main.magnifier_offset_Y+=Main.offset_Y;
Clip_magnifier_offsets(&Main.magnifier_offset_X, &Main.magnifier_offset_Y);
// On calcule les bornes visibles dans l'écran
// On calcule les bornes visibles dans l'écran
Position_screen_according_to_zoom();
Compute_limits();
Display_all_screen();
// Repositionner le curseur en fonction des coordonnées visibles
// Repositionner le curseur en fonction des coordonnées visibles
Compute_paintbrush_coordinates();
// On fait de notre mieux pour restaurer l'ancienne opération:
// On fait de notre mieux pour restaurer l'ancienne opération:
Start_operation_stack(Operation_before_interrupt);
Display_cursor();
Wait_end_of_click();
@ -121,11 +121,11 @@ void Magnifier_12_0(void)
void Colorpicker_12_0(void)
//
// Opération : OPERATION_COLORPICK
// Opération : OPERATION_COLORPICK
// Click Souris: 1 ou 2
// Taille_Pile : 0
//
// Souris effacée: Oui
// Souris effacée: Oui
//
{
Init_start_operation();
@ -144,11 +144,11 @@ void Colorpicker_12_0(void)
void Colorpicker_1_1(void)
//
// Opération : OPERATION_COLORPICK
// Opération : OPERATION_COLORPICK
// Click Souris: 1
// Taille_Pile : 1
//
// Souris effacée: Non
// Souris effacée: Non
//
{
char str[4];
@ -186,11 +186,11 @@ void Colorpicker_1_1(void)
void Colorpicker_2_1(void)
//
// Opération : OPERATION_COLORPICK
// Opération : OPERATION_COLORPICK
// Click Souris: 2
// Taille_Pile : 1
//
// Souris effacée: Non
// Souris effacée: Non
//
{
char str[4];
@ -229,11 +229,11 @@ void Colorpicker_2_1(void)
void Colorpicker_0_1(void)
//
// Opération : OPERATION_COLORPICK
// Opération : OPERATION_COLORPICK
// Click Souris: 0
// Taille_Pile : 1
//
// Souris effacée: Oui
// Souris effacée: Oui
//
{
short click;
@ -287,11 +287,11 @@ byte Rightclick_colorpick(byte cursor_visible)
void Rightclick_colorpick_2_1(void)
//
// Opération : OPERATION_RMB_COLORPICK
// Opération : OPERATION_RMB_COLORPICK
// Click Souris: 2
// Taille_Pile : 1
//
// Souris effacée: Non
// Souris effacée: Non
//
{
char str[4];
@ -323,11 +323,11 @@ void Rightclick_colorpick_2_1(void)
void Rightclick_colorpick_0_1(void)
//
// Opération : OPERATION_RMB_COLORPICK
// Opération : OPERATION_RMB_COLORPICK
// Click Souris: 0
// Taille_Pile : 1
//
// Souris effacée: Non
// Souris effacée: Non
//
{
short dummy;
@ -356,31 +356,31 @@ void Rightclick_colorpick_0_1(void)
void Brush_12_0(void)
//
// Opération : OPERATION_GRAB_BRUSH
// Opération : OPERATION_GRAB_BRUSH
// Click Souris: 1 ou 2
// Taille_Pile : 0
//
// Souris effacée: Oui
// Souris effacée: Oui
//
{
Init_start_operation();
if (Mouse_K==RIGHT_SIDE) // Besoin d'effacer la brosse après ?
if (Mouse_K==RIGHT_SIDE) // Besoin d'effacer la brosse après ?
{
Operation_push(1);
// Puisque la zone où on prend la brosse sera effacée, on fait un backup
// Puisque la zone où on prend la brosse sera effacée, on fait un backup
Backup();
}
else
Operation_push(0);
// On laisse une trace du curseur pour que l'utilisateur puisse visualiser
// où demarre sa brosse:
// où demarre sa brosse:
Display_cursor();
Operation_push(Paintbrush_X); // Début X
Operation_push(Paintbrush_Y); // Début Y
Operation_push(Paintbrush_X); // Dernière position X
Operation_push(Paintbrush_Y); // Dernière position Y
Operation_push(Paintbrush_X); // Début X
Operation_push(Paintbrush_Y); // Début Y
Operation_push(Paintbrush_X); // Dernière position X
Operation_push(Paintbrush_Y); // Dernière position Y
if ((Config.Coords_rel) && (Menu_is_visible))
Print_in_menu("\035: 1 \022: 1",0);
@ -389,11 +389,11 @@ void Brush_12_0(void)
void Brush_12_5(void)
//
// Opération : OPERATION_GRAB_BRUSH
// Opération : OPERATION_GRAB_BRUSH
// Click Souris: 1 ou 2
// Taille_Pile : 5
//
// Souris effacée: Non
// Souris effacée: Non
//
{
char str[5];
@ -435,11 +435,11 @@ void Brush_12_5(void)
void Brush_0_5(void)
//
// Opération : OPERATION_GRAB_BRUSH
// Opération : OPERATION_GRAB_BRUSH
// Click Souris: 0
// Taille_Pile : 5
//
// Souris effacée: Oui
// Souris effacée: Oui
//
{
short start_x;
@ -448,7 +448,7 @@ void Brush_0_5(void)
short old_paintbrush_y;
short clear;
// Comme on a demandé l'effacement du curseur, il n'y a plus de croix en
// Comme on a demandé l'effacement du curseur, il n'y a plus de croix en
// (Paintbrush_X,Paintbrush_Y). C'est une bonne chose.
Operation_stack_size-=2;
@ -461,7 +461,7 @@ void Brush_0_5(void)
old_paintbrush_y=Paintbrush_Y;
Paintbrush_X=start_x;
Paintbrush_Y=start_y;
Hide_cursor(); // Maintenant, il n'y a plus de croix à l'écran.
Hide_cursor(); // Maintenant, il n'y a plus de croix à l'écran.
Paintbrush_X=old_paintbrush_x;
Paintbrush_Y=old_paintbrush_y;
@ -500,11 +500,11 @@ void Brush_0_5(void)
void Polybrush_12_8(void)
// Opération : OPERATION_POLYBRUSH
// Opération : OPERATION_POLYBRUSH
// Click Souris: 1 ou 2
// Taille_Pile : 8
//
// Souris effacée: Non
// Souris effacée: Non
{
short click;
short end_y;
@ -528,13 +528,13 @@ void Polybrush_12_8(void)
if (((start_x!=Paintbrush_X) || (start_y!=Paintbrush_Y)) &&
(Polyfill_number_of_points<Config.Nb_max_vertices_per_polygon))
{
// Il existe un nouveau segment défini par
// Il existe un nouveau segment défini par
// (start_x,start_y)-(Paintbrush_X,Paintbrush_Y)
Hide_cursor();
Print_coordinates();
// On le place à l'écran
// On le place à l'écran
Draw_line_preview_xor(start_x,start_y,end_x,end_y,0);
Draw_line_preview_xor(start_x,start_y,Paintbrush_X,Paintbrush_Y,0);
@ -563,13 +563,13 @@ void Polybrush_12_8(void)
Hide_cursor();
Print_coordinates();
// On le place à l'écran
// On le place à l'écran
Draw_line_preview_xor(start_x,start_y,end_x,end_y,0);
Draw_line_preview_xor(start_x,start_y,Paintbrush_X,Paintbrush_Y,0);
Display_cursor();
}
// On remet les mêmes valeurs (comme si on n'avait pas cliqué):
// On remet les mêmes valeurs (comme si on n'avait pas cliqué):
Operation_push(start_x);
Operation_push(start_y);
Operation_push(Paintbrush_X);
@ -588,7 +588,7 @@ void Polybrush_12_8(void)
}
else
{
// L'utilisateur souhaite arrêter l'opération et refermer le polygone
// L'utilisateur souhaite arrêter l'opération et refermer le polygone
Operation_pop(&color);
Operation_pop(&initial_y);
@ -607,8 +607,8 @@ void Polybrush_12_8(void)
if (click==RIGHT_SIDE)
End_of_modification();
// On raffiche l'écran pour effacer les traits en xor et pour raffraichir
// l'écran si on a découpé une partie de l'image en prenant la brosse.
// On raffiche l'écran pour effacer les traits en xor et pour raffraichir
// l'écran si on a découpé une partie de l'image en prenant la brosse.
Display_all_screen();
Paintbrush_hidden=0;
@ -630,27 +630,27 @@ void Polybrush_12_8(void)
void Stretch_brush_12_0(void)
//
// Opération : OPERATION_STRETCH_BRUSH
// Opération : OPERATION_STRETCH_BRUSH
// Click Souris: 1 ou 2
// Taille_Pile : 0
//
// Souris effacée: Oui
// Souris effacée: Oui
//
{
Init_start_operation();
if (Mouse_K==LEFT_SIDE)
{
// On laisse une trace du curseur pour que l'utilisateur puisse visualiser
// où demarre sa brosse:
// où demarre sa brosse:
Display_cursor();
Operation_push(Paintbrush_X); // Dernier calcul X
Operation_push(Paintbrush_Y); // Dernier calcul Y
Operation_push(Paintbrush_X); // Début X
Operation_push(Paintbrush_Y); // Début Y
Operation_push(Paintbrush_X); // Dernière position X
Operation_push(Paintbrush_Y); // Dernière position Y
Operation_push(1); // State précédent
Operation_push(Paintbrush_X); // Début X
Operation_push(Paintbrush_Y); // Début Y
Operation_push(Paintbrush_X); // Dernière position X
Operation_push(Paintbrush_Y); // Dernière position Y
Operation_push(1); // State précédent
if ((Config.Coords_rel) && (Menu_is_visible))
Print_in_menu("\035: 1 \022: 1",0);
@ -666,11 +666,11 @@ void Stretch_brush_12_0(void)
void Stretch_brush_1_7(void)
//
// Opération : OPERATION_STRETCH_BRUSH
// Opération : OPERATION_STRETCH_BRUSH
// Click Souris: 1
// Taille_Pile : 7
//
// Souris effacée: Non
// Souris effacée: Non
//
{
char str[5];
@ -756,11 +756,11 @@ void Stretch_brush_1_7(void)
void Stretch_brush_0_7(void)
//
// Opération : OPERATION_STRETCH_BRUSH
// Opération : OPERATION_STRETCH_BRUSH
// Click Souris: 0
// Taille_Pile : 7
//
// Souris effacée: Non
// Souris effacée: Non
//
{
char str[5];
@ -799,7 +799,7 @@ void Stretch_brush_0_7(void)
}
// Utilise Key_ANSI au lieu de Key, car Get_input() met ce dernier
// à zero si une operation est en cours (Operation_stack_size!=0)
// à zero si une operation est en cours (Operation_stack_size!=0)
if (Key_ANSI)
{
size_change=1;
@ -817,15 +817,15 @@ void Stretch_brush_0_7(void)
width=start_x+Brush_width-1;
height=start_y+(Brush_height<<1)-1;
break;
case 'h': // Moitié
case 'h': // Moitié
width=(Brush_width>1)?start_x+(Brush_width>>1)-1:1;
height=(Brush_height>1)?start_y+(Brush_height>>1)-1:1;
break;
case 'X': // Moitié X
case 'X': // Moitié X
width=(Brush_width>1)?start_x+(Brush_width>>1)-1:1;
height=start_y+Brush_height-1;
break;
case 'Y': // Moitié Y
case 'Y': // Moitié Y
width=start_x+Brush_width-1;
height=(Brush_height>1)?start_y+(Brush_height>>1)-1:1;
break;
@ -872,11 +872,11 @@ void Stretch_brush_0_7(void)
void Stretch_brush_2_7(void)
//
// Opération : OPERATION_STRETCH_BRUSH
// Opération : OPERATION_STRETCH_BRUSH
// Click Souris: 2
// Taille_Pile : 7
//
// Souris effacée: Oui
// Souris effacée: Oui
//
{
short computed_x;
@ -894,7 +894,7 @@ void Stretch_brush_2_7(void)
// On efface la preview de la brosse (et la croix)
Display_all_screen();
// Et enfin on stocke pour de bon la nouvelle brosse étirée
// Et enfin on stocke pour de bon la nouvelle brosse étirée
Stretch_brush(start_x,start_y,computed_x,computed_y);
Return_to_draw_mode();
@ -906,11 +906,11 @@ void Stretch_brush_2_7(void)
void Rotate_brush_12_0(void)
//
// Opération : OPERATION_ROTATE_BRUSH
// Opération : OPERATION_ROTATE_BRUSH
// Click Souris: 1 ou 2
// Taille_Pile : 0
//
// Souris effacée: Oui
// Souris effacée: Oui
//
{
Init_start_operation();
@ -919,11 +919,11 @@ void Rotate_brush_12_0(void)
Brush_rotation_center_X=Paintbrush_X+(Brush_width>>1)-Brush_width;
Brush_rotation_center_Y=Paintbrush_Y;
Brush_rotation_center_is_defined=1;
Operation_push(Paintbrush_X); // Dernière position calculée X
Operation_push(Paintbrush_Y); // Dernière position calculée Y
Operation_push(Paintbrush_X); // Dernière position X
Operation_push(Paintbrush_Y); // Dernière position Y
Operation_push(1); // State précédent
Operation_push(Paintbrush_X); // Dernière position calculée X
Operation_push(Paintbrush_Y); // Dernière position calculée Y
Operation_push(Paintbrush_X); // Dernière position X
Operation_push(Paintbrush_Y); // Dernière position Y
Operation_push(1); // State précédent
if ((Config.Coords_rel) && (Menu_is_visible))
Print_in_menu("Angle: 0\xb0 ",0);
@ -931,7 +931,7 @@ void Rotate_brush_12_0(void)
else
{
Start_operation_stack(Operation_before_interrupt);
Wait_end_of_click(); // FIXME: celui-la il donne un résultat pas très chouette en visuel
Wait_end_of_click(); // FIXME: celui-la il donne un résultat pas très chouette en visuel
}
}
@ -939,11 +939,11 @@ void Rotate_brush_12_0(void)
void Rotate_brush_1_5(void)
//
// Opération : OPERATION_ROTATE_BRUSH
// Opération : OPERATION_ROTATE_BRUSH
// Click Souris: 1
// Taille_Pile : 5
//
// Souris effacée: Non
// Souris effacée: Non
//
{
char str[4];
@ -958,7 +958,7 @@ void Rotate_brush_1_5(void)
Operation_pop(&old_y);
Operation_pop(&old_x);
// On corrige les coordonnées de la ligne si la touche shift est appuyée...
// On corrige les coordonnées de la ligne si la touche shift est appuyée...
cursor_x = Paintbrush_X;
cursor_y = Paintbrush_Y;
if(SDL_GetModState() & KMOD_SHIFT)
@ -1006,11 +1006,11 @@ void Rotate_brush_1_5(void)
void Rotate_brush_0_5(void)
//
// Opération : OPERATION_ROTATE_BRUSH
// Opération : OPERATION_ROTATE_BRUSH
// Click Souris: 0
// Taille_Pile : 5
//
// Souris effacée: Non
// Souris effacée: Non
//
{
char str[4];
@ -1029,7 +1029,7 @@ void Rotate_brush_0_5(void)
Operation_pop(&old_y);
Operation_pop(&old_x);
// On corrige les coordonnées de la ligne si la touche shift est appuyée...
// On corrige les coordonnées de la ligne si la touche shift est appuyée...
cursor_x = Paintbrush_X;
cursor_y = Paintbrush_Y;
if(SDL_GetModState() & KMOD_SHIFT)
@ -1062,7 +1062,7 @@ void Rotate_brush_0_5(void)
}
// Utilise Key_ANSI au lieu de Key, car Get_input() met ce dernier
// à zero si une operation est en cours (Operation_stack_size!=0)
// à zero si une operation est en cours (Operation_stack_size!=0)
if (Key_ANSI)
{
angle_change=1;
@ -1106,11 +1106,11 @@ void Rotate_brush_0_5(void)
void Rotate_brush_2_5(void)
//
// Opération : OPERATION_ROTATE_BRUSH
// Opération : OPERATION_ROTATE_BRUSH
// Click Souris: 2
// Taille_Pile : 5
//
// Souris effacée: Oui
// Souris effacée: Oui
//
{
short computed_x;
@ -1126,7 +1126,7 @@ void Rotate_brush_2_5(void)
Operation_pop(&computed_y);
Operation_pop(&computed_x);
// Calcul de l'angle par rapport à la dernière position calculée
// Calcul de l'angle par rapport à la dernière position calculée
if ( (Brush_rotation_center_X==computed_x)
&& (Brush_rotation_center_Y==computed_y) )
angle=0.0;
@ -1138,7 +1138,7 @@ void Rotate_brush_2_5(void)
if (dy>0) angle=M_2PI-angle;
}
// Et enfin on stocke pour de bon la nouvelle brosse étirée
// Et enfin on stocke pour de bon la nouvelle brosse étirée
Rotate_brush(angle);
Return_to_draw_mode();
@ -1161,11 +1161,11 @@ void Draw_stretch_spot(short x_pos, short y_pos)
void Distort_brush_0_0(void)
//
// Opération : OPERATION_DISTORT_BRUSH
// Opération : OPERATION_DISTORT_BRUSH
// Click Souris: 0
// Taille_Pile : 0
//
// Souris effacée: Non
// Souris effacée: Non
//
{
if ( Menu_is_visible )
@ -1176,11 +1176,11 @@ void Distort_brush_0_0(void)
void Distort_brush_1_0(void)
//
// Opération : OPERATION_DISTORT_BRUSH
// Opération : OPERATION_DISTORT_BRUSH
// Click Souris: 1
// Taille_Pile : 0
//
// Souris effacée: Non
// Souris effacée: Non
//
{
short x_pos, y_pos;
@ -1235,11 +1235,11 @@ void Distort_brush_1_0(void)
void Distort_brush_1_8(void)
//
// Opération : OPERATION_DISTORT_BRUSH
// Opération : OPERATION_DISTORT_BRUSH
// Click Souris: 1
// Taille_Pile : 8
//
// Souris effacée: No
// Souris effacée: No
//
{
// How far (in pixels) you can catch a handle
@ -1282,11 +1282,11 @@ void Distort_brush_1_8(void)
void Distort_brush_1_9(void)
//
// Opération : OPERATION_DISTORT_BRUSH
// Opération : OPERATION_DISTORT_BRUSH
// Click Souris: 1
// Taille_Pile : 9
//
// Souris effacée: No
// Souris effacée: No
//
{
short i;
@ -1339,11 +1339,11 @@ void Distort_brush_1_9(void)
}
void Distort_brush_0_9(void)
//
// Opération : OPERATION_DISTORT_BRUSH
// Opération : OPERATION_DISTORT_BRUSH
// Click Souris: 0
// Taille_Pile : 9
//
// Souris effacée: No
// Souris effacée: No
//
{
short selected_corner;
@ -1353,11 +1353,11 @@ void Distort_brush_0_9(void)
void Distort_brush_2_0(void)
//
// Opération : OPERATION_DISTORT_BRUSH
// Opération : OPERATION_DISTORT_BRUSH
// Click Souris: 2
// Taille_Pile : 0
//
// Souris effacée: Oui
// Souris effacée: Oui
//
{
Paintbrush_hidden=0;
@ -1372,11 +1372,11 @@ void Distort_brush_2_0(void)
void Distort_brush_2_8(void)
//
// Opération : OPERATION_DISTORT_BRUSH
// Opération : OPERATION_DISTORT_BRUSH
// Click Souris: 2
// Taille_Pile : 8
//
// Souris effacée: Oui
// Souris effacée: Oui
//
{
short i;

View File

@ -2,7 +2,7 @@
*/
/* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2011 Pawel Góralski
Copyright 2011 Pawel Góralski
Copyright 2008 Yves Rizoud
Copyright 2007-2017 Adrien Destugues (PulkoMandy)
Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud)
@ -234,7 +234,7 @@ void Change_paintbrush_shape(byte shape)
Paintbrush_shape=PAINTBRUSH_SHAPE_NONE;
break;
// Note: Il existe un Paintbrush_shape_before_lasso, mais comme le lasso aura
// été automatiquement désactivé avant d'arriver ici, y'a pas de problème.
// été automatiquement désactivé avant d'arriver ici, y'a pas de problème.
}
}
@ -440,8 +440,8 @@ void Button_Hide_menu(int btn)
Compute_magnifier_data();
}
// On repositionne le décalage de l'image pour qu'il n'y ait pas d'in-
// -cohérences lorsqu'on sortira du mode Loupe.
// On repositionne le décalage de l'image pour qu'il n'y ait pas d'in-
// -cohérences lorsqu'on sortira du mode Loupe.
if (Main.offset_Y+Screen_height>Main.image_height)
{
if (Screen_height>Main.image_height)
@ -611,7 +611,7 @@ byte Button_Quit_local_function(void)
if (!Main.image_is_modified)
return 1;
// On commence par afficher la fenêtre de QUIT
// On commence par afficher la fenêtre de QUIT
Open_window(160,84,"Quit ?");
Window_set_normal_button(20,20,120,14,"Stay",0,1,KEY_ESC); // 1
Window_set_normal_button(20,40,120,14,"Save & quit",1,1,SDLK_s); // 2
@ -656,14 +656,14 @@ byte Button_Quit_local_function(void)
Display_cursor();
if (!File_error)
// L'ayant sauvée avec succès,
// L'ayant sauvée avec succès,
return 1; // On peut quitter
else
// Il y a eu une erreur lors de la sauvegarde,
return 0; // On ne peut donc pas quitter
}
else
// L'utilisateur ne veut pas écraser l'ancien fichier,
// L'utilisateur ne veut pas écraser l'ancien fichier,
return 0; // On doit donc rester
case 3 : return 1; // Quitter
}
@ -680,7 +680,7 @@ void Button_Quit(int btn)
if (Spare.image_is_modified)
{
Button_Page(BUTTON_PAGE); // On passe sur le brouillon
// Si l'utilisateur présente les derniers symptomes de l'abandon
// Si l'utilisateur présente les derniers symptomes de l'abandon
if (Button_Quit_local_function())
Quitting=1;
}
@ -698,7 +698,7 @@ void Button_Quit(int btn)
}
//---------------------------- Effacer l'écran -------------------------------
//---------------------------- Effacer l'écran -------------------------------
void Button_Clear(int btn)
{
Hide_cursor();
@ -730,7 +730,7 @@ void Button_Clear_with_backcolor(int btn)
}
//------------------------------- Paramètres ---------------------------------
//------------------------------- Paramètres ---------------------------------
#define SETTING_PER_PAGE 11
#define SETTING_PAGES 5
@ -1197,11 +1197,11 @@ void Button_Settings(int btn)
Close_window();
Unselect_button(btn);
// Raffichage du menu pour que les inscriptions qui y figurent soient
// retracées avec la nouvelle fonte
// retracées avec la nouvelle fonte
Display_menu();
Display_cursor();
// On vérifie qu'on peut bien allouer le nombre de pages Undo.
// On vérifie qu'on peut bien allouer le nombre de pages Undo.
Set_number_of_backups(Config.Max_undo_pages);
}
@ -1526,7 +1526,7 @@ void Button_Skins(int btn)
Close_window();
Unselect_button(btn);
// Raffichage du menu pour que les inscriptions qui y figurent soient retracées avec la nouvelle fonte
// Raffichage du menu pour que les inscriptions qui y figurent soient retracées avec la nouvelle fonte
Display_menu();
// Redraw all buttons, to ensure all specific sprites are in place.
// This is necessary for multi-state buttons, for example Freehand.
@ -1578,7 +1578,7 @@ void Button_Page(int btn)
End_of_modification();
// --
// A la fin, on affiche l'écran
// A la fin, on affiche l'écran
for (factor_index=0; ZOOM_FACTOR[factor_index]!=Main.magnifier_factor; factor_index++);
//Change.magnifier_factor(factor_index,0);
Compute_magnifier_data();
@ -1633,7 +1633,7 @@ void Copy_image_only(void)
// Copie des dimensions de l'image
/*
C'est inutile, le "Backuper et redimensionner brouillon" a déjà modifié
C'est inutile, le "Backuper et redimensionner brouillon" a déjà modifié
ces valeurs pour qu'elles soient correctes.
*/
/*
@ -2056,7 +2056,7 @@ void Button_Resolution(int btn)
// Si l'utilisateur s'est servi du bouton droit de la souris:
if (Mouse_K==2)
{
// On affecte également les dimensions de l'image:
// On affecte également les dimensions de l'image:
chosen_width=Video_mode[selected_mode].Width/Pixel_width;
Num2str(chosen_width,str,4);
Window_input_content(input_width_button,str);
@ -2080,10 +2080,10 @@ void Button_Resolution(int btn)
chosen_pixel=Window_attribute2;
break;
default: // Boutons de tag des états des modes
default: // Boutons de tag des états des modes
temp=list_start+clicked_button-8;
if (Video_mode[temp].Fullscreen==1 && // On n'a pas le droit de cocher le mode fenêtré
!(Video_mode[temp].State & 128)) // Ni ceux non détectés par SDL
if (Video_mode[temp].Fullscreen==1 && // On n'a pas le droit de cocher le mode fenêtré
!(Video_mode[temp].State & 128)) // Ni ceux non détectés par SDL
{
if (Window_attribute1==LEFT_SIDE)
Video_mode[temp].State=((Video_mode[temp].State&0x7F)+1)&3;
@ -2097,7 +2097,7 @@ void Button_Resolution(int btn)
}
}
// Gestion des touches de déplacement dans la liste
// Gestion des touches de déplacement dans la liste
switch (Key)
{
case SDLK_UP : // Haut
@ -2197,7 +2197,7 @@ void Button_Resolution(int btn)
Video_mode[selected_mode].Fullscreen,
chosen_pixel))
{
Error(0); // On signale à l'utilisateur que c'est un mode invalide
Error(0); // On signale à l'utilisateur que c'est un mode invalide
Pixel_ratio=PIXEL_SIMPLE;
Init_mode_video(
Video_mode[Current_resolution].Width,
@ -2245,12 +2245,12 @@ void Button_Safety_resolution(int btn)
Display_all_screen();
Unselect_button(btn);
// Le pinceau est affiché à la position du clic et pas
// Le pinceau est affiché à la position du clic et pas
Display_cursor();
}
//------------------ Gestion des boutons de dessin à la main -----------------
//------------------ Gestion des boutons de dessin à la main -----------------
void Button_Draw(int btn)
{
@ -2420,21 +2420,21 @@ void Button_Circle_switch_mode(int btn)
Window_dropdown_clear_items(&dropdown);
}
// -- Gestion du menu des dégradés ------------------------------------------
// -- Gestion du menu des dégradés ------------------------------------------
void Draw_button_gradient_style(short x_pos,short y_pos,int technique)
{
short line;
// On commence par afficher les 2 côtés qui constituent le dégradé de base:
// Côté gauche (noir)
// On commence par afficher les 2 côtés qui constituent le dégradé de base:
// Côté gauche (noir)
Window_rectangle(x_pos+2, y_pos+2, 6, 10, MC_Black);
// Côté droit (blanc)
// Côté droit (blanc)
Window_rectangle(x_pos+8, y_pos+2, 5, 10, MC_White);
switch(technique)
{
case 1 : // Dégradé de trames simples
// Au centre, on place 10 lignes tramées simplement
case 1 : // Dégradé de trames simples
// Au centre, on place 10 lignes tramées simplement
for (line=2;line<2+10;line++)
if (line&1)
{
@ -2450,8 +2450,8 @@ void Draw_button_gradient_style(short x_pos,short y_pos,int technique)
Pixel_in_window(x_pos+ 9,y_pos+line,MC_Black);
}
break;
case 2 : // Dégradé de trames étendues
// Au centre, on place 10 lignes tramées de façon compliquée
case 2 : // Dégradé de trames étendues
// Au centre, on place 10 lignes tramées de façon compliquée
for (line=2;line<2+10;line++)
if (line&1)
{
@ -2487,20 +2487,20 @@ void Load_gradient_data(int index)
switch(Main.backups->Pages->Gradients->Range[index].Technique)
{
case 0 : // Degradé de base
case 0 : // Degradé de base
Gradient_function=Gradient_basic;
break;
case 1 : // Dégradé de trames simples
case 1 : // Dégradé de trames simples
Gradient_function=Gradient_dithered;
break;
case 2 : // Dégradé de trames étendues
case 2 : // Dégradé de trames étendues
Gradient_function=Gradient_extra_dithered;
}
}
void Draw_gradient_preview(short start_x,short start_y,short width,short height,int index)
{
short x_pos; // Variables de balayage du block en bas de l'écran.
short x_pos; // Variables de balayage du block en bas de l'écran.
short y_pos;
short end_x;
short end_y;
@ -2584,7 +2584,7 @@ void Button_Gradients(int btn)
Num2str(Current_gradient+1,str,2);
Print_in_window(215,100,str,MC_Black,MC_Light);
// On affiche le cadre autour de la préview
// On affiche le cadre autour de la préview
Window_display_frame_in(7,127,110,16);
// On affiche la preview
Draw_gradient_preview(8,128,108,14,Current_gradient);
@ -2616,7 +2616,7 @@ void Button_Gradients(int btn)
// On affiche le sens qui va avec
Print_in_window(12,23,(Main.backups->Pages->Gradients->Range[Current_gradient].Inverse)?"\033":"\032",MC_Black,MC_Light);
// On raffiche le mélange (jauge) qui va avec
// On raffiche le mélange (jauge) qui va avec
mix_scroller->Position=Main.backups->Pages->Gradients->Range[Current_gradient].Mix;
Window_draw_slider(mix_scroller);
@ -2660,11 +2660,11 @@ void Button_Gradients(int btn)
{
// On vient de clicker
// On met à jour l'intervalle du dégradé
// On met à jour l'intervalle du dégradé
first_color=last_color=Main.backups->Pages->Gradients->Range[Current_gradient].Start=Main.backups->Pages->Gradients->Range[Current_gradient].End=temp_color;
// On tagge le bloc
Tag_color_range(Main.backups->Pages->Gradients->Range[Current_gradient].Start,Main.backups->Pages->Gradients->Range[Current_gradient].End);
// Tracé de la preview:
// Tracé de la preview:
Draw_gradient_preview(8,128,108,14,Current_gradient);
}
else
@ -2672,7 +2672,7 @@ void Button_Gradients(int btn)
// On maintient le click, on va donc tester si le curseur bouge
if (temp_color!=last_color)
{
// On commence par ordonner la 1ère et dernière couleur du bloc
// On commence par ordonner la 1ère et dernière couleur du bloc
if (first_color<temp_color)
{
Main.backups->Pages->Gradients->Range[Current_gradient].Start=first_color;
@ -2687,7 +2687,7 @@ void Button_Gradients(int btn)
Main.backups->Pages->Gradients->Range[Current_gradient].Start=Main.backups->Pages->Gradients->Range[Current_gradient].End=first_color;
// On tagge le bloc
Tag_color_range(Main.backups->Pages->Gradients->Range[Current_gradient].Start,Main.backups->Pages->Gradients->Range[Current_gradient].End);
// Tracé de la preview:
// Tracé de la preview:
Draw_gradient_preview(8,128,108,14,Current_gradient);
last_color=temp_color;
}
@ -2695,14 +2695,14 @@ void Button_Gradients(int btn)
Display_cursor();
}
break;
case 2 : // Nouvel indice de dégradé
case 2 : // Nouvel indice de dégradé
// Nouvel indice dans Window_attribute2
Current_gradient=Window_attribute2;
changed_gradient_index=1;
break;
case 3 : // Nouveau mélange de dégradé
case 3 : // Nouveau mélange de dégradé
Hide_cursor();
// Nouvel mélange dans Window_attribute2
// Nouvel mélange dans Window_attribute2
Main.backups->Pages->Gradients->Range[Current_gradient].Mix=Window_attribute2;
// On affiche la nouvelle preview
Draw_gradient_preview(8,128,108,14,Current_gradient);
@ -2744,7 +2744,7 @@ void Button_Gradients(int btn)
if (!Mouse_K)
switch (Key)
{
case SDLK_BACKQUOTE : // Récupération d'une couleur derrière le menu
case SDLK_BACKQUOTE : // Récupération d'une couleur derrière le menu
case SDLK_COMMA :
Get_color_behind_window(&color,&click);
if (click)
@ -2752,11 +2752,11 @@ void Button_Gradients(int btn)
Hide_cursor();
temp_color=color;
// On met à jour l'intervalle du dégradé
// On met à jour l'intervalle du dégradé
first_color=last_color=Main.backups->Pages->Gradients->Range[Current_gradient].Start=Main.backups->Pages->Gradients->Range[Current_gradient].End=temp_color;
// On tagge le bloc
Tag_color_range(Main.backups->Pages->Gradients->Range[Current_gradient].Start,Main.backups->Pages->Gradients->Range[Current_gradient].End);
// Tracé de la preview:
// Tracé de la preview:
Draw_gradient_preview(8,128,108,14,Current_gradient);
Display_cursor();
Wait_end_of_click();
@ -2816,7 +2816,7 @@ void Button_Gradients(int btn)
}
// -- Gestion des boutons de cercle / ellipse / rectangle dégradés --------------------
// -- Gestion des boutons de cercle / ellipse / rectangle dégradés --------------------
void Button_Grad_rectangle(int btn)
{
@ -3073,7 +3073,7 @@ void Button_Brush_monochrome(int btn)
Display_cursor();
}
// -- Fonction renvoyant le mode vidéo le plus adapté à l'image chargée -----
// -- Fonction renvoyant le mode vidéo le plus adapté à l'image chargée -----
#define TOLERANCE_X 8
#define TOLERANCE_Y 4
int Best_video_mode(void)
@ -3083,11 +3083,11 @@ int Best_video_mode(void)
short temp_x,temp_y;
int mode;
// Si mode fenêtre, on reste dans ce mode.
// Si mode fenêtre, on reste dans ce mode.
if (Current_resolution == 0)
return 0;
// On commence par borner les dimensions, ou du moins les rendre cohérentes
// On commence par borner les dimensions, ou du moins les rendre cohérentes
if ((Original_screen_X<=0) || (Config.Set_resolution_according_to==2))
Original_screen_X=Main.image_width;
else
@ -3223,7 +3223,7 @@ void Load_picture(enum CONTEXT_TYPE type)
Select_button(BUTTON_DRAW,LEFT_SIDE);
if (Config.Auto_discontinuous)
{
// On se place en mode Dessin discontinu à la main
// On se place en mode Dessin discontinu à la main
while (Current_operation!=OPERATION_DISCONTINUOUS_DRAW)
Select_button(BUTTON_DRAW,RIGHT_SIDE);
}
@ -3312,7 +3312,7 @@ void Load_picture(enum CONTEXT_TYPE type)
void Button_Load(int btn)
{
(void)btn;
// On sauve l'état actuel des paramètres de l'image pour pouvoir les
// On sauve l'état actuel des paramètres de l'image pour pouvoir les
// restituer en cas d'erreur n'affectant pas l'image
Upload_infos_page(&Main);
@ -3327,7 +3327,7 @@ void Button_Reload(int btn)
int new_mode;
(void)btn;
// On sauve l'état actuel des paramètres de l'image pour pouvoir les
// On sauve l'état actuel des paramètres de l'image pour pouvoir les
// restituer en cas d'erreur n'affectant pas l'image
Upload_infos_page(&Main);
@ -3437,10 +3437,10 @@ static void Backup_existing_file(const char * filename)
File_error=0;
// On fait un backup si le nom du fichier n'est pas celui qu'on a choisi
// pour nommer les backups (c'est évident!).
// pour nommer les backups (c'est évident!).
if (strcmp(new_filename,filename))
{
// S'il y avait déjà un fichier Backup, on l'efface
// S'il y avait déjà un fichier Backup, on l'efface
if ((File_exists(new_filename))
&& (remove(new_filename)!=0))
File_error=1;
@ -3673,7 +3673,7 @@ void Button_Brush(int btn)
void Button_Unselect_brush(int btn)
{
(void)btn;
// On fait de notre mieux pour restaurer l'ancienne opération:
// On fait de notre mieux pour restaurer l'ancienne opération:
Start_operation_stack(Operation_before_interrupt);
}
@ -3712,7 +3712,7 @@ void Button_Lasso(int btn)
void Button_Unselect_lasso(int btn)
{
(void)btn;
// On fait de notre mieux pour restaurer l'ancienne opération:
// On fait de notre mieux pour restaurer l'ancienne opération:
Start_operation_stack(Operation_before_interrupt);
Paintbrush_shape=Paintbrush_shape_before_lasso;
}
@ -3751,7 +3751,7 @@ void Button_Unselect_colorpicker(int btn)
( (!Main.magnifier_mode) || (Mouse_X<Main.separator_position) || (Mouse_X>=Main.X_zoom) ) )
Print_in_menu("X: Y: ",0);
// On fait de notre mieux pour restaurer l'ancienne opération:
// On fait de notre mieux pour restaurer l'ancienne opération:
if (Current_operation==OPERATION_COLORPICK)
{
Start_operation_stack(Operation_before_interrupt);
@ -3799,32 +3799,32 @@ void Button_Magnify(int btn)
Start_operation_stack(OPERATION_MAGNIFY);
}
else
{ /* Ceci est de la duplication de code de presque toute l'opération de */
/* la loupe... Il serait peut-être plus propre de faire une procédure */
{ /* Ceci est de la duplication de code de presque toute l'opération de */
/* la loupe... Il serait peut-être plus propre de faire une procédure */
/* qui s'en charge... */
// On passe en mode loupe
Main.magnifier_mode=1;
// La fonction d'affichage dans la partie image est désormais un affichage
// spécial loupe.
// La fonction d'affichage dans la partie image est désormais un affichage
// spécial loupe.
Pixel_preview=Pixel_preview_magnifier;
// On calcule l'origine de la loupe
Main.magnifier_offset_X=Mouse_X-(Main.magnifier_width>>1);
Main.magnifier_offset_Y=Mouse_Y-(Main.magnifier_height>>1);
// Calcul des coordonnées absolues de ce coin DANS L'IMAGE
// Calcul des coordonnées absolues de ce coin DANS L'IMAGE
Main.magnifier_offset_X+=Main.offset_X;
Main.magnifier_offset_Y+=Main.offset_Y;
Clip_magnifier_offsets(&Main.magnifier_offset_X, &Main.magnifier_offset_Y);
// On calcule les bornes visibles dans l'écran
// On calcule les bornes visibles dans l'écran
Position_screen_according_to_zoom();
Compute_limits();
Display_all_screen();
// Repositionner le curseur en fonction des coordonnées visibles
// Repositionner le curseur en fonction des coordonnées visibles
Compute_paintbrush_coordinates();
}
}
@ -3887,12 +3887,12 @@ void Button_Unselect_magnifier(int btn)
Main.magnifier_mode=0;
// --> Recalculer le décalage de l'écran lorsqu'on sort de la loupe <--
// Centrage "brut" de lécran par rapport à la loupe
// --> Recalculer le décalage de l'écran lorsqu'on sort de la loupe <--
// Centrage "brut" de lécran par rapport à la loupe
Main.offset_X=Main.magnifier_offset_X-((Screen_width-Main.magnifier_width)>>1);
Main.offset_Y=Main.magnifier_offset_Y-((Menu_Y-Main.magnifier_height)>>1);
// Correction en cas de débordement de l'image
// Correction en cas de débordement de l'image
if (Main.offset_X+Screen_width>Main.image_width)
Main.offset_X=Main.image_width-Screen_width;
if (Main.offset_X<0)
@ -3903,19 +3903,19 @@ void Button_Unselect_magnifier(int btn)
if (Main.offset_Y<0)
Main.offset_Y=0;
// La fonction d'affichage dans l'image est désormais un affichage normal.
// La fonction d'affichage dans l'image est désormais un affichage normal.
Pixel_preview=Pixel_preview_normal;
// Calculer les bornes visibles dans l'écran
// Calculer les bornes visibles dans l'écran
Compute_limits();
Display_all_screen(); // <=> Display_screen();
// Repositionner le curseur en fonction des coordonnées visibles
// Repositionner le curseur en fonction des coordonnées visibles
Compute_paintbrush_coordinates();
Old_MX = -1;
Old_MY = -1;
}
else // On fait de notre mieux pour restaurer l'ancienne opération:
else // On fait de notre mieux pour restaurer l'ancienne opération:
Start_operation_stack(Operation_before_interrupt);
}
@ -3944,7 +3944,7 @@ void Button_Brush_FX(int btn)
Window_set_normal_button(155, 99,131,14,"Recolorize" ,0,1,Config_Key[SPECIAL_RECOLORIZE_BRUSH][0]); // 9
Window_set_normal_button(155,117,131,14,"Get brush colors",0,1,Config_Key[SPECIAL_GET_BRUSH_COLORS][0]); // 10
// Boutons représentant les coins du brush handle: (HG,HD,C,BG,BD)
// Boutons représentant les coins du brush handle: (HG,HD,C,BG,BD)
Window_set_normal_button( 75, 90,11,11,"",0,1,Config_Key[SPECIAL_TOP_LEFT_ATTACHMENT][0]); // 11
Window_set_normal_button(103, 90,11,11,"",0,1,Config_Key[SPECIAL_TOP_RIGHT_ATTACHMENT][0]); // 12
Window_set_normal_button( 89,104,11,11,"",0,1,Config_Key[SPECIAL_CENTER_ATTACHMENT][0]); // 13
@ -3966,7 +3966,7 @@ void Button_Brush_FX(int btn)
Print_in_window( 20,102,"Brush",MC_Dark,MC_Light);
Print_in_window( 16,110,"handle",MC_Dark,MC_Light);
// Dessin des pointillés pour le "brush handle"
// Dessin des pointillés pour le "brush handle"
for (index=0; index<13; index+=2)
{
Pixel_in_window( 88+index, 92,MC_Dark);
@ -4013,7 +4013,7 @@ void Button_Brush_FX(int btn)
Close_window();
Unselect_button(btn);
// Gestion du bouton clické
// Gestion du bouton clické
switch (clicked_button)
{
case 2 : // Flip X
@ -4026,10 +4026,10 @@ void Button_Brush_FX(int btn)
// Remap according to the last used remap table
Remap_general_lowlevel(Brush_colormap,Brush_original_pixels,Brush,Brush_width,Brush_height,Brush_width);
break;
case 4 : // 90° Rotation
case 4 : // 90° Rotation
Rotate_90_deg();
break;
case 5 : // 180° Rotation
case 5 : // 180° Rotation
Rotate_180_deg_lowlevel(Brush_original_pixels, Brush_width, Brush_height);
Remap_general_lowlevel(Brush_colormap,Brush_original_pixels,Brush,Brush_width,Brush_height,Brush_width);
Brush_offset_X=(Brush_width>>1);
@ -4094,7 +4094,7 @@ void Button_Brush_FX(int btn)
}
//---------------------------- Courbes de Bézier ----------------------------
//---------------------------- Courbes de Bézier ----------------------------
void Button_Curves(int btn)
{
@ -4220,11 +4220,11 @@ void Button_Airbrush_menu(int btn)
Window_display_frame(173,56,45,86);
Window_display_frame(137,19,81,33);
// On tagge toutes les couleurs utilisées
// On tagge toutes les couleurs utilisées
for (index=0; index<256; index++)
if (Airbrush_multi_flow[index])
Stencil_tag_color(index,MC_Black);
// Et enfin, on tagge la couleur sélectionnée
// Et enfin, on tagge la couleur sélectionnée
Stencil_tag_color(selected_color,MC_White);
Refresh_airbrush_settings(selected_color,0);
@ -4269,7 +4269,7 @@ void Button_Airbrush_menu(int btn)
Hide_cursor();
Stencil_tag_color(selected_color,(Airbrush_multi_flow[selected_color])?MC_Black:MC_Light);
Stencil_update_color(selected_color);
// Mettre la couleur sélectionnée à jour suivant le click
// Mettre la couleur sélectionnée à jour suivant le click
selected_color=(clicked_button==4) ? Window_attribute2 : Read_pixel(Mouse_X,Mouse_Y);
if (Mouse_K==2)
Airbrush_multi_flow[selected_color]=0;
@ -4277,7 +4277,7 @@ void Button_Airbrush_menu(int btn)
if (Airbrush_multi_flow[selected_color]==0)
Airbrush_multi_flow[selected_color]=spray_init;
// Tagger la couleur sélectionnée en blanc
// Tagger la couleur sélectionnée en blanc
Stencil_tag_color(selected_color,MC_White);
Refresh_airbrush_settings(selected_color,1);
Display_cursor();
@ -4333,7 +4333,7 @@ void Button_Airbrush_menu(int btn)
Display_cursor();
break;
case 9 : // ÷2
case 9 : // ÷2
for (index=0; index<256; index++)
{
if (Airbrush_multi_flow[index]>1)
@ -4346,11 +4346,11 @@ void Button_Airbrush_menu(int btn)
case 10 : // Clear
memset(Airbrush_multi_flow,0,256);
// On raffiche les infos de la couleur sélectionnée
// On raffiche les infos de la couleur sélectionnée
Refresh_airbrush_settings(selected_color,1);
// On efface les anciens TAGs
Window_clear_tags();
// Tagger la couleur sélectionnée en blanc
// Tagger la couleur sélectionnée en blanc
Stencil_tag_color(selected_color,MC_White);
Stencil_update_color(selected_color);
break;
@ -4427,7 +4427,7 @@ void Button_Airbrush_menu(int btn)
if (!Mouse_K)
switch (Key)
{
case SDLK_BACKQUOTE : // Récupération d'une couleur derrière le menu
case SDLK_BACKQUOTE : // Récupération d'une couleur derrière le menu
case SDLK_COMMA :
Get_color_behind_window(&color,&click);
if (click)
@ -4435,7 +4435,7 @@ void Button_Airbrush_menu(int btn)
Hide_cursor();
Stencil_tag_color(selected_color,(Airbrush_multi_flow[selected_color])?MC_Black:MC_Light);
Stencil_update_color(selected_color);
// Mettre la couleur sélectionnée à jour suivant le click
// Mettre la couleur sélectionnée à jour suivant le click
selected_color=color;
if (click==2)
Airbrush_multi_flow[selected_color]=0;
@ -4443,7 +4443,7 @@ void Button_Airbrush_menu(int btn)
if (Airbrush_multi_flow[selected_color]==0)
Airbrush_multi_flow[selected_color]=spray_init;
// Tagger la couleur sélectionnée en blanc
// Tagger la couleur sélectionnée en blanc
Stencil_tag_color(selected_color,MC_White);
Refresh_airbrush_settings(selected_color,1);
Display_cursor();
@ -4471,9 +4471,9 @@ void Button_Airbrush_menu(int btn)
Close_window();
/*
// Tant que l'on aura pas résolu le problème du désenclenchement du mode
// de dessin précedent, il faudra laisser ça en remarque et donc passer en
// spray même si on a clické sur Cancel (idem pour OK (un peu plus bas)).
// Tant que l'on aura pas résolu le problème du désenclenchement du mode
// de dessin précedent, il faudra laisser ça en remarque et donc passer en
// spray même si on a clické sur Cancel (idem pour OK (un peu plus bas)).
if (clicked_button==1) // Cancel
{
if (Current_operation!=OPERATION_AIRBRUSH)
@ -5284,7 +5284,7 @@ void Button_Text(int btn)
Select_button(BUTTON_DRAW,LEFT_SIDE);
if (Config.Auto_discontinuous)
{
// On se place en mode Dessin discontinu à la main
// On se place en mode Dessin discontinu à la main
while (Current_operation!=OPERATION_DISCONTINUOUS_DRAW)
Select_button(BUTTON_DRAW,RIGHT_SIDE);
}

View File

@ -105,7 +105,7 @@ void Button_Brush_monochrome(int);
*/
void Button_Paintbrush_menu(int);
// Boutons relatifs au mode de dessin à main levée
// Boutons relatifs au mode de dessin à main levée
/*!
Callback for the freehand draw button left click.
@ -168,7 +168,7 @@ void Button_Airbrush(int);
*/
void Button_Airbrush_menu(int);
// Courbes de Bézier
// Courbes de Bézier
/*!
Callback for the curves button left click.
@ -204,7 +204,7 @@ void Button_Filled_rectangle(int);
*/
void Button_Text(int);
// Boutons relatifs aux dégradés
// Boutons relatifs aux dégradés
/*!
Callback for the gradation button.
@ -463,7 +463,7 @@ void Button_Lasso(int);
*/
void Button_Unselect_lasso(int);
// Button relatifs à la pipette
// Button relatifs à la pipette
/*!
Starts the color picking operation.
@ -497,14 +497,14 @@ void Button_Magnify_menu(int);
*/
void Button_Unselect_magnifier(int);
// Les différents effets sur la brosse
// Les différents effets sur la brosse
/*!
Display the Brush effects window.
*/
void Button_Brush_FX(int);
// Boutons relatifs aux différentes pages
// Boutons relatifs aux différentes pages
/*!
Swap main and spare drawing pages.
@ -526,7 +526,7 @@ void Copy_image_only(void);
*/
void Button_Kill(int);
// Boutons relatifs aux changements de résolution et de taille d'image
// Boutons relatifs aux changements de résolution et de taille d'image
/*!
Display the screenmode menu.
@ -560,7 +560,7 @@ void Button_Save(int);
*/
void Button_Autosave(int);
// Réglage des paramètres de l'utilisateur
// Réglage des paramètres de l'utilisateur
/*!
Display the setting menu.
@ -572,7 +572,7 @@ void Button_Settings(int);
*/
void Button_Skins(int);
// Annulation de la dernière modification
// Annulation de la dernière modification
/*!
Undo the last modification to the picture.

View File

@ -67,13 +67,13 @@ void Menu_tag_colors(char * window_title, byte * table, byte * mode, byte can_ca
{
Window_set_normal_button(91,129,78,14,"OK" ,0,1,SDLK_RETURN); // 4
Window_set_normal_button( 7,129,78,14,"Cancel",0,1,KEY_ESC); // 5
// On enregistre la table dans un backup au cas où on ferait Cancel
// On enregistre la table dans un backup au cas où on ferait Cancel
memcpy(backup_table,table,256);
}
else
Window_set_normal_button(49,129,78,14,"OK" ,0,1,SDLK_RETURN); // 4
// On affiche l'état actuel de la table
// On affiche l'état actuel de la table
for (index=0; index<=255; index++)
Stencil_tag_color(index, (table[index])?MC_Black:MC_Light);
@ -123,7 +123,7 @@ void Menu_tag_colors(char * window_title, byte * table, byte * mode, byte can_ca
if (!Mouse_K)
switch (Key)
{
case SDLK_BACKQUOTE : // Récupération d'une couleur derrière le menu
case SDLK_BACKQUOTE : // Récupération d'une couleur derrière le menu
case SDLK_COMMA :
Get_color_behind_window(&color,&click);
if (click)
@ -682,7 +682,7 @@ void Button_Smooth_menu(void)
if (clicked_button==2) // OK
{
memcpy(Smooth_matrix,chosen_matrix,sizeof(Smooth_matrix));
Smooth_mode=0; // On le met à 0 car la fonct° suivante va le passer à 1
Smooth_mode=0; // On le met à 0 car la fonct° suivante va le passer à 1
Button_Smooth_mode();
}
@ -754,9 +754,9 @@ void Button_Colorize_mode(void)
void Button_Colorize_display_selection(int mode)
{
short y_pos=0; // Ligne où afficher les flèches de sélection
short y_pos=0; // Ligne où afficher les flèches de sélection
// On commence par effacer les anciennes sélections:
// On commence par effacer les anciennes sélections:
// Partie gauche
Print_in_window(4,37," ",MC_Black,MC_Light);
Print_in_window(4,57," ",MC_Black,MC_Light);
@ -768,19 +768,19 @@ void Button_Colorize_display_selection(int mode)
Print_in_window(129,74," ",MC_Black,MC_Light);
Print_in_window(129,91," ",MC_Black,MC_Light);
// Ensuite, on affiche la flèche là où il le faut:
// Ensuite, on affiche la flèche là où il le faut:
switch(mode)
{
case 0 : // Méthode interpolée
case 0 : // Méthode interpolée
y_pos=37;
break;
case 1 : // Méthode additive
case 1 : // Méthode additive
y_pos=57;
break;
case 2 : // Méthode soustractive
case 2 : // Méthode soustractive
y_pos=74;
break;
case 3 : // Méthode alpha
case 3 : // Méthode alpha
y_pos=91;
}
Print_in_window(4,y_pos,"\020",MC_Black,MC_Light);
@ -825,7 +825,7 @@ void Button_Colorize_menu(void)
switch(clicked_button)
{
case 1: // Zone de saisie de l'opacité
case 1: // Zone de saisie de l'opacité
Num2str(chosen_opacity,str,3);
Readline(89,23,str,3,INPUT_TYPE_INTEGER);
chosen_opacity=atoi(str);
@ -861,7 +861,7 @@ void Button_Colorize_menu(void)
Colorize_opacity =chosen_opacity;
Colorize_current_mode=selected_mode;
Compute_colorize_table();
Colorize_mode=0; // On le met à 0 car la fonct° suivante va le passer à 1
Colorize_mode=0; // On le met à 0 car la fonct° suivante va le passer à 1
Button_Colorize_mode();
}
@ -917,12 +917,12 @@ void Button_Tiling_menu(void)
{
clicked_button=Window_clicked_button();
if (clicked_button==3) // Zone de saisie du décalage X
if (clicked_button==3) // Zone de saisie du décalage X
{
Num2str(chosen_offset_x,str,4);
Readline(93,23,str,4,INPUT_TYPE_INTEGER);
chosen_offset_x=atoi(str);
// On corrige le décalage en X
// On corrige le décalage en X
if (chosen_offset_x>=Brush_width)
{
chosen_offset_x=Brush_width-1;
@ -932,12 +932,12 @@ void Button_Tiling_menu(void)
Display_cursor();
}
else
if (clicked_button==4) // Zone de saisie du décalage Y
if (clicked_button==4) // Zone de saisie du décalage Y
{
Num2str(chosen_offset_y,str,4);
Readline(93,37,str,4,INPUT_TYPE_INTEGER);
chosen_offset_y=atoi(str);
// On corrige le décalage en Y
// On corrige le décalage en Y
if (chosen_offset_y>=Brush_height)
{
chosen_offset_y=Brush_height-1;
@ -1000,9 +1000,9 @@ void Draw_sieve_scaled(short origin_x, short origin_y)
short start_y=Window_pos_Y+(Menu_factor_Y*78);
x_size=Menu_factor_X*5; // |_ Taille d'une case
y_size=Menu_factor_Y*5; // | de la trame zoomée
y_size=Menu_factor_Y*5; // | de la trame zoomée
// On efface de contenu précédent
// On efface de contenu précédent
Block(origin_x,origin_y,
Menu_factor_X*Window_special_button_list->Width,
Menu_factor_Y*Window_special_button_list->Height,MC_Light);
@ -1024,7 +1024,7 @@ void Draw_sieve_scaled(short origin_x, short origin_y)
}
// Dessiner la preview de la trame
x_size=Menu_factor_X*51; // |_ Taille de la fenêtre
x_size=Menu_factor_X*51; // |_ Taille de la fenêtre
y_size=Menu_factor_Y*71; // | de la preview
for (y_pos=0; y_pos<y_size; y_pos++)
for (x_pos=0; x_pos<x_size; x_pos++)
@ -1077,7 +1077,7 @@ void Invert_trame(void)
Sieve[x_pos][y_pos]=!(Sieve[x_pos][y_pos]);
}
// Rafraichit toute la zone correspondant à la trame zoomee.
// Rafraichit toute la zone correspondant à la trame zoomee.
void Update_sieve_area(short x, short y)
{
Update_rect(x,y,80*Menu_factor_X,80*Menu_factor_Y);
@ -1097,7 +1097,7 @@ void Button_Sieve_menu(void)
static byte default_bg_color=0;
T_Normal_button * button_bg_color;
char str[3];
byte temp; // Octet temporaire servant à n'importe quoi
byte temp; // Octet temporaire servant à n'importe quoi
short old_sieve_width=Sieve_width;
short old_sieve_height=Sieve_height;
byte old_sieve[16][16];
@ -1201,10 +1201,10 @@ void Button_Sieve_menu(void)
temp=MC_White;
else
temp=MC_Black;
// Affichage du pixel dans la fenêtre zoomée
// Affichage du pixel dans la fenêtre zoomée
Block(origin_x+(old_x_pos*x_pos), origin_y+(old_y_pos*y_pos),
x_pos-Menu_factor_X, y_pos-Menu_factor_Y, temp);
// Mise à jour de la preview
// Mise à jour de la preview
Draw_sieve_scaled(origin_x,origin_y);
Display_cursor();
// Maj de la case seule
@ -1269,7 +1269,7 @@ void Button_Sieve_menu(void)
Change_paintbrush_shape(PAINTBRUSH_SHAPE_COLOR_BRUSH);
break;
case 8 : // Réduire hauteur
case 8 : // Réduire hauteur
if (Sieve_height>1)
{
Hide_cursor();
@ -1297,7 +1297,7 @@ void Button_Sieve_menu(void)
}
break;
case 10 : // Réduire largeur
case 10 : // Réduire largeur
if (Sieve_width>1)
{
Hide_cursor();
@ -1325,7 +1325,7 @@ void Button_Sieve_menu(void)
}
break;
case 12 : // Toggle octets insérés
case 12 : // Toggle octets insérés
Hide_cursor();
default_bg_color=!default_bg_color;
Window_rectangle(button_bg_color->Pos_X+2,
@ -1396,7 +1396,7 @@ void Button_Sieve_menu(void)
Update_sieve_area(origin_x, origin_y);
break;
default : // Boutons de trames prédéfinies
default : // Boutons de trames prédéfinies
Hide_cursor();
Copy_preset_sieve(clicked_button-17);
Draw_sieve_scaled(origin_x,origin_y);

View File

@ -85,7 +85,7 @@
// Character to show a left arrow, used when editing long strings. It's present in ::Gfx->System_font
#define LEFT_TRIANGLE_CHARACTER 17
/// Character to display in menus for an ellipsis.
//#define ELLIPSIS_CHARACTER '…'
//#define ELLIPSIS_CHARACTER '…'
#define ELLIPSIS_CHARACTER '\x85'
#define NB_LAYERS 1 ///< Initial number of layers for a new image
#define MAX_NB_FRAMES 999 ///< Maximum number of frames that can be used in a grafx2 animation.

View File

@ -53,7 +53,7 @@ short Old_MY = -1;
//---------- Annuler les effets des modes de dessin (sauf la grille) ---------
// Variables mémorisants les anciens effets
// Variables mémorisants les anciens effets
byte Shade_mode_before_cancel;
byte Quick_shade_mode_before_cancel;
@ -374,11 +374,11 @@ void Unselect_button(int btn_number)
{
if (Buttons_Pool[btn_number].Pressed)
{
// On considère que le bouton est relâché
// On considère que le bouton est relâché
Buttons_Pool[btn_number].Pressed=BUTTON_RELEASED;
// On affiche le cadre autour du bouton de façon à ce qu'il paraisse relâché
// On affiche le cadre autour du bouton de façon à ce qu'il paraisse relâché
Draw_menu_button(btn_number,BUTTON_RELEASED);
// On appelle le désenclenchement particulier au bouton:
// On appelle le désenclenchement particulier au bouton:
Buttons_Pool[btn_number].Unselect_action(btn_number);
}
}
@ -419,31 +419,31 @@ void Select_button(int btn_number,byte click)
Draw_menu_button(btn_number-1, BUTTON_RELEASED);
}
// On note déjà la famille du bouton (La "Famiglia" c'est sacré)
// On note déjà la famille du bouton (La "Famiglia" c'est sacré)
family=Buttons_Pool[btn_number].Family;
switch (family)
{
case FAMILY_TOOLBAR: // On ne fait rien (on préserve les interruptions)
case FAMILY_TOOLBAR: // On ne fait rien (on préserve les interruptions)
break;
case FAMILY_INTERRUPTION: // Petit cas spécial dans la famille "Interruption":
case FAMILY_INTERRUPTION: // Petit cas spécial dans la famille "Interruption":
if ((btn_number!=BUTTON_MAGNIFIER) || (!Main.magnifier_mode))
// Pour chaque bouton:
for (b=0; b<NB_BUTTONS; b++)
// S'il est de la même famille
// S'il est de la même famille
if (
(b!=btn_number) &&
(Buttons_Pool[b].Family==FAMILY_INTERRUPTION) &&
( (b!=BUTTON_MAGNIFIER) ||
((b==BUTTON_MAGNIFIER) && (!Main.magnifier_mode)) )
)
// Alors on désenclenche le bouton
// Alors on désenclenche le bouton
Unselect_button(b);
break;
default:
// On désenclenche D'ABORD les interruptions
// On désenclenche D'ABORD les interruptions
// Pour chaque bouton:
for (b=0; b<NB_BUTTONS; b++)
// S'il est de la famille interruption
@ -451,7 +451,7 @@ void Select_button(int btn_number,byte click)
&& (Buttons_Pool[b].Family==FAMILY_INTERRUPTION)
// Et que ce n'est pas la loupe, ou alors qu'on n'est pas en mode loupe
&& (!(Main.magnifier_mode && (b==BUTTON_MAGNIFIER))) )
// Alors on désenclenche le bouton
// Alors on désenclenche le bouton
Unselect_button(b);
// Right-clicking on Adjust opens a menu, so in this case we skip
// the unselection of all "Tool" buttons.
@ -462,17 +462,17 @@ void Select_button(int btn_number,byte click)
break;
// Pour chaque bouton:
for (b=0; b<NB_BUTTONS; b++)
// S'il est de la même famille
// S'il est de la même famille
if ( (b!=btn_number)
&& (Buttons_Pool[b].Family==family) )
// Alors on désenclenche le bouton
// Alors on désenclenche le bouton
Unselect_button(b);
}
// On considère que le bouton est enfoncé
// On considère que le bouton est enfoncé
Buttons_Pool[btn_number].Pressed=BUTTON_PRESSED;
// On affiche le cadre autour du bouton de façon à ce qu'il paraisse enfoncé
// On affiche le cadre autour du bouton de façon à ce qu'il paraisse enfoncé
Draw_menu_button(btn_number, BUTTON_PRESSED);
Display_cursor();
@ -480,7 +480,7 @@ void Select_button(int btn_number,byte click)
if ((click==1 && !Buttons_Pool[btn_number].Left_instant)
||(click!=1 && !Buttons_Pool[btn_number].Right_instant))
{
// On attend ensuite que l'utilisateur lâche son bouton:
// On attend ensuite que l'utilisateur lâche son bouton:
Wait_end_of_click();
}
@ -641,10 +641,10 @@ void Layer_preview_off(int * preview_is_visible)
void Main_handler(void)
{
static byte temp_color;
int button_index; // Numéro de bouton de menu en cours
int prev_button_number=0; // Numéro de bouton de menu sur lequel on était précédemment
byte blink; // L'opération demande un effacement du curseur
int key_index; // index du tableau de touches spéciales correspondant à la touche enfoncée
int button_index; // Numéro de bouton de menu en cours
int prev_button_number=0; // Numéro de bouton de menu sur lequel on était précédemment
byte blink; // L'opération demande un effacement du curseur
int key_index; // index du tableau de touches spéciales correspondant à la touche enfoncée
byte temp;
byte effect_modified;
byte action;
@ -769,7 +769,7 @@ void Main_handler(void)
Special_previous_backcolor();
action++;
break;
case SPECIAL_SMALLER_PAINTBRUSH: // Rétrécir le pinceau
case SPECIAL_SMALLER_PAINTBRUSH: // Rétrécir le pinceau
Smaller_paintbrush();
action++;
break;
@ -922,13 +922,13 @@ void Main_handler(void)
Display_cursor();
action++;
break;
case SPECIAL_ROTATE_90 : // 90° brush rotation
case SPECIAL_ROTATE_90 : // 90° brush rotation
Hide_cursor();
Rotate_90_deg();
Display_cursor();
action++;
break;
case SPECIAL_ROTATE_180 : // 180° brush rotation
case SPECIAL_ROTATE_180 : // 180° brush rotation
Hide_cursor();
Rotate_180_deg_lowlevel(Brush_original_pixels, Brush_width, Brush_height);
// Remap according to the last used remap table
@ -1392,8 +1392,8 @@ void Main_handler(void)
}
}
// Si on a modifié un effet, il faut rafficher le bouton des effets en
// conséquence.
// Si on a modifié un effet, il faut rafficher le bouton des effets en
// conséquence.
if (effect_modified)
{
Hide_cursor();
@ -1433,7 +1433,7 @@ void Main_handler(void)
{
if (Menu_is_visible)
{
// On nettoie les coordonnées
// On nettoie les coordonnées
Hide_cursor();
/*if (Gfx->Hover_effect && prev_button_number > -1 && !Buttons_Pool[prev_button_number].Pressed)
@ -1528,7 +1528,7 @@ void Main_handler(void)
// Le curseur se trouve dans l'image
if ( (!Cursor_in_menu) && (Menu_is_visible) && (Old_MY != Mouse_Y || Old_MX != Mouse_X || Key || Mouse_K)) // On ne met les coordonnées à jour que si l'utilisateur a fait un truc
if ( (!Cursor_in_menu) && (Menu_is_visible) && (Old_MY != Mouse_Y || Old_MX != Mouse_X || Key || Mouse_K)) // On ne met les coordonnées à jour que si l'utilisateur a fait un truc
{
if(Cursor_in_menu_previous)
{
@ -1576,14 +1576,14 @@ void Main_handler(void)
//////////////////////////////////////////////////////////////////////////////
// différentes fonctions d'affichage utilisées dans les fenêtres //
// différentes fonctions d'affichage utilisées dans les fenêtres //
//////////////////////////////////////////////////////////////////////////////
//----------------------- Tracer une fenêtre d'options -----------------------
//----------------------- Tracer une fenêtre d'options -----------------------
void Open_window(word width,word height, const char * title)
// Lors de l'appel à cette procédure, la souris doit être affichée.
// En sortie de cette procedure, la souris est effacée.
// Lors de l'appel à cette procédure, la souris doit être affichée.
// En sortie de cette procedure, la souris est effacée.
{
//word i,j;
size_t title_length;
@ -1605,20 +1605,20 @@ void Open_window(word width,word height, const char * title)
Window_width=width;
Window_height=height;
// Positionnement de la fenêtre
// Positionnement de la fenêtre
Window_pos_X=(Screen_width-(width*Menu_factor_X))>>1;
Window_pos_Y=(Screen_height-(height*Menu_factor_Y))>>1;
Window_draggable=1;
// Sauvegarde de ce que la fenêtre remplace
// Sauvegarde de ce que la fenêtre remplace
Save_background(&(Window_background[Windows_open-1]), Window_pos_X, Window_pos_Y, width, height);
// Fenêtre grise
// Fenêtre grise
Window_rectangle(2,2,width-4,height-4,MC_Window);
// -- Frame de la fenêtre ----- --- -- - -
// -- Frame de la fenêtre ----- --- -- - -
// Frame noir puis en relief
Window_display_frame_mono(0,0,width,height,MC_Black);
@ -1652,7 +1652,7 @@ void Open_window(word width,word height, const char * title)
Allow_drag_and_drop(0);
}
// Initialisation des listes de boutons de la fenêtre
// Initialisation des listes de boutons de la fenêtre
Window_normal_button_list =NULL;
Window_palette_button_list =NULL;
Window_scroller_button_list=NULL;
@ -1662,11 +1662,11 @@ void Open_window(word width,word height, const char * title)
}
//----------------------- Fermer une fenêtre d'options -----------------------
//----------------------- Fermer une fenêtre d'options -----------------------
void Close_window(void)
// Lors de l'appel à cette procedure, la souris doit être affichée.
// En sortie de cette procedure, la souris est effacée.
// Lors de l'appel à cette procedure, la souris doit être affichée.
// En sortie de cette procedure, la souris est effacée.
{
T_Normal_button * temp1;
T_Palette_button * temp2;
@ -1717,7 +1717,7 @@ void Close_window(void)
if (Windows_open != 1)
{
// Restore de ce que la fenêtre cachait
// Restore de ce que la fenêtre cachait
Restore_background(&Window_background[Windows_open-1], Window_pos_X, Window_pos_Y, Window_width, Window_height);
Update_window_area(0,0,Window_width,Window_height);
Windows_open--;
@ -1752,7 +1752,7 @@ void Close_window(void)
}
//---------------- Dessiner un bouton normal dans une fenêtre ----------------
//---------------- Dessiner un bouton normal dans une fenêtre ----------------
// undersc_letter is 0 for no underscore, 1-indexed array index otherwise
void Window_draw_normal_bouton(word x_pos,word y_pos,word width,word height,
const char * title,byte undersc_letter,byte clickable)
@ -1783,14 +1783,14 @@ void Window_draw_normal_bouton(word x_pos,word y_pos,word width,word height,
}
// -- Button normal enfoncé dans la fenêtre --
// -- Button normal enfoncé dans la fenêtre --
void Window_select_normal_button(word x_pos,word y_pos,word width,word height)
{
Window_display_frame_generic(x_pos,y_pos,width,height,MC_Dark,MC_Black,MC_Dark,MC_Dark,MC_Black);
Update_window_area(x_pos, y_pos, width, height);
}
// -- Button normal désenfoncé dans la fenêtre --
// -- Button normal désenfoncé dans la fenêtre --
void Window_unselect_normal_button(word x_pos,word y_pos,word width,word height)
{
Window_display_frame_out(x_pos,y_pos,width,height);
@ -1798,7 +1798,7 @@ void Window_unselect_normal_button(word x_pos,word y_pos,word width,word height)
}
//--------------- Dessiner un bouton palette dans une fenêtre ----------------
//--------------- Dessiner un bouton palette dans une fenêtre ----------------
void Window_draw_palette_bouton(word x_pos,word y_pos)
{
word color;
@ -1811,7 +1811,7 @@ void Window_draw_palette_bouton(word x_pos,word y_pos)
// -------------------- Effacer les TAGs sur les palette ---------------------
// Cette fonct° ne sert plus que lorsqu'on efface les tags dans le menu Spray.
// Cette fonct° ne sert plus que lorsqu'on efface les tags dans le menu Spray.
void Window_clear_tags(void)
{
word origin_x;
@ -1861,10 +1861,10 @@ void Tag_color_range(byte start,byte end)
if (start!=end)
{
// On complète le 1er TAG
// On complète le 1er TAG
Pixel_in_window(origin_x+1,origin_y+4,MC_Black);
// On affiche le 2ème TAG
// On affiche le 2ème TAG
origin_x=(Window_palette_button_list->Pos_X+3)+(end>>4)*10;
origin_y=(Window_palette_button_list->Pos_Y+3)+(end&15)* 5;
for (y_pos=0,window_y_pos=origin_y; y_pos<5; y_pos++,window_y_pos++)
@ -1873,13 +1873,13 @@ void Tag_color_range(byte start,byte end)
Pixel_in_window(origin_x+1,window_y_pos,MC_Black);
Pixel_in_window(origin_x+2,origin_y+2,MC_Black);
// On TAG toutes les couleurs intermédiaires
// On TAG toutes les couleurs intermédiaires
for (index=start+1;index<end;index++)
{
Window_rectangle(Window_palette_button_list->Pos_X+3+((index>>4)*10),
Window_palette_button_list->Pos_Y+3+((index&15)* 5),
2,5,MC_Black);
// On efface l'éventuelle pointe d'une ancienne extrémité de l'intervalle
// On efface l'éventuelle pointe d'une ancienne extrémité de l'intervalle
Pixel_in_window(Window_palette_button_list->Pos_X+5+((index>>4)*10),
Window_palette_button_list->Pos_Y+5+((index&15)* 5),
MC_Light);
@ -1893,7 +1893,7 @@ void Tag_color_range(byte start,byte end)
}
//------------------ Dessiner un scroller dans une fenêtre -------------------
//------------------ Dessiner un scroller dans une fenêtre -------------------
void Compute_slider_cursor_length(T_Scroller_button * button)
{
@ -1981,7 +1981,7 @@ void Window_draw_scroller_button(T_Scroller_button * button)
}
//--------------- Dessiner une zone de saisie dans une fenêtre ---------------
//--------------- Dessiner une zone de saisie dans une fenêtre ---------------
void Window_draw_input_bouton(word x_pos,word y_pos,word width_in_characters)
{
@ -2005,7 +2005,7 @@ void Window_clear_input_button(T_Special_button * button)
}
//------ Rajout d'un bouton à la liste de ceux présents dans la fenêtre ------
//------ Rajout d'un bouton à la liste de ceux présents dans la fenêtre ------
// undersc_letter is 0 for no underscore, 1-indexed array index otherwise
T_Normal_button * Window_set_normal_button(word x_pos, word y_pos,
word width, word height,
@ -2035,7 +2035,7 @@ T_Normal_button * Window_set_normal_button(word x_pos, word y_pos,
Window_draw_normal_bouton(x_pos,y_pos,width,height,title,undersc_letter,clickable);
return temp;
}
//------ Rajout d'un bouton à la liste de ceux présents dans la fenêtre ------
//------ Rajout d'un bouton à la liste de ceux présents dans la fenêtre ------
// undersc_letter is 0 for no underscore, 1-indexed array index otherwise
T_Normal_button * Window_set_repeatable_button(word x_pos, word y_pos,
word width, word height,
@ -2194,9 +2194,9 @@ T_Dropdown_button * Window_set_dropdown_button(word x_pos,word y_pos,word width,
return temp;
}
// Ajoute un choix à une dropdown. Le libellé est seulement référencé,
// il doit pointer sur une zone qui doit être encore valide à la fermeture
// de la fenêtre (comprise).
// Ajoute un choix à une dropdown. Le libellé est seulement référencé,
// il doit pointer sur une zone qui doit être encore valide à la fermeture
// de la fenêtre (comprise).
void Window_dropdown_add_item(T_Dropdown_button * dropdown, word btn_number, const char *label)
{
T_Dropdown_choice *temp;
@ -2210,7 +2210,7 @@ void Window_dropdown_add_item(T_Dropdown_button * dropdown, word btn_number, con
last=dropdown->First_item;
if (last)
{
// On cherche le dernier élément
// On cherche le dernier élément
for (;last->Next;last=last->Next)
;
last->Next=temp;
@ -2289,12 +2289,12 @@ void Window_redraw_list(T_List_button * list)
//----------------------- Ouverture d'un pop-up -----------------------
void Open_popup(word x_pos, word y_pos, word width,word height)
// Lors de l'appel à cette procédure, la souris doit être affichée.
// En sortie de cette procedure, la souris est effacée.
// Lors de l'appel à cette procédure, la souris doit être affichée.
// En sortie de cette procedure, la souris est effacée.
// Note : les pop-ups sont gérés comme s'ils étaient des sous-fenêtres, ils ont donc leur propre boucle d'évènements et tout, on peut ajouter des widgets dedans, ...
// Les différences sont surtout graphiques :
// -Possibilité de préciser la position XY
// Note : les pop-ups sont gérés comme s'ils étaient des sous-fenêtres, ils ont donc leur propre boucle d'évènements et tout, on peut ajouter des widgets dedans, ...
// Les différences sont surtout graphiques :
// -Possibilité de préciser la position XY
// -Pas de titre
// -Pas de cadre en relief mais seulement un plat, et il est blanc au lieu de noir.
{
@ -2311,11 +2311,11 @@ void Open_popup(word x_pos, word y_pos, word width,word height)
Window_pos_Y=y_pos;
Window_draggable=0;
// Sauvegarde de ce que la fenêtre remplace
// Sauvegarde de ce que la fenêtre remplace
Save_background(&(Window_background[Windows_open-1]), Window_pos_X, Window_pos_Y, width, height);
/*
// Fenêtre grise
// Fenêtre grise
Window_rectangle(1,1,width-2,height-2,MC_Light);
// Frame noir puis en relief
@ -2333,7 +2333,7 @@ void Open_popup(word x_pos, word y_pos, word width,word height)
Paintbrush_hidden=1;
}
// Initialisation des listes de boutons de la fenêtre
// Initialisation des listes de boutons de la fenêtre
Window_normal_button_list =NULL;
Window_palette_button_list =NULL;
Window_scroller_button_list=NULL;
@ -2343,11 +2343,11 @@ void Open_popup(word x_pos, word y_pos, word width,word height)
}
//----------------------- Fermer une fenêtre d'options -----------------------
//----------------------- Fermer une fenêtre d'options -----------------------
void Close_popup(void)
// Lors de l'appel à cette procedure, la souris doit être affichée.
// En sortie de cette procedure, la souris est effacée.
// Lors de l'appel à cette procedure, la souris doit être affichée.
// En sortie de cette procedure, la souris est effacée.
{
T_Normal_button * temp1;
T_Palette_button * temp2;
@ -2398,7 +2398,7 @@ void Close_popup(void)
if (Windows_open != 1)
{
// Restore de ce que la fenêtre cachait
// Restore de ce que la fenêtre cachait
Restore_background(&Window_background[Windows_open-1], Window_pos_X, Window_pos_Y, Window_width, Window_height);
Update_window_area(0,0,Window_width,Window_height);
Windows_open--;
@ -2431,12 +2431,12 @@ void Close_popup(void)
}
//////////////////////////////////////////////////////////////////////////////
// //
// Mini-MOTEUR utilisé dans les fenêtres (menus des boutons...) //
// Mini-MOTEUR utilisé dans les fenêtres (menus des boutons...) //
// //
//////////////////////////////////////////////////////////////////////////////
// -- Indique si on a cliqué dans une zone définie par deux points extremes --
// -- Indique si on a cliqué dans une zone définie par deux points extremes --
byte Window_click_in_rectangle(short start_x,short start_y,short end_x,short end_y)
{
short x_pos,y_pos;
@ -2452,7 +2452,7 @@ byte Window_click_in_rectangle(short start_x,short start_y,short end_x,short end
// --- Attend que l'on clique dans la palette pour renvoyer la couleur choisie
// ou bien renvoie -1 si on a annulé l'action pas click-droit ou Escape ------
// ou bien renvoie -1 si on a annulé l'action pas click-droit ou Escape ------
short Wait_click_in_palette(T_Palette_button * button)
{
short start_x=button->Pos_X+5;
@ -2517,13 +2517,13 @@ short Wait_click_in_palette(T_Palette_button * button)
// -------------- Récupération d'une couleur derrière un menu ----------------
// -------------- Récupération d'une couleur derrière un menu ----------------
void Get_color_behind_window(byte * color, byte * click)
{
short old_x=-1;
short old_y=-1;
short index;
short a,b,c,d; // Variables temporaires et multitâches...
short a,b,c,d; // Variables temporaires et multitâches...
byte * buffer = NULL;
char str[25];
byte cursor_was_hidden;
@ -2547,7 +2547,7 @@ void Get_color_behind_window(byte * color, byte * click)
Cursor_shape=CURSOR_SHAPE_COLORPICKER;
b=Paintbrush_hidden;
Paintbrush_hidden=1;
c=-1; // color pointée: au début aucune, comme ça on initialise tout
c=-1; // color pointée: au début aucune, comme ça on initialise tout
if (Menu_is_visible_before_window)
Print_in_menu(Buttons_Pool[BUTTON_CHOOSE_COL].Tooltip,0);
@ -2563,7 +2563,7 @@ void Get_color_behind_window(byte * color, byte * click)
a=Read_pixel(Mouse_X,Mouse_Y);
if (a!=c)
{
c=a; // Mise à jour de la couleur pointée
c=a; // Mise à jour de la couleur pointée
if (Menu_is_visible_before_window)
{
sprintf(str,"%d",a);
@ -2614,7 +2614,7 @@ void Get_color_behind_window(byte * color, byte * click)
// ------------ Opération de déplacement de la fenêtre à l'écran -------------
// ------------ Opération de déplacement de la fenêtre à l'écran -------------
void Move_window(short dx, short dy)
{
short new_x=Mouse_X-dx;
@ -2711,19 +2711,19 @@ void Move_window(short dx, short dy)
Menu_Y=a;
Menu_is_visible=b;
// Sauvegarde du contenu actuel de la fenêtre
// Sauvegarde du contenu actuel de la fenêtre
Save_background(&buffer, Window_pos_X, Window_pos_Y, Window_width, Window_height);
// Restore de ce que la fenêtre cachait
// Restore de ce que la fenêtre cachait
Restore_background(&Window_background[Windows_open-1], Window_pos_X, Window_pos_Y, Window_width, Window_height);
// Sauvegarde de ce que la fenêtre remplace
// Sauvegarde de ce que la fenêtre remplace
Save_background(&(Window_background[Windows_open-1]), new_x, new_y, Window_width, Window_height);
// Raffichage de la fenêtre
// Raffichage de la fenêtre
Restore_background(&buffer, new_x, new_y, Window_width, Window_height);
// Mise à jour du rectangle englobant
// Mise à jour du rectangle englobant
Update_rect(
(new_x>Window_pos_X)?Window_pos_X:new_x,
(new_y>Window_pos_Y)?Window_pos_Y:new_y,
@ -2757,7 +2757,7 @@ T_Dropdown_choice * Dropdown_activate(T_Dropdown_button *button, short off_x, sh
short box_height;
T_Dropdown_choice *item;
// Taille de l'ombre portée (en plus des dimensions normales)
// Taille de l'ombre portée (en plus des dimensions normales)
#define SHADOW_RIGHT 3
#define SHADOW_BOTTOM 4
@ -2783,7 +2783,7 @@ T_Dropdown_choice * Dropdown_activate(T_Dropdown_button *button, short off_x, sh
Window_rectangle(0,0,1,box_height,MC_Black);
// Frame fonce et blanc
Window_display_frame_out(1,0,button->Dropdown_width-1,box_height);
// Ombre portée
// Ombre portée
if (SHADOW_BOTTOM)
{
Window_rectangle(SHADOW_RIGHT,
@ -2815,7 +2815,7 @@ T_Dropdown_choice * Dropdown_activate(T_Dropdown_button *button, short off_x, sh
while (1)
{
old_selected_index = selected_index;
// Fenêtre grise
// Fenêtre grise
Window_rectangle(2,1,button->Dropdown_width-3,box_height-2,MC_Light);
// Affichage des items
for(item=button->First_item,choice_index=0; item!=NULL; item=item->Next,choice_index++)
@ -2843,7 +2843,7 @@ T_Dropdown_choice * Dropdown_activate(T_Dropdown_button *button, short off_x, sh
{
// Attente
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)?
(((Mouse_Y-Window_pos_Y)/Menu_factor_Y-2)>>3) : -1;
@ -2901,9 +2901,9 @@ short Window_dropdown_on_click(T_Dropdown_button *button)
}
// --- Fonction de clic sur un bouton a peu près ordinaire:
// --- Fonction de clic sur un bouton a peu près ordinaire:
// Attend que l'on relache le bouton, et renvoie le numero du bouton si on
// est resté dessus, 0 si on a annulé en sortant du bouton.
// est resté dessus, 0 si on a annulé en sortant du bouton.
short Window_normal_button_onclick(word x_pos, word y_pos, word width, word height, short btn_number)
{
while(1)
@ -3146,7 +3146,7 @@ short Window_get_button_shortcut(void)
else
Window_attribute1=LEFT_SIDE;
// On fait une première recherche
// On fait une première recherche
temp=Window_normal_button_list;
while (temp!=NULL)
{
@ -3178,9 +3178,9 @@ short Window_get_button_shortcut(void)
temp2=temp2->Next;
}
// Si la recherche n'a pas été fructueuse ET que l'utilisateur appuyait sur
// <Shift>, on regarde si un bouton ne pourrait pas réagir comme si <Shift>
// n'était pas appuyé.
// Si la recherche n'a pas été fructueuse ET que l'utilisateur appuyait sur
// <Shift>, on regarde si un bouton ne pourrait pas réagir comme si <Shift>
// n'était pas appuyé.
if (Window_attribute1==RIGHT_SIDE)
{
temp=Window_normal_button_list;
@ -3350,7 +3350,7 @@ short Window_clicked_button(void)
{
list->List_start=list->List_start+list->Cursor_position;
list->Cursor_position=0;
// Mise à jour du scroller
// Mise à jour du scroller
list->Scroller->Position=list->List_start;
Window_draw_slider(list->Scroller);
}
@ -3370,7 +3370,7 @@ short Window_clicked_button(void)
{
list->List_start=list->List_start+list->Cursor_position-(list->Scroller->Nb_visibles-1);
list->Cursor_position=(list->Scroller->Nb_visibles-1);
// Mise à jour du scroller
// Mise à jour du scroller
list->Scroller->Position=list->List_start;
Window_draw_slider(list->Scroller);
}
@ -3387,7 +3387,7 @@ short Window_clicked_button(void)
Hide_cursor();
list->Cursor_position=0;
list->List_start=0;
// Mise à jour du scroller
// Mise à jour du scroller
list->Scroller->Position=list->List_start;
Window_draw_slider(list->Scroller);
Window_redraw_list(list);
@ -3406,7 +3406,7 @@ short Window_clicked_button(void)
{
list->List_start=list->List_start+list->Cursor_position-(list->Scroller->Nb_visibles-1);
list->Cursor_position=(list->Scroller->Nb_visibles-1);
// Mise à jour du scroller
// Mise à jour du scroller
list->Scroller->Position=list->List_start;
Window_draw_slider(list->Scroller);
}
@ -3436,7 +3436,7 @@ short Window_clicked_button(void)
{
list->List_start=list->Scroller->Nb_elements-list->Scroller->Nb_visibles;
}
// Mise à jour du scroller
// Mise à jour du scroller
list->Scroller->Position=list->List_start;
Window_draw_slider(list->Scroller);
}
@ -3462,7 +3462,7 @@ short Window_clicked_button(void)
{
list->List_start=0;
}
// Mise à jour du scroller
// Mise à jour du scroller
list->Scroller->Position=list->List_start;
Window_draw_slider(list->Scroller);
}
@ -3481,10 +3481,10 @@ short Window_clicked_button(void)
else
list->List_start=0;
list->Cursor_position-=list->List_start;
// On affiche à nouveau la liste
// On affiche à nouveau la liste
Hide_cursor();
Window_redraw_list(list);
// Mise à jour du scroller
// Mise à jour du scroller
list->Scroller->Position=list->List_start;
Window_draw_slider(list->Scroller);
Display_cursor();
@ -3498,10 +3498,10 @@ short Window_clicked_button(void)
list->List_start=list->Scroller->Nb_elements-list->Scroller->Nb_visibles;
}
list->Cursor_position-=list->List_start;
// On affiche à nouveau la liste
// On affiche à nouveau la liste
Hide_cursor();
Window_redraw_list(list);
// Mise à jour du scroller
// Mise à jour du scroller
list->Scroller->Position=list->List_start;
Window_draw_slider(list->Scroller);
Display_cursor();
@ -3515,8 +3515,8 @@ short Window_clicked_button(void)
}
// Fonction qui sert à remapper les parties sauvegardées derriere les
// fenetres ouvertes. C'est utilisé par exemple par la fenetre de palette
// Fonction qui sert à remapper les parties sauvegardées derriere les
// fenetres ouvertes. C'est utilisé par exemple par la fenetre de palette
// Qui remappe des couleurs, afin de propager les changements.
void Remap_window_backgrounds(const byte * conversion_table, int Min_Y, int Max_Y)
{
@ -3656,8 +3656,8 @@ void Set_bar_visibility(word bar, int visible, int with_redraw)
Compute_magnifier_data();
}
// On repositionne le décalage de l'image pour qu'il n'y ait pas d'in-
// -cohérences lorsqu'on sortira du mode Loupe.
// On repositionne le décalage de l'image pour qu'il n'y ait pas d'in-
// -cohérences lorsqu'on sortira du mode Loupe.
if (Main.offset_Y+Screen_height>Main.image_height)
{
if (Screen_height>Main.image_height)

View File

@ -3,7 +3,7 @@
/* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2018 Thomas Bernard
Copyright 2011 Pawel Góralski
Copyright 2011 Pawel Góralski
Copyright 2009 Petter Lindquist
Copyright 2008 Yves Rizoud
Copyright 2008 Franck Charlet
@ -89,7 +89,7 @@ void Test_IMG(T_IO_Context * context, FILE * file)
(void)context;
File_error=1;
// Lecture et vérification de la signature
// Lecture et vérification de la signature
if (Read_bytes(file,IMG_header.Filler1,6)
&& Read_word_le(file,&(IMG_header.Width))
&& Read_word_le(file,&(IMG_header.Height))
@ -206,7 +206,7 @@ void Save_IMG(T_IO_Context * context)
if (File_error)
Remove_file(context);
}
else // Error d'écriture (disque plein ou protégé)
else // Error d'écriture (disque plein ou protégé)
{
fclose(file);
Remove_file(context);
@ -272,10 +272,10 @@ void Test_IFF(FILE * IFF_file, const char *sub_type)
if (! Read_dword_be(IFF_file, &dummy))
break;
// On aurait pu vérifier que ce long est égal à la taille
// du fichier - 8, mais ça aurait interdit de charger des
// fichiers tronqués (et déjà que c'est chiant de perdre
// une partie du fichier il faut quand même pouvoir en
// On aurait pu vérifier que ce long est égal à la taille
// du fichier - 8, mais ça aurait interdit de charger des
// fichiers tronqués (et déjà que c'est chiant de perdre
// une partie du fichier il faut quand même pouvoir en
// garder un peu... Sinon, moi je pleure :'( !!! )
if (! Read_bytes(IFF_file,format,4))
break;
@ -367,12 +367,12 @@ int IFF_Skip_section(FILE * file)
// ------------------------- Attendre une section -------------------------
byte IFF_Wait_for(FILE * file, const char * expected_section)
{
// Valeur retournée: 1=Section trouvée, 0=Section non trouvée (erreur)
// Valeur retournée: 1=Section trouvée, 0=Section non trouvée (erreur)
byte section_read[4];
if (! Read_bytes(file,section_read,4))
return 0;
while (memcmp(section_read,expected_section,4)) // Sect. pas encore trouvée
while (memcmp(section_read,expected_section,4)) // Sect. pas encore trouvée
{
if (!IFF_Skip_section(file))
return 0;
@ -382,7 +382,7 @@ byte IFF_Wait_for(FILE * file, const char * expected_section)
return 1;
}
// Les images ILBM sont stockés en bitplanes donc on doit trifouiller les bits pour
// Les images ILBM sont stockés en bitplanes donc on doit trifouiller les bits pour
// en faire du chunky
///
@ -2061,11 +2061,11 @@ void Load_IFF(T_IO_Context * context)
switch (IFF_list_size)
{
case 0 : // Première couleur
case 0 : // Première couleur
IFF_color_list[0]=color;
IFF_list_size=1;
break;
case 1 : // Deuxième couleur
case 1 : // Deuxième couleur
last_color=IFF_color_list[0];
IFF_repetition_mode=(last_color==color);
IFF_color_list[1]=color;
@ -2074,7 +2074,7 @@ void Load_IFF(T_IO_Context * context)
default: // Couleurs suivantes
last_color =IFF_color_list[IFF_list_size-1];
second_last_color=IFF_color_list[IFF_list_size-2];
if (last_color==color) // On a une répétition de couleur
if (last_color==color) // On a une répétition de couleur
{
if ( (IFF_repetition_mode) || (second_last_color!=color) )
// On conserve le mode...
@ -2095,7 +2095,7 @@ void Load_IFF(T_IO_Context * context)
IFF_repetition_mode=1;
}
}
else // La couleur n'est pas la même que la précédente
else // La couleur n'est pas la même que la précédente
{
if (!IFF_repetition_mode) // On conserve le mode...
{
@ -2154,7 +2154,7 @@ void Save_IFF(T_IO_Context * context)
setvbuf(IFF_file, NULL, _IOFBF, 64*1024);
Write_bytes(IFF_file,"FORM",4);
Write_dword_be(IFF_file,0); // On mettra la taille à jour à la fin
Write_dword_be(IFF_file,0); // On mettra la taille à jour à la fin
if (context->Format == FORMAT_LBM)
Write_bytes(IFF_file,"ILBM",4);
@ -2246,7 +2246,7 @@ void Save_IFF(T_IO_Context * context)
body_offset = ftell(IFF_file);
Write_bytes(IFF_file,"BODY",4);
Write_dword_be(IFF_file,0); // On mettra la taille à jour à la fin
Write_dword_be(IFF_file,0); // On mettra la taille à jour à la fin
if (context->Format == FORMAT_LBM)
{
@ -3121,7 +3121,7 @@ static void Load_BMP_Pixels(T_IO_Context * context, FILE * file, unsigned int co
x_pos+=a;
y_pos-=b;
break;
default: // Nouvelle série
default: // Nouvelle série
while (b)
{
if(Read_byte(file, &a)!=1)
@ -3178,7 +3178,7 @@ static void Load_BMP_Pixels(T_IO_Context * context, FILE * file, unsigned int co
x_pos+=a;
y_pos-=b;
break;
default: // Nouvelle série (B 1/2 pixels bruts)
default: // Nouvelle série (B 1/2 pixels bruts)
for (index=1; ((index<=b) && (!File_error)); index++,x_pos++)
{
if (index&1)
@ -3190,7 +3190,7 @@ static void Load_BMP_Pixels(T_IO_Context * context, FILE * file, unsigned int co
Set_pixel(context, x_pos,y_pos,c&0xF);
}
// On lit l'octet rendant le nombre d'octets pair, si
// nécessaire. Encore un truc de crétin "made in MS".
// nécessaire. Encore un truc de crétin "made in MS".
if ( ((b&3)==1) || ((b&3)==2) )
{
byte dummy;
@ -3421,11 +3421,11 @@ void Save_BMP(T_IO_Context * context)
&& Write_dword_le(file,header.Clr_Imprt))
{
// Chez Bill, ils ont dit: "On va mettre les couleur dans l'ordre
// inverse, et pour faire chier, on va les mettre sur une échelle de
// 0 à 255 parce que le standard VGA c'est de 0 à 63 (logique!). Et
// puis comme c'est pas assez débile, on va aussi y rajouter un octet
// toujours à 0 pour forcer les gens à s'acheter des gros disques
// durs... Comme ça, ça fera passer la pillule lorsqu'on sortira
// inverse, et pour faire chier, on va les mettre sur une échelle de
// 0 à 255 parce que le standard VGA c'est de 0 à 63 (logique!). Et
// puis comme c'est pas assez débile, on va aussi y rajouter un octet
// toujours à 0 pour forcer les gens à s'acheter des gros disques
// durs... Comme ça, ça fera passer la pillule lorsqu'on sortira
// Windows 95." ...
for (index=0; index<256; index++)
{
@ -3438,7 +3438,7 @@ void Save_BMP(T_IO_Context * context)
if (Write_bytes(file,local_palette,1024))
{
// ... Et Bill, il a dit: "OK les gars! Mais seulement si vous rangez
// les pixels dans l'ordre inverse, mais que sur les Y quand-même
// les pixels dans l'ordre inverse, mais que sur les Y quand-même
// parce que faut pas pousser."
for (y_pos=context->Height-1; ((y_pos>=0) && (!File_error)); y_pos--)
for (x_pos=0; x_pos<line_size; x_pos++)
@ -3882,20 +3882,20 @@ void Test_GIF(T_IO_Context * context, FILE * file)
// -- Lire un fichier au format GIF -----------------------------------------
// Définition de quelques variables globales au chargement du GIF87a
// Définition de quelques variables globales au chargement du GIF87a
word GIF_nb_bits; // Nb de bits composants un code complet
word GIF_remainder_bits; // Nb de bits encore dispos dans GIF_last_byte
byte GIF_remainder_byte; // Nb d'octets avant le prochain bloc de Raster Data
word GIF_current_code; // Code traité (qui vient d'être lu en général)
word GIF_current_code; // Code traité (qui vient d'être lu en général)
byte GIF_last_byte; // Octet de lecture des bits
word GIF_pos_X; // Coordonnées d'affichage de l'image
word GIF_pos_X; // Coordonnées d'affichage de l'image
word GIF_pos_Y;
word GIF_interlaced; // L'image est entrelacée
word GIF_finished_interlaced_image; // L'image entrelacée est finie de charger
word GIF_pass; // index de passe de l'image entrelacée
word GIF_interlaced; // L'image est entrelacée
word GIF_finished_interlaced_image; // L'image entrelacée est finie de charger
word GIF_pass; // index de passe de l'image entrelacée
FILE *GIF_file; // L'handle du fichier
// -- Lit le code à GIF_nb_bits suivant --
// -- Lit le code à GIF_nb_bits suivant --
word GIF_get_next_code(void)
{
@ -3985,12 +3985,12 @@ void Load_GIF(T_IO_Context * context)
{
char signature[6];
word * alphabet_stack; // Pile de décodage d'une chaîne
word * alphabet_prefix; // Table des préfixes des codes
word * alphabet_stack; // Pile de décodage d'une chaîne
word * alphabet_prefix; // Table des préfixes des codes
word * alphabet_suffix; // Table des suffixes des codes
word alphabet_free; // Position libre dans l'alphabet
word alphabet_max; // Nombre d'entrées possibles dans l'alphabet
word alphabet_stack_pos; // Position dans la pile de décodage d'un chaîne
word alphabet_max; // Nombre d'entrées possibles dans l'alphabet
word alphabet_stack_pos; // Position dans la pile de décodage d'un chaîne
T_GIF_LSDB LSDB;
T_GIF_IDB IDB;
@ -3998,16 +3998,16 @@ void Load_GIF(T_IO_Context * context)
word nb_colors; // Nombre de couleurs dans l'image
word color_index; // index de traitement d'une couleur
byte size_to_read; // Nombre de données à lire (divers)
byte size_to_read; // Nombre de données à lire (divers)
byte block_identifier; // Code indicateur du type de bloc en cours
byte initial_nb_bits; // Nb de bits au début du traitement LZW
word special_case=0; // Mémoire pour le cas spécial
word old_code=0; // Code précédent
byte initial_nb_bits; // Nb de bits au début du traitement LZW
word special_case=0; // Mémoire pour le cas spécial
word old_code=0; // Code précédent
word byte_read; // Sauvegarde du code en cours de lecture
word value_clr; // Valeur <=> Clear tables
word value_eof; // Valeur <=> End d'image
long file_size;
int number_LID; // Nombre d'images trouvées dans le fichier
int number_LID; // Nombre d'images trouvées dans le fichier
int current_layer = 0;
int last_delay = 0;
byte is_transparent = 0;
@ -4034,7 +4034,7 @@ void Load_GIF(T_IO_Context * context)
(memcmp(signature,"GIF89a",6)==0) ) )
{
// Allocation de mémoire pour les tables & piles de traitement:
// Allocation de mémoire pour les tables & piles de traitement:
alphabet_stack =(word *)malloc(4096*sizeof(word));
alphabet_prefix=(word *)malloc(4096*sizeof(word));
alphabet_suffix=(word *)malloc(4096*sizeof(word));
@ -4046,7 +4046,7 @@ void Load_GIF(T_IO_Context * context)
&& Read_byte(GIF_file,&(LSDB.Aspect))
)
{
// Lecture du Logical Screen Descriptor Block réussie:
// Lecture du Logical Screen Descriptor Block réussie:
Original_screen_X=LSDB.Width;
Original_screen_Y=LSDB.Height;
@ -4102,7 +4102,7 @@ void Load_GIF(T_IO_Context * context)
switch(function_code)
{
case 0xFE: // Comment Block Extension
// On récupère le premier commentaire non-vide,
// On récupère le premier commentaire non-vide,
// on jette les autres.
if (context->Comment[0]=='\0')
{
@ -4119,7 +4119,7 @@ void Load_GIF(T_IO_Context * context)
Read_byte(GIF_file,&size_to_read);
break;
case 0xF9: // Graphics Control Extension
// Prévu pour la transparence
// Prévu pour la transparence
if ( Read_byte(GIF_file,&(GCE.Packed_fields))
&& Read_word_le(GIF_file,&(GCE.Delay_time))
&& Read_byte(GIF_file,&(GCE.Transparent_color)))
@ -4303,7 +4303,7 @@ void Load_GIF(T_IO_Context * context)
{
// Palette locale dispo = (IDB.Indicator and $80)
// Image entrelacée = (IDB.Indicator and $40)
// Image entrelacée = (IDB.Indicator and $40)
// Ordre de classement = (IDB.Indicator and $20)
// Nombre de bits/pixel = (IDB.Indicator and $07)+1 (si palette locale dispo)
@ -4408,7 +4408,7 @@ void Load_GIF(T_IO_Context * context)
alphabet_max =((1 << (++GIF_nb_bits))-1);
}
}
else // Code Clear rencontré
else // Code Clear rencontré
{
GIF_nb_bits =initial_nb_bits + 1;
alphabet_max =((1 << GIF_nb_bits)-1);
@ -4423,7 +4423,7 @@ void Load_GIF(T_IO_Context * context)
File_error=2;
break;
}
} // Code End-Of-Information ou erreur de fichier rencontré
} // Code End-Of-Information ou erreur de fichier rencontré
if (File_error==2 && GIF_pos_X==0 && GIF_pos_Y==IDB.Image_height)
File_error=0;
/*Close_lecture();*/
@ -4463,7 +4463,7 @@ void Load_GIF(T_IO_Context * context)
early_exit:
// Libération de la mémoire utilisée par les tables & piles de traitement:
// Libération de la mémoire utilisée par les tables & piles de traitement:
free(alphabet_suffix);
free(alphabet_prefix);
free(alphabet_stack);
@ -4474,7 +4474,7 @@ void Load_GIF(T_IO_Context * context)
fclose(GIF_file);
} // Le fichier était ouvrable
} // Le fichier était ouvrable
else
File_error=1;
}
@ -4482,8 +4482,8 @@ void Load_GIF(T_IO_Context * context)
// -- Sauver un fichier au format GIF ---------------------------------------
int GIF_stop; // "On peut arrêter la sauvegarde du fichier"
byte GIF_buffer[256]; // buffer d'écriture de bloc de données compilées
int GIF_stop; // "On peut arrêter la sauvegarde du fichier"
byte GIF_buffer[256]; // buffer d'écriture de bloc de données compilées
// -- Vider le buffer GIF dans le buffer KM --
@ -4502,7 +4502,7 @@ void Load_GIF(T_IO_Context * context)
}
}
// -- Ecrit un code à GIF_nb_bits --
// -- Ecrit un code à GIF_nb_bits --
void GIF_set_code(word Code)
{
@ -4520,9 +4520,9 @@ void Load_GIF(T_IO_Context * context)
nb_bits_processed +=current_nb_bits;
nb_bits_to_process-=current_nb_bits;
if (GIF_remainder_bits==8) // Il ne reste plus de bits à coder sur l'octet courant
if (GIF_remainder_bits==8) // Il ne reste plus de bits à coder sur l'octet courant
{
// Ecrire l'octet à balancer:
// Ecrire l'octet à balancer:
GIF_buffer[++GIF_remainder_byte]=GIF_last_byte;
// Si on a atteint la fin du bloc de Raster Data
@ -4559,23 +4559,23 @@ void Load_GIF(T_IO_Context * context)
void Save_GIF(T_IO_Context * context)
{
word * alphabet_prefix; // Table des préfixes des codes
word * alphabet_prefix; // Table des préfixes des codes
word * alphabet_suffix; // Table des suffixes des codes
word * alphabet_daughter; // Table des chaînes filles (plus longues)
word * alphabet_sister; // Table des chaînes soeurs (même longueur)
word * alphabet_daughter; // Table des chaînes filles (plus longues)
word * alphabet_sister; // Table des chaînes soeurs (même longueur)
word alphabet_free; // Position libre dans l'alphabet
word alphabet_max; // Nombre d'entrées possibles dans l'alphabet
word start; // Code précédent (sert au linkage des chaînes)
int descend; // Booléen "On vient de descendre"
word alphabet_max; // Nombre d'entrées possibles dans l'alphabet
word start; // Code précédent (sert au linkage des chaînes)
int descend; // Booléen "On vient de descendre"
T_GIF_LSDB LSDB;
T_GIF_IDB IDB;
byte block_identifier; // Code indicateur du type de bloc en cours
word current_string; // Code de la chaîne en cours de traitement
byte current_char; // Caractère à coder
word index; // index de recherche de chaîne
word current_string; // Code de la chaîne en cours de traitement
byte current_char; // Caractère à coder
word index; // index de recherche de chaîne
int current_layer;
word clear; // LZW clear code
@ -4589,12 +4589,12 @@ void Save_GIF(T_IO_Context * context)
{
setvbuf(GIF_file, NULL, _IOFBF, 64*1024);
// On écrit la signature du fichier
// On écrit la signature du fichier
if (Write_bytes(GIF_file,"GIF89a",6))
{
// La signature du fichier a été correctement écrite.
// La signature du fichier a été correctement écrite.
// Allocation de mémoire pour les tables
// Allocation de mémoire pour les tables
alphabet_prefix=(word *)malloc(4096*sizeof(word));
alphabet_suffix=(word *)malloc(4096*sizeof(word));
alphabet_daughter =(word *)malloc(4096*sizeof(word));
@ -4639,7 +4639,7 @@ void Save_GIF(T_IO_Context * context)
Write_byte(GIF_file,LSDB.Backcol) &&
Write_byte(GIF_file,LSDB.Aspect) )
{
// Le LSDB a été correctement écrit.
// Le LSDB a été correctement écrit.
int i;
// On sauve la palette
for(i=0;i<256 && !File_error;i++)
@ -4651,7 +4651,7 @@ void Save_GIF(T_IO_Context * context)
}
if (!File_error)
{
// La palette a été correctement écrite.
// La palette a été correctement écrite.
// Ecriture de la transparence
//Write_bytes(GIF_file,"\x21\xF9\x04\x01\x00\x00\xNN\x00",8);
@ -4797,9 +4797,9 @@ void Save_GIF(T_IO_Context * context)
IDB.Nb_bits_pixel++;
}
// On va écrire un block indicateur d'IDB et l'IDB du fichier
// On va écrire un block indicateur d'IDB et l'IDB du fichier
block_identifier=0x2C;
IDB.Indicator=0x07; // Image non entrelacée, pas de palette locale.
IDB.Indicator=0x07; // Image non entrelacée, pas de palette locale.
clear = 1 << IDB.Nb_bits_pixel; // Clear Code
eof = clear + 1; // End of Picture Code
@ -4811,8 +4811,8 @@ void Save_GIF(T_IO_Context * context)
Write_byte(GIF_file,IDB.Indicator) &&
Write_byte(GIF_file,IDB.Nb_bits_pixel))
{
// Le block indicateur d'IDB et l'IDB ont étés correctements
// écrits.
// Le block indicateur d'IDB et l'IDB ont étés correctements
// écrits.
GIF_pos_X=IDB.Pos_X;
GIF_pos_Y=IDB.Pos_Y;
@ -4825,7 +4825,7 @@ void Save_GIF(T_IO_Context * context)
File_error=0;
GIF_stop=0;
// Réintialisation de la table:
// Réintialisation de la table:
alphabet_free=clear + 2; // 258 for 8bpp
GIF_nb_bits =IDB.Nb_bits_pixel + 1; // 9 for 8 bpp
alphabet_max =clear+clear-1; // 511 for 8bpp
@ -4914,21 +4914,21 @@ void Save_GIF(T_IO_Context * context)
if (!File_error)
{
// On écrit le code dans le fichier
GIF_set_code(current_string); // Dernière portion d'image
// On écrit le code dans le fichier
GIF_set_code(current_string); // Dernière portion d'image
// Cette dernière portion ne devrait pas poser de problèmes
// du côté GIF_nb_bits puisque pour que GIF_nb_bits change de
// valeur, il faudrait que la table de chaîne soit remplie or
// c'est impossible puisqu'on traite une chaîne qui se trouve
// déjà dans la table, et qu'elle n'a rien d'inédit. Donc on
// ne devrait pas avoir à changer de taille, mais je laisse
// quand même en remarque tout ça, au cas où il subsisterait
// des problèmes dans certains cas exceptionnels.
// Cette dernière portion ne devrait pas poser de problèmes
// du côté GIF_nb_bits puisque pour que GIF_nb_bits change de
// valeur, il faudrait que la table de chaîne soit remplie or
// c'est impossible puisqu'on traite une chaîne qui se trouve
// déjà dans la table, et qu'elle n'a rien d'inédit. Donc on
// ne devrait pas avoir à changer de taille, mais je laisse
// quand même en remarque tout ça, au cas où il subsisterait
// des problèmes dans certains cas exceptionnels.
//
// Note: de toutes façons, ces lignes en commentaires ont étés
// écrites par copier/coller du temps où la sauvegarde du
// GIF déconnait. Il y a donc fort à parier qu'elles ne
// Note: de toutes façons, ces lignes en commentaires ont étés
// écrites par copier/coller du temps où la sauvegarde du
// GIF déconnait. Il y a donc fort à parier qu'elles ne
// sont pas correctes.
/*
@ -4939,7 +4939,7 @@ void Save_GIF(T_IO_Context * context)
// On balargue un Clear Code
GIF_set_code(256);
// On réinitialise les données LZW
// On réinitialise les données LZW
alphabet_free=258;
GIF_nb_bits =9;
alphabet_max =511;
@ -4960,15 +4960,15 @@ void Save_GIF(T_IO_Context * context)
GIF_last_byte=0;
GIF_remainder_bits=0;
}
GIF_empty_buffer(); // On envoie les dernières données du buffer GIF dans le buffer KM
GIF_empty_buffer(); // On envoie les dernières données du buffer GIF dans le buffer KM
// On écrit un \0
// On écrit un \0
if (! Write_byte(GIF_file,'\x00'))
File_error=1;
}
} // On a pu écrire l'IDB
} // On a pu écrire l'IDB
else
File_error=1;
}
@ -5004,26 +5004,26 @@ void Save_GIF(T_IO_Context * context)
}
}
// On écrit un GIF TERMINATOR, exigé par SVGA et SEA.
// On écrit un GIF TERMINATOR, exigé par SVGA et SEA.
if (! Write_byte(GIF_file,'\x3B'))
File_error=1;
}
} // On a pu écrire la palette
} // On a pu écrire la palette
else
File_error=1;
} // On a pu écrire le LSDB
} // On a pu écrire le LSDB
else
File_error=1;
// Libération de la mémoire utilisée par les tables
// Libération de la mémoire utilisée par les tables
free(alphabet_sister);
free(alphabet_daughter);
free(alphabet_suffix);
free(alphabet_prefix);
} // On a pu écrire la signature du fichier
} // On a pu écrire la signature du fichier
else
File_error=1;
@ -5031,7 +5031,7 @@ void Save_GIF(T_IO_Context * context)
if (File_error)
Remove_file(context);
} // On a pu ouvrir le fichier en écriture
} // On a pu ouvrir le fichier en écriture
else
File_error=1;
@ -5044,21 +5044,21 @@ typedef struct
{
byte Manufacturer; // |_ Il font chier ces cons! Ils auraient pu
byte Version; // | mettre une vraie signature!
byte Compression; // L'image est-elle compressée?
byte Compression; // L'image est-elle compressée?
byte Depth; // Nombre de bits pour coder un pixel (inutile puisqu'on se sert de Plane)
word X_min; // |_ Coin haut-gauche |
word Y_min; // | de l'image |_ (Crétin!)
word Y_min; // | de l'image |_ (Crétin!)
word X_max; // |_ Coin bas-droit |
word Y_max; // | de l'image |
word X_dpi; // |_ Densité de |_ (Presque inutile parce que
word X_dpi; // |_ Densité de |_ (Presque inutile parce que
word Y_dpi; // | l'image | aucun moniteur n'est pareil!)
byte Palette_16c[48]; // Palette 16 coul (inutile pour 256c) (débile!)
byte Reserved; // Ca me plait ça aussi!
byte Palette_16c[48]; // Palette 16 coul (inutile pour 256c) (débile!)
byte Reserved; // Ca me plait ça aussi!
byte Plane; // 4 => 16c , 1 => 256c , ...
word Bytes_per_plane_line;// Doit toujours être pair
word Palette_info; // 1 => color , 2 => Gris (ignoré à partir de la version 4)
word Bytes_per_plane_line;// Doit toujours être pair
word Palette_info; // 1 => color , 2 => Gris (ignoré à partir de la version 4)
word Screen_X; // |_ Dimensions de
word Screen_Y; // | l'écran d'origine
word Screen_Y; // | l'écran d'origine
byte Filler[54]; // Ca... J'adore!
} T_PCX_Header;
@ -5091,7 +5091,7 @@ void Test_PCX(T_IO_Context * context, FILE * file)
Read_bytes(file,&(PCX_header.Filler),54) )
{
// Vu que ce header a une signature de merde et peu significative, il
// va falloir que je teste différentes petites valeurs dont je connais
// va falloir que je teste différentes petites valeurs dont je connais
// l'intervalle. Grrr!
if ( (PCX_header.Manufacturer!=10)
|| (PCX_header.Compression>1)
@ -5110,7 +5110,7 @@ void Test_PCX(T_IO_Context * context, FILE * file)
// -- Lire un fichier au format PCX -----------------------------------------
// -- Afficher une ligne PCX codée sur 1 seul plan avec moins de 256 c. --
// -- Afficher une ligne PCX codée sur 1 seul plan avec moins de 256 c. --
static void Draw_PCX_line(T_IO_Context *context, const byte * buffer, short y_pos, byte depth)
{
short x_pos;
@ -5143,7 +5143,7 @@ void Load_PCX(T_IO_Context * context)
FILE *file;
short line_size;
short real_line_size; // width de l'image corrigée
short real_line_size; // width de l'image corrigée
short width_read;
short x_pos;
short y_pos;
@ -5194,7 +5194,7 @@ void Load_PCX(T_IO_Context * context)
{
if (File_error==0)
{
// On prépare la palette à accueillir les valeurs du fichier PCX
// On prépare la palette à accueillir les valeurs du fichier PCX
if (Config.Clear_palette)
memset(context->Palette,0,sizeof(T_Palette));
nb_colors=(dword)(1<<PCX_header.Plane)<<(PCX_header.Depth-1);
@ -5258,17 +5258,17 @@ void Load_PCX(T_IO_Context * context)
}
}
// On se positionne à la fin du fichier - 769 octets pour voir s'il y
// On se positionne à la fin du fichier - 769 octets pour voir s'il y
// a une palette.
if ( (PCX_header.Depth==8) && (PCX_header.Version>=5) && (file_size>(256*3+128)) )
{
fseek(file,file_size-((256*3)+1),SEEK_SET);
// On regarde s'il y a une palette après les données de l'image
// On regarde s'il y a une palette après les données de l'image
if (Read_byte(file,&byte1))
if (byte1==12) // Lire la palette si c'est une image en 256 couleurs
{
int index;
// On lit la palette 256c que ces crétins ont foutue à la fin du fichier
// On lit la palette 256c que ces crétins ont foutue à la fin du fichier
for(index=0;index<256;index++)
if ( ! Read_byte(file,&(context->Palette[index].R))
|| ! Read_byte(file,&(context->Palette[index].G))
@ -5281,19 +5281,19 @@ void Load_PCX(T_IO_Context * context)
}
}
// Maintenant qu'on a lu la palette que ces crétins sont allés foutre
// à la fin, on retourne juste après le header pour lire l'image.
// Maintenant qu'on a lu la palette que ces crétins sont allés foutre
// à la fin, on retourne juste après le header pour lire l'image.
fseek(file,128,SEEK_SET);
if (!File_error)
{
line_size=PCX_header.Bytes_per_plane_line*PCX_header.Plane;
real_line_size=(short)PCX_header.Bytes_per_plane_line<<3;
// On se sert de données ILBM car le dessin de ligne en moins de 256
// On se sert de données ILBM car le dessin de ligne en moins de 256
// couleurs se fait comme avec la structure ILBM.
buffer=(byte *)malloc(line_size);
// Chargement de l'image
if (PCX_header.Compression) // Image compressée
if (PCX_header.Compression) // Image compressée
{
/*Init_lecture();*/
@ -5303,14 +5303,14 @@ void Load_PCX(T_IO_Context * context)
{
for (position=0; ((position<image_size) && (!File_error));)
{
// Lecture et décompression de la ligne
// Lecture et décompression de la ligne
if(Read_byte(file,&byte1) !=1) File_error=2;
if (!File_error)
{
if ((byte1&0xC0)==0xC0)
{
byte1-=0xC0; // facteur de répétition
if(Read_byte(file,&byte2)!=1) File_error = 2; // octet à répéter
byte1-=0xC0; // facteur de répétition
if(Read_byte(file,&byte2)!=1) File_error = 2; // octet à répéter
if (!File_error)
{
for (index=0; index<byte1; index++,position++)
@ -5332,7 +5332,7 @@ void Load_PCX(T_IO_Context * context)
}
}
}
else // couleurs rangées par plans
else // couleurs rangées par plans
{
for (y_pos=0; ((y_pos<context->Height) && (!File_error)); y_pos++)
{
@ -5343,8 +5343,8 @@ void Load_PCX(T_IO_Context * context)
{
if ((byte1&0xC0)==0xC0)
{
byte1-=0xC0; // facteur de répétition
if(Read_byte(file,&byte2)!=1) File_error=2; // octet à répéter
byte1-=0xC0; // facteur de répétition
if(Read_byte(file,&byte2)!=1) File_error=2; // octet à répéter
if (!File_error)
{
for (index=0; index<byte1; index++)
@ -5370,7 +5370,7 @@ void Load_PCX(T_IO_Context * context)
/*Close_lecture();*/
}
else // Image non compressée
else // Image non compressée
{
for (y_pos=0;(y_pos<context->Height) && (!File_error);y_pos++)
{
@ -5423,14 +5423,14 @@ void Load_PCX(T_IO_Context * context)
for (y_pos=0,position=0;(y_pos<context->Height) && (!File_error);)
{
// Lecture et décompression de la ligne
// Lecture et décompression de la ligne
if(Read_byte(file,&byte1)!=1) File_error=2;
if (!File_error)
{
if ((byte1 & 0xC0)==0xC0)
{
byte1-=0xC0; // facteur de répétition
if(Read_byte(file,&byte2)!=1) File_error=2; // octet à répéter
byte1-=0xC0; // facteur de répétition
if(Read_byte(file,&byte2)!=1) File_error=2; // octet à répéter
if (!File_error)
{
for (index=0; (index<byte1) && (!File_error); index++)
@ -5546,7 +5546,7 @@ void Save_PCX(T_IO_Context * context)
{
pixel_read=Get_pixel(context, 0,y_pos);
// Compression et écriture de la ligne
// Compression et écriture de la ligne
for (x_pos=0; ((x_pos<line_size) && (!File_error)); )
{
x_pos++;
@ -5612,7 +5612,7 @@ void Test_SCx(T_IO_Context * context, FILE * file)
File_error=1;
// Ouverture du fichier
// Lecture et vérification de la signature
// Lecture et vérification de la signature
if (Read_bytes(file,SCx_header.Filler1,4)
&& Read_word_le(file, &(SCx_header.Width))
&& Read_word_le(file, &(SCx_header.Height))
@ -5778,7 +5778,7 @@ void Save_SCx(T_IO_Context * context)
if (File_error)
Remove_file(context);
}
else // Error d'écriture (disque plein ou protégé)
else // Error d'écriture (disque plein ou protégé)
{
fclose(file);
Remove_file(context);
@ -6482,7 +6482,7 @@ void Save_PNG(T_IO_Context * context)
fclose(file);
}
// S'il y a eu une erreur de sauvegarde, on ne va tout de même pas laisser
// S'il y a eu une erreur de sauvegarde, on ne va tout de même pas laisser
// ce fichier pourri trainait... Ca fait pas propre.
if (File_error)
Remove_file(context);

View File

@ -4,7 +4,7 @@
Copyright 2018 Thomas Bernard
Copyright 2014 Sergii Pylypenko
Copyright 2011 Pawel Góralski
Copyright 2011 Pawel Góralski
Copyright 2009 Franck Charlet
Copyright 2008 Peter Gordon
Copyright 2008 Yves Rizoud
@ -72,17 +72,17 @@
#include "filesel.h"
#define NORMAL_FILE_COLOR MC_Light // color du texte pour une ligne de
// fichier non sélectionné
// fichier non sélectionné
#define NORMAL_DIRECTORY_COLOR MC_Dark // color du texte pour une ligne de
// répertoire non sélectionné
// répertoire non sélectionné
#define NORMAL_BACKGROUND_COLOR MC_Black // color du fond pour une ligne
// non sélectionnée
// non sélectionnée
#define SELECTED_FILE_COLOR MC_White // color du texte pour une ligne de
// fichier sélectionnée
// fichier sélectionnée
#define SELECTED_DIRECTORY_COLOR MC_Light // color du texte pour une ligne de
// repértoire sélectionnée
// repértoire sélectionnée
#define SELECTED_BACKGROUND_COLOR MC_Dark // color du fond pour une ligne
// sélectionnée
// sélectionnée
// -- Native fileselector for WIN32
@ -158,8 +158,8 @@ static word Selector_filename_unicode[256];
// Conventions:
//
// * Le fileselect modifie le répertoire courant. Ceci permet de n'avoir
// qu'un findfirst dans le répertoire courant à faire:
// * Le fileselect modifie le répertoire courant. Ceci permet de n'avoir
// qu'un findfirst dans le répertoire courant à faire:
void Recount_files(T_Fileselector *list)
{
@ -202,9 +202,9 @@ void Recount_files(T_Fileselector *list)
}
}
// -- Destruction de la liste chaînée ---------------------------------------
// -- Destruction de la liste chaînée ---------------------------------------
void Free_fileselector_list(T_Fileselector *list)
// Cette procédure détruit la chaine des fichiers. Elle doit être appelée
// Cette procédure détruit la chaine des fichiers. Elle doit être appelée
// avant de rappeler la fonction Read_list_of_files, ainsi qu'en fin de
// programme.
{
@ -213,11 +213,11 @@ void Free_fileselector_list(T_Fileselector *list)
while (list->First!=NULL)
{
// On mémorise l'adresse du premier élément de la liste
// On mémorise l'adresse du premier élément de la liste
temp_item =list->First;
// On fait avancer la tête de la liste
// On fait avancer la tête de la liste
list->First=list->First->Next;
// Et on efface l'ancien premier élément de la liste
// Et on efface l'ancien premier élément de la liste
free(temp_item->Unicode_full_name);
free(temp_item->Unicode_short_name);
free(temp_item);
@ -282,7 +282,7 @@ word * Format_filename_unicode(const word * fname, word max_length, int type)
result[c]=fname[c];
}
// Ensuite on recopie la partie qui suit le point (si nécessaire):
// Ensuite on recopie la partie qui suit le point (si nécessaire):
if (pos_last_dot != -1)
{
for (c = pos_last_dot+1,other_cursor=max_length-4;fname[c]!='\0' && other_cursor < max_length-1;c++,other_cursor++)
@ -363,7 +363,7 @@ char * Format_filename(const char * fname, word max_length, int type)
result[c]=fname[c];
}
// Ensuite on recopie la partie qui suit le point (si nécessaire):
// Ensuite on recopie la partie qui suit le point (si nécessaire):
if (pos_last_dot != -1)
{
for (c = pos_last_dot+1,other_cursor=max_length-4;fname[c]!='\0' && other_cursor < max_length-1;c++,other_cursor++)
@ -376,7 +376,7 @@ char * Format_filename(const char * fname, word max_length, int type)
// -- Rajouter a la liste des elements de la liste un element ---------------
T_Fileselector_item * Add_element_to_list(T_Fileselector *list, const char * full_name, const char *short_name, int type, byte icon)
// Cette procedure ajoute a la liste chainee un fichier passé en argument.
// Cette procedure ajoute a la liste chainee un fichier passé en argument.
{
// Working element
T_Fileselector_item * temp_item;
@ -420,7 +420,7 @@ int Check_extension(const char *filename_ext, const char * filter)
if (filename_ext == NULL || filename_ext[0] == '\0')
return (filter[0] == '\0' || filter[0] == ';');
// Vérification caractère par caractère, case-insensitive.
// Vérification caractère par caractère, case-insensitive.
for (c = 0; !(filter[c] == '\0' || filter[c] == ';'); c++)
{
if (filter[c] != '?' &&
@ -530,8 +530,8 @@ static void Read_dir_callback(void * pdata, const char *file_name, const word *u
void Read_list_of_files(T_Fileselector *list, byte selected_format)
// Cette procédure charge dans la liste chainée les fichiers dont l'extension
// correspond au format demandé.
// Cette procédure charge dans la liste chainée les fichiers dont l'extension
// correspond au format demandé.
{
struct Read_dir_pdata callback_data;
const char * current_path = NULL;
@ -542,14 +542,14 @@ void Read_list_of_files(T_Fileselector *list, byte selected_format)
#endif
callback_data.list = list;
// Tout d'abord, on déduit du format demandé un filtre à utiliser:
// Tout d'abord, on déduit du format demandé un filtre à utiliser:
callback_data.filter = Get_fileformat(selected_format)->Extensions;
// Ensuite, on vide la liste actuelle:
Free_fileselector_list(list);
// Après effacement, il ne reste ni fichier ni répertoire dans la liste
// Après effacement, il ne reste ni fichier ni répertoire dans la liste
// On lit tous les répertoires:
// On lit tous les répertoires:
current_path = Get_current_directory(curdir, NULL, MAX_PATH_CHARACTERS);
For_each_directory_entry(current_path, &callback_data, Read_dir_callback);
@ -686,10 +686,10 @@ void Read_list_of_drives(T_Fileselector *list, byte name_length)
{
if ( (1 << bit_index) & drive_bits )
{
// On a ce lecteur, il faut maintenant déterminer son type "physique".
// On a ce lecteur, il faut maintenant déterminer son type "physique".
// pour profiter des jolies icones de X-man.
char drive_path[]="A:\\";
// Cette API Windows est étrange, je dois m'y faire...
// Cette API Windows est étrange, je dois m'y faire...
drive_path[0]='A'+bit_index;
switch (GetDriveTypeA(drive_path))
{
@ -731,11 +731,11 @@ void Read_list_of_drives(T_Fileselector *list, byte name_length)
}
#else
{
//Sous les différents unix, on va mettre
//Sous les différents unix, on va mettre
// un disque dur qui pointera vers la racine,
// et un autre vers le home directory de l'utilisateur.
// Ensuite on utilise read_file_system_list pour compléter
// Ensuite on utilise read_file_system_list pour compléter
struct mount_entry* mount_points_list;
struct mount_entry* next;
@ -797,15 +797,15 @@ void Read_list_of_drives(T_Fileselector *list, byte name_length)
#endif
// -- Tri de la liste des fichiers et répertoires ---------------------------
// -- Tri de la liste des fichiers et répertoires ---------------------------
void Sort_list_of_files(T_Fileselector *list)
// Tri la liste chainée existante dans l'ordre suivant:
// Tri la liste chainée existante dans l'ordre suivant:
//
// * Les répertoires d'abord, dans l'ordre alphabétique de leur nom
// * Les fichiers ensuite, dans l'ordre alphabétique de leur nom
// * Les répertoires d'abord, dans l'ordre alphabétique de leur nom
// * Les fichiers ensuite, dans l'ordre alphabétique de leur nom
{
byte list_is_sorted; // Booléen "La liste est triée"
byte need_swap; // Booléen "Il faut inverser les éléments"
byte list_is_sorted; // Booléen "La liste est triée"
byte need_swap; // Booléen "Il faut inverser les éléments"
T_Fileselector_item * prev_item;
T_Fileselector_item * current_item;
T_Fileselector_item * next_item;
@ -816,7 +816,7 @@ void Sort_list_of_files(T_Fileselector *list)
{
do
{
// Par défaut, on considère que la liste est triée
// Par défaut, on considère que la liste est triée
list_is_sorted=1;
current_item=list->First;
@ -827,7 +827,7 @@ void Sort_list_of_files(T_Fileselector *list)
// On commence par supposer qu'il n'y pas pas besoin d'inversion
need_swap=0;
// Ensuite, on vérifie si les deux éléments sont bien dans l'ordre ou
// Ensuite, on vérifie si les deux éléments sont bien dans l'ordre ou
// non:
// Drives go at the top of the list, and files go after them
@ -846,39 +846,39 @@ void Sort_list_of_files(T_Fileselector *list)
if (need_swap)
{
// Si les deux éléments nécessitent d'être inversé:
// Si les deux éléments nécessitent d'être inversé:
// On les inverses:
// On note avant tout les éléments qui encapsulent nos deux amis
// On note avant tout les éléments qui encapsulent nos deux amis
prev_item =current_item->Previous;
next_to_next_item=next_item->Next;
// On permute le chaînage des deux éléments entree eux
// On permute le chaînage des deux éléments entree eux
current_item->Next =next_to_next_item;
current_item->Previous=next_item;
next_item->Next =current_item;
next_item->Previous=prev_item;
// On tente un chaînage des éléments encapsulant les compères:
// On tente un chaînage des éléments encapsulant les compères:
if (prev_item!=NULL)
prev_item->Next=next_item;
if (next_to_next_item!=NULL)
next_to_next_item->Previous=current_item;
// On fait bien attention à modifier la tête de liste en cas de besoin
// On fait bien attention à modifier la tête de liste en cas de besoin
if (current_item==list->First)
list->First=next_item;
// Ensuite, on se prépare à étudier les éléments précédents:
// Ensuite, on se prépare à étudier les éléments précédents:
current_item=prev_item;
// Et on constate que la liste n'était pas encore génialement triée
// Et on constate que la liste n'était pas encore génialement triée
list_is_sorted=0;
}
else
{
// Si les deux éléments sont dans l'ordre:
// Si les deux éléments sont dans l'ordre:
// On passe aux suivants
current_item=current_item->Next;
@ -918,14 +918,14 @@ T_Fileselector_item * Get_item_by_index(T_Fileselector *list, short index)
}
// -- Affichage des éléments de la liste de fichier / répertoire ------------
// -- Affichage des éléments de la liste de fichier / répertoire ------------
void Display_file_list(T_Fileselector *list, short offset_first,short selector_offset)
//
// offset_first = Décalage entre le premier fichier visible dans le
// sélecteur et le premier fichier de la liste
// offset_first = Décalage entre le premier fichier visible dans le
// sélecteur et le premier fichier de la liste
//
// selector_offset = Décalage entre le premier fichier visible dans le
// sélecteur et le fichier sélectionné dans la liste
// selector_offset = Décalage entre le premier fichier visible dans le
// sélecteur et le fichier sélectionné dans la liste
//
{
T_Fileselector_item * current_item;
@ -934,16 +934,16 @@ void Display_file_list(T_Fileselector *list, short offset_first,short selector_o
byte background_color;
// On vérifie s'il y a au moins 1 fichier dans la liste:
// On vérifie s'il y a au moins 1 fichier dans la liste:
if (list->Nb_elements>0)
{
// On commence par chercher à pointer sur le premier fichier visible:
// On commence par chercher à pointer sur le premier fichier visible:
current_item = Get_item_by_index(list, offset_first);
// Pour chacun des 10 éléments inscriptibles à l'écran
// Pour chacun des 10 éléments inscriptibles à l'écran
for (index=0;index<10;index++)
{
// S'il est sélectionné:
// S'il est sélectionné:
if (!selector_offset)
{
// Si c'est un fichier
@ -965,7 +965,7 @@ void Display_file_list(T_Fileselector *list, short offset_first,short selector_o
background_color=NORMAL_BACKGROUND_COLOR;
}
// On affiche l'élément
// On affiche l'élément
if (current_item->Icon != ICON_NONE)
{
// Name preceded by an icon
@ -981,7 +981,7 @@ void Display_file_list(T_Fileselector *list, short offset_first,short selector_o
Print_in_window(8,95+index*8,current_item->Short_name,text_color,background_color);
}
// On passe à la ligne suivante
// On passe à la ligne suivante
selector_offset--;
current_item=current_item->Next;
if (!current_item)
@ -992,30 +992,30 @@ void Display_file_list(T_Fileselector *list, short offset_first,short selector_o
}
// -- Récupérer le libellé d'un élément de la liste -------------------------
// -- Récupérer le libellé d'un élément de la liste -------------------------
static void Get_selected_item(T_Fileselector *list, short offset_first,short selector_offset,char * label,word * unicode_label,int *type)
//
// offset_first = Décalage entre le premier fichier visible dans le
// sélecteur et le premier fichier de la liste
// offset_first = Décalage entre le premier fichier visible dans le
// sélecteur et le premier fichier de la liste
//
// selector_offset = Décalage entre le premier fichier visible dans le
// sélecteur et le fichier à récupérer
// selector_offset = Décalage entre le premier fichier visible dans le
// sélecteur et le fichier à récupérer
//
// label = str de réception du libellé de l'élément
// label = str de réception du libellé de l'élément
//
// type = Récupération du type: 0 fichier, 1 repertoire, 2 lecteur.
// Passer NULL si pas interessé.
// type = Récupération du type: 0 fichier, 1 repertoire, 2 lecteur.
// Passer NULL si pas interessé.
{
T_Fileselector_item * current_item;
// On vérifie s'il y a au moins 1 fichier dans la liste:
// On vérifie s'il y a au moins 1 fichier dans la liste:
if (list->Nb_elements>0)
{
// On commence par chercher à pointer sur le premier fichier visible:
// Ensuite, on saute autant d'éléments que le décalage demandé:
// On commence par chercher à pointer sur le premier fichier visible:
// Ensuite, on saute autant d'éléments que le décalage demandé:
current_item = Get_item_by_index(list, offset_first + selector_offset);
// On recopie la chaîne
// On recopie la chaîne
strcpy(label, current_item->Full_name);
if (unicode_label != NULL)
{
@ -1031,28 +1031,28 @@ static void Get_selected_item(T_Fileselector *list, short offset_first,short sel
}
// ----------------- Déplacements dans la liste de fichiers -----------------
// ----------------- Déplacements dans la liste de fichiers -----------------
void Selector_scroll_down(short * offset_first,short * selector_offset)
// Fait scroller vers le bas le sélecteur de fichier... (si possible)
// Fait scroller vers le bas le sélecteur de fichier... (si possible)
{
if ( ((*selector_offset)<9)
&& ( (*selector_offset)+1 < Filelist.Nb_elements ) )
// Si la sélection peut descendre
// Si la sélection peut descendre
Display_file_list(&Filelist, *offset_first,++(*selector_offset));
else // Sinon, descendre la fenêtre (si possible)
else // Sinon, descendre la fenêtre (si possible)
if ((*offset_first)+10<Filelist.Nb_elements)
Display_file_list(&Filelist, ++(*offset_first),*selector_offset);
}
void Selector_scroll_up(short * offset_first,short * selector_offset)
// Fait scroller vers le haut le sélecteur de fichier... (si possible)
// Fait scroller vers le haut le sélecteur de fichier... (si possible)
{
if ((*selector_offset)>0)
// Si la sélection peut monter
// Si la sélection peut monter
Display_file_list(&Filelist, *offset_first,--(*selector_offset));
else // Sinon, monter la fenêtre (si possible)
else // Sinon, monter la fenêtre (si possible)
if ((*offset_first)>0)
Display_file_list(&Filelist, --(*offset_first),*selector_offset);
}
@ -1129,9 +1129,9 @@ void Selector_home(short * offset_first,short * selector_offset)
short Compute_click_offset_in_fileselector(void)
/*
Renvoie le décalage dans le sélecteur de fichier sur lequel on a clické.
Renvoie le décalage du dernier fichier si on a clické au delà.
Renvoie -1 si le sélecteur est vide.
Renvoie le décalage dans le sélecteur de fichier sur lequel on a clické.
Renvoie le décalage du dernier fichier si on a clické au delà.
Renvoie -1 si le sélecteur est vide.
*/
{
short computed_offset;
@ -1148,7 +1148,7 @@ void Display_bookmark(T_Dropdown_button * Button, int bookmark_number)
if (Config.Bookmark_directory[bookmark_number])
{
int label_size;
// Libellé
// Libellé
Print_in_window_limited(Button->Pos_X+3+10,Button->Pos_Y+2,Config.Bookmark_label[bookmark_number],8,MC_Black,MC_Light);
label_size=strlen(Config.Bookmark_label[bookmark_number]);
if (label_size<8)
@ -1163,7 +1163,7 @@ void Display_bookmark(T_Dropdown_button * Button, int bookmark_number)
}
else
{
// Libellé
// Libellé
Print_in_window(Button->Pos_X+3+10,Button->Pos_Y+2,"--------",MC_Dark,MC_Light);
// Menu apparait sur clic droit ou gauche
Button->Active_button=RIGHT_SIDE|LEFT_SIDE;
@ -1181,8 +1181,8 @@ void Print_current_directory(void)
//
{
char converted_name[MAX_PATH_CHARACTERS];
int length; // length du répertoire courant
int index; // index de parcours de la chaine complète
int length; // length du répertoire courant
int index; // index de parcours de la chaine complète
strncpy(converted_name,Selector->Directory,sizeof(converted_name));
converted_name[sizeof(converted_name)-1] = '\0';
@ -1288,7 +1288,7 @@ void Print_filename_in_fileselector(void)
Update_window_area(82,48,27*8,8);
}
int Selected_type; // Utilisé pour mémoriser le type d'entrée choisi
int Selected_type; // Utilisé pour mémoriser le type d'entrée choisi
// dans le selecteur de fichier.
void Prepare_and_display_filelist(short Position, short offset, T_Scroller_button * button)
@ -1304,11 +1304,11 @@ void Prepare_and_display_filelist(short Position, short offset, T_Scroller_butto
Update_window_area(8-1,95-1,144+2,80+2);
// On récupère le nom du schmilblick à "accéder"
// On récupère le nom du schmilblick à "accéder"
Get_selected_item(&Filelist, Position,offset,Selector_filename,Selector_filename_unicode,&Selected_type);
// On affiche le nouveau nom de fichier
Print_filename_in_fileselector();
// On affiche le nom du répertoire courant
// On affiche le nom du répertoire courant
Print_current_directory();
}
@ -1352,14 +1352,14 @@ void Scroll_fileselector(T_Scroller_button * file_scroller)
strcpy(old_filename,Selector_filename);
// On regarde si la liste a bougé
// On regarde si la liste a bougé
if (file_scroller->Position!=Selector->Position)
{
// Si c'est le cas, il faut mettre à jour la jauge
// Si c'est le cas, il faut mettre à jour la jauge
file_scroller->Position=Selector->Position;
Window_draw_slider(file_scroller);
}
// On récupére le nom du schmilblick à "accéder"
// On récupére le nom du schmilblick à "accéder"
Get_selected_item(&Filelist, Selector->Position,Selector->Offset,Selector_filename,Selector_filename_unicode,&Selected_type);
if (strcmp(old_filename,Selector_filename))
New_preview_is_needed=1;
@ -1513,7 +1513,7 @@ int Quicksearch_list(T_List_button * list, T_Fileselector * selector)
Locate_list_item(list, selected_item);
Hide_cursor();
// Mise à jour du scroller
// Mise à jour du scroller
list->Scroller->Position=list->List_start;
Window_draw_slider(list->Scroller);
@ -1537,12 +1537,12 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
T_Dropdown_button * bookmark_dropdown[4];
short temp;
unsigned int format;
int dummy=0; // Sert à appeler SDL_GetKeyState
int dummy=0; // Sert à appeler SDL_GetKeyState
byte save_or_load_image=0;
byte has_clicked_ok=0;// Indique si on a clické sur Load ou Save ou sur
//un bouton enclenchant Load ou Save juste après.
byte has_clicked_ok=0;// Indique si on a clické sur Load ou Save ou sur
//un bouton enclenchant Load ou Save juste après.
byte initial_back_color; // preview destroys it (how nice)
char previous_directory[MAX_PATH_CHARACTERS]; // Répertoire d'où l'on vient après un CHDIR
char previous_directory[MAX_PATH_CHARACTERS]; // Répertoire d'où l'on vient après un CHDIR
char save_filename[MAX_PATH_CHARACTERS];
word save_filename_unicode[MAX_PATH_CHARACTERS];
char initial_comment[COMMENT_SIZE+1];
@ -1676,8 +1676,8 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
Highlight_file(Find_file_in_fileselector(&Filelist, context->File_name));
Prepare_and_display_filelist(Selector->Position,Selector->Offset,file_scroller);
// On initialise le nom de fichier à celui en cours et non pas celui sous
// la barre de sélection
// On initialise le nom de fichier à celui en cours et non pas celui sous
// la barre de sélection
strcpy(Selector_filename,context->File_name);
Unicode_strlcpy(Selector_filename_unicode, context->File_name_unicode, 256);
// On affiche le nouveau nom de fichier
@ -1748,9 +1748,9 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
// On efface le repertoire (si on peut)
temp=(!Remove_directory(Selector_filename));
if (temp) // temp indique si l'effacement s'est bien passé
if (temp) // temp indique si l'effacement s'est bien passé
{
// On remonte si c'était le dernier élément de la liste
// On remonte si c'était le dernier élément de la liste
if (Selector->Position+Selector->Offset==Filelist.Nb_elements-1)
{
if (Selector->Position)
@ -1759,7 +1759,7 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
if (Selector->Offset)
Selector->Offset--;
}
else // Si ce n'était pas le dernier, il faut faire gaffe à ce
else // Si ce n'était pas le dernier, il faut faire gaffe à ce
{ // que ses copains d'en dessous ne remontent pas trop.
if ( (Selector->Position)
&& (Selector->Position+10==Filelist.Nb_elements) )
@ -1787,14 +1787,14 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
{
if (temp!=Selector->Offset)
{
// On met à jour le décalage
// On met à jour le décalage
Selector->Offset=temp;
// On récupére le nom du schmilblick à "accéder"
// On récupére le nom du schmilblick à "accéder"
Get_selected_item(&Filelist, Selector->Position,Selector->Offset,Selector_filename,Selector_filename_unicode,&Selected_type);
// On affiche le nouveau nom de fichier
Print_filename_in_fileselector();
// On affiche à nouveau la liste
// On affiche à nouveau la liste
Display_file_list(&Filelist, Selector->Position,Selector->Offset);
// On vient de changer de nom de fichier, donc on doit s'appreter
@ -1805,10 +1805,10 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
}
else
{
// En sauvegarde, si on a double-clické sur un répertoire, il
// faut mettre le nom de fichier au nom du répertoire. Sinon, dans
// En sauvegarde, si on a double-clické sur un répertoire, il
// faut mettre le nom de fichier au nom du répertoire. Sinon, dans
// certains cas, on risque de sauvegarder avec le nom du fichier
// actuel au lieu de changer de répertoire.
// actuel au lieu de changer de répertoire.
if (Selector->Position+Selector->Offset<Filelist.Nb_directories)
Get_selected_item(&Filelist, Selector->Position,Selector->Offset,Selector_filename,Selector_filename_unicode,&Selected_type);
@ -1824,11 +1824,11 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
case 5 : // Scroller de fichiers
Hide_cursor();
Selector->Position=Window_attribute2;
// On récupére le nom du schmilblick à "accéder"
// On récupére le nom du schmilblick à "accéder"
Get_selected_item(&Filelist, Selector->Position,Selector->Offset,Selector_filename,Selector_filename_unicode,&Selected_type);
// On affiche le nouveau nom de fichier
Print_filename_in_fileselector();
// On affiche à nouveau la liste
// On affiche à nouveau la liste
Display_file_list(&Filelist, Selector->Position,Selector->Offset);
Display_cursor();
New_preview_is_needed=1;
@ -1972,7 +1972,7 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
#if defined(WIN32) || defined(ENABLE_FILENAMES_ICONV)
Unicode_strlcpy(Selector_filename_unicode, filename_unicode, sizeof(Selector_filename_unicode)/sizeof(word));
#endif
// On regarde s'il faut rajouter une extension. C'est-à-dire s'il
// On regarde s'il faut rajouter une extension. C'est-à-dire s'il
// n'y a pas de '.' dans le nom du fichier.
for(temp=0,dummy=0; ((Selector_filename[temp]) && (!dummy)); temp++)
if (Selector_filename[temp]=='.')
@ -2028,7 +2028,7 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
case 9 : // Volume Select
Hide_cursor();
// Comme on tombe sur un disque qu'on connait pas, on se place en
// début de liste:
// début de liste:
Selector->Position=0;
Selector->Offset=0;
// Affichage des premiers fichiers visibles:
@ -2047,7 +2047,7 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
switch(Window_attribute2)
{
case -1: // bouton lui-même: aller au répertoire mémorisé
case -1: // bouton lui-même: aller au répertoire mémorisé
if (Config.Bookmark_directory[clicked_button-10])
{
// backup the currently selected filename
@ -2087,7 +2087,7 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
case 1: // Rename
if (Config.Bookmark_directory[clicked_button-10])
{
// On enlève les "..." avant l'édition
// On enlève les "..." avant l'édition
char bookmark_label[8+1];
strcpy(bookmark_label, Config.Bookmark_label[clicked_button-10]);
if (bookmark_label[7]==ELLIPSIS_CHARACTER)
@ -2174,10 +2174,10 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
break;
case SDLK_BACKSPACE : // Backspace
Reset_quicksearch();
// Si le choix ".." est bien en tête des propositions...
// Si le choix ".." est bien en tête des propositions...
if (Filelist.Nb_elements && !strcmp(Filelist.First->Full_name,PARENT_DIR))
{
// On va dans le répertoire parent.
// On va dans le répertoire parent.
strcpy(Selector_filename,PARENT_DIR);
Selector_filename_unicode[0] = 0;
Selected_type=1;
@ -2220,7 +2220,7 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
if (has_clicked_ok)
{
// Si c'est un répertoire, on annule "has_clicked_ok" et on passe
// Si c'est un répertoire, on annule "has_clicked_ok" et on passe
// dedans.
if (Selected_type!=0)
{
@ -2281,14 +2281,14 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
// Gestion du chrono et des previews
if (New_preview_is_needed)
{
// On efface les infos de la preview précédente s'il y en a une
// d'affichée
// On efface les infos de la preview précédente s'il y en a une
// d'affichée
if (Timer_state==2)
{
Hide_cursor();
// On efface le commentaire précédent
// On efface le commentaire précédent
Window_rectangle(45,70,32*8,8,MC_Light);
// On nettoie la zone où va s'afficher la preview:
// On nettoie la zone où va s'afficher la preview:
Window_rectangle(183,95,PREVIEW_WIDTH,PREVIEW_HEIGHT,MC_Light);
// On efface les dimensions de l'image
Window_rectangle(101,59,120,8,MC_Light);
@ -2302,15 +2302,15 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
Print_in_window(45,70,context->Comment,MC_Black,MC_Light);
}
Display_cursor();
// Un update pour couvrir les 4 zones: 3 libellés plus le commentaire
// Un update pour couvrir les 4 zones: 3 libellés plus le commentaire
Update_window_area(45,48,256,30);
// Zone de preview
Update_window_area(183,95,PREVIEW_WIDTH,PREVIEW_HEIGHT);
}
New_preview_is_needed=0;
Timer_state=0; // State du chrono = Attente d'un Xème de seconde
// On lit le temps de départ du chrono
Timer_state=0; // State du chrono = Attente d'un Xème de seconde
// On lit le temps de départ du chrono
Init_chrono(Config.Timer_delay);
}
@ -2337,7 +2337,7 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
}
Timer_state=2; // On arrête le chrono
Timer_state=2; // On arrête le chrono
}
}
while ( (!has_clicked_ok) && (clicked_button!=2) );
@ -2358,7 +2358,7 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
}
// On restaure les données de l'image qui ont certainement été modifiées
// On restaure les données de l'image qui ont certainement été modifiées
// par la preview.
Back_color=initial_back_color;
if (Windows_open <= 1)

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@
*/
/* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2011 Pawel Góralski
Copyright 2011 Pawel Góralski
Copyright 2008 Peter Gordon
Copyright 2008 Yves Rizoud
Copyright 2008 Franck Charlet
@ -75,7 +75,7 @@ word * Shortcut(word shortcut_number)
return &(Config_Key[shortcut_number & 0xFF][0]);
}
// Nom de la touche actuallement assignée à un raccourci d'après son numéro
// Nom de la touche actuallement assignée à un raccourci d'après son numéro
// de type 0x100+BOUTON_* ou SPECIAL_*
const char * Keyboard_shortcut_value(word shortcut_number)
{
@ -153,7 +153,7 @@ void Window_set_shortcut(int action_id)
}
}
*/
config_index=order_index; // Comprends pas... ça devrait pas marcher
config_index=order_index; // Comprends pas... ça devrait pas marcher
Open_window(302,131,"Keyboard shortcut");
Window_set_normal_button(181,111,55,14,"Cancel",0,1,KEY_ESC); // 1
@ -304,10 +304,10 @@ void Remove_duplicate_shortcuts(void)
short Print_help(short x_pos, short y_pos, const char *line, char line_type, short link_position, short link_size)
{
short width; // Largeur physique d'une ligne de texte
short x; // Indices d'affichage d'un caractère
short x; // Indices d'affichage d'un caractère
short y;
short x_position; // Parcours de remplissage du buffer de ligne
short char_index; // Parcours des caractères d'une ligne
short char_index; // Parcours des caractères d'une ligne
byte * char_pixel;
short repeat_menu_x_factor;
short repeat_menu_y_factor;
@ -323,20 +323,20 @@ short Print_help(short x_pos, short y_pos, const char *line, char line_type, sho
if (line_type == 'T' || line_type == '-')
width = width*2;
// Pour chaque ligne dans la fenêtre:
// Pour chaque ligne dans la fenêtre:
for (y=0;y<8;y++)
{
x_position=0;
// On crée une nouvelle ligne à splotcher
// On crée une nouvelle ligne à splotcher
for (char_index=0;char_index<width;char_index++)
{
// Recherche du caractère dans les fontes de l'aide.
// Ligne titre : Si l'indice est impair on dessine le quart de caractère
// Recherche du caractère dans les fontes de l'aide.
// Ligne titre : Si l'indice est impair on dessine le quart de caractère
// qui va a gauche, sinon celui qui va a droite.
if (line_type=='T')
{
if (line[char_index/2]>'_' || line[char_index/2]<' ')
char_pixel=&(Gfx->Help_font_norm['!'][0][0]); // Caractère pas géré
char_pixel=&(Gfx->Help_font_norm['!'][0][0]); // Caractère pas géré
else if (char_index & 1)
char_pixel=&(Gfx->Help_font_t2[(unsigned char)(line[char_index/2])-' '][0][0]);
else
@ -345,7 +345,7 @@ short Print_help(short x_pos, short y_pos, const char *line, char line_type, sho
else if (line_type=='-')
{
if (line[char_index/2]>'_' || line[char_index/2]<' ')
char_pixel=&(Gfx->Help_font_norm['!'][0][0]); // Caractère pas géré
char_pixel=&(Gfx->Help_font_norm['!'][0][0]); // Caractère pas géré
else if (char_index & 1)
char_pixel=&(Gfx->Help_font_t4[(unsigned char)(line[char_index/2])-' '][0][0]);
else
@ -396,11 +396,11 @@ void Display_help(void)
const short x_pos=13;
const short y_pos=19;
char line_type; // N: Normale, T: Titre, S: Sous-titre
// -: Ligne inférieur de sous-titre
// -: Ligne inférieur de sous-titre
const char * line;
char buffer[45]; // buffer texte utilisé pour formater les noms de
char buffer[45]; // buffer texte utilisé pour formater les noms de
// raccourcis clavier
short link_position=0; // Position du premier caractère "variable"
short link_position=0; // Position du premier caractère "variable"
short link_size=0; // Taille de la partie variable
short width;
@ -412,8 +412,8 @@ void Display_help(void)
Window_rectangle (x_pos,
y_pos + line_index*8,
44*6,
// 44 = Nb max de char (+1 pour éviter les plantages en mode X
// causés par une largeur = 0)
// 44 = Nb max de char (+1 pour éviter les plantages en mode X
// causés par une largeur = 0)
(16 - line_index)*8,
MC_Black);
break;
@ -421,7 +421,7 @@ void Display_help(void)
// On affiche la ligne
line = Help_section[Current_help_section].Help_table[start_line + line_index].Text;
line_type = Help_section[Current_help_section].Help_table[start_line + line_index].Line_type;
// Si c'est une sous-ligne de titre, on utilise le texte de la ligne précédente
// Si c'est une sous-ligne de titre, on utilise le texte de la ligne précédente
if (line_type == '-' && (start_line + line_index > 0))
line = Help_section[Current_help_section].Help_table[start_line + line_index - 1].Text;
else if (line_type == 'K')
@ -494,8 +494,8 @@ void Button_Help(int btn)
}
Window_help(-1, NULL);
}
// Ouvre l'ecran d'aide. Passer -1 pour la section par défaut (ou derniere,)
// Ou un nombre de l'enumération BUTTON_NUMBERS pour l'aide contextuelle.
// Ouvre l'ecran d'aide. Passer -1 pour la section par défaut (ou derniere,)
// Ou un nombre de l'enumération BUTTON_NUMBERS pour l'aide contextuelle.
void Window_help(int section, const char *sub_section)
{
short clicked_button;
@ -523,7 +523,7 @@ void Window_help(int section, const char *sub_section)
Open_window(310,175,"Help / About...");
// dessiner de la fenêtre où va défiler le texte
// dessiner de la fenêtre où va défiler le texte
Window_display_frame_in(8,17,274,132);
Window_rectangle(9, 18, 272, 130, MC_Black);
@ -568,7 +568,7 @@ void Window_help(int section, const char *sub_section)
case 'K':
Window_set_shortcut(Help_section[Current_help_section].Help_table[Help_position+line].Line_parameter);
break;
// Ici on peut gérer un cas 'lien hypertexte'
// Ici on peut gérer un cas 'lien hypertexte'
default:
break;
}
@ -599,7 +599,7 @@ void Window_help(int section, const char *sub_section)
}
// Gestion des touches de déplacement dans la liste
// Gestion des touches de déplacement dans la liste
switch (Key)
{
case SDLK_UP : // Haut
@ -861,14 +861,14 @@ void Button_Stats(int btn)
Print_in_window(122,y,buffer,STATS_DATA_COLOR,MC_Black);
y+=8;
// Affichage du nombre de couleur utilisé
// Affichage du nombre de couleur utilisé
Print_in_window(18,y,"Colors used:",STATS_TITLE_COLOR,MC_Black);
memset(color_usage,0,sizeof(color_usage));
sprintf(buffer,"%d",Count_used_colors(color_usage));
Print_in_window(122,y,buffer,STATS_DATA_COLOR,MC_Black);
y+=16;
// Affichage des dimensions de l'écran
// Affichage des dimensions de l'écran
Print_in_window(10,y,"Resolution:",STATS_TITLE_COLOR,MC_Black);
sprintf(buffer,"%dx%d",Screen_width,Screen_height);
Print_in_window(106,y,buffer,STATS_DATA_COLOR,MC_Black);

View File

@ -53,7 +53,7 @@ void Window_set_shortcut(int action_id);
/// Print a line with the 'help' (6x8) font.
short Print_help(short x_pos, short y_pos, const char *line, char line_type, short link_position, short link_size);
// Nom de la touche actuallement assignée à un raccourci d'après son numéro
// Nom de la touche actuallement assignée à un raccourci d'après son numéro
// de type 0x100+BOUTON_* ou SPECIAL_*
const char * Keyboard_shortcut_value(word shortcut_number);

View File

@ -766,7 +766,7 @@ T_Key_config ConfigKey[NB_SHORTCUTS] = {
"pixel in the picture into the",
"foreground or background color.",
true,
SDLK_BACKQUOTE, // `~ (Key sous le Esc - ² en AZERTY)
SDLK_BACKQUOTE, // `~ (Key sous le Esc - ² en AZERTY)
0},
{82,
"Swap foreground/background colors",
@ -1097,7 +1097,7 @@ T_Key_config ConfigKey[NB_SHORTCUTS] = {
"user-defined brush to its center.",
"",
true,
SDLK_KP5|MOD_CTRL, // Ctrl + 5 (pavé numérique)
SDLK_KP5|MOD_CTRL, // Ctrl + 5 (pavé numérique)
0},
{113,
"Top-left brush attachment point",
@ -1193,7 +1193,7 @@ T_Key_config ConfigKey[NB_SHORTCUTS] = {
"previous in the user-defined color",
"series.",
true,
SDLK_MINUS, // "-_" (")°" en AZERTY
SDLK_MINUS, // "-_" (")°" en AZERTY
0},
{128,
"Next user-defined backcolor",
@ -1209,7 +1209,7 @@ T_Key_config ConfigKey[NB_SHORTCUTS] = {
"previous in the user-defined color",
"series.",
true,
SDLK_MINUS|MOD_SHIFT, // Shift + "-_" (")°" en AZERTY
SDLK_MINUS|MOD_SHIFT, // Shift + "-_" (")°" en AZERTY
0},
{121,
"Shrink paintbrush",
@ -1875,8 +1875,8 @@ word Ordering[NB_SHORTCUTS]=
0x200+BUTTON_AIRBRUSH, // Spray menu
0x100+BUTTON_FLOODFILL, // Floodfill
0x200+BUTTON_FLOODFILL, // Replace color
0x100+BUTTON_CURVES, // Bézier's curves
0x200+BUTTON_CURVES, // Bézier's curve with 3 or 4 points
0x100+BUTTON_CURVES, // Bézier's curves
0x200+BUTTON_CURVES, // Bézier's curve with 3 or 4 points
0x100+BUTTON_RECTANGLES, // Empty rectangle
0x100+BUTTON_FILLRECT, // Filled rectangle
0x100+BUTTON_CIRCLES, // Empty circle
@ -1921,8 +1921,8 @@ word Ordering[NB_SHORTCUTS]=
0x200+BUTTON_BRUSH, // Restore brush
SPECIAL_FLIP_X, // Flip X
SPECIAL_FLIP_Y, // Flip Y
SPECIAL_ROTATE_90, // 90° brush rotation
SPECIAL_ROTATE_180, // 180° brush rotation
SPECIAL_ROTATE_90, // 90° brush rotation
SPECIAL_ROTATE_180, // 180° brush rotation
SPECIAL_STRETCH, // Stretch brush
SPECIAL_DISTORT, // Distort brush
SPECIAL_OUTLINE, // Outline brush

View File

@ -2,7 +2,7 @@
*/
/* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2011 Pawel Góralski
Copyright 2011 Pawel Góralski
Copyright 2008 Peter Gordon
Copyright 2008 Yves Rizoud
Copyright 2009 Franck Charlet
@ -265,8 +265,8 @@ byte Parse_skin(SDL_Surface * gui, T_Gui_skin *gfx)
int i,j;
int cursor_x=0,cursor_y=0;
byte color;
byte neutral_color; // color neutre utilisée pour délimiter les éléments GUI
int char_1=0; // Indices utilisés pour les 4 "fontes" qui composent les
byte neutral_color; // color neutre utilisée pour délimiter les éléments GUI
int char_1=0; // Indices utilisés pour les 4 "fontes" qui composent les
int char_2=0; // grands titres de l'aide. Chaque indice avance dans
int char_3=0; // l'une des fontes dans l'ordre : 1 2
int char_4=0; // 3 4
@ -289,7 +289,7 @@ byte Parse_skin(SDL_Surface * gui, T_Gui_skin *gfx)
// Read the default palette
Get_SDL_Palette(SDLPal, gfx->Default_palette);
// Carré "noir"
// Carré "noir"
gfx->Color[0] = Get_SDL_pixel_8(gui,cursor_x,cursor_y);
do
{
@ -300,7 +300,7 @@ byte Parse_skin(SDL_Surface * gui, T_Gui_skin *gfx)
}
color=Get_SDL_pixel_8(gui,cursor_x,cursor_y);
} while(color==gfx->Color[0]);
// Carré "foncé"
// Carré "foncé"
gfx->Color[1] = color;
do
{
@ -311,7 +311,7 @@ byte Parse_skin(SDL_Surface * gui, T_Gui_skin *gfx)
}
color=Get_SDL_pixel_8(gui,cursor_x,cursor_y);
} while(color==gfx->Color[1]);
// Carré "clair"
// Carré "clair"
gfx->Color[2] = color;
do
{
@ -322,7 +322,7 @@ byte Parse_skin(SDL_Surface * gui, T_Gui_skin *gfx)
}
color=Get_SDL_pixel_8(gui,cursor_x,cursor_y);
} while(color==gfx->Color[2]);
// Carré "blanc"
// Carré "blanc"
gfx->Color[3] = color;
do
{
@ -333,7 +333,7 @@ byte Parse_skin(SDL_Surface * gui, T_Gui_skin *gfx)
}
color=Get_SDL_pixel_8(gui,cursor_x,cursor_y);
} while(color==gfx->Color[3]);
// Carré "transparent"
// Carré "transparent"
gfx->Color_trans=color;
do
{
@ -878,7 +878,7 @@ void Init_buttons(void)
0);
}
// Ici viennent les déclarations des boutons que l'on sait gérer
// Ici viennent les déclarations des boutons que l'on sait gérer
Init_button(BUTTON_PAINTBRUSHES,
"Paintbrush choice ",
@ -1241,7 +1241,7 @@ void Init_buttons(void)
Init_button(BUTTON_CHOOSE_COL,
"Color #" ,
MENU_WIDTH+1,1,
1,32, // La largeur est mise à jour à chq chngmnt de mode
1,32, // La largeur est mise à jour à chq chngmnt de mode
BUTTON_SHAPE_NO_FRAME,
Button_Select_forecolor,Button_Select_backcolor,
1,1,
@ -1430,9 +1430,9 @@ void Init_buttons(void)
// Initialisation des opérations:
// Initialisation des opérations:
// Initialiseur d'une opération:
// Initialiseur d'une opération:
void Init_operation(byte operation_number,
byte mouse_button,
@ -1450,17 +1450,17 @@ void Init_operation(byte operation_number,
}
// Initiliseur de toutes les opérations:
// Initiliseur de toutes les opérations:
void Init_operations(void)
{
byte number; // Numéro de l'option en cours d'auto-initialisation
byte number; // Numéro de l'option en cours d'auto-initialisation
byte Button; // Button souris en cours d'auto-initialisation
byte stack_index; // Taille de la pile en cours d'auto-initialisation
#define HIDE_CURSOR 1
#define FAST_MOUSE 1
// Auto-initialisation des opérations (vers des actions inoffensives)
// Auto-initialisation des opérations (vers des actions inoffensives)
for (number=0;number<NB_OPERATIONS;number++)
for (Button=0;Button<3;Button++)
@ -1468,7 +1468,7 @@ void Init_operations(void)
Init_operation(number,Button,stack_index,Print_coordinates,0,FAST_MOUSE);
// Ici viennent les déclarations détaillées des opérations
// Ici viennent les déclarations détaillées des opérations
Init_operation(OPERATION_CONTINUOUS_DRAW,1,0,
Freehand_mode1_1_0,HIDE_CURSOR,0);
Init_operation(OPERATION_CONTINUOUS_DRAW,1,2,
@ -1925,9 +1925,9 @@ void Init_operations(void)
//-- Définition des modes vidéo: --------------------------------------------
//-- Définition des modes vidéo: --------------------------------------------
// Définition d'un mode:
// Définition d'un mode:
void Set_video_mode(short width,
short height,
@ -1959,7 +1959,7 @@ void Set_video_mode(short width,
Nb_video_modes ++;
}
// Utilisé pour trier les modes retournés par SDL
// Utilisé pour trier les modes retournés par SDL
int Compare_video_modes(const void *p1, const void *p2)
{
const T_Video_mode *mode1 = (const T_Video_mode *)p1;
@ -2123,7 +2123,7 @@ int Load_CFG(int reload_all)
&& (cfg_header.Version2== 0)
&& (cfg_header.Beta1== 96))
{
// Les touches (scancodes) sont à convertir)
// Les touches (scancodes) sont à convertir)
key_conversion = 1;
}
// Version SDL jusqu'a 98%
@ -2202,7 +2202,7 @@ int Load_CFG(int reload_all)
goto Erreur_lecture_config;
}
break;
case CHUNK_VIDEO_MODES: // Modes vidéo
case CHUNK_VIDEO_MODES: // Modes vidéo
for (index=0; index<(long)(Chunk.Size/5); index++)
{
if (!Read_byte(Handle, &cfg_video_mode.State) ||
@ -2220,9 +2220,9 @@ int Load_CFG(int reload_all)
if (Video_mode[index2].Width==cfg_video_mode.Width &&
Video_mode[index2].Height==cfg_video_mode.Height)
{
// On ne prend le paramètre utilisateur que si la résolution
// est effectivement supportée par SDL
// Seules les deux petits bits sont récupérés, car les anciens fichiers
// On ne prend le paramètre utilisateur que si la résolution
// est effectivement supportée par SDL
// Seules les deux petits bits sont récupérés, car les anciens fichiers
// de configuration (DOS 96.5%) utilisaient d'autres bits.
if (! (Video_mode[index2].State & 128))
Video_mode[index2].State=cfg_video_mode.State&3;
@ -2283,7 +2283,7 @@ int Load_CFG(int reload_all)
goto Erreur_lecture_config;
}
break;
case CHUNK_GRADIENTS: // Infos sur les dégradés
case CHUNK_GRADIENTS: // Infos sur les dégradés
// The gradients chunk is deprecated since the data
// is now loaded/saved in GIF and IFF formats.
// The chunk will be completely ignored.
@ -2537,7 +2537,7 @@ int Save_CFG(void)
goto Erreur_sauvegarde_config;
}
// D'abord compter les modes pour lesquels l'utilisateur a mis une préférence
// D'abord compter les modes pour lesquels l'utilisateur a mis une préférence
modes_to_save=0;
#if defined(__GP2X__) || defined (__WIZ__) || defined (__CAANOO__)
index = 0;
@ -2548,7 +2548,7 @@ int Save_CFG(void)
if (Video_mode[index].State==0 || Video_mode[index].State==2 || Video_mode[index].State==3)
modes_to_save++;
// Sauvegarde de l'état de chaque mode vidéo
// Sauvegarde de l'état de chaque mode vidéo
Chunk.Number=CHUNK_VIDEO_MODES;
Chunk.Size=modes_to_save * 5;
@ -2573,7 +2573,7 @@ int Save_CFG(void)
goto Erreur_sauvegarde_config;
}
// Ecriture des données du Shade (précédées du shade en cours)
// Ecriture des données du Shade (précédées du shade en cours)
Chunk.Number=CHUNK_SHADE;
Chunk.Size=8209;
if (!Write_byte(Handle, Chunk.Number) ||
@ -2611,7 +2611,7 @@ int Save_CFG(void)
if (!Write_bytes(Handle, Stencil,256))
goto Erreur_sauvegarde_config;
// Sauvegarde des informations des dégradés
// Sauvegarde des informations des dégradés
// The gradients chunk is deprecated since the data
// is now loaded/saved in GIF and IFF formats.
/*
@ -2644,7 +2644,7 @@ int Save_CFG(void)
if (!Write_byte(Handle, Smooth_matrix[index][index2]))
goto Erreur_sauvegarde_config;
// Sauvegarde des couleurs à exclure
// Sauvegarde des couleurs à exclure
Chunk.Number=CHUNK_EXCLUDE_COLORS;
Chunk.Size=256;
if (!Write_byte(Handle, Chunk.Number) ||
@ -2787,7 +2787,7 @@ Erreur_sauvegarde_config:
return ERROR_SAVING_CFG;
}
// (Ré)assigne toutes les valeurs de configuration par défaut
// (Ré)assigne toutes les valeurs de configuration par défaut
void Set_config_defaults(void)
{
int index, index2;
@ -2820,7 +2820,7 @@ void Set_config_defaults(void)
for (index2=0; index2<512; index2++)
Shade_list[index].List[index2]=256;
}
// Shade par défaut pour la palette standard
// Shade par défaut pour la palette standard
for (index=0; index<7; index++)
for (index2=0; index2<16; index2++)
Shade_list[0].List[index*17+index2]=index*16+index2+16;

View File

@ -217,7 +217,7 @@ int Move_cursor_with_constraints()
Input_new_mouse_X=Screen_width-1;
mouse_blocked=1;
}
//Gestion "avancée" du curseur: interdire la descente du curseur dans le
//Gestion "avancée" du curseur: interdire la descente du curseur dans le
//menu lorsqu'on est en train de travailler dans l'image
if (Operation_stack_size != 0)
{
@ -680,7 +680,7 @@ int Handle_joystick_press(SDL_JoyButtonEvent event)
}
Key = (KEY_JOYBUTTON+event.button)|Key_modifiers(SDL_GetModState());
// TODO: systeme de répétition
// TODO: systeme de répétition
return Move_cursor_with_constraints();
}
@ -830,7 +830,7 @@ int Directional_acceleration(int msec)
if (msec<initial_delay)
return 1;
// After that, position over time is generally y = ax²+bx+c
// After that, position over time is generally y = ax²+bx+c
// a = 1/accel_factor
// b = 1/linear_factor
// c = 1
@ -842,7 +842,7 @@ int Directional_acceleration(int msec)
int Get_input(int sleep_time)
{
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
Color_cycling();
// Commit any pending screen update.

View File

@ -3,7 +3,7 @@
/* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2018 Thomas Bernard
Copyright 2011 Pawel Góralski
Copyright 2011 Pawel Góralski
Copyright 2008 Yves Rizoud
Copyright 2007 Adrien Destugues
Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud)
@ -22,7 +22,7 @@
along with Grafx2; if not, see <http://www.gnu.org/licenses/>
*/
// Fonctions de lecture/ecriture file, gèrent les systèmes big-endian et
// Fonctions de lecture/ecriture file, gèrent les systèmes big-endian et
// little-endian.
#include <SDL_endian.h>
@ -173,10 +173,10 @@ int Write_dword_be(FILE *file, dword dw)
return fwrite(&dw, 1, sizeof(dword), file) == sizeof(dword);
}
// Détermine la position du dernier '/' ou '\\' dans une chaine,
// typiquement pour séparer le nom de file d'un chemin.
// Détermine la position du dernier '/' ou '\\' dans une chaine,
// typiquement pour séparer le nom de file d'un chemin.
// Attention, sous Windows, il faut s'attendre aux deux car
// par exemple un programme lancé sous GDB aura comme argv[0]:
// par exemple un programme lancé sous GDB aura comme argv[0]:
// d:\Data\C\GFX2\grafx2/grafx2.exe
char * Find_last_separator(const char * str)
{
@ -192,7 +192,7 @@ char * Find_last_separator(const char * str)
position = str;
return (char *)position;
}
// Récupère la partie "nom de file seul" d'un chemin
// Récupère la partie "nom de file seul" d'un chemin
void Extract_filename(char *dest, const char *source)
{
const char * position = Find_last_separator(source);
@ -202,7 +202,7 @@ void Extract_filename(char *dest, const char *source)
else
strcpy(dest,source);
}
// Récupère la partie "répertoire+/" d'un chemin.
// Récupère la partie "répertoire+/" d'un chemin.
void Extract_path(char *dest, const char *source)
{
char * position=NULL;
@ -315,8 +315,8 @@ int Position_last_dot_unicode(const word * fname)
}
int File_exists(const char * fname)
// Détermine si un file passé en paramètre existe ou non dans le
// répertoire courant.
// Détermine si un file passé en paramètre existe ou non dans le
// répertoire courant.
{
#if defined(WIN32)
return (INVALID_FILE_ATTRIBUTES == GetFileAttributesA(fname)) ? 0 : 1;
@ -333,8 +333,8 @@ int File_exists(const char * fname)
}
int Directory_exists(const char * directory)
// Détermine si un répertoire passé en paramètre existe ou non dans le
// répertoire courant.
// Détermine si un répertoire passé en paramètre existe ou non dans le
// répertoire courant.
{
#if defined(WIN32)
DWORD attr = GetFileAttributesA(directory);
@ -342,14 +342,14 @@ int Directory_exists(const char * directory)
return 0;
return (attr & FILE_ATTRIBUTE_DIRECTORY) ? 1 : 0;
#else
DIR* entry; // Structure de lecture des éléments
DIR* entry; // Structure de lecture des éléments
if (strcmp(directory,PARENT_DIR)==0)
return 1;
else
{
// On va chercher si le répertoire existe à l'aide d'un Opendir. S'il
// renvoie NULL c'est que le répertoire n'est pas accessible...
// On va chercher si le répertoire existe à l'aide d'un Opendir. S'il
// renvoie NULL c'est que le répertoire n'est pas accessible...
entry=opendir(directory);
if (entry==NULL)
@ -450,13 +450,13 @@ void For_each_file(const char * directory_name, void Callback(const char *, cons
FindClose(h);
}
#else
// Pour scan de répertoire
DIR* current_directory; //Répertoire courant
struct dirent* entry; // Structure de lecture des éléments
// Pour scan de répertoire
DIR* current_directory; //Répertoire courant
struct dirent* entry; // Structure de lecture des éléments
int filename_position;
strcpy(full_filename, directory_name);
current_directory=opendir(directory_name);
if(current_directory == NULL) return; // Répertoire invalide ...
if(current_directory == NULL) return; // Répertoire invalide ...
filename_position = strlen(full_filename);
#if defined(__AROS__)
if (filename_position==0 || (strcmp(full_filename+filename_position-1,PATH_SEPARATOR) && strcmp(full_filename+filename_position-1,":")))

View File

@ -3,7 +3,7 @@
/* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2018 Thomas Bernard
Copyright 2011 Pawel Góralski
Copyright 2011 Pawel Góralski
Copyright 2008 Yves Rizoud
Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud)

View File

@ -345,7 +345,7 @@ word Keysym_to_keycode(SDL_keysym keysym)
word key_code = 0;
word mod;
// On ignore shift, alt et control isolés.
// On ignore shift, alt et control isolés.
if (keysym.sym == SDLK_RSHIFT || keysym.sym == SDLK_LSHIFT ||
keysym.sym == SDLK_RCTRL || keysym.sym == SDLK_LCTRL ||
keysym.sym == SDLK_RALT || keysym.sym == SDLK_LALT ||
@ -353,8 +353,8 @@ word Keysym_to_keycode(SDL_keysym keysym)
keysym.sym == SDLK_MODE) // AltGr
return 0;
// Les touches qui n'ont qu'une valeur unicode (très rares)
// seront codées sur 11 bits, le 12e bit est mis à 1 (0x0800)
// Les touches qui n'ont qu'une valeur unicode (très rares)
// seront codées sur 11 bits, le 12e bit est mis à 1 (0x0800)
if (keysym.sym != 0)
key_code = keysym.sym;
else if (keysym.scancode != 0)
@ -610,7 +610,7 @@ const char * Key_name(word key)
return buffer;
}
// Touches au libellé connu
// Touches au libellé connu
for (index=0; index < (long)sizeof(key_labels)/(long)sizeof(T_key_label);index++)
{
if (key == key_labels[index].keysym)
@ -625,9 +625,9 @@ const char * Key_name(word key)
}
// Obtient le caractère ANSI tapé, à partir d'un keysym.
// (Valeur 32 à 255)
// Renvoie 0 s'il n'y a pas de caractère associé (shift, backspace, etc)
// Obtient le caractère ANSI tapé, à partir d'un keysym.
// (Valeur 32 à 255)
// Renvoie 0 s'il n'y a pas de caractère associé (shift, backspace, etc)
word Keysym_to_ANSI(SDL_keysym keysym)
{
// This part was removed from the MacOSX port, but I put it back for others
@ -667,61 +667,61 @@ word Keysym_to_ANSI(SDL_keysym keysym)
switch(keysym.unicode)
{
case 0x8100:
return '\xfc'; // ü
return '\xfc'; // ü
case 0x1A20:
return '\xe9'; // é
return '\xe9'; // é
case 0x201A:
return '\xe8'; // è
return '\xe8'; // è
case 0x9201:
return '\xe2'; // â
return '\xe2'; // â
case 0x1E20:
return '\xe4'; // ä
return '\xe4'; // ä
case 0x2620:
return '\xe0'; // à
return '\xe0'; // à
case 0x2020:
return '\xe5'; // å
return '\xe5'; // å
case 0x2120:
return '\xe7'; // ç
return '\xe7'; // ç
case 0xC602:
return '\xea'; // ê
return '\xea'; // ê
case 0x3020:
return '\xeb'; // ë
return '\xeb'; // ë
case 0x6001:
return '\xe8'; // è
return '\xe8'; // è
case 0x3920:
return '\xef'; // ï
return '\xef'; // ï
case 0x5201:
return '\xee'; // î
return '\xee'; // î
case 0x8D00:
return '\xec'; // ì
return '\xec'; // ì
case 0x1C20:
return '\xf4'; // ô
return '\xf4'; // ô
case 0x1D20:
return '\xf6'; // ö
return '\xf6'; // ö
case 0x2220:
return '\xf2'; // ò
return '\xf2'; // ò
case 0x1320:
return '\xfb'; // û
return '\xfb'; // û
case 0x1420:
return '\xf9'; // ù
return '\xf9'; // ù
case 0xDC02:
return '\xff'; // ÿ
return '\xff'; // ÿ
case 0x5301:
return '\xa3'; // £
return '\xa3'; // £
case 0xA000:
return '\xe1'; // á
return '\xe1'; // á
case 0xA100:
return '\xed'; // í
return '\xed'; // í
case 0xA200:
return '\xf3'; // ó
return '\xf3'; // ó
case 0xA300:
return '\xfa'; // ú
return '\xfa'; // ú
case 0xA400:
return '\xf1'; // ñ
return '\xf1'; // ñ
case 0xA700:
return '\xba'; // º
return '\xba'; // º
case 0xC600:
return '\xe3'; // ã
return '\xe3'; // ã
case 0x20AC:
return '\x80'; // Euro sign is 20AC in unicode, 80 in CP1252
}
@ -745,6 +745,6 @@ word Keysym_to_ANSI(SDL_keysym keysym)
return keysym.unicode;
}
// Sinon c'est une touche spéciale, on retourne son scancode
// Sinon c'est une touche spéciale, on retourne son scancode
return keysym.sym;
}

View File

@ -2,7 +2,7 @@
*/
/* GFX2CRTC - libraw2crtc.c
* CloudStrife - 20080921
* Diffusé sous licence libre CeCILL v2
* Diffusé sous licence libre CeCILL v2
* Voire LICENCE
*/

View File

@ -2,7 +2,7 @@
*/
/* GFX2CRTC - libraw2crtc.h
* CloudStrife - 20080921
* Diffusé sous licence libre CeCILL v2
* Diffusé sous licence libre CeCILL v2
* Voire LICENCE
*/

View File

@ -2,7 +2,7 @@
*/
/* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2011 Pawel Góralski
Copyright 2011 Pawel Góralski
Copyright 2010 Alexander Filyanov
Copyright 2009 Petter Lindquist
Copyright 2008 Yves Rizoud
@ -125,7 +125,7 @@ void Set_pixel(T_IO_Context *context, short x_pos, short y_pos, byte color)
switch (context->Type)
{
// Chargement des pixels dans l'écran principal
// Chargement des pixels dans l'écran principal
case CONTEXT_MAIN_IMAGE:
Pixel_in_current_screen(x_pos,y_pos,color);
break;
@ -257,12 +257,12 @@ void Set_pixel_24b(T_IO_Context *context, short x_pos, short y_pos, byte r, byte
// Création d'une palette fake
// Création d'une palette fake
void Set_palette_fake_24b(T_Palette palette)
{
int color;
// Génération de la palette
// Génération de la palette
for (color=0;color<256;color++)
{
palette[color].R=((color & 0xE0)>>5)<<5;
@ -318,13 +318,13 @@ void Pre_load(T_IO_Context *context, short width, short height, long file_size,
{
// Preview
case CONTEXT_PREVIEW:
// Préparation du chargement d'une preview:
// Préparation du chargement d'une preview:
context->Preview_bitmap=calloc(1, PREVIEW_WIDTH*PREVIEW_HEIGHT*Menu_factor_X*Menu_factor_Y);
if (!context->Preview_bitmap)
File_error=1;
// Affichage des données "Image size:"
// Affichage des données "Image size:"
memcpy(str, "VERY BIG!", 10); // default string
if (context->Original_width != 0)
{
@ -359,7 +359,7 @@ void Pre_load(T_IO_Context *context, short width, short height, long file_size,
}
else
{
// Le fichier fait plus de 100 Mega octets (cas très rare :))
// Le fichier fait plus de 100 Mega octets (cas très rare :))
memcpy(str,"LARGE!!",8);
}
Print_in_window(236,59,str,MC_Black,MC_Light);
@ -370,10 +370,10 @@ void Pre_load(T_IO_Context *context, short width, short height, long file_size,
Print_in_window( 59,59,Get_fileformat(format)->Label,MC_Black,MC_Light);
}
// On efface le commentaire précédent
// On efface le commentaire précédent
Window_rectangle(45,70,32*8,8,MC_Light);
// Calcul des données nécessaires à l'affichage de la preview:
// Calcul des données nécessaires à l'affichage de la preview:
if (ratio == PIXEL_WIDE &&
Pixel_ratio != PIXEL_WIDE &&
Pixel_ratio != PIXEL_WIDE2)
@ -398,10 +398,10 @@ void Pre_load(T_IO_Context *context, short width, short height, long file_size,
context->Preview_pos_X=Window_pos_X+183*Menu_factor_X;
context->Preview_pos_Y=Window_pos_Y+ 95*Menu_factor_Y;
// On nettoie la zone où va s'afficher la preview:
// On nettoie la zone où va s'afficher la preview:
Window_rectangle(183,95,PREVIEW_WIDTH,PREVIEW_HEIGHT,MC_Light);
// Un update pour couvrir les 4 zones: 3 libellés plus le commentaire
// Un update pour couvrir les 4 zones: 3 libellés plus le commentaire
Update_window_area(45,48,256,30);
// Zone de preview
Update_window_area(183,95,PREVIEW_WIDTH,PREVIEW_HEIGHT);
@ -411,9 +411,9 @@ void Pre_load(T_IO_Context *context, short width, short height, long file_size,
case CONTEXT_MAIN_IMAGE:
if (Backup_new_image(1,width,height))
{
// La nouvelle page a pu être allouée, elle est pour l'instant pleine
// La nouvelle page a pu être allouée, elle est pour l'instant pleine
// de 0s. Elle fait Main_image_width de large.
// Normalement tout va bien, tout est sous contrôle...
// Normalement tout va bien, tout est sous contrôle...
// Load into layer 0, by default.
context->Nb_layers=1;
@ -428,7 +428,7 @@ void Pre_load(T_IO_Context *context, short width, short height, long file_size,
else
{
// Afficher un message d'erreur
// Pour être sûr que ce soit lisible.
// Pour être sûr que ce soit lisible.
Compute_optimal_menu_colors(context->Palette);
Message_out_of_memory();
File_error=1; // 1 => On n'a pas perdu l'image courante
@ -502,7 +502,7 @@ void Pre_load(T_IO_Context *context, short width, short height, long file_size,
}
/////////////////////////////////////////////////////////////////////////////
// Gestion des lectures et écritures //
// Gestion des lectures et écritures //
/////////////////////////////////////////////////////////////////////////////
void Write_one_byte(FILE *file, byte b)
@ -513,12 +513,12 @@ void Write_one_byte(FILE *file, byte b)
/////////////////////////////////////////////////////////////////////////////
// -------- Modifier la valeur du code d'erreur d'accès à un fichier --------
// On n'est pas obligé d'utiliser cette fonction à chaque fois mais il est
// -------- Modifier la valeur du code d'erreur d'accès à un fichier --------
// On n'est pas obligé d'utiliser cette fonction à chaque fois mais il est
// important de l'utiliser dans les cas du type:
// if (!File_error) *** else File_error=***;
// En fait, dans le cas où l'on modifie File_error alors qu'elle contient
// dèjà un code d'erreur.
// En fait, dans le cas où l'on modifie File_error alors qu'elle contient
// dèjà un code d'erreur.
void Set_file_error(int value)
{
if (File_error>=0)
@ -530,7 +530,7 @@ void Set_file_error(int value)
void Load_image(T_IO_Context *context)
{
unsigned int index; // index de balayage des formats
const T_Format *format = &(File_formats[FORMAT_ALL_FILES+1]); // Format du fichier à charger
const T_Format *format = &(File_formats[FORMAT_ALL_FILES+1]); // Format du fichier à charger
int i;
byte old_cursor_shape;
FILE * f;
@ -538,7 +538,7 @@ void Load_image(T_IO_Context *context)
// Not sure it's the best place...
context->Color_cycles=0;
// On place par défaut File_error à vrai au cas où on ne sache pas
// On place par défaut File_error à vrai au cas où on ne sache pas
// charger le format du fichier:
File_error=1;
@ -559,8 +559,8 @@ void Load_image(T_IO_Context *context)
if (File_error)
{
// Sinon, on va devoir scanner les différents formats qu'on connait pour
// savoir à quel format est le fichier:
// Sinon, on va devoir scanner les différents formats qu'on connait pour
// savoir à quel format est le fichier:
for (index=0; index < Nb_known_formats(); index++)
{
format = Get_fileformat(index);
@ -571,7 +571,7 @@ void Load_image(T_IO_Context *context)
fseek(f, 0, SEEK_SET); // rewind
// On appelle le testeur du format:
format->Test(context, f);
// On s'arrête si le fichier est au bon format:
// On s'arrête si le fichier est au bon format:
if (File_error==0)
break;
}
@ -593,8 +593,8 @@ void Load_image(T_IO_Context *context)
if (File_error)
{
// Sinon, l'appelant sera au courant de l'échec grace à File_error;
// et si on s'apprêtait à faire un chargement définitif de l'image (pas
// Sinon, l'appelant sera au courant de l'échec grace à File_error;
// et si on s'apprêtait à faire un chargement définitif de l'image (pas
// une preview), alors on flash l'utilisateur.
//if (Pixel_load_function!=Pixel_load_in_preview)
// Error(0);
@ -602,12 +602,12 @@ void Load_image(T_IO_Context *context)
}
}
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:
// Dans certains cas il est possible que le chargement plante
// après avoir modifié la palette. TODO
// après avoir modifié la palette. TODO
format->Load(context);
}
@ -754,7 +754,7 @@ void Load_image(T_IO_Context *context)
Main.backups->Pages->Filename_unicode[0] = 0;
}
// On considère que l'image chargée n'est plus modifiée
// 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;
@ -801,15 +801,15 @@ void Load_image(T_IO_Context *context)
}
else if (File_error!=1)
{
// On considère que l'image chargée est encore modifiée
// On considère que l'image chargée est encore modifiée
Main.image_is_modified=1;
// Et on documente la variable Main_fileformat avec la valeur:
Main.fileformat=format->Identifier;
}
else
{
// Dans ce cas, on sait que l'image n'a pas changé, mais ses
// paramètres (dimension, palette, ...) si. Donc on les restaures.
// Dans ce cas, on sait que l'image n'a pas changé, mais ses
// paramètres (dimension, palette, ...) si. Donc on les restaures.
Download_infos_page_main(Main.backups->Pages);
}
}
@ -956,7 +956,7 @@ void Save_image(T_IO_Context *context)
{
const T_Format *format;
// On place par défaut File_error à vrai au cas où on ne sache pas
// On place par défaut File_error à vrai au cas où on ne sache pas
// sauver le format du fichier: (Est-ce vraiment utile??? Je ne crois pas!)
File_error=1;
@ -1204,7 +1204,7 @@ void Emergency_backup(const char *fname, byte *source, int width, int height, T_
return;
}
// Ouf, sauvé
// Ouf, sauvé
fclose(file);
}

View File

@ -2,7 +2,7 @@
*/
/* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2011 Pawel Góralski
Copyright 2011 Pawel Góralski
Copyright 2009 Pasi Kallinen
Copyright 2008 Peter Gordon
Copyright 2008 Franck Charlet
@ -97,7 +97,7 @@ extern char Program_version[]; // generated in pversion.c
static int setsize_width;
static int setsize_height;
//--- 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)
{
int mode_index;
@ -152,8 +152,8 @@ void Error_function(int error_code, const char *filename, int line_number, const
if (error_code==0)
{
// L'erreur 0 n'est pas une vraie erreur, elle fait seulement un flash rouge de l'écran pour dire qu'il y a un problème.
// Toutes les autres erreurs déclenchent toujours une sortie en catastrophe du programme !
// L'erreur 0 n'est pas une vraie erreur, elle fait seulement un flash rouge de l'écran pour dire qu'il y a un problème.
// Toutes les autres erreurs déclenchent toujours une sortie en catastrophe du programme !
memcpy(backup_palette, Get_current_palette(), sizeof(T_Palette));
memcpy(temp_palette, backup_palette, sizeof(T_Palette));
for (index=0;index<=255;index++)
@ -444,10 +444,10 @@ int Analyze_command_line(int argc, char * argv[], char *main_filename, char *mai
}
break;
default:
// Si ce n'est pas un paramètre, c'est le nom du fichier à ouvrir
// Si ce n'est pas un paramètre, c'est le nom du fichier à ouvrir
if (file_in_command_line > 1)
{
// Il y a déjà 2 noms de fichiers et on vient d'en trouver un 3ème
// Il y a déjà 2 noms de fichiers et on vient d'en trouver un 3ème
Error(ERROR_COMMAND_LINE);
Display_syntax();
exit(0);
@ -534,9 +534,9 @@ int Init_program(int argc,char * argv[])
#endif
#endif /* ENABLE_FILENAMES_ICONV */
// On crée dès maintenant les descripteurs des listes de pages pour la page
// On crée dès maintenant les descripteurs des listes de pages pour la page
// principale et la page de brouillon afin que leurs champs ne soient pas
// invalide lors des appels aux multiples fonctions manipulées à
// invalide lors des appels aux multiples fonctions manipulées à
// l'initialisation du programme.
Main.backups=(T_List_of_pages *)malloc(sizeof(T_List_of_pages));
Spare.backups=(T_List_of_pages *)malloc(sizeof(T_List_of_pages));
@ -549,13 +549,13 @@ int Init_program(int argc,char * argv[])
Set_data_directory(program_directory,Data_directory);
// Choose directory for settings (read/write)
Set_config_directory(program_directory,Config_directory);
// On détermine le répertoire courant:
// On détermine le répertoire courant:
Get_current_directory(Main.selector.Directory,Main.selector.Directory_unicode,MAX_PATH_CHARACTERS);
// On en profite pour le mémoriser dans le répertoire principal:
// On en profite pour le mémoriser dans le répertoire principal:
strcpy(Initial_directory,Main.selector.Directory);
// On initialise les données sur le nom de fichier de l'image de brouillon:
// On initialise les données sur le nom de fichier de l'image de brouillon:
strcpy(Spare.selector.Directory,Main.selector.Directory);
Main.fileformat=DEFAULT_FILEFORMAT;
@ -570,8 +570,8 @@ int Init_program(int argc,char * argv[])
// On initialise ce qu'il faut pour que les fileselects ne plantent pas:
Main.selector.Position=0; // Au début, le fileselect est en haut de la liste des fichiers
Main.selector.Offset=0; // Au début, le fileselect est en haut de la liste des fichiers
Main.selector.Position=0; // Au début, le fileselect est en haut de la liste des fichiers
Main.selector.Offset=0; // Au début, le fileselect est en haut de la liste des fichiers
Main.selector.Format_filter=FORMAT_ALL_IMAGES;
Main.current_layer=0;
@ -640,26 +640,26 @@ int Init_program(int argc,char * argv[])
// Texte
Init_text();
// On initialise tous les modes vidéo
// On initialise tous les modes vidéo
Set_all_video_modes();
Pixel_ratio=PIXEL_SIMPLE;
// On initialise les données sur l'état du programme:
// Donnée sur la sortie du programme:
// On initialise les données sur l'état du programme:
// Donnée sur la sortie du programme:
Quit_is_required=0;
Quitting=0;
// Données sur l'état du menu:
// Données sur l'état du menu:
Menu_is_visible=1;
// Données sur les couleurs et la palette:
// Données sur les couleurs et la palette:
First_color_in_palette=0;
// Données sur le curseur:
// Données sur le curseur:
Cursor_shape=CURSOR_SHAPE_TARGET;
Cursor_hidden=0;
// Données sur le pinceau:
// Données sur le pinceau:
Paintbrush_X=0;
Paintbrush_Y=0;
Paintbrush_hidden=0;
// On initialise tout ce qui concerne les opérations et les effets
// On initialise tout ce qui concerne les opérations et les effets
Operation_stack_size=0;
Selected_freehand_mode=OPERATION_CONTINUOUS_DRAW;
Selected_line_mode =OPERATION_LINE;
@ -677,10 +677,10 @@ int Init_program(int argc,char * argv[])
// On initialise les infos du mode smooth:
Smooth_mode=0;
// On initialise les infos du mode shade:
Shade_mode=0; // Les autres infos du Shade sont chargées avec la config
Shade_mode=0; // Les autres infos du Shade sont chargées avec la config
Quick_shade_mode=0; // idem
// On initialise les infos sur les dégradés:
Gradient_pixel =Display_pixel; // Les autres infos sont chargées avec la config
// On initialise les infos sur les dégradés:
Gradient_pixel =Display_pixel; // Les autres infos sont chargées avec la config
// On initialise les infos de la grille:
Snap_mode=0;
Snap_width=8;
@ -688,13 +688,13 @@ int Init_program(int argc,char * argv[])
Snap_offset_X=0;
Snap_offset_Y=0;
// On initialise les infos du mode Colorize:
Colorize_mode=0; // Mode colorize inactif par défaut
Colorize_opacity=50; // Une interpolation de 50% par défaut
Colorize_current_mode=0; // Par défaut, la méthode par interpolation
Colorize_mode=0; // Mode colorize inactif par défaut
Colorize_opacity=50; // Une interpolation de 50% par défaut
Colorize_current_mode=0; // Par défaut, la méthode par interpolation
Compute_colorize_table();
// On initialise les infos du mode Tiling:
Tiling_mode=0; // Pas besoin d'initialiser les décalages car ça se fait
// en prenant une brosse (toujours mis à 0).
Tiling_mode=0; // Pas besoin d'initialiser les décalages car ça se fait
// en prenant une brosse (toujours mis à 0).
// On initialise les infos du mode Mask:
Mask_mode=0;
@ -704,11 +704,11 @@ int Init_program(int argc,char * argv[])
Airbrush_delay=1;
Airbrush_mono_flow=10;
memset(Airbrush_multi_flow,0,256);
srand(time(NULL)); // On randomize un peu tout ça...
srand(time(NULL)); // On randomize un peu tout ça...
// Initialisation des boutons
Init_buttons();
// Initialisation des opérations
// Initialisation des opérations
Init_operations();
// Initialize the brush container
@ -741,7 +741,7 @@ int Init_program(int argc,char * argv[])
switch(Load_CFG(1))
{
case ERROR_CFG_MISSING:
// Pas un problème, on a les valeurs par défaut.
// Pas un problème, on a les valeurs par défaut.
break;
case ERROR_CFG_CORRUPTED:
DEBUG("Corrupted CFG file.",0);
@ -807,7 +807,7 @@ int Init_program(int argc,char * argv[])
Fore_color=Best_color_range(255,255,255,Config.Palette_cells_X*Config.Palette_cells_Y);
Back_color=Best_color_range(0,0,0,Config.Palette_cells_X*Config.Palette_cells_Y);
// Allocation de mémoire pour la brosse
// Allocation de mémoire pour la brosse
if (!(Brush =(byte *)malloc( 1* 1))) Error(ERROR_MEMORY);
if (!(Smear_brush =(byte *)malloc(MAX_PAINTBRUSH_SIZE*MAX_PAINTBRUSH_SIZE))) Error(ERROR_MEMORY);
@ -848,13 +848,13 @@ int Init_program(int argc,char * argv[])
starting_image_mode = Config.Default_mode_layers ?
IMAGE_MODE_LAYERED : IMAGE_MODE_ANIMATION;
// Allocation de mémoire pour les différents écrans virtuels (et brosse)
// Allocation de mémoire pour les différents écrans virtuels (et brosse)
if (Init_all_backup_lists(starting_image_mode , Screen_width, Screen_height)==0)
Error(ERROR_MEMORY);
// Update toolbars' visibility, now that the current image has a mode
Check_menu_mode();
// Nettoyage de l'écran virtuel (les autres recevront celui-ci par copie)
// Nettoyage de l'écran virtuel (les autres recevront celui-ci par copie)
memset(Main_screen,0,Main.image_width*Main.image_height);
// If image size was specified on command line, set that now
@ -890,7 +890,7 @@ int Init_program(int argc,char * argv[])
Draw_menu_button(BUTTON_PAL_LEFT,BUTTON_RELEASED);
Draw_menu_button(BUTTON_PAL_RIGHT,BUTTON_RELEASED);
// On affiche le curseur pour débuter correctement l'état du programme:
// On affiche le curseur pour débuter correctement l'état du programme:
Display_cursor();
Spare.image_is_modified=0;
@ -899,10 +899,10 @@ int Init_program(int argc,char * argv[])
// Gestionnaire de signaux, quand il ne reste plus aucun espoir
Init_sighandler();
// Le programme débute en mode de dessin à la main
// Le programme débute en mode de dessin à la main
Select_button(BUTTON_DRAW,LEFT_SIDE);
// On initialise la brosse initiale à 1 pixel blanc:
// On initialise la brosse initiale à 1 pixel blanc:
Brush_width=1;
Brush_height=1;
for (temp=0;temp<256;temp++)
@ -919,7 +919,7 @@ int Init_program(int argc,char * argv[])
strcpy(Main.selector.Directory, main_directory);
}
// Test de recuperation de fichiers sauvés
// Test de recuperation de fichiers sauvés
switch (Check_recovery())
{
T_IO_Context context;
@ -1057,11 +1057,11 @@ void Program_shutdown(void)
// Remove the safety backups, this is normal exit
Delete_safety_backups();
// On libère le buffer de gestion de lignes
// On libère le buffer de gestion de lignes
free(Horizontal_line_buffer);
Horizontal_line_buffer = NULL;
// On libère le pinceau spécial
// On libère le pinceau spécial
free(Paintbrush_sprite);
Paintbrush_sprite = NULL;
@ -1095,10 +1095,10 @@ void Program_shutdown(void)
Unicode_fonts = ufont;
}
// On prend bien soin de passer dans le répertoire initial:
// On prend bien soin de passer dans le répertoire initial:
if (Change_directory(Initial_directory)==0)
{
// On sauvegarde les données dans le .CFG et dans le .INI
// On sauvegarde les données dans le .CFG et dans le .INI
if (Config.Auto_save)
{
return_code=Save_CFG();
@ -1143,7 +1143,7 @@ void Program_shutdown(void)
}
// -------------------------- Procédure principale ---------------------------
// -------------------------- Procédure principale ---------------------------
int main(int argc,char * argv[])
{

View File

@ -2,7 +2,7 @@
*/
/* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2011 Pawel Góralski
Copyright 2011 Pawel Góralski
Copyright 2008 Yves Rizoud
Copyright 2008 Franck Charlet
Copyright 2007 Adrien Destugues
@ -113,7 +113,7 @@ word Count_used_colors_screen_area(dword* usage, word start_x, word start_y,
usage[color]++; //Un point de plus pour cette couleur
}
}
//On va maintenant compter dans la table les couleurs utilisées:
//On va maintenant compter dans la table les couleurs utilisées:
for (i = 0; i < 256; i++)
{
if (usage[i]!=0)
@ -136,7 +136,7 @@ word Count_used_colors_area(dword* usage, word start_x, word start_y,
// Init usage table
for (i = 0; i < 256; i++) usage[i]=0;
// On parcourt l'écran courant pour compter les utilisations des couleurs
// On parcourt l'écran courant pour compter les utilisations des couleurs
for (y = 0; y < height; y++)
{
for (x = 0; x < width; x++)
@ -147,7 +147,7 @@ word Count_used_colors_area(dword* usage, word start_x, word start_y,
}
}
//On va maintenant compter dans la table les couleurs utilisées:
//On va maintenant compter dans la table les couleurs utilisées:
for (i = 0; i < 256; i++)
{
if (usage[i]!=0)
@ -197,7 +197,7 @@ void Set_color(byte color, byte red, byte green, byte blue)
void Wait_end_of_click(void)
{
// On désactive tous les raccourcis clavier
// On désactive tous les raccourcis clavier
while(Mouse_K)
Get_input(20);
@ -233,7 +233,7 @@ void Clear_current_image(byte color)
}
void Init_chrono(dword delay)
// Démarrer le chrono
// Démarrer le chrono
{
Timer_delay = delay;
Timer_start = SDL_GetTicks()/55;
@ -265,7 +265,7 @@ void Copy_part_of_image_to_another(byte * source,word source_x,word source_y,wor
{
memcpy(edi,esi,width);
// Passe à la ligne suivante
// Passe à la ligne suivante
esi+=source_width;
edi+=destination_width;
}
@ -340,7 +340,7 @@ void Remap_general_lowlevel(byte * conversion_table,byte * in_buffer, byte *out_
void Copy_image_to_brush(short start_x,short start_y,short Brush_width,short Brush_height,word image_width)
{
byte* src=start_y*image_width+start_x+Main.backups->Pages->Image[Main.current_layer].Pixels; //Adr départ image (ESI)
byte* src=start_y*image_width+start_x+Main.backups->Pages->Image[Main.current_layer].Pixels; //Adr départ image (ESI)
byte* dest=Brush_original_pixels; //Adr dest brosse (EDI)
int dx;
@ -351,7 +351,7 @@ void Copy_image_to_brush(short start_x,short start_y,short Brush_width,short Bru
// On fait une copie de la ligne
memcpy(dest,src,Brush_width);
// On passe à la ligne suivante
// On passe à la ligne suivante
src+=image_width;
dest+=Brush_width;
}
@ -436,7 +436,7 @@ byte Effect_interpolated_colorize (word x,word y,byte color)
byte red_under=Main.palette[color_under].R;
byte red=Main.palette[color].R;
// On récupère les 3 composantes RVB
// On récupère les 3 composantes RVB
// blue
blue = (Factors_inv_table[blue]
@ -513,7 +513,7 @@ void Flip_Y_lowlevel(byte *src, short width, short height)
while(ESI < EDI)
{
// Il faut inverser les lignes pointées par ESI et
// Il faut inverser les lignes pointées par ESI et
// EDI ("Brush_width" octets en tout)
for(cx = width;cx>0;cx--)
@ -526,9 +526,9 @@ void Flip_Y_lowlevel(byte *src, short width, short height)
}
// On change de ligne :
// ESI pointe déjà sur le début de la ligne suivante
// ESI pointe déjà sur le début de la ligne suivante
// EDI pointe sur la fin de la ligne en cours, il
// doit pointer sur le début de la précédente...
// doit pointer sur le début de la précédente...
EDI -= 2 * width; // On recule de 2 lignes
}
}
@ -550,7 +550,7 @@ void Flip_X_lowlevel(byte *src, short width, short height)
line_start = ESI;
line_end = EDI;
// On échange par colonnes
// On échange par colonnes
for(cx=height;cx>0;cx--)
{
tmp=*ESI;
@ -562,16 +562,16 @@ void Flip_X_lowlevel(byte *src, short width, short height)
// On change de colonne
// ESI > colonne suivante
// EDI > colonne précédente
// EDI > colonne précédente
ESI = line_start + 1;
EDI = line_end - 1;
}
}
// Rotate a pixel buffer 180º on itself.
// Rotate a pixel buffer 180º on itself.
void Rotate_180_deg_lowlevel(byte *src, short width, short height)
{
// ESI pointe sur la partie supérieure de la brosse
// ESI pointe sur la partie supérieure de la brosse
// EDI pointe sur la partie basse
byte* ESI = src;
byte* EDI = src + height*width - 1;
@ -591,9 +591,9 @@ void Rotate_180_deg_lowlevel(byte *src, short width, short height)
while(ESI < EDI)
{
// On échange les deux lignes pointées par EDI et
// On échange les deux lignes pointées par EDI et
// ESI (Brush_width octets)
// En même temps, on échange les pixels, donc EDI
// En même temps, on échange les pixels, donc EDI
// pointe sur la FIN de sa ligne
for(cx=width;cx>0;cx--)
@ -614,8 +614,8 @@ void Rescale(byte *src_buffer, short src_width, short src_height, byte *dst_buff
int x_pos_in_brush; // Position courante dans l'ancienne brosse
int y_pos_in_brush;
int initial_x_pos; // Position X de début de parcours de ligne
int initial_y_pos; // Position Y de début de parcours de ligne
int initial_x_pos; // Position X de début de parcours de ligne
int initial_y_pos; // Position Y de début de parcours de ligne
int delta_x, delta_y;
@ -642,13 +642,13 @@ void Rescale(byte *src_buffer, short src_width, short src_height, byte *dst_buff
// Pour chaque ligne
for (line=0;line<dst_height;line++)
{
// On passe à la ligne de brosse suivante:
// On passe à la ligne de brosse suivante:
y_pos_in_brush = initial_y_pos + line * delta_y / dst_height;
// Pour chaque colonne:
for (column=0;column<dst_width;column++)
{
// On passe à la colonne de brosse suivante:
// On passe à la colonne de brosse suivante:
x_pos_in_brush = initial_x_pos + column * delta_x / dst_width;
// On copie le pixel:
dst_buffer[offset]=*(src_buffer + x_pos_in_brush + y_pos_in_brush * src_width);
@ -663,7 +663,7 @@ void Scroll_picture(byte * main_src, byte * main_dest, short x_offset,short y_of
{
byte* src = main_src; //source de la copie
byte* dest = main_dest + y_offset * Main.image_width + x_offset;
const word length = Main.image_width - x_offset; // Nombre de pixels à copier à droite
const word length = Main.image_width - x_offset; // Nombre de pixels à copier à droite
word y;
for(y = Main.image_height - y_offset;y>0;y--)
{
@ -671,7 +671,7 @@ void Scroll_picture(byte * main_src, byte * main_dest, short x_offset,short y_of
memcpy(dest,src,length);
memcpy(dest - x_offset,src+length,x_offset);
// On passe à la ligne suivante
// On passe à la ligne suivante
dest += Main.image_width;
src += Main.image_width;
}
@ -740,7 +740,7 @@ void Atari_Memory_free(unsigned long *stRam,unsigned long *ttRam){
*ttRam = Mxalloc(-1L,1);
}
#else
// Indique quelle est la mémoire disponible
// Indique quelle est la mémoire disponible
unsigned long Memory_free(void)
{
// Memory is no longer relevant. If there is ANY problem or doubt here,
@ -789,7 +789,7 @@ unsigned long Memory_free(void)
// Arrondir un nombre réel à la valeur entière la plus proche
// Arrondir un nombre réel à la valeur entière la plus proche
// TODO : this should probably be replaced with round() from C99...
short Round(float value)
{
@ -804,7 +804,7 @@ short Round(float value)
}
// Arrondir le résultat d'une division à la valeur entière supérieure
// Arrondir le résultat d'une division à la valeur entière supérieure
short Round_div_max(short numerator,short divisor)
{
if (!(numerator % divisor))
@ -858,7 +858,7 @@ int Popcount_dword(dword x)
}
// Fonction retournant le libellé d'une mode (ex: " 320x200")
// Fonction retournant le libellé d'une mode (ex: " 320x200")
char * Mode_label(int mode)
{
static char str[24];
@ -870,12 +870,12 @@ char * Mode_label(int mode)
}
// Trouve un mode video à partir d'une chaine: soit "window",
// Trouve un mode video à partir d'une chaine: soit "window",
// soit de la forme "320x200"
// Renvoie -1 si la chaine n'est pas convertible
int Convert_videomode_arg(const char *argument)
{
// Je suis paresseux alors je vais juste tester les libellés
// Je suis paresseux alors je vais juste tester les libellés
int mode_index;
for (mode_index=0; mode_index<Nb_video_modes; mode_index++)
// Attention les vieilles fonctions de lecture .ini mettent tout en MAJUSCULE.

View File

@ -116,12 +116,12 @@ void Zoom_a_line(byte * original_line,byte * zoomed_line,word factor,word width)
void Copy_part_of_image_to_another(byte * source,word source_x,word source_y,word width,word height,word source_width,byte * dest,word dest_x,word dest_y,word destination_width);
// -- Gestion du chrono --
GFX2_GLOBAL byte Timer_state; // State du chrono: 0=Attente d'un Xème de seconde
GFX2_GLOBAL byte Timer_state; // State du chrono: 0=Attente d'un Xème de seconde
// 1=Il faut afficher la preview
// 2=Plus de chrono à gerer pour l'instant
GFX2_GLOBAL dword Timer_delay; // Nombre de 18.2ème de secondes demandés
GFX2_GLOBAL dword Timer_start; // Heure de départ du chrono
GFX2_GLOBAL byte New_preview_is_needed; // Booléen "Il faut relancer le chrono de preview"
// 2=Plus de chrono à gerer pour l'instant
GFX2_GLOBAL dword Timer_delay; // Nombre de 18.2ème de secondes demandés
GFX2_GLOBAL dword Timer_start; // Heure de départ du chrono
GFX2_GLOBAL byte New_preview_is_needed; // Booléen "Il faut relancer le chrono de preview"
#if defined (__MINT__)

View File

@ -3,7 +3,7 @@
/* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2018 Thomas Bernard
Copyright 2011 Pawel Góralski
Copyright 2011 Pawel Góralski
Copyright 2009 Petter Lindquist
Copyright 2008 Yves Rizoud
Copyright 2008 Franck Charlet
@ -198,7 +198,7 @@ void Load_GPL(T_IO_Context * context)
fclose(file);
}
else
// Si on n'a pas réussi à ouvrir le fichier, alors il y a eu une erreur
// Si on n'a pas réussi à ouvrir le fichier, alors il y a eu une erreur
File_error=1;
}
@ -250,7 +250,7 @@ void Load_PAL(T_IO_Context * context)
if ((file=Open_file_read(context)))
{
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))
{
T_Palette palette_64;
@ -324,7 +324,7 @@ void Load_PAL(T_IO_Context * context)
fclose(file);
}
else
// Si on n'a pas réussi à ouvrir le fichier, alors il y a eu une erreur
// Si on n'a pas réussi à ouvrir le fichier, alors il y a eu une erreur
File_error=1;
}
@ -399,9 +399,9 @@ void Test_PKM(T_IO_Context * context, FILE * file)
Read_bytes(file,&header.Palette,sizeof(T_Palette)) &&
Read_word_le(file,&header.Jump))
{
// On regarde s'il y a la signature PKM suivie de la méthode 0.
// La constante "PKM" étant un chaîne, elle se termine toujours par 0.
// Donc pas la peine de s'emm...er à regarder si la méthode est à 0.
// On regarde s'il y a la signature PKM suivie de la méthode 0.
// La constante "PKM" étant un chaîne, elle se termine toujours par 0.
// Donc pas la peine de s'emm...er à regarder si la méthode est à 0.
if ( (!memcmp(&header,"PKM",4)) && header.Width && header.Height)
File_error=0;
}
@ -476,7 +476,7 @@ void Load_PKM(T_IO_Context * context)
File_error=2;
break;
case 1 : // Dimensions de l'écran d'origine
case 1 : // Dimensions de l'écran d'origine
if (Read_byte(file,&temp_byte))
{
if (temp_byte==4)
@ -547,7 +547,7 @@ void Load_PKM(T_IO_Context * context)
// Header size is 780
Taille_pack=(file_size)-780-header.Jump;
// Boucle de décompression:
// Boucle de décompression:
while ( (Compteur_de_pixels<image_size) && (Compteur_de_donnees_packees<Taille_pack) && (!File_error) )
{
if(Read_byte(file, &temp_byte)!=1)
@ -565,7 +565,7 @@ void Load_PKM(T_IO_Context * context)
Compteur_de_donnees_packees++;
Compteur_de_pixels++;
}
else // Sinon, On regarde si on va décompacter un...
else // Sinon, On regarde si on va décompacter un...
{ // ... nombre de pixels tenant sur un byte
if (temp_byte==header.Recog1)
{
@ -631,10 +631,10 @@ void Load_PKM(T_IO_Context * context)
// On commence par compter l'utilisation de chaque couleurs
Count_used_colors(Find_recon);
// Ensuite recog1 devient celle la moins utilisée de celles-ci
// Ensuite recog1 devient celle la moins utilisée de celles-ci
*recog1=0;
best=1;
NBest=INT_MAX; // Une même couleur ne pourra jamais être utilisée 1M de fois.
NBest=INT_MAX; // Une même couleur ne pourra jamais être utilisée 1M de fois.
for (index=1;index<=255;index++)
if (Find_recon[index]<NBest)
{
@ -643,7 +643,7 @@ void Load_PKM(T_IO_Context * context)
}
*recog1=best;
// Enfin recog2 devient la 2ème moins utilisée
// Enfin recog2 devient la 2ème moins utilisée
*recog2=0;
best=0;
NBest=INT_MAX;
@ -706,7 +706,7 @@ void Save_PKM(T_IO_Context * context)
{
// Ecriture du commentaire
// (Compteur_de_pixels est utilisé ici comme simple index de comptage)
// (Compteur_de_pixels est utilisé ici comme simple index de comptage)
if (comment_size > 0)
{
Write_one_byte(file,0);
@ -714,7 +714,7 @@ void Save_PKM(T_IO_Context * context)
for (Compteur_de_pixels=0; Compteur_de_pixels<comment_size; Compteur_de_pixels++)
Write_one_byte(file,context->Comment[Compteur_de_pixels]);
}
// Ecriture des dimensions de l'écran
// Ecriture des dimensions de l'écran
Write_one_byte(file,1);
Write_one_byte(file,4);
Write_one_byte(file,Screen_width&0xFF);
@ -803,8 +803,8 @@ void Save_PKM(T_IO_Context * context)
File_error=1;
fclose(file);
}
// S'il y a eu une erreur de sauvegarde, on ne va tout de même pas laisser
// ce fichier pourri traîner... Ca fait pas propre.
// S'il y a eu une erreur de sauvegarde, on ne va tout de même pas laisser
// ce fichier pourri traîner... Ca fait pas propre.
if (File_error)
Remove_file(context);
}
@ -847,7 +847,7 @@ void Test_CEL(T_IO_Context * context, FILE * file)
Read_word_le(file,&header1.Height) )
{
// Vu que ce header n'a pas de signature, il va falloir tester la
// cohérence de la dimension de l'image avec celle du fichier.
// cohérence de la dimension de l'image avec celle du fichier.
size=file_size-4;
if ( (!size) || ( (((header1.Width+1)>>1)*header1.Height)!=size ) )
@ -929,7 +929,7 @@ void Load_CEL(T_IO_Context * context)
}
else
{
// On réessaye avec le nouveau format
// On réessaye avec le nouveau format
fseek(file,0,SEEK_SET);
if (Read_bytes(file,header2.Signature,4)
@ -957,7 +957,7 @@ void Load_CEL(T_IO_Context * context)
if (!File_error)
{
// Effacement du décalage
// Effacement du décalage
for (y_pos=0;y_pos<header2.Y_offset;y_pos++)
for (x_pos=0;x_pos<context->Width;x_pos++)
Set_pixel(context, x_pos,y_pos,0);
@ -1030,12 +1030,12 @@ void Save_CEL(T_IO_Context * context)
{
setvbuf(file, NULL, _IOFBF, 64*1024);
// On regarde si des couleurs >16 sont utilisées dans l'image
// On regarde si des couleurs >16 sont utilisées dans l'image
for (x_pos=16;((x_pos<256) && (!color_usage[x_pos]));x_pos++);
if (x_pos==256)
{
// Cas d'une image 16 couleurs (écriture à l'ancien format)
// Cas d'une image 16 couleurs (écriture à l'ancien format)
header1.Width =context->Width;
header1.Height=context->Height;
@ -1066,9 +1066,9 @@ void Save_CEL(T_IO_Context * context)
}
else
{
// Cas d'une image 256 couleurs (écriture au nouveau format)
// Cas d'une image 256 couleurs (écriture au nouveau format)
// Recherche du décalage
// Recherche du décalage
for (y_pos=0;y_pos<context->Height;y_pos++)
{
for (x_pos=0;x_pos<context->Width;x_pos++)
@ -1157,7 +1157,7 @@ void Test_KCF(T_IO_Context * context, FILE * file)
if (!Read_byte(file,&header1.Palette[pal_index].color[color_index].Byte1) ||
!Read_byte(file,&header1.Palette[pal_index].color[color_index].Byte2))
File_error=1;
// On vérifie une propriété de la structure de palette:
// On vérifie une propriété de la structure de palette:
for (pal_index=0;pal_index<10;pal_index++)
for (color_index=0;color_index<16;color_index++)
if ((header1.Palette[pal_index].color[color_index].Byte2>>4)!=0)
@ -1210,7 +1210,7 @@ void Load_KCF(T_IO_Context * context)
file_size=File_length_file(file);
if (file_size==320)
{
// Fichier KCF à l'ancien format
// Fichier KCF à l'ancien format
for (pal_index=0;pal_index<10 && !File_error;pal_index++)
for (color_index=0;color_index<16 && !File_error;color_index++)
if (!Read_byte(file,&header1.Palette[pal_index].color[color_index].Byte1) ||
@ -1332,12 +1332,12 @@ void Save_KCF(T_IO_Context * context)
setvbuf(file, NULL, _IOFBF, 64*1024);
// Sauvegarde de la palette
// On regarde si des couleurs >16 sont utilisées dans l'image
// On regarde si des couleurs >16 sont utilisées dans l'image
for (index=16;((index<256) && (!color_usage[index]));index++);
if (index==256)
{
// Cas d'une image 16 couleurs (écriture à l'ancien format)
// Cas d'une image 16 couleurs (écriture à l'ancien format)
for (pal_index=0;pal_index<10;pal_index++)
for (color_index=0;color_index<16;color_index++)
@ -1356,7 +1356,7 @@ void Save_KCF(T_IO_Context * context)
}
else
{
// Cas d'une image 256 couleurs (écriture au nouveau format)
// Cas d'une image 256 couleurs (écriture au nouveau format)
memcpy(header2.Signature,"KiSS",4); // Initialisation de la signature
header2.Kind=0x10; // Initialisation du type (PALette)
@ -1364,8 +1364,8 @@ void Save_KCF(T_IO_Context * context)
header2.Filler1=0; // Initialisation du filler 1 (?)
header2.Width=256; // Initialisation du nombre de couleurs
header2.Height=1; // Initialisation du nombre de palettes
header2.X_offset=0; // Initialisation du décalage X
header2.Y_offset=0; // Initialisation du décalage Y
header2.X_offset=0; // Initialisation du décalage X
header2.Y_offset=0; // Initialisation du décalage Y
for (index=0;index<16;index++) // Initialisation du filler 2 (?)
header2.Filler2[index]=0;
@ -1407,9 +1407,9 @@ void Save_KCF(T_IO_Context * context)
void PI1_8b_to_16p(byte * src,byte * dest)
{
int i; // index du pixel à calculer
int i; // index du pixel à calculer
word byte_mask; // Masque de decodage
word w0,w1,w2,w3; // Les 4 words bien ordonnés de la source
word w0,w1,w2,w3; // Les 4 words bien ordonnés de la source
byte_mask=0x8000;
w0=(((word)src[0])<<8) | src[1];
@ -1418,8 +1418,8 @@ void PI1_8b_to_16p(byte * src,byte * dest)
w3=(((word)src[6])<<8) | src[7];
for (i=0;i<16;i++)
{
// Pour décoder le pixel n°i, il faut traiter les 4 words sur leur bit
// correspondant à celui du masque
// Pour décoder le pixel n°i, il faut traiter les 4 words sur leur bit
// correspondant à celui du masque
dest[i]=((w0 & byte_mask)?0x01:0x00) |
((w1 & byte_mask)?0x02:0x00) |
@ -1433,16 +1433,16 @@ void PI1_8b_to_16p(byte * src,byte * dest)
void PI1_16p_to_8b(byte * src,byte * dest)
{
int i; // index du pixel à calculer
int i; // index du pixel à calculer
word byte_mask; // Masque de codage
word w0,w1,w2,w3; // Les 4 words bien ordonnés de la destination
word w0,w1,w2,w3; // Les 4 words bien ordonnés de la destination
byte_mask=0x8000;
w0=w1=w2=w3=0;
for (i=0;i<16;i++)
{
// Pour coder le pixel n°i, il faut modifier les 4 words sur leur bit
// correspondant à celui du masque
// Pour coder le pixel n°i, il faut modifier les 4 words sur leur bit
// correspondant à celui du masque
w0|=(src[i] & 0x01)?byte_mask:0x00;
w1|=(src[i] & 0x02)?byte_mask:0x00;
@ -1464,11 +1464,11 @@ void PI1_16p_to_8b(byte * src,byte * dest)
void PI1_decode_palette(byte * src,byte * palette)
{
int i; // Numéro de la couleur traitée
int i; // Numéro de la couleur traitée
int ip; // index dans la palette
word w; // Word contenant le code
// Schéma d'un word =
// Schéma d'un word =
//
// Low High
// VVVV RRRR | 0000 BBBB
@ -1502,11 +1502,11 @@ void PI1_decode_palette(byte * src,byte * palette)
void PI1_code_palette(byte * palette,byte * dest)
{
int i; // Numéro de la couleur traitée
int i; // Numéro de la couleur traitée
int ip; // index dans la palette
word w; // Word contenant le code
// Schéma d'un word =
// Schéma d'un word =
//
// Low High
// VVVV RRRR | 0000 BBBB
@ -1608,16 +1608,16 @@ void PI1_save_ranges(T_IO_Context * context, byte * buffer, int size)
void Test_PI1(T_IO_Context * context, FILE * file)
{
int size; // Taille du fichier
word resolution; // Résolution de l'image
word resolution; // Résolution de l'image
(void)context;
File_error=1;
// Vérification de la taille
// Vérification de la taille
size=File_length_file(file);
if ((size==32034) || (size==32066))
{
// Lecture et vérification de la résolution
// Lecture et vérification de la résolution
if (Read_word_le(file,&resolution))
{
if (resolution==0x0000)
@ -1639,7 +1639,7 @@ void Load_PI1(T_IO_Context * context)
File_error=0;
if ((file=Open_file_read(context)))
{
// allocation d'un buffer mémoire
// allocation d'un buffer mémoire
buffer=(byte *)malloc(32034);
if (buffer!=NULL)
{
@ -1655,7 +1655,7 @@ void Load_PI1(T_IO_Context * context)
memset(context->Palette,0,sizeof(T_Palette));
PI1_decode_palette(buffer+2,(byte *)context->Palette);
// Chargement/décompression de l'image
// Chargement/décompression de l'image
ptr=buffer+34;
for (y_pos=0;y_pos<200;y_pos++)
{
@ -1699,9 +1699,9 @@ void Save_PI1(T_IO_Context * context)
{
setvbuf(file, NULL, _IOFBF, 64*1024);
// allocation d'un buffer mémoire
// allocation d'un buffer mémoire
buffer=(byte *)malloc(32034);
// Codage de la résolution
// Codage de la résolution
buffer[0]=0x00;
buffer[1]=0x00;
// Codage de la palette
@ -1730,13 +1730,13 @@ void Save_PI1(T_IO_Context * context)
{
fclose(file);
}
else // Error d'écriture (disque plein ou protégé)
else // Error d'écriture (disque plein ou protégé)
{
fclose(file);
Remove_file(context);
File_error=1;
}
// Libération du buffer mémoire
// Libération du buffer mémoire
free(buffer);
buffer = NULL;
}
@ -1751,12 +1751,12 @@ void Save_PI1(T_IO_Context * context)
//////////////////////////////////// PC1 ////////////////////////////////////
//// DECOMPRESSION d'un buffer selon la méthode PACKBITS ////
//// DECOMPRESSION d'un buffer selon la méthode PACKBITS ////
void PC1_uncompress_packbits(byte * src,byte * dest)
{
int is,id; // Les indices de parcour des buffers
int n; // Octet de contrôle
int n; // Octet de contrôle
for (is=id=0;id<32000;)
{
@ -1772,19 +1772,19 @@ void PC1_uncompress_packbits(byte * src,byte * dest)
}
else
{
// Recopier n+1 octets littéralement
// Recopier n+1 octets littéralement
n=n+1;
for (;(n>0) && (id<32000);n--)
dest[id++]=src[is++];
}
// Contrôle des erreurs
// Contrôle des erreurs
if (n>0)
File_error=1;
}
}
//// COMPRESSION d'un buffer selon la méthode PACKBITS ////
//// COMPRESSION d'un buffer selon la méthode PACKBITS ////
void PC1_compress_packbits(byte * src,byte * dest,int source_size,int * dest_size)
{
@ -1794,13 +1794,13 @@ void PC1_compress_packbits(byte * src,byte * dest,int source_size,int * dest_siz
{
int is = 0; // index dans la source
int id = 0; // index dans la destination
int ir; // index de la répétition
int n; // Taille des séquences
int repet; // "Il y a répétition"
int ir; // index de la répétition
int n; // Taille des séquences
int repet; // "Il y a répétition"
while(is<40)
{
// On recherche le 1er endroit où il y a répétition d'au moins 3 valeurs
// On recherche le 1er endroit où il y a répétition d'au moins 3 valeurs
// identiques
repet=0;
@ -1813,7 +1813,7 @@ void PC1_compress_packbits(byte * src,byte * dest,int source_size,int * dest_siz
}
}
// On code la partie sans répétitions
// On code la partie sans répétitions
if (!repet || ir!=is)
{
n=(ir-is)+1;
@ -1822,10 +1822,10 @@ void PC1_compress_packbits(byte * src,byte * dest,int source_size,int * dest_siz
dest[id++]=src[is++];
}
// On code la partie sans répétitions
// On code la partie sans répétitions
if (repet)
{
// On compte la quantité de fois qu'il faut répéter la valeur
// On compte la quantité de fois qu'il faut répéter la valeur
for (ir+=3;ir<40;ir++)
{
if (src[ir]!=src[is])
@ -1837,7 +1837,7 @@ void PC1_compress_packbits(byte * src,byte * dest,int source_size,int * dest_siz
is=ir;
}
}
// On renseigne la taille du buffer compressé
// On renseigne la taille du buffer compressé
*dest_size+=id;
// Move for next 40-byte block
src += 40;
@ -1853,7 +1853,7 @@ void PC1_compress_packbits(byte * src,byte * dest,int source_size,int * dest_siz
void PC1_4bp_to_1line(byte * src0,byte * src1,byte * src2,byte * src3,byte * dest)
{
int i,j; // Compteurs
int ip; // index du pixel à calculer
int ip; // index du pixel à calculer
byte byte_mask; // Masque de decodage
byte b0,b1,b2,b3; // Les 4 octets des plans bits sources
@ -1885,7 +1885,7 @@ void PC1_4bp_to_1line(byte * src0,byte * src1,byte * src2,byte * src3,byte * des
void PC1_1line_to_4bp(byte * src,byte * dst0,byte * dst1,byte * dst2,byte * dst3)
{
int i,j; // Compteurs
int ip; // index du pixel à calculer
int ip; // index du pixel à calculer
byte byte_mask; // Masque de decodage
byte b0,b1,b2,b3; // Les 4 octets des plans bits sources
@ -1917,16 +1917,16 @@ void PC1_1line_to_4bp(byte * src,byte * dst0,byte * dst1,byte * dst2,byte * dst3
void Test_PC1(T_IO_Context * context, FILE * file)
{
int size; // Taille du fichier
word resolution; // Résolution de l'image
word resolution; // Résolution de l'image
(void)context;
File_error=1;
// Vérification de la taille
// Vérification de la taille
size=File_length_file(file);
if ((size<=32066))
{
// Lecture et vérification de la résolution
// Lecture et vérification de la résolution
if (Read_word_le(file,&resolution))
{
if (resolution==0x0080)
@ -1951,7 +1951,7 @@ void Load_PC1(T_IO_Context * context)
if ((file=Open_file_read(context)))
{
size=File_length_file(file);
// allocation des buffers mémoire
// allocation des buffers mémoire
buffercomp=(byte *)malloc(size);
bufferdecomp=(byte *)malloc(32000);
if ( (buffercomp!=NULL) && (bufferdecomp!=NULL) )
@ -1968,14 +1968,14 @@ void Load_PC1(T_IO_Context * context)
memset(context->Palette,0,sizeof(T_Palette));
PI1_decode_palette(buffercomp+2,(byte *)context->Palette);
// Décompression du buffer
// Décompression du buffer
PC1_uncompress_packbits(buffercomp+34,bufferdecomp);
// Décodage de l'image
// Décodage de l'image
ptr=bufferdecomp;
for (y_pos=0;y_pos<200;y_pos++)
{
// Décodage de la scanline
// Décodage de la scanline
PC1_4bp_to_1line(ptr,ptr+40,ptr+80,ptr+120,pixels);
ptr+=160;
// Chargement de la ligne
@ -2025,10 +2025,10 @@ void Save_PC1(T_IO_Context * context)
{
setvbuf(file, NULL, _IOFBF, 64*1024);
// Allocation des buffers mémoire
// Allocation des buffers mémoire
bufferdecomp=(byte *)malloc(32000);
buffercomp =(byte *)malloc(64066);
// Codage de la résolution
// Codage de la résolution
buffercomp[0]=0x80;
buffercomp[1]=0x00;
// Codage de la palette
@ -2060,13 +2060,13 @@ void Save_PC1(T_IO_Context * context)
{
fclose(file);
}
else // Error d'écriture (disque plein ou protégé)
else // Error d'écriture (disque plein ou protégé)
{
fclose(file);
Remove_file(context);
File_error=1;
}
// Libération des buffers mémoire
// Libération des buffers mémoire
free(bufferdecomp);
free(buffercomp);
buffercomp = bufferdecomp = NULL;
@ -2085,12 +2085,12 @@ void Save_PC1(T_IO_Context * context)
void Test_NEO(T_IO_Context * context, FILE * file)
{
int size; // Taille du fichier
word resolution; // Résolution de l'image
word resolution; // Résolution de l'image
(void)context;
File_error=1;
// Vérification de la taille
// Vérification de la taille
size=File_length_file(file);
if ((size==32128))
{
@ -2101,7 +2101,7 @@ void Test_NEO(T_IO_Context * context, FILE * file)
File_error = 0;
}
// Lecture et vérification de la résolution
// Lecture et vérification de la résolution
if (Read_word_le(file,&resolution))
{
if (resolution==0 || resolution==1 || resolution==2)
@ -2121,7 +2121,7 @@ void Load_NEO(T_IO_Context * context)
File_error=0;
if ((file=Open_file_read(context)))
{
// allocation d'un buffer mémoire
// allocation d'un buffer mémoire
buffer=(byte *)malloc(32128);
if (buffer!=NULL)
{
@ -2135,10 +2135,10 @@ void Load_NEO(T_IO_Context * context)
// Initialisation de la palette
if (Config.Clear_palette)
memset(context->Palette,0,sizeof(T_Palette));
// on saute la résolution et le flag, chacun 2 bits
// on saute la résolution et le flag, chacun 2 bits
PI1_decode_palette(buffer+4,(byte *)context->Palette);
// Chargement/décompression de l'image
// Chargement/décompression de l'image
ptr=buffer+128;
for (y_pos=0;y_pos<200;y_pos++)
{
@ -2179,9 +2179,9 @@ void Save_NEO(T_IO_Context * context)
{
setvbuf(file, NULL, _IOFBF, 64*1024);
// allocation d'un buffer mémoire
// allocation d'un buffer mémoire
buffer=(byte *)malloc(32128);
// Codage de la résolution
// Codage de la résolution
buffer[0]=0x00;
buffer[1]=0x00;
buffer[2]=0x00;
@ -2211,13 +2211,13 @@ void Save_NEO(T_IO_Context * context)
{
fclose(file);
}
else // Error d'écriture (disque plein ou protégé)
else // Error d'écriture (disque plein ou protégé)
{
fclose(file);
Remove_file(context);
File_error=1;
}
// Libération du buffer mémoire
// Libération du buffer mémoire
free(buffer);
buffer = NULL;
}

View File

@ -1031,7 +1031,7 @@ void CS_Generate_color_table_and_palette(T_Cluster_set * cs,CT_Tree* tc,T_Compon
}
/////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////// Méthodes de gestion des dégradés //
///////////////////////////////////////// Méthodes de gestion des dégradés //
/////////////////////////////////////////////////////////////////////////////
void GS_Init(T_Gradient_set * ds,T_Cluster_set * cs)
@ -1040,7 +1040,7 @@ void GS_Init(T_Gradient_set * ds,T_Cluster_set * cs)
ds->gradients[0].min=cs->clusters->data.pal.h;
ds->gradients[0].max=cs->clusters->data.pal.h;
ds->gradients[0].hue=cs->clusters->data.pal.h;
// Et hop : le 1er ensemble de dgrads est initialis
// Et hop : le 1er ensemble de dégradés est initialisé
ds->nb=1;
}
@ -1051,7 +1051,7 @@ T_Gradient_set * GS_New(T_Cluster_set * cs)
n=(T_Gradient_set *)malloc(sizeof(T_Gradient_set));
if (n!=NULL)
{
// On recopie les paramètres demandés
// On recopie les paramètres demandés
n->nb_max=cs->nb_max;
// On tente d'allouer la table
@ -1061,7 +1061,7 @@ T_Gradient_set * GS_New(T_Cluster_set * cs)
GS_Init(n,cs);
else
{
// Table impossible à allouer
// Table impossible à allouer
free(n);
n=NULL;
}
@ -1079,15 +1079,15 @@ void GS_Delete(T_Gradient_set * ds)
void GS_Generate(T_Gradient_set * ds,T_Cluster_set * cs)
{
int id; // Les indexs de parcours des ensembles
int best_gradient; // Meilleur dgrad
int best_diff; // Meilleure diffrence de chrominance
int best_gradient; // Meilleur dégradé
int best_diff; // Meilleure différence de chrominance
int diff; // difference de chrominance courante
T_Cluster * current = cs->clusters;
// Pour chacun des clusters … traiter
// Pour chacun des clusters … traiter
do
{
// On recherche le dgrad le plus proche de la chrominance du cluster
// On recherche le dégradé le plus proche de la chrominance du cluster
best_gradient=-1;
best_diff=99999999;
for (id=0;id<ds->nb;id++)
@ -1100,10 +1100,10 @@ void GS_Generate(T_Gradient_set * ds,T_Cluster_set * cs)
}
}
// Si on a trouv un dgrad dans lequel inclure le cluster
// Si on a trouvé un dégradé dans lequel inclure le cluster
if (best_gradient!=-1)
{
// On met … jour le dgrad
// On met à jour le dégradé
if (current->data.pal.h < ds->gradients[best_gradient].min)
ds->gradients[best_gradient].min=current->data.pal.h;
if (current->data.pal.h > ds->gradients[best_gradient].max)
@ -1116,7 +1116,7 @@ void GS_Generate(T_Gradient_set * ds,T_Cluster_set * cs)
}
else
{
// On cre un nouveau dgrad
// On crée un nouveau dégradé
best_gradient=ds->nb;
ds->gradients[best_gradient].nb_colors=1;
ds->gradients[best_gradient].min=current->data.pal.h;
@ -1254,9 +1254,9 @@ void Convert_24b_bitmap_to_256_Floyd_Steinberg(T_Bitmap256 dest,T_Bitmap24B sour
// On initialise les variables de parcours:
current =source; // Le pixel dont on s'occupe
next =current+width; // Le pixel en dessous
c_plus1 =current+1; // Le pixel à droite
u_minus1=next-1; // Le pixel en bas à gauche
u_plus1 =next+1; // Le pixel en bas à droite
c_plus1 =current+1; // Le pixel à droite
u_minus1=next-1; // Le pixel en bas à gauche
u_plus1 =next+1; // Le pixel en bas à droite
d =dest;
// On parcours chaque pixel:
@ -1272,7 +1272,7 @@ void Convert_24b_bitmap_to_256_Floyd_Steinberg(T_Bitmap256 dest,T_Bitmap24B sour
// Cherche la couleur correspondant dans la palette et la range dans l'image de destination
*d=CT_get(tc,red,green,blue);
// Puis on calcule pour chaque composante l'erreur dûe à l'approximation
// Puis on calcule pour chaque composante l'erreur dûe à l'approximation
red-=palette[*d].R;
green -=palette[*d].G;
blue -=palette[*d].B;
@ -1289,7 +1289,7 @@ void Convert_24b_bitmap_to_256_Floyd_Steinberg(T_Bitmap256 dest,T_Bitmap24B sour
c_plus1->G=Modified_value(c_plus1->G,e_green );
c_plus1->B=Modified_value(c_plus1->B,e_blue );
}
// En bas à gauche:
// En bas à gauche:
if (y_pos+1<height)
{
e_red=(red*3)/16.0;
@ -1308,7 +1308,7 @@ void Convert_24b_bitmap_to_256_Floyd_Steinberg(T_Bitmap256 dest,T_Bitmap24B sour
next->R=Modified_value(next->R,e_red);
next->G=Modified_value(next->G,e_green );
next->B=Modified_value(next->B,e_blue );
// En bas à droite:
// En bas à droite:
if (x_pos+1<width)
{
e_red=(red/16.0);
@ -1427,7 +1427,7 @@ static const byte precision_24b[]=
int Convert_24b_bitmap_to_256(T_Bitmap256 dest,T_Bitmap24B source,int width,int height,T_Components * palette)
{
CT_Tree* table; // table de conversion
int ip; // index de précision pour la conversion
int ip; // index de précision pour la conversion
if (Try_Convert_to_256_Without_Loss(dest, source, width, height, palette) == 0)
return 0;
@ -1436,8 +1436,8 @@ int Convert_24b_bitmap_to_256(T_Bitmap256 dest,T_Bitmap24B source,int width,int
return Convert_24b_bitmap_to_256_fast(dest, source, width, height, palette);
#else
// On essaye d'obtenir une table de conversion qui loge en mémoire, avec la
// meilleure précision possible
// On essaye d'obtenir une table de conversion qui loge en mémoire, avec la
// meilleure précision possible
for (ip=0;ip<(10*3);ip+=3)
{
table = Optimize_palette(source,width*height,palette,

View File

@ -33,38 +33,38 @@
#include "struct.h"
#include "colorred.h"
//////////////////////////////////////////////// Définition des types de base
//////////////////////////////////////////////// Définition des types de base
typedef T_Components * T_Bitmap24B;
typedef byte * T_Bitmap256;
///////////////////////////////////////// Définition d'une table d'occurences
///////////////////////////////////////// Définition d'une table d'occurences
typedef struct
{
int nbb_r; // Nb de bits de précision sur les rouges
int nbb_g; // Nb de bits de précision sur les verts
int nbb_b; // Nb de bits de précision sur les bleu
int nbb_r; // Nb de bits de précision sur les rouges
int nbb_g; // Nb de bits de précision sur les verts
int nbb_b; // Nb de bits de précision sur les bleu
int rng_r; // Nb de valeurs sur les rouges (= 1<<nbb_r)
int rng_g; // Nb de valeurs sur les verts (= 1<<nbb_g)
int rng_b; // Nb de valeurs sur les bleus (= 1<<nbb_b)
int dec_r; // Coefficient multiplicateur d'accès dans la table (= nbb_g+nbb_b)
int dec_g; // Coefficient multiplicateur d'accès dans la table (= nbb_b)
int dec_b; // Coefficient multiplicateur d'accès dans la table (= 0)
int dec_r; // Coefficient multiplicateur d'accès dans la table (= nbb_g+nbb_b)
int dec_g; // Coefficient multiplicateur d'accès dans la table (= nbb_b)
int dec_b; // Coefficient multiplicateur d'accès dans la table (= 0)
int red_r; // Coefficient réducteur de traduction d'une couleur rouge (= 8-nbb_r)
int red_g; // Coefficient réducteur de traduction d'une couleur verte (= 8-nbb_g)
int red_b; // Coefficient réducteur de traduction d'une couleur bleue (= 8-nbb_b)
int red_r; // Coefficient réducteur de traduction d'une couleur rouge (= 8-nbb_r)
int red_g; // Coefficient réducteur de traduction d'une couleur verte (= 8-nbb_g)
int red_b; // Coefficient réducteur de traduction d'une couleur bleue (= 8-nbb_b)
int * table;
} T_Occurrence_table;
///////////////////////////////////////// Définition d'un ensemble de couleur
///////////////////////////////////////// Définition d'un ensemble de couleur
struct S_Cluster_CutData
{
@ -80,9 +80,9 @@ struct S_Cluster_CutData
struct S_Cluster_PalData
{
// information used while color reducing
byte r,g,b; // color synthétisant l'ensemble
byte r,g,b; // color synthétisant l'ensemble
byte h; // Chrominance
byte l; // Luminosité
byte l; // Luminosité
};
union U_Cluster_Data
@ -111,7 +111,7 @@ typedef struct S_Cluster
//////////////////////////////////////// Définition d'un ensemble de clusters
//////////////////////////////////////// Définition d'un ensemble de clusters
typedef struct
{
@ -122,25 +122,25 @@ typedef struct
///////////////////////////////////////////////////// Définition d'un dégradé
///////////////////////////////////////////////////// Définition d'un dégradé
typedef struct
{
int nb_colors; // Nombre de couleurs dans le dégradé
float min; // Chrominance minimale du dégradé
float max; // Chrominance maximale du dégradé
float hue; // Chrominance moyenne du dégradé
int nb_colors; // Nombre de couleurs dans le dégradé
float min; // Chrominance minimale du dégradé
float max; // Chrominance maximale du dégradé
float hue; // Chrominance moyenne du dégradé
} T_Gradient;
///////////////////////////////////////// Définition d'un ensemble de dégradé
///////////////////////////////////////// Définition d'un ensemble de dégradé
typedef struct
{
int nb; // Nombre de dégradés dans l'ensemble
int nb_max; // Nombre maximum de dégradés
T_Gradient * gradients; // Les dégradés
int nb; // Nombre de dégradés dans l'ensemble
int nb_max; // Nombre maximum de dégradés
T_Gradient * gradients; // Les dégradés
} T_Gradient_set;
void RGB_to_HSL(int r, int g,int b, byte* h, byte*s, byte* l);
@ -149,7 +149,7 @@ void HSL_to_RGB(byte h, byte s, byte l, byte* r, byte* g, byte* b);
long Perceptual_lightness(T_Components *color);
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////// Méthodes de gestion des tables d'occurence //
/////////////////////////////// Méthodes de gestion des tables d'occurence //
/////////////////////////////////////////////////////////////////////////////
void OT_init(T_Occurrence_table * t);
@ -162,7 +162,7 @@ void OT_count_occurrences(T_Occurrence_table * t,T_Bitmap24B image,int size);
/////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////// Méthodes de gestion des clusters //
///////////////////////////////////////// Méthodes de gestion des clusters //
/////////////////////////////////////////////////////////////////////////////
void Cluster_pack(T_Cluster * c,const T_Occurrence_table * const to);
@ -172,7 +172,7 @@ void Cluster_compute_hue(T_Cluster * c,T_Occurrence_table * to);
/////////////////////////////////////////////////////////////////////////////
//////////////////////////// Méthodes de gestion des ensembles de clusters //
//////////////////////////// Méthodes de gestion des ensembles de clusters //
/////////////////////////////////////////////////////////////////////////////
void CS_Init(T_Cluster_set * cs,T_Occurrence_table * to);
@ -185,7 +185,7 @@ void CS_Compute_colors(T_Cluster_set * cs,T_Occurrence_table * to);
void CS_Generate_color_table_and_palette(T_Cluster_set * cs,CT_Tree* tc,T_Components * palette, T_Occurrence_table * to);
/////////////////////////////////////////////////////////////////////////////
//////////////////////////// Méthodes de gestion des ensembles de dégradés //
//////////////////////////// Méthodes de gestion des ensembles de dégradés //
/////////////////////////////////////////////////////////////////////////////
void GS_Init(T_Gradient_set * ds,T_Cluster_set * cs);
@ -195,7 +195,7 @@ void GS_Generate(T_Gradient_set * ds,T_Cluster_set * cs);
// Convertie avec le plus de précision possible une image 24b en 256c
// Convertie avec le plus de précision possible une image 24b en 256c
// Renvoie s'il y a eu une erreur ou pas..
int Convert_24b_bitmap_to_256(T_Bitmap256 dest,T_Bitmap24B source,int width,int height,T_Components * palette);

File diff suppressed because it is too large Load Diff

View File

@ -165,7 +165,7 @@ T_Gradient_array *Dup_gradient(T_Page * page)
}
void Download_infos_page_main(T_Page * page)
// Affiche la page à l'écran
// Affiche la page à l'écran
{
//int factor_index;
int size_is_modified;
@ -393,7 +393,7 @@ void Redraw_current_layer(void)
}
void Upload_infos_page(T_Document * doc)
// Sauve l'écran courant dans la page
// Sauve l'écran courant dans la page
{
if (doc->backups->Pages != NULL)
{
@ -428,7 +428,7 @@ void Update_FX_feedback(byte with_feedback)
void Clear_page(T_Page * page)
{
// On peut appeler cette fonction sur une page non allouée.
// On peut appeler cette fonction sur une page non allouée.
int i;
for (i=0; i<page->Nb_layers; i++)
{
@ -448,7 +448,7 @@ void Clear_page(T_Page * page)
page->Width=0;
page->Height=0;
// On ne se préoccupe pas de ce que deviens le reste des infos de l'image.
// On ne se préoccupe pas de ce que deviens le reste des infos de l'image.
}
void Copy_S_page(T_Page * dest,T_Page * source)
@ -473,8 +473,8 @@ void Init_list_of_pages(T_List_of_pages * list)
int Allocate_list_of_pages(T_List_of_pages * list)
{
// Important: la T_List_of_pages ne doit pas déjà désigner une liste de
// pages allouée auquel cas celle-ci serait perdue.
// Important: la T_List_of_pages ne doit pas déjà désigner une liste de
// pages allouée auquel cas celle-ci serait perdue.
T_Page * page;
// On initialise chacune des nouvelles pages
@ -493,26 +493,26 @@ int Allocate_list_of_pages(T_List_of_pages * list)
if (!page->Gradients)
return 0;
return 1; // Succès
return 1; // Succès
}
void Backward_in_list_of_pages(T_List_of_pages * list)
{
// Cette fonction fait l'équivalent d'un "Undo" dans la liste de pages.
// Cette fonction fait l'équivalent d'un "Undo" dans la liste de pages.
// Elle effectue une sorte de ROL (Rotation Left) sur la liste:
// +---+-+-+-+-+-+-+-+-+-+ |
// ¦0¦1¦2¦3¦4¦5¦6¦7¦8¦9¦A¦ |
// ¦0¦1¦2¦3¦4¦5¦6¦7¦8¦9¦A¦ |
// +---+-+-+-+-+-+-+-+-+-+ | 0=page courante
// ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ |_ A=page la plus ancienne
// v v v v v v v v v v v | 1=DerniÞre page (1er backup)
// ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ |_ A=page la plus ancienne
// v v v v v v v v v v v | 1=DerniÞre page (1er backup)
// +---+-+-+-+-+-+-+-+-+-+ |
// ¦1¦2¦3¦4¦5¦6¦7¦8¦9¦A¦0¦ |
// ¦1¦2¦3¦4¦5¦6¦7¦8¦9¦A¦0¦ |
// +---+-+-+-+-+-+-+-+-+-+ |
// Pour simuler un véritable Undo, l'appelant doit mettre la structure
// de page courante à jour avant l'appel, puis en réextraire les infos en
// sortie, ainsi que celles relatives à la plus récente page d'undo (1ère
// Pour simuler un véritable Undo, l'appelant doit mettre la structure
// de page courante à jour avant l'appel, puis en réextraire les infos en
// sortie, ainsi que celles relatives à la plus récente page d'undo (1ère
// page de la liste).
if (Last_backed_up_layers)
@ -539,20 +539,20 @@ void Backward_in_list_of_pages(T_List_of_pages * list)
void Advance_in_list_of_pages(T_List_of_pages * list)
{
// Cette fonction fait l'équivalent d'un "Redo" dans la liste de pages.
// Cette fonction fait l'équivalent d'un "Redo" dans la liste de pages.
// Elle effectue une sorte de ROR (Rotation Right) sur la liste:
// +-+-+-+-+-+-+-+-+-+-+-+ |
// |0|1|2|3|4|5|6|7|8|9|A| |
// +-+-+-+-+-+-+-+-+-+-+-+ | 0=page courante
// | | | | | | | | | | | |_ A=page la plus ancienne
// v v v v v v v v v v v | 1=Dernière page (1er backup)
// v v v v v v v v v v v | 1=Dernière page (1er backup)
// +-+-+-+-+-+-+-+-+-+-+-+ |
// |A|0|1|2|3|4|5|6|7|8|9| |
// +-+-+-+-+-+-+-+-+-+-+-+ |
// Pour simuler un véritable Redo, l'appelant doit mettre la structure
// de page courante à jour avant l'appel, puis en réextraire les infos en
// sortie, ainsi que celles relatives à la plus récente page d'undo (1ère
// Pour simuler un véritable Redo, l'appelant doit mettre la structure
// de page courante à jour avant l'appel, puis en réextraire les infos en
// sortie, ainsi que celles relatives à la plus récente page d'undo (1ère
// page de la liste).
if (Last_backed_up_layers)
{
@ -651,15 +651,15 @@ void Change_page_number_of_list(T_List_of_pages * list,int number)
void Free_page_of_a_list(T_List_of_pages * list)
{
// On ne peut pas détruire la page courante de la liste si après
// On ne peut pas détruire la page courante de la liste si après
// destruction il ne reste pas encore au moins une page.
if (list->List_size>1)
{
// On fait faire un undo à la liste, comme ça, la nouvelle page courante
// est la page précédente
// On fait faire un undo à la liste, comme ça, la nouvelle page courante
// est la page précédente
Backward_in_list_of_pages(Main.backups);
// Puis on détruit la dernière page, qui est l'ancienne page courante
// Puis on détruit la dernière page, qui est l'ancienne page courante
Free_last_page_of_list(list);
}
}
@ -758,18 +758,18 @@ int Update_spare_buffers(int width, int height)
int Init_all_backup_lists(enum IMAGE_MODES image_mode, int width, int height)
{
// width et height correspondent à la dimension des images de départ.
// width et height correspondent à la dimension des images de départ.
int i;
if (! Allocate_list_of_pages(Main.backups) ||
! Allocate_list_of_pages(Spare.backups))
return 0;
// On a réussi à allouer deux listes de pages dont la taille correspond à
// celle demandée par l'utilisateur.
// On a réussi à allouer deux listes de pages dont la taille correspond à
// celle demandée par l'utilisateur.
// On crée un descripteur de page correspondant à la page principale
// On crée un descripteur de page correspondant à la page principale
Upload_infos_page(&Main);
// On y met les infos sur la dimension de démarrage
// On y met les infos sur la dimension de démarrage
Main.backups->Pages->Width=width;
Main.backups->Pages->Height=height;
strcpy(Main.backups->Pages->File_directory,Main.selector.Directory);
@ -849,7 +849,7 @@ void Set_number_of_backups(int nb_backups)
Change_page_number_of_list(Main.backups,nb_backups+1);
Change_page_number_of_list(Spare.backups,nb_backups+1);
// Le +1 vient du fait que dans chaque liste, en 1ère position on retrouve
// Le +1 vient du fait que dans chaque liste, en 1ère position on retrouve
// les infos de la page courante sur le brouillon et la page principale.
// (nb_backups = Nombre de backups, sans compter les pages courantes)
}
@ -859,7 +859,7 @@ int Backup_new_image(int layers,int width,int height)
// Retourne 1 si une nouvelle page est disponible et 0 sinon
T_Page * new_page;
// On crée un descripteur pour la nouvelle page courante
// On crée un descripteur pour la nouvelle page courante
new_page=New_page(layers);
if (!new_page)
{
@ -893,7 +893,7 @@ int Backup_with_new_dimensions(int width,int height)
T_Page * new_page;
int i;
// On crée un descripteur pour la nouvelle page courante
// On crée un descripteur pour la nouvelle page courante
new_page=New_page(Main.backups->Pages->Nb_layers);
if (!new_page)
{
@ -1039,7 +1039,7 @@ int Backup_and_resize_the_spare(int width,int height)
int nb_layers;
nb_layers=Spare.backups->Pages->Nb_layers;
// On crée un descripteur pour la nouvelle page de brouillon
// On crée un descripteur pour la nouvelle page de brouillon
new_page=New_page(nb_layers);
if (!new_page)
{
@ -1075,8 +1075,8 @@ int Backup_and_resize_the_spare(int width,int height)
}
void Backup(void)
// Sauve la page courante comme première page de backup et crée une nouvelle page
// pur continuer à dessiner. Utilisé par exemple pour le fill
// Sauve la page courante comme première page de backup et crée une nouvelle page
// pur continuer à dessiner. Utilisé par exemple pour le fill
{
Backup_layers(Main.current_layer);
}
@ -1091,7 +1091,7 @@ void Backup_layers(int layer)
return; // Already done.
*/
// On remet à jour l'état des infos de la page courante (pour pouvoir les
// On remet à jour l'état des infos de la page courante (pour pouvoir les
// retrouver plus tard)
Upload_infos_page(&Main);
@ -1204,20 +1204,20 @@ void Undo(void)
Last_backed_up_layers=0;
}
// On remet à jour l'état des infos de la page courante (pour pouvoir les
// On remet à jour l'état des infos de la page courante (pour pouvoir les
// retrouver plus tard)
Upload_infos_page(&Main);
// On fait faire un undo à la liste des backups de la page principale
// On fait faire un undo à la liste des backups de la page principale
Backward_in_list_of_pages(Main.backups);
Update_buffers(Main.backups->Pages->Width, Main.backups->Pages->Height);
// On extrait ensuite les infos sur la nouvelle page courante
Download_infos_page_main(Main.backups->Pages);
// Note: le backup n'a pas obligatoirement les mêmes dimensions ni la même
// Note: le backup n'a pas obligatoirement les mêmes dimensions ni la même
// palette que la page courante. Mais en temps normal, le backup
// n'est pas utilisé à la suite d'un Undo. Donc ça ne devrait pas
// poser de problèmes.
// n'est pas utilisé à la suite d'un Undo. Donc ça ne devrait pas
// poser de problèmes.
Check_layers_limits();
Redraw_layered_image();
@ -1237,20 +1237,20 @@ void Redo(void)
Free_page_of_a_list(Main.backups);
Last_backed_up_layers=0;
}
// On remet à jour l'état des infos de la page courante (pour pouvoir les
// On remet à jour l'état des infos de la page courante (pour pouvoir les
// retrouver plus tard)
Upload_infos_page(&Main);
// On fait faire un redo à la liste des backups de la page principale
// On fait faire un redo à la liste des backups de la page principale
Advance_in_list_of_pages(Main.backups);
Update_buffers(Main.backups->Pages->Width, Main.backups->Pages->Height);
// On extrait ensuite les infos sur la nouvelle page courante
Download_infos_page_main(Main.backups->Pages);
// Note: le backup n'a pas obligatoirement les mêmes dimensions ni la même
// Note: le backup n'a pas obligatoirement les mêmes dimensions ni la même
// palette que la page courante. Mais en temps normal, le backup
// n'est pas utilisé à la suite d'un Redo. Donc ça ne devrait pas
// poser de problèmes.
// n'est pas utilisé à la suite d'un Redo. Donc ça ne devrait pas
// poser de problèmes.
Check_layers_limits();
Redraw_layered_image();
@ -1262,15 +1262,15 @@ void Redo(void)
void Free_current_page(void)
{
// On détruit la page courante de la liste principale
// On détruit la page courante de la liste principale
Free_page_of_a_list(Main.backups);
// On extrait ensuite les infos sur la nouvelle page courante
Download_infos_page_main(Main.backups->Pages);
// Note: le backup n'a pas obligatoirement les mêmes dimensions ni la même
// Note: le backup n'a pas obligatoirement les mêmes dimensions ni la même
// palette que la page courante. Mais en temps normal, le backup
// n'est pas utilisé à la suite d'une destruction de page. Donc ça ne
// devrait pas poser de problèmes.
// n'est pas utilisé à la suite d'une destruction de page. Donc ça ne
// devrait pas poser de problèmes.
Update_buffers(Main.backups->Pages->Width, Main.backups->Pages->Height);
Check_layers_limits();

View File

@ -2,7 +2,7 @@
*/
/* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2011 Pawel Góralski
Copyright 2011 Pawel Góralski
Copyright 2007 Adrien Destugues
Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud)

View File

@ -57,9 +57,9 @@ int RGB_scale = 256; // 24bit
// Nombre de graduations pour une composante dans le mode actuel
int Color_count=256;
// Les composantes vont de 0 à (Color_count-1)
// Les composantes vont de 0 à (Color_count-1)
int Color_max=255;
// Le demi-pas est une quantité que l'on ajoute à une composante
// Le demi-pas est une quantité que l'on ajoute à une composante
// avant de faire un arrondi par division.
int Color_halfstep=0;
@ -134,7 +134,7 @@ static int Add_encoded(int comp, int offset)
}
// Définir les unités pour les graduations R G B ou H S V
// Définir les unités pour les graduations R G B ou H S V
void Component_unit(int count)
{
Color_count = count;
@ -200,7 +200,7 @@ void Set_blue(byte color, short new_color, T_Palette palette)
}
void Format_component(byte value, char *str)
// Formate une chaine de 4 caractères+\0 : "nnn "
// Formate une chaine de 4 caractères+\0 : "nnn "
{
Num2str(value,str,3);
str[3]=' ';
@ -208,8 +208,8 @@ void Format_component(byte value, char *str)
}
void Spread_colors(short start,short end,T_Palette palette)
// Modifie la palette pour obtenir un dégradé de couleur entre les deux bornes
// passées en paramètre
// Modifie la palette pour obtenir un dégradé de couleur entre les deux bornes
// passées en paramètre
{
short start_red;
short start_green;
@ -219,8 +219,8 @@ void Spread_colors(short start,short end,T_Palette palette)
short end_blue;
short index;
// On vérifie qu'il y ait assez de couleurs entre le début et la fin pour
// pouvoir faire un dégradé:
// On vérifie qu'il y ait assez de couleurs entre le début et la fin pour
// pouvoir faire un dégradé:
if ( (start!=end) && (start+1!=end) )
{
start_red = Encode_component(palette[start].R);
@ -358,7 +358,7 @@ void Remap_image_highlevel(byte * conversion_table)
Main.backups->Pages->Transparent_color =
conversion_table[Main.backups->Pages->Transparent_color];
// On calcule les limites à l'écran de l'image
// On calcule les limites à l'écran de l'image
if (Main.image_height>=Menu_Y_before_window)
end_y=Menu_Y_before_window;
else
@ -390,19 +390,19 @@ void Remap_image_highlevel(byte * conversion_table)
end_y_mag=Main.image_height*Main.magnifier_factor;
}
// On doit maintenant faire la traduction à l'écran
// On doit maintenant faire la traduction à l'écran
Remap_zone_highlevel(0,0,end_x,end_y,conversion_table);
if (Main.magnifier_mode)
{
Remap_zone_highlevel(Main.separator_position,0,end_x_mag,end_y_mag,conversion_table);
// Il peut encore rester le bas de la barre de split à remapper si la
// partie zoomée ne descend pas jusqu'en bas...
// Il peut encore rester le bas de la barre de split à remapper si la
// partie zoomée ne descend pas jusqu'en bas...
Remap_zone_highlevel(Main.separator_position,end_y_mag,
(Main.separator_position+(SEPARATOR_WIDTH*Menu_factor_X)),
Menu_Y_before_window,conversion_table);
}
// Remappe tous les fonds de fenetre (qui doivent contenir un bout d'écran)
// Remappe tous les fonds de fenetre (qui doivent contenir un bout d'écran)
Remap_window_backgrounds(conversion_table, 0, Menu_Y_before_window);
}
@ -424,12 +424,12 @@ void Swap(int with_remap,short block_1_start,short block_2_start,short block_siz
// On fait une copie de la table d'used des couleurs
memcpy(temp_usage, color_usage, sizeof(dword) * 256);
// On commence à initialiser la table de conversion à un état où elle ne
// On commence à initialiser la table de conversion à un état où elle ne
// fera aucune conversion.
for (pos_1=0;pos_1<=255;pos_1++)
conversion_table[pos_1]=pos_1;
// On calcul les dernières couleurs de chaque bloc.
// On calcul les dernières couleurs de chaque bloc.
end_1=block_1_start+block_size-1;
end_2=block_2_start+block_size-1;
@ -447,7 +447,7 @@ void Swap(int with_remap,short block_1_start,short block_2_start,short block_siz
palette[pos_1].G=temp_palette[pos_2].G;
palette[pos_1].B=temp_palette[pos_2].B;
// On gère la mise à jour de pos_2
// On gère la mise à jour de pos_2
if (pos_2==end_2)
pos_2=block_1_start;
else
@ -457,7 +457,7 @@ void Swap(int with_remap,short block_1_start,short block_2_start,short block_siz
else
if ((block_2_start<block_1_start) && (end_2>=block_1_start))
{
// Le bloc destination déborde dans le bloc source.
// Le bloc destination déborde dans le bloc source.
for (pos_1=block_2_start,pos_2=block_1_start;pos_1<=end_1;pos_1++)
{
@ -469,7 +469,7 @@ void Swap(int with_remap,short block_1_start,short block_2_start,short block_siz
palette[pos_1].G=temp_palette[pos_2].G;
palette[pos_1].B=temp_palette[pos_2].B;
// On gère la mise à jour de pos_2
// On gère la mise à jour de pos_2
if (pos_2==end_1)
pos_2=block_2_start;
else
@ -487,7 +487,7 @@ void Swap(int with_remap,short block_1_start,short block_2_start,short block_siz
conversion_table[pos_2]=pos_1;
// On intervertit le nombre d'used des couleurs pour garder une
// cohérence lors d'un éventuel "Zap unused".
// cohérence lors d'un éventuel "Zap unused".
SWAP_DWORDS(color_usage[pos_1], color_usage[pos_2])
// On fait un changement de teinte:
@ -522,7 +522,7 @@ void Set_nice_menu_colors(dword * color_usage,int not_picture)
for (index=0; index<256; index++)
replace_table[index]=index;
// On recherche les 4 couleurs les moins utilisées dans l'image pour pouvoir
// On recherche les 4 couleurs les moins utilisées dans l'image pour pouvoir
// les remplacer par les nouvelles couleurs.
for (index2=0; index2<4; index2++)
for (index=255; index>=0; index--)
@ -533,11 +533,11 @@ void Set_nice_menu_colors(dword * color_usage,int not_picture)
new_colors[index2]=index;
}
// On trie maintenant la table dans le sens décroissant.
// (Ce n'est pas indispensable, mais ça fera plus joli dans la palette).
// On trie maintenant la table dans le sens décroissant.
// (Ce n'est pas indispensable, mais ça fera plus joli dans la palette).
do
{
color=0; // Booléen qui dit si le tri n'est pas terminé.
color=0; // Booléen qui dit si le tri n'est pas terminé.
for (index=0; index<3; index++)
{
if (new_colors[index]>new_colors[index+1])
@ -551,7 +551,7 @@ void Set_nice_menu_colors(dword * color_usage,int not_picture)
} while (color);
// On sauvegarde dans rgb les teintes qu'on va remplacer et on met les
// couleurs du menu par défaut
// couleurs du menu par défaut
for (index=0; index<4; index++)
{
const T_Components * target_rgb;
@ -566,7 +566,7 @@ void Set_nice_menu_colors(dword * color_usage,int not_picture)
Main.palette[color].B=Round_palette_component(target_rgb->B);
}
// Maintenant qu'on a placé notre nouvelle palette, on va chercher quelles
// Maintenant qu'on a placé notre nouvelle palette, on va chercher quelles
// sont les couleurs qui peuvent remplacer les anciennes
Hide_cursor();
for (index=0; index<4; index++)
@ -580,7 +580,7 @@ void Set_nice_menu_colors(dword * color_usage,int not_picture)
}
else
{
// On fait un changement des couleurs visibles à l'écran et dans l'image
// On fait un changement des couleurs visibles à l'écran et dans l'image
Remap_image_highlevel(replace_table);
}
Display_cursor();
@ -600,20 +600,20 @@ void Reduce_palette(short * used_colors,int nb_colors_asked,T_Palette palette,dw
dword used;
dword best_used;
// On commence par initialiser la table de conversion dans un état où
// aucune conversion ne sera effectuée.
// On commence par initialiser la table de conversion dans un état où
// aucune conversion ne sera effectuée.
for (color_1=0; color_1<=255; color_1++)
conversion_table[color_1]=color_1;
// Si on ne connait pas encore le nombre de couleurs utilisées, on le
// calcule! (!!! La fonction appelée Efface puis Affiche le curseur !!!)
// Si on ne connait pas encore le nombre de couleurs utilisées, on le
// calcule! (!!! La fonction appelée Efface puis Affiche le curseur !!!)
if ((*used_colors)<0)
Update_color_count(used_colors,color_usage);
Hide_cursor();
// On tasse la palette vers le début parce qu'elle doit ressembler à
// du Gruyère (et comme Papouille il aime pas le fromage...)
// On tasse la palette vers le début parce qu'elle doit ressembler à
// du Gruyère (et comme Papouille il aime pas le fromage...)
// Pour cela, on va scruter la couleur color_1 et se servir de l'indice
// color_2 comme position de destination.
@ -626,19 +626,19 @@ void Reduce_palette(short * used_colors,int nb_colors_asked,T_Palette palette,dw
palette[color_2].G=palette[color_1].G;
palette[color_2].B=palette[color_1].B;
// Ensuite, on met à jour le tableau d'occupation des couleurs.
// Ensuite, on met à jour le tableau d'occupation des couleurs.
color_usage[color_2]=color_usage[color_1];
// On va maintenant s'occuper de la table de conversion:
conversion_table[color_1]=color_2;
// Maintenant, la place désignée par color_2 est occupée, alors on
// doit passer à un indice de destination suivant.
// Maintenant, la place désignée par color_2 est occupée, alors on
// doit passer à un indice de destination suivant.
color_2++;
}
}
// On met toutes les couleurs inutilisées en noir
// On met toutes les couleurs inutilisées en noir
for (;color_2<256;color_2++)
{
palette[color_2].R=0;
@ -647,14 +647,14 @@ void Reduce_palette(short * used_colors,int nb_colors_asked,T_Palette palette,dw
color_usage[color_2]=0;
}
// Maintenant qu'on a une palette clean, on va boucler en réduisant
// le nombre de couleurs jusqu'à ce qu'on atteigne le nombre désiré.
// Maintenant qu'on a une palette clean, on va boucler en réduisant
// le nombre de couleurs jusqu'à ce qu'on atteigne le nombre désiré.
// (The stop condition is further down)
while (1)
{
// Il s'agit de trouver les 2 couleurs qui se ressemblent le plus
// parmis celles qui sont utilisées (bien sûr) et de les remplacer par
// une seule couleur qui est la moyenne pondérée de ces 2 couleurs
// parmis celles qui sont utilisées (bien sûr) et de les remplacer par
// une seule couleur qui est la moyenne pondérée de ces 2 couleurs
// en fonction de leur utilisation dans l'image.
best_difference =26*255*26*255+55*255*255+19*255*19*255;
@ -690,14 +690,14 @@ void Reduce_palette(short * used_colors,int nb_colors_asked,T_Palette palette,dw
if (best_difference!=0 && (*used_colors)<=nb_colors_asked)
break;
// Maintenant qu'on les a trouvées, on va pouvoir mettre à jour nos
// données pour que le remplacement se fasse sans encombres.
// Maintenant qu'on les a trouvées, on va pouvoir mettre à jour nos
// données pour que le remplacement se fasse sans encombres.
// En somme, on va remplacer best_color_2 par best_color_1,
// mais attention, on ne remplace pas best_color_1 par
// best_color_2 !
// On met à jour la palette.
// On met à jour la palette.
palette[best_color_1].R=Round_div((color_usage[best_color_1]*palette[best_color_1].R)+
(color_usage[best_color_2]*palette[best_color_2].R),
best_used);
@ -708,78 +708,78 @@ void Reduce_palette(short * used_colors,int nb_colors_asked,T_Palette palette,dw
(color_usage[best_color_2]*palette[best_color_2].B),
best_used);
// On met à jour la table d'utilisation.
// On met à jour la table d'utilisation.
color_usage[best_color_1]+=color_usage[best_color_2];
color_usage[best_color_2]=0;
// On met à jour la table de conversion.
// On met à jour la table de conversion.
for (color_1=0;color_1<=255;color_1++)
{
if (conversion_table[color_1]==best_color_2)
{
// La color_1 avait déjà prévue de se faire remplacer par la
// couleur que l'on veut maintenant éliminer. On va maintenant
// demander à ce que la color_1 se fasse remplacer par la
// La color_1 avait déjà prévue de se faire remplacer par la
// couleur que l'on veut maintenant éliminer. On va maintenant
// demander à ce que la color_1 se fasse remplacer par la
// best_color_1.
conversion_table[color_1]=best_color_1;
}
}
// Bon, maintenant que l'on a fait bouger nos petites choses concernants
// la couleur à éliminer, on va s'occuper de faire bouger les couleurs
// situées après la couleur à éliminer pour qu'elles se déplaçent d'une
// couleur en arrière.
// la couleur à éliminer, on va s'occuper de faire bouger les couleurs
// situées après la couleur à éliminer pour qu'elles se déplaçent d'une
// couleur en arrière.
for (color_1=0;color_1<=255;color_1++)
{
// Commençons par nous occuper des tables d'utilisation et de la
// Commençons par nous occuper des tables d'utilisation et de la
// palette.
if (color_1>best_color_2)
{
// La color_1 va scroller en arrière.
// La color_1 va scroller en arrière.
// Donc on transfère son utilisation dans l'utilisation de la
// couleur qui la précède.
// Donc on transfère son utilisation dans l'utilisation de la
// couleur qui la précède.
color_usage[color_1-1]=color_usage[color_1];
// Et on transfère ses teintes dans les teintes de la couleur qui
// la précède.
// Et on transfère ses teintes dans les teintes de la couleur qui
// la précède.
palette[color_1-1].R=palette[color_1].R;
palette[color_1-1].G=palette[color_1].G;
palette[color_1-1].B=palette[color_1].B;
}
// Une fois la palette et la table d'utilisation gérées, on peut
// Une fois la palette et la table d'utilisation gérées, on peut
// s'occuper de notre table de conversion.
if (conversion_table[color_1]>best_color_2)
// La color_1 avait l'intention de se faire remplacer par une
// couleur que l'on va (ou que l'on a déjà) bouger en arrière.
// couleur que l'on va (ou que l'on a déjà) bouger en arrière.
conversion_table[color_1]--;
}
// On vient d'éjecter une couleur, donc on peut mettre à jour le nombre
// de couleurs utilisées.
// On vient d'éjecter une couleur, donc on peut mettre à jour le nombre
// de couleurs utilisées.
(*used_colors)--;
// A la fin, on doit passer (dans la palette) les teintes du dernier
// élément de notre ensemble en noir.
// élément de notre ensemble en noir.
palette[*used_colors].R=0;
palette[*used_colors].G=0;
palette[*used_colors].B=0;
// Au passage, on va s'assurer que l'on a pas oublié de la mettre à une
// Au passage, on va s'assurer que l'on a pas oublié de la mettre à une
// utilisation nulle.
color_usage[*used_colors]=0;
// Après avoir éjecté une couleur, on le fait savoir à l'utilisateur par
// l'intermédiaire du compteur de nombre utilisées.
// Après avoir éjecté une couleur, on le fait savoir à l'utilisateur par
// l'intermédiaire du compteur de nombre utilisées.
Num2str(*used_colors,str,3);
Print_in_window(COUNT_X,COUNT_Y,str,MC_Black,MC_Light);
}
// Maintenant, tous ces calculs doivent êtres pris en compte dans la
// palette, l'image et à l'écran.
Remap_image_highlevel(conversion_table); // Et voila pour l'image et l'écran
// Maintenant, tous ces calculs doivent êtres pris en compte dans la
// palette, l'image et à l'écran.
Remap_image_highlevel(conversion_table); // Et voila pour l'image et l'écran
Display_cursor();
}
@ -849,10 +849,10 @@ void Draw_all_palette_sliders(T_Scroller_button * red_slider,
char str[5];
Hide_cursor();
// Réaffichage des jauges:
// Réaffichage des jauges:
if (start!=end)
{
// Dans le cas d'un bloc, tout à 0.
// Dans le cas d'un bloc, tout à 0.
red_slider->Position =Color_max;
Window_draw_slider(red_slider);
Print_counter(NUMERIC_R_X,NUMERIC_Y,"\xb1 0",MC_Black,MC_Light);
@ -1100,9 +1100,9 @@ void Button_Palette(int btn)
static short reduce_colors_number = 256;
short temp_color; // Variable pouvant reservir pour différents calculs intermédiaires
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
byte color,click; // Variables pouvant reservir pour différents calculs intermédiaires
short clicked_button;
word old_mouse_x;
word old_mouse_y;
@ -1251,7 +1251,7 @@ void Button_Palette(int btn)
Window_set_normal_button( 44,178,35,14,"Load" ,1,1,SDLK_l); // 26
Window_set_normal_button( 83,178,35,14,"Save" ,1,1,SDLK_s); // 27
// Dessin des petits effets spéciaux pour les boutons [+] et [-]
// Dessin des petits effets spéciaux pour les boutons [+] et [-]
Draw_thingumajig(BUTTON_PLUS_X-5, BUTTON_PLUS_Y,MC_White,-1);
Draw_thingumajig(BUTTON_MINUS_X+16,BUTTON_MINUS_Y,MC_Dark,+1);
@ -1274,7 +1274,7 @@ void Button_Palette(int btn)
{
case 0 : // Nulle part
break;
case -1 : // Hors de la fenêtre
case -1 : // Hors de la fenêtre
case 1 : // palette
if ( (Mouse_X!=old_mouse_x) || (Mouse_Y!=old_mouse_y) || (Mouse_K!=old_mouse_k) )
{
@ -1370,13 +1370,13 @@ void Button_Palette(int btn)
if ( (Fore_color!=temp_color) || (block_start!=block_end) )
{
// La couleur en question est nouvelle ou elle annule un
// ancien bloc. Il faut donc sélectionner cette couleur comme
// ancien bloc. Il faut donc sélectionner cette couleur comme
// unique couleur choisie.
Fore_color=first_color=last_color=block_start=block_end=temp_color;
Tag_color_range(block_start,block_end);
// Affichage du n° de la couleur sélectionnée
// Affichage du n° de la couleur sélectionnée
Window_rectangle(COLOR_X,COLOR_Y,56,7,MC_Light);
Num2str(Fore_color,str,3);
Print_in_window(COLOR_X,COLOR_Y,str,MC_Black,MC_Light);
@ -1398,22 +1398,22 @@ void Button_Palette(int btn)
// On maintient le click, on va donc tester si le curseur bouge
if (temp_color!=last_color)
{
// On commence par ordonner la 1ère et dernière couleur du bloc
// On commence par ordonner la 1ère et dernière couleur du bloc
if (first_color<temp_color)
{
block_start=first_color;
block_end=temp_color;
// Affichage du n° de la couleur sélectionnée
// Affichage du n° de la couleur sélectionnée
Num2str(block_start,str ,3);
Num2str(block_end ,str+4,3);
str[3]=26; // Flèche vers la droite
str[3]=26; // Flèche vers la droite
Print_in_window(COLOR_X,COLOR_Y,str,MC_Black,MC_Light);
// Affichage des jauges
Display_sliders(red_slider,green_slider,blue_slider,1,NULL);
// Affichage dans le block de visu du bloc (dégradé) en cours
// Affichage dans le block de visu du bloc (dégradé) en cours
Display_grad_block_in_window(FGCOLOR_DISPLAY_X,FGCOLOR_DISPLAY_Y,FGCOLOR_DISPLAY_W,FGCOLOR_DISPLAY_H,block_start,block_end);
}
else if (first_color>temp_color)
@ -1421,16 +1421,16 @@ void Button_Palette(int btn)
block_start=temp_color;
block_end=first_color;
// Affichage du n° de la couleur sélectionnée
// Affichage du n° de la couleur sélectionnée
Num2str(block_start,str ,3);
Num2str(block_end ,str+4,3);
str[3]=26; // Flèche vers la droite
str[3]=26; // Flèche vers la droite
Print_in_window(COLOR_X,COLOR_Y,str,MC_Black,MC_Light);
// Affichage des jauges
Display_sliders(red_slider,green_slider,blue_slider,1,NULL);
// Affichage dans le block de visu du bloc (dégradé) en cours
// Affichage dans le block de visu du bloc (dégradé) en cours
Display_grad_block_in_window(FGCOLOR_DISPLAY_X,FGCOLOR_DISPLAY_Y,FGCOLOR_DISPLAY_W,FGCOLOR_DISPLAY_H,block_start,block_end);
}
else
@ -1438,7 +1438,7 @@ void Button_Palette(int btn)
block_start=block_end=first_color;
Window_rectangle(NUMERIC_R_X,NUMERIC_Y,72,7,MC_Light);
// Affichage du n° de la couleur sélectionnée
// Affichage du n° de la couleur sélectionnée
Window_rectangle(COLOR_X+24,COLOR_Y,32,7,MC_Light);
Update_window_area(COLOR_X+24,COLOR_Y,32,7);
Num2str(Fore_color,str,3);
@ -1520,7 +1520,7 @@ void Button_Palette(int btn)
if (red_slider->Position>Color_max)
{
// Jauge dans les négatifs:
// Jauge dans les négatifs:
Num2str(-(Color_max-red_slider->Position),str,4);
str[0]='-';
}
@ -1601,7 +1601,7 @@ void Button_Palette(int btn)
if (green_slider->Position>Color_max)
{
// Jauge dans les négatifs:
// Jauge dans les négatifs:
Num2str(-(Color_max-green_slider->Position),str,4);
str[0]='-';
}
@ -1682,7 +1682,7 @@ void Button_Palette(int btn)
if (blue_slider->Position>Color_max)
{
// Jauge dans les négatifs:
// Jauge dans les négatifs:
Num2str(-(Color_max-blue_slider->Position),str,4);
str[0]='-';
}
@ -1778,7 +1778,7 @@ void Button_Palette(int btn)
}
}
Draw_all_palette_sliders(red_slider,green_slider,blue_slider,working_palette,block_start,block_end);
// On prépare la "modifiabilité" des nouvelles couleurs
// On prépare la "modifiabilité" des nouvelles couleurs
Set_palette(working_palette);
memcpy(temp_palette,working_palette,sizeof(T_Palette));
need_to_remap=1;
@ -1797,7 +1797,7 @@ void Button_Palette(int btn)
Set_blue (i,temp_color,working_palette);
}
Draw_all_palette_sliders(red_slider,green_slider,blue_slider,working_palette,block_start,block_end);
// On prépare la "modifiabilité" des nouvelles couleurs
// On prépare la "modifiabilité" des nouvelles couleurs
Set_palette(working_palette);
memcpy(temp_palette,working_palette,sizeof(T_Palette));
@ -1814,7 +1814,7 @@ void Button_Palette(int btn)
Palette_edit_step();
// On calcule le nombre de couleurs a swapper sans risquer de sortir
// de la palette (La var. first_color est utilisée pour économiser 1 var; c'est tout)
// de la palette (La var. first_color est utilisée pour économiser 1 var; c'est tout)
first_color=(temp_color+block_end-block_start<=255)?block_end+1-block_start:256-temp_color;
if (clicked_button==8) // On ne fait de backup de l'image que si on
@ -1829,17 +1829,17 @@ void Button_Palette(int btn)
memcpy(temp_palette,working_palette,sizeof(T_Palette));
// On déplace le bloc vers les modifs:
// On déplace le bloc vers les modifs:
last_color=block_end=temp_color+first_color-1;
Fore_color=first_color=block_start=temp_color;
// On raffiche le n° des bornes du bloc:
// On raffiche le n° des bornes du bloc:
if (block_start!=block_end)
{
// Cas d'un bloc multi-couleur
Num2str(block_start,str ,3);
Num2str(block_end ,str+4,3);
str[3]=26; // Flèche vers la droite
// Affichage dans le block de visu du bloc (dégradé) en cours
str[3]=26; // Flèche vers la droite
// Affichage dans le block de visu du bloc (dégradé) en cours
Display_grad_block_in_window(FGCOLOR_DISPLAY_X,FGCOLOR_DISPLAY_Y,FGCOLOR_DISPLAY_W,FGCOLOR_DISPLAY_H,block_start,block_end);
}
else
@ -1884,17 +1884,17 @@ void Button_Palette(int btn)
((temp_color+block_end-block_start<=255)?block_end+1-block_start:256-temp_color)*3);
memcpy(temp_palette,working_palette,sizeof(T_Palette));
Set_palette(working_palette);
// On déplace le bloc vers les modifs:
// On déplace le bloc vers les modifs:
last_color=block_end=((temp_color+block_end-block_start<=255)?(temp_color+block_end-block_start):255);
Fore_color=first_color=block_start=temp_color;
// On raffiche le n° des bornes du bloc:
// On raffiche le n° des bornes du bloc:
if (block_start!=block_end)
{
// Cas d'un bloc multi-couleur
Num2str(block_start,str ,3);
Num2str(block_end ,str+4,3);
str[3]=26; // Flèche vers la droite
// Affichage dans le block de visu du bloc (dégradé) en cours
str[3]=26; // Flèche vers la droite
// Affichage dans le block de visu du bloc (dégradé) en cours
Display_grad_block_in_window(FGCOLOR_DISPLAY_X,FGCOLOR_DISPLAY_Y,FGCOLOR_DISPLAY_W,FGCOLOR_DISPLAY_H,block_start,block_end);
}
else
@ -1938,7 +1938,7 @@ void Button_Palette(int btn)
}
Draw_all_palette_sliders(red_slider,green_slider,blue_slider,working_palette,block_start,block_end);
// On prépare la "modifiabilité" des nouvelles couleurs
// On prépare la "modifiabilité" des nouvelles couleurs
Set_palette(working_palette);
@ -1985,7 +1985,7 @@ void Button_Palette(int btn)
memcpy(Main.palette, temp_palette, sizeof(T_Palette));
}
Set_palette(working_palette); // On définit la nouvelle 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));
@ -2098,7 +2098,7 @@ void Button_Palette(int btn)
// -- red --
if (red_slider->Position>Color_max)
{
// Jauge dans les négatifs:
// Jauge dans les négatifs:
Num2str(-(Color_max-red_slider->Position),str,4);
str[0]='-';
}
@ -2119,7 +2119,7 @@ void Button_Palette(int btn)
// -- green --
if (green_slider->Position>Color_max)
{
// Jauge dans les négatifs:
// Jauge dans les négatifs:
Num2str(-(Color_max-green_slider->Position),str,4);
str[0]='-';
}
@ -2140,7 +2140,7 @@ void Button_Palette(int btn)
// -- blue --
if (blue_slider->Position>Color_max)
{
// Jauge dans les négatifs:
// Jauge dans les négatifs:
Num2str(-(Color_max-blue_slider->Position),str,4);
str[0]='-';
}
@ -2224,7 +2224,7 @@ void Button_Palette(int btn)
// -- red --
if (red_slider->Position>Color_max)
{
// Jauge dans les négatifs:
// Jauge dans les négatifs:
Num2str(-(Color_max-red_slider->Position),str,4);
str[0]='-';
}
@ -2245,7 +2245,7 @@ void Button_Palette(int btn)
// -- green --
if (green_slider->Position>Color_max)
{
// Jauge dans les négatifs:
// Jauge dans les négatifs:
Num2str(-(Color_max-green_slider->Position),str,4);
str[0]='-';
}
@ -2266,7 +2266,7 @@ void Button_Palette(int btn)
// -- blue --
if (blue_slider->Position>Color_max)
{
// Jauge dans les négatifs:
// Jauge dans les négatifs:
Num2str(-(Color_max-blue_slider->Position),str,4);
str[0]='-';
}
@ -2302,7 +2302,7 @@ void Button_Palette(int btn)
}
Draw_all_palette_sliders(red_slider,green_slider,blue_slider,working_palette,block_start,block_end);
Set_palette(working_palette);
// On prépare la "modifiabilité" des nouvelles couleurs
// On prépare la "modifiabilité" des nouvelles couleurs
memcpy(temp_palette,working_palette,sizeof(T_Palette));
need_to_remap=1;
@ -2352,7 +2352,7 @@ void Button_Palette(int btn)
End_of_modification();
Palette_edit_step(); // Disable Undo
}
// On prépare la "modifiabilité" des nouvelles couleurs
// On prépare la "modifiabilité" des nouvelles couleurs
Set_palette(working_palette);
memcpy(temp_palette,working_palette,sizeof(T_Palette));
@ -2398,7 +2398,7 @@ void Button_Palette(int btn)
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
byte oh=0,ol=0,os=0; // Valeur pour la couleur précédente
int swap=1;
byte remap_table[256];
byte inverted_table[256];
@ -2515,8 +2515,8 @@ void Button_Palette(int btn)
for (i=0;i<256;i++)
inverted_table[remap_table[i]]=i;
Remap_image_highlevel(inverted_table);
// Maintenant, tous ces calculs doivent êtres pris en compte dans la
// palette, l'image et à l'écran.
// Maintenant, tous ces calculs doivent êtres pris en compte dans la
// palette, l'image et à l'écran.
Set_palette(working_palette);
Palette_edit_step(); // Disable Undo
@ -2565,7 +2565,7 @@ void Button_Palette(int btn)
Set_green (i,new_green,working_palette);
Set_blue (i,new_blue,working_palette);
}
// On prépare la "modifiabilité" des nouvelles couleurs
// On prépare la "modifiabilité" des nouvelles couleurs
Set_palette(working_palette);
memcpy(temp_palette,working_palette,sizeof(T_Palette));
need_to_remap=1;
@ -2590,7 +2590,7 @@ void Button_Palette(int btn)
Fore_color=first_color=last_color=block_start=block_end=selected_col;
Tag_color_range(block_start,block_end);
// Affichage du n° de la couleur sélectionnée
// Affichage du n° de la couleur sélectionnée
Window_rectangle(COLOR_X,COLOR_Y,56,7,MC_Light);
Num2str(Fore_color,str,3);
Print_in_window(COLOR_X,COLOR_Y,str,MC_Black,MC_Light);
@ -2634,7 +2634,7 @@ void Button_Palette(int btn)
{
if (Key)
{
if (Is_shortcut(Key,SPECIAL_PREVIOUS_FORECOLOR)) // Décaler Forecolor vers la gauche
if (Is_shortcut(Key,SPECIAL_PREVIOUS_FORECOLOR)) // Décaler Forecolor vers la gauche
{
if (block_start==block_end)
{
@ -2646,7 +2646,7 @@ void Button_Palette(int btn)
Draw_all_palette_sliders(red_slider,green_slider,blue_slider,working_palette,block_start,block_end);
Hide_cursor();
Tag_color_range(block_start,block_end);
// Affichage du n° de la couleur sélectionnée
// Affichage du n° de la couleur sélectionnée
Num2str(Fore_color,str,3);
Print_in_window(COLOR_X,COLOR_Y,str,MC_Black,MC_Light);
// Affichage dans le block de visu de la couleur en cours
@ -2656,7 +2656,7 @@ void Button_Palette(int btn)
}
Key=0;
}
else if (Is_shortcut(Key,SPECIAL_NEXT_FORECOLOR)) // Décaler Forecolor vers la droite
else if (Is_shortcut(Key,SPECIAL_NEXT_FORECOLOR)) // Décaler Forecolor vers la droite
{
if (block_start==block_end)
{
@ -2668,7 +2668,7 @@ void Button_Palette(int btn)
Draw_all_palette_sliders(red_slider,green_slider,blue_slider,working_palette,block_start,block_end);
Hide_cursor();
Tag_color_range(block_start,block_end);
// Affichage du n° de la couleur sélectionnée
// Affichage du n° de la couleur sélectionnée
Num2str(Fore_color,str,3);
Print_in_window(COLOR_X,COLOR_Y,str,MC_Black,MC_Light);
// Affichage dans le block de visu de la couleur en cours
@ -2703,7 +2703,7 @@ void Button_Palette(int btn)
Key=0;
}
else if (Key == SDLK_BACKSPACE)
// Remise des couleurs du menu à l'état normal en essayant
// Remise des couleurs du menu à l'état normal en essayant
// de ne pas trop modifier l'image.
{
if (!image_is_backed_up)
@ -2731,7 +2731,7 @@ void Button_Palette(int btn)
}
else if (Is_shortcut(Key,0x100+BUTTON_COLORPICKER))
{
// Récupération d'une couleur derrière le menu
// Récupération d'une couleur derrière le menu
Get_color_behind_window(&color,&click);
if (click)
{
@ -2754,7 +2754,7 @@ void Button_Palette(int btn)
Fore_color=first_color=last_color=block_start=block_end=color;
Tag_color_range(block_start,block_end);
// Affichage du n° de la couleur sélectionnée
// Affichage du n° de la couleur sélectionnée
Window_rectangle(COLOR_X+24,COLOR_Y,32,7,MC_Light);
Update_window_area(COLOR_X+24,COLOR_Y,32,7);
Num2str(Fore_color,str,3);
@ -2845,7 +2845,7 @@ void Button_Palette(int btn)
Compute_optimal_menu_colors(Main.palette);
// La variable employée ici n'a pas vraiment de rapport avec son nom...
// La variable employée ici n'a pas vraiment de rapport avec son nom...
need_to_remap=(Window_pos_Y+(Window_height*Menu_factor_Y)<Menu_Y_before_window);
Close_window();
@ -2853,9 +2853,9 @@ void Button_Palette(int btn)
Reposition_palette();
// On affiche les "ForeBack" car le menu n'est raffiché que si la fenêtre
// empiétait sur le menu. Mais si les couleurs on été modifiées, il faut
// rafficher tout le menu remappé.
// On affiche les "ForeBack" car le menu n'est raffiché que si la fenêtre
// empiétait sur le menu. Mais si les couleurs on été modifiées, il faut
// rafficher tout le menu remappé.
if (need_to_remap)
Display_menu();

View File

@ -36,7 +36,7 @@
void Pixel_double (word x,word y,byte color)
/* Affiche un pixel de la color aux coords x;y à l'écran */
/* Affiche un pixel de la color aux coords x;y à l'écran */
{
*(Screen_pixels + x * ZOOMX + y*ZOOMY * VIDEO_LINE_WIDTH)=color;
*(Screen_pixels + x * ZOOMX + y*ZOOMY * VIDEO_LINE_WIDTH + 1)=color;
@ -45,13 +45,13 @@ void Pixel_double (word x,word y,byte color)
}
byte Read_pixel_double (word x,word y)
/* On retourne la couleur du pixel aux coords données */
/* On retourne la couleur du pixel aux coords données */
{
return *( Screen_pixels + y * ZOOMY * VIDEO_LINE_WIDTH + x * ZOOMX);
}
void Block_double (word start_x,word start_y,word width,word height,byte color)
/* On affiche un rectangle de la couleur donnée */
/* On affiche un rectangle de la couleur donnée */
{
SDL_Rect rectangle;
rectangle.x=start_x*ZOOMX;
@ -62,10 +62,10 @@ void Block_double (word start_x,word start_y,word width,word height,byte color)
}
void Display_part_of_screen_double (word width,word height,word image_width)
/* Afficher une partie de l'image telle quelle sur l'écran */
/* Afficher une partie de l'image telle quelle sur l'écran */
{
byte* dest=Screen_pixels; //On va se mettre en 0,0 dans l'écran (dest)
byte* src=Main.offset_Y*image_width+Main.offset_X+Main_screen; //Coords de départ ds la source (src)
byte* dest=Screen_pixels; //On va se mettre en 0,0 dans l'écran (dest)
byte* src=Main.offset_Y*image_width+Main.offset_X+Main_screen; //Coords de départ ds la source (src)
int y;
int dy;
@ -82,7 +82,7 @@ void Display_part_of_screen_double (word width,word height,word image_width)
// On double la ligne qu'on vient de copier
memcpy(dest-width*ZOOMX+VIDEO_LINE_WIDTH,dest-width*ZOOMX,width*ZOOMX);
// On passe à la ligne suivante
// On passe à la ligne suivante
src+=image_width-width;
dest+=VIDEO_LINE_WIDTH*ZOOMY - width*ZOOMX;
}
@ -90,10 +90,10 @@ void Display_part_of_screen_double (word width,word height,word image_width)
}
void Pixel_preview_normal_double (word x,word y,byte color)
/* Affichage d'un pixel dans l'écran, par rapport au décalage de l'image
* dans l'écran, en mode normal (pas en mode loupe)
* Note: si on modifie cette procédure, il faudra penser à faire également
* la modif dans la procédure Pixel_Preview_Loupe_SDL. */
/* Affichage d'un pixel dans l'écran, par rapport au décalage de l'image
* dans l'écran, en mode normal (pas en mode loupe)
* Note: si on modifie cette procédure, il faudra penser à faire également
* la modif dans la procédure Pixel_Preview_Loupe_SDL. */
{
// if(x-Main.offset_X >= 0 && y - Main.offset_Y >= 0)
Pixel_double(x-Main.offset_X,y-Main.offset_Y,color);
@ -101,10 +101,10 @@ void Pixel_preview_normal_double (word x,word y,byte color)
void Pixel_preview_magnifier_double (word x,word y,byte color)
{
// Affiche le pixel dans la partie non zoomée
// Affiche le pixel dans la partie non zoomée
Pixel_double(x-Main.offset_X,y-Main.offset_Y,color);
// Regarde si on doit aussi l'afficher dans la partie zoomée
// Regarde si on doit aussi l'afficher dans la partie zoomée
if (y >= Limit_top_zoom && y <= Limit_visible_bottom_zoom
&& x >= Limit_left_zoom && x <= Limit_visible_right_zoom)
{
@ -114,7 +114,7 @@ void Pixel_preview_magnifier_double (word x,word y,byte color)
if (Menu_Y - y_zoom < Main.magnifier_factor)
// On ne doit dessiner qu'un morceau du pixel
// sinon on dépasse sur le menu
// sinon on dépasse sur le menu
height = Menu_Y - y_zoom;
else
height = Main.magnifier_factor;
@ -150,7 +150,7 @@ void Vertical_XOR_line_double(word x_pos,word y_pos,word height)
void Display_brush_color_double(word x_pos,word y_pos,word x_offset,word y_offset,word width,word height,byte transp_color,word brush_width)
{
// dest = Position à l'écran
// dest = Position à l'écran
byte* dest = Screen_pixels + y_pos * ZOOMY * VIDEO_LINE_WIDTH + x_pos * ZOOMX;
// src = Position dans la brosse
byte* src = Brush + y_offset * brush_width + x_offset;
@ -163,7 +163,7 @@ void Display_brush_color_double(word x_pos,word y_pos,word x_offset,word y_offse
// Pour chaque pixel
for(x = width;x > 0; x--)
{
// On vérifie que ce n'est pas la transparence
// On vérifie que ce n'est pas la transparence
if(*src != transp_color)
{
*(dest+VIDEO_LINE_WIDTH+1) = *(dest+VIDEO_LINE_WIDTH) = *(dest+1) = *dest = *src;
@ -174,7 +174,7 @@ void Display_brush_color_double(word x_pos,word y_pos,word x_offset,word y_offse
dest+=ZOOMX;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
dest = dest + VIDEO_LINE_WIDTH*ZOOMY - width*ZOOMX;
src = src + brush_width - width;
}
@ -186,8 +186,8 @@ void Display_brush_mono_double(word x_pos, word y_pos,
byte transp_color, byte color, word brush_width)
/* On affiche la brosse en monochrome */
{
byte* dest=y_pos*ZOOMY*VIDEO_LINE_WIDTH+x_pos*ZOOMX+Screen_pixels; // dest = adr destination à
// l'écran
byte* dest=y_pos*ZOOMY*VIDEO_LINE_WIDTH+x_pos*ZOOMX+Screen_pixels; // dest = adr destination à
// l'écran
byte* src=brush_width*y_offset+x_offset+Brush; // src = adr ds
// la brosse
int x,y;
@ -206,7 +206,7 @@ void Display_brush_mono_double(word x_pos, word y_pos,
dest+=ZOOMX;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
src+=brush_width-width;
dest+=VIDEO_LINE_WIDTH*ZOOMY-width*ZOOMX;
}
@ -215,8 +215,8 @@ void Display_brush_mono_double(word x_pos, word y_pos,
void Clear_brush_double(word x_pos,word y_pos,word x_offset,word y_offset,word width,word height,byte transp_color,word image_width)
{
byte* dest=Screen_pixels+x_pos*ZOOMX+y_pos*ZOOMY*VIDEO_LINE_WIDTH; //On va se mettre en 0,0 dans l'écran (dest)
byte* src = ( y_pos + Main.offset_Y ) * image_width + x_pos + Main.offset_X + Main_screen; //Coords de départ ds la source (src)
byte* dest=Screen_pixels+x_pos*ZOOMX+y_pos*ZOOMY*VIDEO_LINE_WIDTH; //On va se mettre en 0,0 dans l'écran (dest)
byte* src = ( y_pos + Main.offset_Y ) * image_width + x_pos + Main.offset_X + Main_screen; //Coords de départ ds la source (src)
int y;
int x;
(void)x_offset; // unused
@ -236,17 +236,17 @@ void Clear_brush_double(word x_pos,word y_pos,word x_offset,word y_offset,word w
dest+=ZOOMX;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
src+=image_width-width;
dest+=VIDEO_LINE_WIDTH*ZOOMY-width*ZOOMX;
}
Update_rect(x_pos,y_pos,width,height);
}
// Affiche une brosse (arbitraire) à l'écran
// Affiche une brosse (arbitraire) à l'écran
void Display_brush_double(byte * brush, word x_pos,word y_pos,word x_offset,word y_offset,word width,word height,byte transp_color,word brush_width)
{
// dest = Position à l'écran
// dest = Position à l'écran
byte* dest = Screen_pixels + y_pos * ZOOMY * VIDEO_LINE_WIDTH + x_pos * ZOOMX;
// src = Position dans la brosse
byte* src = brush + y_offset * brush_width + x_offset;
@ -259,7 +259,7 @@ void Display_brush_double(byte * brush, word x_pos,word y_pos,word x_offset,word
// Pour chaque pixel
for(x = width;x > 0; x--)
{
// On vérifie que ce n'est pas la transparence
// On vérifie que ce n'est pas la transparence
if(*src != transp_color)
{
*(dest+VIDEO_LINE_WIDTH+1)=*(dest+VIDEO_LINE_WIDTH)=*(dest+1)=*dest=*src;
@ -269,7 +269,7 @@ void Display_brush_double(byte * brush, word x_pos,word y_pos,word x_offset,word
src++; dest+=ZOOMX;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
dest = dest + VIDEO_LINE_WIDTH*ZOOMY - width*ZOOMX;
src = src + brush_width - width;
}
@ -277,7 +277,7 @@ void Display_brush_double(byte * brush, word x_pos,word y_pos,word x_offset,word
void Remap_screen_double(word x_pos,word y_pos,word width,word height,byte * conversion_table)
{
// dest = coords a l'écran
// dest = coords a l'écran
byte* dest = Screen_pixels + y_pos * ZOOMY * VIDEO_LINE_WIDTH + x_pos * ZOOMX;
int x,y;
@ -300,7 +300,7 @@ void Remap_screen_double(word x_pos,word y_pos,word width,word height,byte * con
void Display_line_on_screen_fast_double(word x_pos,word y_pos,word width,byte * line)
/* On affiche toute une ligne de pixels telle quelle. */
/* Utilisée si le buffer contient déja des pixel doublés. */
/* Utilisée si le buffer contient déja des pixel doublés. */
{
memcpy(Screen_pixels+x_pos*ZOOMX+y_pos*ZOOMY*VIDEO_LINE_WIDTH,line,width*ZOOMX);
memcpy(Screen_pixels+x_pos*ZOOMX+(y_pos*ZOOMY+1)*VIDEO_LINE_WIDTH,line,width*ZOOMX);
@ -322,8 +322,8 @@ void Display_line_on_screen_double(word x_pos,word y_pos,word width,byte * line)
void Display_transparent_mono_line_on_screen_double(
word x_pos, word y_pos, word width, byte* line,
byte transp_color, byte color)
// Affiche une ligne à l'écran avec une couleur + transparence.
// Utilisé par les brosses en mode zoom
// Affiche une ligne à l'écran avec une couleur + transparence.
// Utilisé par les brosses en mode zoom
{
byte* dest = Screen_pixels+ y_pos*VIDEO_LINE_WIDTH + x_pos*ZOOMX;
int x;
@ -345,31 +345,31 @@ void Read_line_screen_double(word x_pos,word y_pos,word width,byte * line)
}
void Display_part_of_screen_scaled_double(
word width, // width non zoomée
word height, // height zoomée
word width, // width non zoomée
word height, // height zoomée
word image_width,byte * buffer)
{
byte* src = Main_screen + Main.magnifier_offset_Y * image_width
+ Main.magnifier_offset_X;
int y = 0; // Ligne en cours de traitement
// Pour chaque ligne à zoomer
// Pour chaque ligne à zoomer
while(1)
{
int x;
// On éclate la ligne
// On éclate la ligne
Zoom_a_line(src,buffer,Main.magnifier_factor*ZOOMX,width);
// On l'affiche Facteur fois, sur des lignes consécutives
// On l'affiche Facteur fois, sur des lignes consécutives
x = Main.magnifier_factor;
// Pour chaque ligne
do{
// On affiche la ligne zoomée
// On affiche la ligne zoomée
Display_line_on_screen_fast_double(
Main.X_zoom, y, width*Main.magnifier_factor,
buffer
);
// On passe à la suivante
// On passe à la suivante
y++;
if(y==height)
{
@ -386,12 +386,12 @@ void Display_part_of_screen_scaled_double(
// ATTENTION on n'arrive jamais ici !
}
// Affiche une partie de la brosse couleur zoomée
// Affiche une partie de la brosse couleur zoomée
void Display_brush_color_zoom_double(word x_pos,word y_pos,
word x_offset,word y_offset,
word width, // width non zoomée
word width, // width non zoomée
word end_y_pos,byte transp_color,
word brush_width, // width réelle de la brosse
word brush_width, // width réelle de la brosse
byte * buffer)
{
byte* src = Brush+y_offset*brush_width + x_offset;
@ -402,7 +402,7 @@ void Display_brush_color_zoom_double(word x_pos,word y_pos,
while(1)
{
Zoom_a_line(src,buffer,Main.magnifier_factor,width);
// On affiche facteur fois la ligne zoomée
// On affiche facteur fois la ligne zoomée
for(bx=Main.magnifier_factor;bx>0;bx--)
{
Display_transparent_line_on_screen_wide(x_pos,y*ZOOMY,width*Main.magnifier_factor,buffer,transp_color);
@ -420,10 +420,10 @@ void Display_brush_color_zoom_double(word x_pos,word y_pos,
void Display_brush_mono_zoom_double(word x_pos, word y_pos,
word x_offset, word y_offset,
word width, // width non zoomée
word width, // width non zoomée
word end_y_pos,
byte transp_color, byte color,
word brush_width, // width réelle de la brosse
word brush_width, // width réelle de la brosse
byte * buffer
)
@ -431,29 +431,29 @@ void Display_brush_mono_zoom_double(word x_pos, word y_pos,
byte* src = Brush + y_offset * brush_width + x_offset;
int y=y_pos*ZOOMY;
//Pour chaque ligne à zoomer :
//Pour chaque ligne à zoomer :
while(1)
{
int bx;
// src = Ligne originale
// On éclate la ligne
// On éclate la ligne
Zoom_a_line(src,buffer,Main.magnifier_factor,width);
// On affiche la ligne Facteur fois à l'écran (sur des
// lignes consécutives)
// On affiche la ligne Facteur fois à l'écran (sur des
// lignes consécutives)
bx = Main.magnifier_factor*ZOOMY;
// Pour chaque ligne écran
// Pour chaque ligne écran
do
{
// On affiche la ligne zoomée
// On affiche la ligne zoomée
Display_transparent_mono_line_on_screen_double(
x_pos, y, width * Main.magnifier_factor,
buffer, transp_color, color
);
// On passe à la ligne suivante
// On passe à la ligne suivante
y++;
// On vérifie qu'on est pas à la ligne finale
// On vérifie qu'on est pas à la ligne finale
if(y == end_y_pos*ZOOMY)
{
Redraw_grid( x_pos, y_pos,
@ -466,7 +466,7 @@ void Display_brush_mono_zoom_double(word x_pos, word y_pos,
}
while (bx > 0);
// Passage à la ligne suivante dans la brosse aussi
// Passage à la ligne suivante dans la brosse aussi
src+=brush_width;
}
}
@ -474,13 +474,13 @@ void Display_brush_mono_zoom_double(word x_pos, word y_pos,
void Clear_brush_scaled_double(word x_pos,word y_pos,word x_offset,word y_offset,word width,word end_y_pos,byte transp_color,word image_width,byte * buffer)
{
// En fait on va recopier l'image non zoomée dans la partie zoomée !
// En fait on va recopier l'image non zoomée dans la partie zoomée !
byte* src = Main_screen + y_offset * image_width + x_offset;
int y = y_pos;
int bx;
(void)transp_color; // unused
// Pour chaque ligne à zoomer
// Pour chaque ligne à zoomer
while(1){
Zoom_a_line(src,buffer,Main.magnifier_factor*ZOOMX,width);

View File

@ -35,7 +35,7 @@
void Pixel_quad (word x,word y,byte color)
/* Affiche un pixel de la color aux coords x;y à l'écran */
/* Affiche un pixel de la color aux coords x;y à l'écran */
{
*(Screen_pixels + x * ZOOMX + y*ZOOMY * VIDEO_LINE_WIDTH)=color;
*(Screen_pixels + x * ZOOMX + y*ZOOMY * VIDEO_LINE_WIDTH + 1)=color;
@ -56,13 +56,13 @@ void Pixel_quad (word x,word y,byte color)
}
byte Read_pixel_quad (word x,word y)
/* On retourne la couleur du pixel aux coords données */
/* On retourne la couleur du pixel aux coords données */
{
return *( Screen_pixels + y * ZOOMY * VIDEO_LINE_WIDTH + x * ZOOMX);
}
void Block_quad (word start_x,word start_y,word width,word height,byte color)
/* On affiche un rectangle de la couleur donnée */
/* On affiche un rectangle de la couleur donnée */
{
SDL_Rect rectangle;
rectangle.x=start_x*ZOOMX;
@ -73,10 +73,10 @@ void Block_quad (word start_x,word start_y,word width,word height,byte color)
}
void Display_part_of_screen_quad (word width,word height,word image_width)
/* Afficher une partie de l'image telle quelle sur l'écran */
/* Afficher une partie de l'image telle quelle sur l'écran */
{
byte* dest=Screen_pixels; //On va se mettre en 0,0 dans l'écran (dest)
byte* src=Main.offset_Y*image_width+Main.offset_X+Main_screen; //Coords de départ ds la source (src)
byte* dest=Screen_pixels; //On va se mettre en 0,0 dans l'écran (dest)
byte* src=Main.offset_Y*image_width+Main.offset_X+Main_screen; //Coords de départ ds la source (src)
int y;
int dy;
@ -97,7 +97,7 @@ void Display_part_of_screen_quad (word width,word height,word image_width)
// On la quadruple
memcpy(dest-width*ZOOMX+3*VIDEO_LINE_WIDTH,dest-width*ZOOMX,width*ZOOMX);
// On passe à la ligne suivante
// On passe à la ligne suivante
src+=image_width-width;
dest+=VIDEO_LINE_WIDTH*ZOOMY - width*ZOOMX;
}
@ -105,10 +105,10 @@ void Display_part_of_screen_quad (word width,word height,word image_width)
}
void Pixel_preview_normal_quad (word x,word y,byte color)
/* Affichage d'un pixel dans l'écran, par rapport au décalage de l'image
* dans l'écran, en mode normal (pas en mode loupe)
* Note: si on modifie cette procédure, il faudra penser à faire également
* la modif dans la procédure Pixel_Preview_Loupe_SDL. */
/* Affichage d'un pixel dans l'écran, par rapport au décalage de l'image
* dans l'écran, en mode normal (pas en mode loupe)
* Note: si on modifie cette procédure, il faudra penser à faire également
* la modif dans la procédure Pixel_Preview_Loupe_SDL. */
{
// if(x-Main.offset_X >= 0 && y - Main.offset_Y >= 0)
Pixel_quad(x-Main.offset_X,y-Main.offset_Y,color);
@ -116,10 +116,10 @@ void Pixel_preview_normal_quad (word x,word y,byte color)
void Pixel_preview_magnifier_quad (word x,word y,byte color)
{
// Affiche le pixel dans la partie non zoomée
// Affiche le pixel dans la partie non zoomée
Pixel_quad(x-Main.offset_X,y-Main.offset_Y,color);
// Regarde si on doit aussi l'afficher dans la partie zoomée
// Regarde si on doit aussi l'afficher dans la partie zoomée
if (y >= Limit_top_zoom && y <= Limit_visible_bottom_zoom
&& x >= Limit_left_zoom && x <= Limit_visible_right_zoom)
{
@ -129,7 +129,7 @@ void Pixel_preview_magnifier_quad (word x,word y,byte color)
if (Menu_Y - y_zoom < Main.magnifier_factor)
// On ne doit dessiner qu'un morceau du pixel
// sinon on dépasse sur le menu
// sinon on dépasse sur le menu
height = Menu_Y - y_zoom;
else
height = Main.magnifier_factor;
@ -165,7 +165,7 @@ void Vertical_XOR_line_quad(word x_pos,word y_pos,word height)
void Display_brush_color_quad(word x_pos,word y_pos,word x_offset,word y_offset,word width,word height,byte transp_color,word brush_width)
{
// dest = Position à l'écran
// dest = Position à l'écran
byte* dest = Screen_pixels + y_pos * ZOOMY * VIDEO_LINE_WIDTH + x_pos * ZOOMX;
// src = Position dans la brosse
byte* src = Brush + y_offset * brush_width + x_offset;
@ -178,7 +178,7 @@ void Display_brush_color_quad(word x_pos,word y_pos,word x_offset,word y_offset,
// Pour chaque pixel
for(x = width;x > 0; x--)
{
// On vérifie que ce n'est pas la transparence
// On vérifie que ce n'est pas la transparence
if(*src != transp_color)
{
*(dest+3*VIDEO_LINE_WIDTH+3) = *(dest+3*VIDEO_LINE_WIDTH+2) = *(dest+3*VIDEO_LINE_WIDTH+1) = *(dest+3*VIDEO_LINE_WIDTH) = *(dest+2*VIDEO_LINE_WIDTH+3) = *(dest+2*VIDEO_LINE_WIDTH+2) = *(dest+2*VIDEO_LINE_WIDTH+1) = *(dest+2*VIDEO_LINE_WIDTH) = *(dest+VIDEO_LINE_WIDTH+3) = *(dest+VIDEO_LINE_WIDTH+2) = *(dest+VIDEO_LINE_WIDTH+1) = *(dest+VIDEO_LINE_WIDTH) = *(dest+3) = *(dest+2) = *(dest+1) = *dest = *src;
@ -189,7 +189,7 @@ void Display_brush_color_quad(word x_pos,word y_pos,word x_offset,word y_offset,
dest+=ZOOMX;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
dest = dest + VIDEO_LINE_WIDTH*ZOOMY - width*ZOOMX;
src = src + brush_width - width;
}
@ -201,8 +201,8 @@ void Display_brush_mono_quad(word x_pos, word y_pos,
byte transp_color, byte color, word brush_width)
/* On affiche la brosse en monochrome */
{
byte* dest=y_pos*ZOOMY*VIDEO_LINE_WIDTH+x_pos*ZOOMX+Screen_pixels; // dest = adr destination à
// l'écran
byte* dest=y_pos*ZOOMY*VIDEO_LINE_WIDTH+x_pos*ZOOMX+Screen_pixels; // dest = adr destination à
// l'écran
byte* src=brush_width*y_offset+x_offset+Brush; // src = adr ds
// la brosse
int x,y;
@ -221,7 +221,7 @@ void Display_brush_mono_quad(word x_pos, word y_pos,
dest+=ZOOMX;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
src+=brush_width-width;
dest+=VIDEO_LINE_WIDTH*ZOOMY-width*ZOOMX;
}
@ -230,8 +230,8 @@ void Display_brush_mono_quad(word x_pos, word y_pos,
void Clear_brush_quad(word x_pos,word y_pos,word x_offset,word y_offset,word width,word height,byte transp_color,word image_width)
{
byte* dest=Screen_pixels+x_pos*ZOOMX+y_pos*ZOOMY*VIDEO_LINE_WIDTH; //On va se mettre en 0,0 dans l'écran (dest)
byte* src = ( y_pos + Main.offset_Y ) * image_width + x_pos + Main.offset_X + Main_screen; //Coords de départ ds la source (src)
byte* dest=Screen_pixels+x_pos*ZOOMX+y_pos*ZOOMY*VIDEO_LINE_WIDTH; //On va se mettre en 0,0 dans l'écran (dest)
byte* src = ( y_pos + Main.offset_Y ) * image_width + x_pos + Main.offset_X + Main_screen; //Coords de départ ds la source (src)
int y;
int x;
(void)x_offset; // unused
@ -251,17 +251,17 @@ void Clear_brush_quad(word x_pos,word y_pos,word x_offset,word y_offset,word wid
dest+=ZOOMX;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
src+=image_width-width;
dest+=VIDEO_LINE_WIDTH*ZOOMY-width*ZOOMX;
}
Update_rect(x_pos,y_pos,width,height);
}
// Affiche une brosse (arbitraire) à l'écran
// Affiche une brosse (arbitraire) à l'écran
void Display_brush_quad(byte * brush, word x_pos,word y_pos,word x_offset,word y_offset,word width,word height,byte transp_color,word brush_width)
{
// dest = Position à l'écran
// dest = Position à l'écran
byte* dest = Screen_pixels + y_pos * ZOOMY * VIDEO_LINE_WIDTH + x_pos * ZOOMX;
// src = Position dans la brosse
byte* src = brush + y_offset * brush_width + x_offset;
@ -274,7 +274,7 @@ void Display_brush_quad(byte * brush, word x_pos,word y_pos,word x_offset,word y
// Pour chaque pixel
for(x = width;x > 0; x--)
{
// On vérifie que ce n'est pas la transparence
// On vérifie que ce n'est pas la transparence
if(*src != transp_color)
{
*(dest+3*VIDEO_LINE_WIDTH+3)=*(dest+3*VIDEO_LINE_WIDTH+2)=*(dest+3*VIDEO_LINE_WIDTH+1)=*(dest+3*VIDEO_LINE_WIDTH)=*(dest+2*VIDEO_LINE_WIDTH+3)=*(dest+2*VIDEO_LINE_WIDTH+2)=*(dest+2*VIDEO_LINE_WIDTH+1)=*(dest+2*VIDEO_LINE_WIDTH)=*(dest+VIDEO_LINE_WIDTH+3)=*(dest+VIDEO_LINE_WIDTH+2)=*(dest+VIDEO_LINE_WIDTH+1)=*(dest+VIDEO_LINE_WIDTH)=*(dest+3)=*(dest+2)=*(dest+1)=*dest=*src;
@ -284,7 +284,7 @@ void Display_brush_quad(byte * brush, word x_pos,word y_pos,word x_offset,word y
src++; dest+=ZOOMX;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
dest = dest + VIDEO_LINE_WIDTH*ZOOMY - width*ZOOMX;
src = src + brush_width - width;
}
@ -292,7 +292,7 @@ void Display_brush_quad(byte * brush, word x_pos,word y_pos,word x_offset,word y
void Remap_screen_quad(word x_pos,word y_pos,word width,word height,byte * conversion_table)
{
// dest = coords a l'écran
// dest = coords a l'écran
byte* dest = Screen_pixels + y_pos * ZOOMY * VIDEO_LINE_WIDTH + x_pos * ZOOMX;
int x,y;
@ -315,7 +315,7 @@ void Remap_screen_quad(word x_pos,word y_pos,word width,word height,byte * conve
void Display_line_on_screen_fast_quad(word x_pos,word y_pos,word width,byte * line)
/* On affiche toute une ligne de pixels telle quelle. */
/* Utilisée si le buffer contient déja des pixel doublés. */
/* Utilisée si le buffer contient déja des pixel doublés. */
{
memcpy(Screen_pixels+x_pos*ZOOMX+y_pos*ZOOMY*VIDEO_LINE_WIDTH,line,width*ZOOMX);
memcpy(Screen_pixels+x_pos*ZOOMX+(y_pos*ZOOMY+1)*VIDEO_LINE_WIDTH,line,width*ZOOMX);
@ -339,8 +339,8 @@ void Display_line_on_screen_quad(word x_pos,word y_pos,word width,byte * line)
void Display_transparent_mono_line_on_screen_quad(
word x_pos, word y_pos, word width, byte* line,
byte transp_color, byte color)
// Affiche une ligne à l'écran avec une couleur + transparence.
// Utilisé par les brosses en mode zoom
// Affiche une ligne à l'écran avec une couleur + transparence.
// Utilisé par les brosses en mode zoom
{
byte* dest = Screen_pixels+ y_pos*VIDEO_LINE_WIDTH + x_pos*ZOOMX;
int x;
@ -362,31 +362,31 @@ void Read_line_screen_quad(word x_pos,word y_pos,word width,byte * line)
}
void Display_part_of_screen_scaled_quad(
word width, // width non zoomée
word height, // height zoomée
word width, // width non zoomée
word height, // height zoomée
word image_width,byte * buffer)
{
byte* src = Main_screen + Main.magnifier_offset_Y * image_width
+ Main.magnifier_offset_X;
int y = 0; // Ligne en cours de traitement
// Pour chaque ligne à zoomer
// Pour chaque ligne à zoomer
while(1)
{
int x;
// On éclate la ligne
// On éclate la ligne
Zoom_a_line(src,buffer,Main.magnifier_factor*ZOOMX,width);
// On l'affiche Facteur fois, sur des lignes consécutives
// On l'affiche Facteur fois, sur des lignes consécutives
x = Main.magnifier_factor/**ZOOMY*/;
// Pour chaque ligne
do{
// On affiche la ligne zoomée
// On affiche la ligne zoomée
Display_line_on_screen_fast_quad(
Main.X_zoom, y, width*Main.magnifier_factor,
buffer
);
// On passe à la suivante
// On passe à la suivante
y++;
if(y==height/**ZOOMY*/)
{
@ -403,12 +403,12 @@ void Display_part_of_screen_scaled_quad(
// ATTENTION on n'arrive jamais ici !
}
// Affiche une partie de la brosse couleur zoomée
// Affiche une partie de la brosse couleur zoomée
void Display_brush_color_zoom_quad(word x_pos,word y_pos,
word x_offset,word y_offset,
word width, // width non zoomée
word width, // width non zoomée
word end_y_pos,byte transp_color,
word brush_width, // width réelle de la brosse
word brush_width, // width réelle de la brosse
byte * buffer)
{
byte* src = Brush+y_offset*brush_width + x_offset;
@ -419,7 +419,7 @@ void Display_brush_color_zoom_quad(word x_pos,word y_pos,
while(1)
{
Zoom_a_line(src,buffer,Main.magnifier_factor,width);
// On affiche facteur fois la ligne zoomée
// On affiche facteur fois la ligne zoomée
for(bx=Main.magnifier_factor;bx>0;bx--)
{
byte* line_src = buffer;
@ -454,10 +454,10 @@ void Display_brush_color_zoom_quad(word x_pos,word y_pos,
void Display_brush_mono_zoom_quad(word x_pos, word y_pos,
word x_offset, word y_offset,
word width, // width non zoomée
word width, // width non zoomée
word end_y_pos,
byte transp_color, byte color,
word brush_width, // width réelle de la brosse
word brush_width, // width réelle de la brosse
byte * buffer
)
@ -465,29 +465,29 @@ void Display_brush_mono_zoom_quad(word x_pos, word y_pos,
byte* src = Brush + y_offset * brush_width + x_offset;
int y=y_pos*ZOOMY;
//Pour chaque ligne à zoomer :
//Pour chaque ligne à zoomer :
while(1)
{
int bx;
// src = Ligne originale
// On éclate la ligne
// On éclate la ligne
Zoom_a_line(src,buffer,Main.magnifier_factor,width);
// On affiche la ligne Facteur fois à l'écran (sur des
// lignes consécutives)
// On affiche la ligne Facteur fois à l'écran (sur des
// lignes consécutives)
bx = Main.magnifier_factor*ZOOMY;
// Pour chaque ligne écran
// Pour chaque ligne écran
do
{
// On affiche la ligne zoomée
// On affiche la ligne zoomée
Display_transparent_mono_line_on_screen_quad(
x_pos, y, width * Main.magnifier_factor,
buffer, transp_color, color
);
// On passe à la ligne suivante
// On passe à la ligne suivante
y++;
// On vérifie qu'on est pas à la ligne finale
// On vérifie qu'on est pas à la ligne finale
if(y == end_y_pos*ZOOMY)
{
Redraw_grid( x_pos, y_pos,
@ -500,7 +500,7 @@ void Display_brush_mono_zoom_quad(word x_pos, word y_pos,
}
while (bx > 0);
// Passage à la ligne suivante dans la brosse aussi
// Passage à la ligne suivante dans la brosse aussi
src+=brush_width;
}
}
@ -508,13 +508,13 @@ void Display_brush_mono_zoom_quad(word x_pos, word y_pos,
void Clear_brush_scaled_quad(word x_pos,word y_pos,word x_offset,word y_offset,word width,word end_y_pos,byte transp_color,word image_width,byte * buffer)
{
// En fait on va recopier l'image non zoomée dans la partie zoomée !
// En fait on va recopier l'image non zoomée dans la partie zoomée !
byte* src = Main_screen + y_offset * image_width + x_offset;
int y = y_pos;
int bx;
(void)transp_color; // unused
// Pour chaque ligne à zoomer
// Pour chaque ligne à zoomer
while(1){
Zoom_a_line(src,buffer,Main.magnifier_factor*ZOOMX,width);

View File

@ -32,19 +32,19 @@
void Pixel_simple (word x,word y,byte color)
/* Affiche un pixel de la color aux coords x;y à l'écran */
/* Affiche un pixel de la color aux coords x;y à l'écran */
{
*(Screen_pixels + x + y * VIDEO_LINE_WIDTH)=color;
}
byte Read_pixel_simple (word x,word y)
/* On retourne la couleur du pixel aux coords données */
/* On retourne la couleur du pixel aux coords données */
{
return *( Screen_pixels + y * VIDEO_LINE_WIDTH + x );
}
void Block_simple (word start_x,word start_y,word width,word height,byte color)
/* On affiche un rectangle de la couleur donnée */
/* On affiche un rectangle de la couleur donnée */
{
SDL_Rect rectangle;
rectangle.x=start_x;
@ -55,10 +55,10 @@ void Block_simple (word start_x,word start_y,word width,word height,byte color)
}
void Display_part_of_screen_simple (word width,word height,word image_width)
/* Afficher une partie de l'image telle quelle sur l'écran */
/* Afficher une partie de l'image telle quelle sur l'écran */
{
byte* dest=Screen_pixels; //On va se mettre en 0,0 dans l'écran (dest)
byte* src=Main.offset_Y*image_width+Main.offset_X+Main_screen; //Coords de départ ds la source (src)
byte* dest=Screen_pixels; //On va se mettre en 0,0 dans l'écran (dest)
byte* src=Main.offset_Y*image_width+Main.offset_X+Main_screen; //Coords de départ ds la source (src)
int y;
for(y=height;y!=0;y--)
@ -67,7 +67,7 @@ void Display_part_of_screen_simple (word width,word height,word image_width)
// On fait une copie de la ligne
memcpy(dest,src,width);
// On passe à la ligne suivante
// On passe à la ligne suivante
src+=image_width;
dest+=VIDEO_LINE_WIDTH;
}
@ -75,10 +75,10 @@ void Display_part_of_screen_simple (word width,word height,word image_width)
}
void Pixel_preview_normal_simple (word x,word y,byte color)
/* Affichage d'un pixel dans l'écran, par rapport au décalage de l'image
* dans l'écran, en mode normal (pas en mode loupe)
* Note: si on modifie cette procédure, il faudra penser à faire également
* la modif dans la procédure Pixel_Preview_Loupe_SDL. */
/* Affichage d'un pixel dans l'écran, par rapport au décalage de l'image
* dans l'écran, en mode normal (pas en mode loupe)
* Note: si on modifie cette procédure, il faudra penser à faire également
* la modif dans la procédure Pixel_Preview_Loupe_SDL. */
{
// if(x-Main.offset_X >= 0 && y - Main.offset_Y >= 0)
Pixel_simple(x-Main.offset_X,y-Main.offset_Y,color);
@ -86,10 +86,10 @@ void Pixel_preview_normal_simple (word x,word y,byte color)
void Pixel_preview_magnifier_simple (word x,word y,byte color)
{
// Affiche le pixel dans la partie non zoomée
// Affiche le pixel dans la partie non zoomée
Pixel_simple(x-Main.offset_X,y-Main.offset_Y,color);
// Regarde si on doit aussi l'afficher dans la partie zoomée
// Regarde si on doit aussi l'afficher dans la partie zoomée
if (y >= Limit_top_zoom && y <= Limit_visible_bottom_zoom
&& x >= Limit_left_zoom && x <= Limit_visible_right_zoom)
{
@ -99,7 +99,7 @@ void Pixel_preview_magnifier_simple (word x,word y,byte color)
if (Menu_Y - y_zoom < Main.magnifier_factor)
// On ne doit dessiner qu'un morceau du pixel
// sinon on dépasse sur le menu
// sinon on dépasse sur le menu
height = Menu_Y - y_zoom;
else
height = Main.magnifier_factor;
@ -135,7 +135,7 @@ void Vertical_XOR_line_simple(word x_pos,word y_pos,word height)
void Display_brush_color_simple(word x_pos,word y_pos,word x_offset,word y_offset,word width,word height,byte transp_color,word brush_width)
{
// dest = Position à l'écran
// dest = Position à l'écran
byte* dest = Screen_pixels + y_pos * VIDEO_LINE_WIDTH + x_pos;
// src = Position dans la brosse
byte* src = Brush + y_offset * brush_width + x_offset;
@ -148,7 +148,7 @@ void Display_brush_color_simple(word x_pos,word y_pos,word x_offset,word y_offse
// Pour chaque pixel
for(x = width;x > 0; x--)
{
// On vérifie que ce n'est pas la transparence
// On vérifie que ce n'est pas la transparence
if(*src != transp_color)
{
*dest = *src;
@ -158,7 +158,7 @@ void Display_brush_color_simple(word x_pos,word y_pos,word x_offset,word y_offse
src++; dest++;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
dest = dest + VIDEO_LINE_WIDTH - width;
src = src + brush_width - width;
}
@ -170,8 +170,8 @@ void Display_brush_mono_simple(word x_pos, word y_pos,
byte transp_color, byte color, word brush_width)
/* On affiche la brosse en monochrome */
{
byte* dest=y_pos*VIDEO_LINE_WIDTH+x_pos+Screen_pixels; // dest = adr Destination à
// l'écran
byte* dest=y_pos*VIDEO_LINE_WIDTH+x_pos+Screen_pixels; // dest = adr Destination à
// l'écran
byte* src=brush_width*y_offset+x_offset+Brush; // src = adr ds
// la brosse
int x,y;
@ -190,7 +190,7 @@ void Display_brush_mono_simple(word x_pos, word y_pos,
dest++;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
src+=brush_width-width;
dest+=VIDEO_LINE_WIDTH-width;
}
@ -199,8 +199,8 @@ void Display_brush_mono_simple(word x_pos, word y_pos,
void Clear_brush_simple(word x_pos,word y_pos,word x_offset,word y_offset,word width,word height,byte transp_color,word image_width)
{
byte* dest=Screen_pixels+x_pos+y_pos*VIDEO_LINE_WIDTH; //On va se mettre en 0,0 dans l'écran (dest)
byte* src = ( y_pos + Main.offset_Y ) * image_width + x_pos + Main.offset_X + Main_screen; //Coords de départ ds la source (src)
byte* dest=Screen_pixels+x_pos+y_pos*VIDEO_LINE_WIDTH; //On va se mettre en 0,0 dans l'écran (dest)
byte* src = ( y_pos + Main.offset_Y ) * image_width + x_pos + Main.offset_X + Main_screen; //Coords de départ ds la source (src)
int y;
(void)x_offset; // unused
(void)y_offset; // unused
@ -212,17 +212,17 @@ void Clear_brush_simple(word x_pos,word y_pos,word x_offset,word y_offset,word w
// On fait une copie de la ligne
memcpy(dest,src,width);
// On passe à la ligne suivante
// On passe à la ligne suivante
src+=image_width;
dest+=VIDEO_LINE_WIDTH;
}
Update_rect(x_pos,y_pos,width,height);
}
// Affiche une brosse (arbitraire) à l'écran
// Affiche une brosse (arbitraire) à l'écran
void Display_brush_simple(byte * brush, word x_pos,word y_pos,word x_offset,word y_offset,word width,word height,byte transp_color,word brush_width)
{
// dest = Position à l'écran
// dest = Position à l'écran
byte* dest = Screen_pixels + y_pos * VIDEO_LINE_WIDTH + x_pos;
// src = Position dans la brosse
byte* src = brush + y_offset * brush_width + x_offset;
@ -235,7 +235,7 @@ void Display_brush_simple(byte * brush, word x_pos,word y_pos,word x_offset,word
// Pour chaque pixel
for(x = width;x > 0; x--)
{
// On vérifie que ce n'est pas la transparence
// On vérifie que ce n'est pas la transparence
if(*src != transp_color)
{
*dest = *src;
@ -245,7 +245,7 @@ void Display_brush_simple(byte * brush, word x_pos,word y_pos,word x_offset,word
src++; dest++;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
dest = dest + VIDEO_LINE_WIDTH - width;
src = src + brush_width - width;
}
@ -253,7 +253,7 @@ void Display_brush_simple(byte * brush, word x_pos,word y_pos,word x_offset,word
void Remap_screen_simple(word x_pos,word y_pos,word width,word height,byte * conversion_table)
{
// dest = coords a l'écran
// dest = coords a l'écran
byte* dest = Screen_pixels + y_pos * VIDEO_LINE_WIDTH + x_pos;
int x,y;
@ -274,7 +274,7 @@ void Remap_screen_simple(word x_pos,word y_pos,word width,word height,byte * con
}
void Display_line_on_screen_simple(word x_pos,word y_pos,word width,byte * line)
/* On affiche toute une ligne de pixels. Utilisé pour les textes. */
/* On affiche toute une ligne de pixels. Utilisé pour les textes. */
{
memcpy(Screen_pixels+x_pos+y_pos*VIDEO_LINE_WIDTH,line,width);
}
@ -282,8 +282,8 @@ void Display_line_on_screen_simple(word x_pos,word y_pos,word width,byte * line)
void Display_transparent_mono_line_on_screen_simple(
word x_pos, word y_pos, word width, byte* line,
byte transp_color, byte color)
// Affiche une ligne à l'écran avec une couleur + transparence.
// Utilisé par les brosses en mode zoom
// Affiche une ligne à l'écran avec une couleur + transparence.
// Utilisé par les brosses en mode zoom
{
byte* dest = Screen_pixels+ y_pos * VIDEO_LINE_WIDTH + x_pos;
int x;
@ -303,31 +303,31 @@ void Read_line_screen_simple(word x_pos,word y_pos,word width,byte * line)
}
void Display_part_of_screen_scaled_simple(
word width, // width non zoomée
word height, // height zoomée
word width, // width non zoomée
word height, // height zoomée
word image_width,byte * buffer)
{
byte* src = Main_screen + Main.magnifier_offset_Y * image_width
+ Main.magnifier_offset_X;
int y = 0; // Ligne en cours de traitement
// Pour chaque ligne à zoomer
// Pour chaque ligne à zoomer
while(1)
{
int x;
// On éclate la ligne
// On éclate la ligne
Zoom_a_line(src,buffer,Main.magnifier_factor,width);
// On l'affiche Facteur fois, sur des lignes consécutives
// On l'affiche Facteur fois, sur des lignes consécutives
x = Main.magnifier_factor;
// Pour chaque ligne
do{
// On affiche la ligne zoomée
// On affiche la ligne zoomée
Display_line_on_screen_simple(
Main.X_zoom, y, width*Main.magnifier_factor,
buffer
);
// On passe à la suivante
// On passe à la suivante
y++;
if(y==height)
{
@ -361,12 +361,12 @@ void Display_transparent_line_on_screen_simple(word x_pos,word y_pos,word width,
}
}
// Affiche une partie de la brosse couleur zoomée
// Affiche une partie de la brosse couleur zoomée
void Display_brush_color_zoom_simple(word x_pos,word y_pos,
word x_offset,word y_offset,
word width, // width non zoomée
word width, // width non zoomée
word end_y_pos,byte transp_color,
word brush_width, // width réelle de la brosse
word brush_width, // width réelle de la brosse
byte * buffer)
{
byte* src = Brush+y_offset*brush_width + x_offset;
@ -377,7 +377,7 @@ void Display_brush_color_zoom_simple(word x_pos,word y_pos,
while(1)
{
Zoom_a_line(src,buffer,Main.magnifier_factor,width);
// On affiche facteur fois la ligne zoomée
// On affiche facteur fois la ligne zoomée
for(bx=Main.magnifier_factor;bx>0;bx--)
{
Display_transparent_line_on_screen_simple(x_pos,y,width*Main.magnifier_factor,buffer,transp_color);
@ -394,10 +394,10 @@ void Display_brush_color_zoom_simple(word x_pos,word y_pos,
void Display_brush_mono_zoom_simple(word x_pos, word y_pos,
word x_offset, word y_offset,
word width, // width non zoomée
word width, // width non zoomée
word end_y_pos,
byte transp_color, byte color,
word brush_width, // width réelle de la brosse
word brush_width, // width réelle de la brosse
byte * buffer
)
@ -405,29 +405,29 @@ void Display_brush_mono_zoom_simple(word x_pos, word y_pos,
byte* src = Brush + y_offset * brush_width + x_offset;
int y=y_pos;
//Pour chaque ligne à zoomer :
//Pour chaque ligne à zoomer :
while(1)
{
int bx;
// src = Ligne originale
// On éclate la ligne
// On éclate la ligne
Zoom_a_line(src,buffer,Main.magnifier_factor,width);
// On affiche la ligne Facteur fois à l'écran (sur des
// lignes consécutives)
// On affiche la ligne Facteur fois à l'écran (sur des
// lignes consécutives)
bx = Main.magnifier_factor;
// Pour chaque ligne écran
// Pour chaque ligne écran
do
{
// On affiche la ligne zoomée
// On affiche la ligne zoomée
Display_transparent_mono_line_on_screen_simple(
x_pos, y, width * Main.magnifier_factor,
buffer, transp_color, color
);
// On passe à la ligne suivante
// On passe à la ligne suivante
y++;
// On vérifie qu'on est pas à la ligne finale
// On vérifie qu'on est pas à la ligne finale
if(y == end_y_pos)
{
Redraw_grid( x_pos, y_pos,
@ -440,20 +440,20 @@ void Display_brush_mono_zoom_simple(word x_pos, word y_pos,
}
while (bx > 0);
// Passage à la ligne suivante dans la brosse aussi
// Passage à la ligne suivante dans la brosse aussi
src+=brush_width;
}
}
void Clear_brush_scaled_simple(word x_pos,word y_pos,word x_offset,word y_offset,word width,word end_y_pos,byte transp_color,word image_width,byte * buffer)
{
// En fait on va recopier l'image non zoomée dans la partie zoomée !
// En fait on va recopier l'image non zoomée dans la partie zoomée !
byte* src = Main_screen + y_offset * image_width + x_offset;
int y = y_pos;
int bx;
(void)transp_color; // unused
// Pour chaque ligne à zoomer
// Pour chaque ligne à zoomer
while(1){
Zoom_a_line(src,buffer,Main.magnifier_factor,width);

View File

@ -36,20 +36,20 @@
void Pixel_tall (word x,word y,byte color)
/* Affiche un pixel de la color aux coords x;y à l'écran */
/* Affiche un pixel de la color aux coords x;y à l'écran */
{
*(Screen_pixels + x + y*ZOOMY*VIDEO_LINE_WIDTH)=color;
*(Screen_pixels + x + (y*ZOOMY+1)*VIDEO_LINE_WIDTH)=color;
}
byte Read_pixel_tall (word x,word y)
/* On retourne la couleur du pixel aux coords données */
/* On retourne la couleur du pixel aux coords données */
{
return *( Screen_pixels + y*ZOOMY*VIDEO_LINE_WIDTH + x );
}
void Block_tall (word start_x,word start_y,word width,word height,byte color)
/* On affiche un rectangle de la couleur donnée */
/* On affiche un rectangle de la couleur donnée */
{
SDL_Rect rectangle;
rectangle.x=start_x;
@ -60,10 +60,10 @@ void Block_tall (word start_x,word start_y,word width,word height,byte color)
}
void Display_part_of_screen_tall (word width,word height,word image_width)
/* Afficher une partie de l'image telle quelle sur l'écran */
/* Afficher une partie de l'image telle quelle sur l'écran */
{
byte* dest=Screen_pixels; //On va se mettre en 0,0 dans l'écran (dest)
byte* src=Main.offset_Y*image_width+Main.offset_X+Main_screen; //Coords de départ ds la source (src)
byte* dest=Screen_pixels; //On va se mettre en 0,0 dans l'écran (dest)
byte* src=Main.offset_Y*image_width+Main.offset_X+Main_screen; //Coords de départ ds la source (src)
int y;
for(y=height;y!=0;y--)
@ -74,7 +74,7 @@ void Display_part_of_screen_tall (word width,word height,word image_width)
dest+=VIDEO_LINE_WIDTH;
memcpy(dest,src,width);
// On passe à la ligne suivante
// On passe à la ligne suivante
src+=image_width;
dest+=VIDEO_LINE_WIDTH;
}
@ -82,10 +82,10 @@ void Display_part_of_screen_tall (word width,word height,word image_width)
}
void Pixel_preview_normal_tall (word x,word y,byte color)
/* Affichage d'un pixel dans l'écran, par rapport au décalage de l'image
* dans l'écran, en mode normal (pas en mode loupe)
* Note: si on modifie cette procédure, il faudra penser à faire également
* la modif dans la procédure Pixel_Preview_Loupe_SDL. */
/* Affichage d'un pixel dans l'écran, par rapport au décalage de l'image
* dans l'écran, en mode normal (pas en mode loupe)
* Note: si on modifie cette procédure, il faudra penser à faire également
* la modif dans la procédure Pixel_Preview_Loupe_SDL. */
{
// if(x-Main.offset_X >= 0 && y - Main.offset_Y >= 0)
Pixel_tall(x-Main.offset_X,y-Main.offset_Y,color);
@ -93,10 +93,10 @@ void Pixel_preview_normal_tall (word x,word y,byte color)
void Pixel_preview_magnifier_tall (word x,word y,byte color)
{
// Affiche le pixel dans la partie non zoomée
// Affiche le pixel dans la partie non zoomée
Pixel_tall(x-Main.offset_X,y-Main.offset_Y,color);
// Regarde si on doit aussi l'afficher dans la partie zoomée
// Regarde si on doit aussi l'afficher dans la partie zoomée
if (y >= Limit_top_zoom && y <= Limit_visible_bottom_zoom
&& x >= Limit_left_zoom && x <= Limit_visible_right_zoom)
{
@ -106,7 +106,7 @@ void Pixel_preview_magnifier_tall (word x,word y,byte color)
if (Menu_Y - y_zoom < Main.magnifier_factor)
// On ne doit dessiner qu'un morceau du pixel
// sinon on dépasse sur le menu
// sinon on dépasse sur le menu
height = Menu_Y - y_zoom;
else
height = Main.magnifier_factor;
@ -146,7 +146,7 @@ void Vertical_XOR_line_tall(word x_pos,word y_pos,word height)
void Display_brush_color_tall(word x_pos,word y_pos,word x_offset,word y_offset,word width,word height,byte transp_color,word brush_width)
{
// dest = Position à l'écran
// dest = Position à l'écran
byte* dest = Screen_pixels + y_pos*ZOOMY*VIDEO_LINE_WIDTH + x_pos;
// src = Position dans la brosse
byte* src = Brush + y_offset * brush_width + x_offset;
@ -159,7 +159,7 @@ void Display_brush_color_tall(word x_pos,word y_pos,word x_offset,word y_offset,
// Pour chaque pixel
for(x = width;x > 0; x--)
{
// On vérifie que ce n'est pas la transparence
// On vérifie que ce n'est pas la transparence
if(*src != transp_color)
{
*dest = *src;
@ -170,7 +170,7 @@ void Display_brush_color_tall(word x_pos,word y_pos,word x_offset,word y_offset,
src++; dest++;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
dest = dest + ZOOMY*VIDEO_LINE_WIDTH - width;
src = src + brush_width - width;
}
@ -182,8 +182,8 @@ void Display_brush_mono_tall(word x_pos, word y_pos,
byte transp_color, byte color, word brush_width)
/* On affiche la brosse en monochrome */
{
byte* dest=y_pos*ZOOMY*VIDEO_LINE_WIDTH+x_pos+Screen_pixels; // dest = adr Destination à
// l'écran
byte* dest=y_pos*ZOOMY*VIDEO_LINE_WIDTH+x_pos+Screen_pixels; // dest = adr Destination à
// l'écran
byte* src=brush_width*y_offset+x_offset+Brush; // src = adr ds
// la brosse
int x,y;
@ -205,7 +205,7 @@ void Display_brush_mono_tall(word x_pos, word y_pos,
dest++;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
src+=brush_width-width;
dest+=ZOOMY*VIDEO_LINE_WIDTH-width;
}
@ -214,8 +214,8 @@ void Display_brush_mono_tall(word x_pos, word y_pos,
void Clear_brush_tall(word x_pos,word y_pos,word x_offset,word y_offset,word width,word height,byte transp_color,word image_width)
{
byte* dest=Screen_pixels+x_pos+y_pos*ZOOMY*VIDEO_LINE_WIDTH; //On va se mettre en 0,0 dans l'écran (dest)
byte* src = ( y_pos + Main.offset_Y ) * image_width + x_pos + Main.offset_X + Main_screen; //Coords de départ ds la source (src)
byte* dest=Screen_pixels+x_pos+y_pos*ZOOMY*VIDEO_LINE_WIDTH; //On va se mettre en 0,0 dans l'écran (dest)
byte* src = ( y_pos + Main.offset_Y ) * image_width + x_pos + Main.offset_X + Main_screen; //Coords de départ ds la source (src)
int y;
(void)x_offset; // unused
(void)y_offset; // unused
@ -229,17 +229,17 @@ void Clear_brush_tall(word x_pos,word y_pos,word x_offset,word y_offset,word wid
dest+=VIDEO_LINE_WIDTH;
memcpy(dest,src,width);
// On passe à la ligne suivante
// On passe à la ligne suivante
src+=image_width;
dest+=VIDEO_LINE_WIDTH;
}
Update_rect(x_pos,y_pos,width,height);
}
// Affiche une brosse (arbitraire) à l'écran
// Affiche une brosse (arbitraire) à l'écran
void Display_brush_tall(byte * brush, word x_pos,word y_pos,word x_offset,word y_offset,word width,word height,byte transp_color,word brush_width)
{
// dest = Position à l'écran
// dest = Position à l'écran
byte* dest = Screen_pixels + y_pos*ZOOMY*VIDEO_LINE_WIDTH + x_pos;
// src = Position dans la brosse
byte* src = brush + y_offset * brush_width + x_offset;
@ -252,7 +252,7 @@ void Display_brush_tall(byte * brush, word x_pos,word y_pos,word x_offset,word y
// Pour chaque pixel
for(x = width;x > 0; x--)
{
// On vérifie que ce n'est pas la transparence
// On vérifie que ce n'est pas la transparence
if(*src != transp_color)
{
*dest = *src;
@ -263,7 +263,7 @@ void Display_brush_tall(byte * brush, word x_pos,word y_pos,word x_offset,word y
src++; dest++;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
dest = dest + VIDEO_LINE_WIDTH*ZOOMY - width;
src = src + brush_width - width;
}
@ -271,7 +271,7 @@ void Display_brush_tall(byte * brush, word x_pos,word y_pos,word x_offset,word y
void Remap_screen_tall(word x_pos,word y_pos,word width,word height,byte * conversion_table)
{
// dest = coords a l'écran
// dest = coords a l'écran
byte* dest = Screen_pixels + y_pos*ZOOMY*VIDEO_LINE_WIDTH + x_pos;
int x,y;
@ -292,7 +292,7 @@ void Remap_screen_tall(word x_pos,word y_pos,word width,word height,byte * conve
}
void Display_line_on_screen_tall(word x_pos,word y_pos,word width,byte * line)
/* On affiche toute une ligne de pixels. Utilisé pour les textes. */
/* On affiche toute une ligne de pixels. Utilisé pour les textes. */
{
memcpy(Screen_pixels+x_pos+y_pos*ZOOMY*VIDEO_LINE_WIDTH,line,width);
memcpy(Screen_pixels+x_pos+(y_pos*ZOOMY+1)*VIDEO_LINE_WIDTH,line,width);
@ -304,31 +304,31 @@ void Read_line_screen_tall(word x_pos,word y_pos,word width,byte * line)
}
void Display_part_of_screen_scaled_tall(
word width, // width non zoomée
word height, // height zoomée
word width, // width non zoomée
word height, // height zoomée
word image_width,byte * buffer)
{
byte* src = Main_screen + Main.magnifier_offset_Y * image_width
+ Main.magnifier_offset_X;
int y = 0; // Ligne en cours de traitement
// Pour chaque ligne à zoomer
// Pour chaque ligne à zoomer
while(1)
{
int x;
// On éclate la ligne
// On éclate la ligne
Zoom_a_line(src,buffer,Main.magnifier_factor,width);
// On l'affiche Facteur fois, sur des lignes consécutives
// On l'affiche Facteur fois, sur des lignes consécutives
x = Main.magnifier_factor*ZOOMY;
// Pour chaque ligne
do{
// On affiche la ligne zoomée
// On affiche la ligne zoomée
Display_line_on_screen_simple(
Main.X_zoom, y, width*Main.magnifier_factor,
buffer
);
// On passe à la suivante
// On passe à la suivante
y++;
if(y==height*ZOOMY)
{
@ -345,12 +345,12 @@ void Display_part_of_screen_scaled_tall(
// ATTENTION on n'arrive jamais ici !
}
// Affiche une partie de la brosse couleur zoomée
// Affiche une partie de la brosse couleur zoomée
void Display_brush_color_zoom_tall(word x_pos,word y_pos,
word x_offset,word y_offset,
word width, // width non zoomée
word width, // width non zoomée
word end_y_pos,byte transp_color,
word brush_width, // width réelle de la brosse
word brush_width, // width réelle de la brosse
byte * buffer)
{
byte* src = Brush+y_offset*brush_width + x_offset;
@ -361,7 +361,7 @@ void Display_brush_color_zoom_tall(word x_pos,word y_pos,
while(1)
{
Zoom_a_line(src,buffer,Main.magnifier_factor,width);
// On affiche facteur fois la ligne zoomée
// On affiche facteur fois la ligne zoomée
for(bx=Main.magnifier_factor;bx>0;bx--)
{
Display_transparent_line_on_screen_simple(x_pos,y*ZOOMY,width*Main.magnifier_factor,buffer,transp_color);
@ -379,10 +379,10 @@ void Display_brush_color_zoom_tall(word x_pos,word y_pos,
void Display_brush_mono_zoom_tall(word x_pos, word y_pos,
word x_offset, word y_offset,
word width, // width non zoomée
word width, // width non zoomée
word end_y_pos,
byte transp_color, byte color,
word brush_width, // width réelle de la brosse
word brush_width, // width réelle de la brosse
byte * buffer
)
@ -390,29 +390,29 @@ void Display_brush_mono_zoom_tall(word x_pos, word y_pos,
byte* src = Brush + y_offset * brush_width + x_offset;
int y=y_pos*ZOOMY;
//Pour chaque ligne à zoomer :
//Pour chaque ligne à zoomer :
while(1)
{
int bx;
// src = Ligne originale
// On éclate la ligne
// On éclate la ligne
Zoom_a_line(src,buffer,Main.magnifier_factor,width);
// On affiche la ligne Facteur fois à l'écran (sur des
// lignes consécutives)
// On affiche la ligne Facteur fois à l'écran (sur des
// lignes consécutives)
bx = Main.magnifier_factor*ZOOMY;
// Pour chaque ligne écran
// Pour chaque ligne écran
do
{
// On affiche la ligne zoomée
// On affiche la ligne zoomée
Display_transparent_mono_line_on_screen_simple(
x_pos, y, width * Main.magnifier_factor,
buffer, transp_color, color
);
// On passe à la ligne suivante
// On passe à la ligne suivante
y++;
// On vérifie qu'on est pas à la ligne finale
// On vérifie qu'on est pas à la ligne finale
if(y == end_y_pos*ZOOMY)
{
Redraw_grid( x_pos, y_pos,
@ -425,20 +425,20 @@ void Display_brush_mono_zoom_tall(word x_pos, word y_pos,
}
while (bx > 0);
// Passage à la ligne suivante dans la brosse aussi
// Passage à la ligne suivante dans la brosse aussi
src+=brush_width;
}
}
void Clear_brush_scaled_tall(word x_pos,word y_pos,word x_offset,word y_offset,word width,word end_y_pos,byte transp_color,word image_width,byte * buffer)
{
// En fait on va recopier l'image non zoomée dans la partie zoomée !
// En fait on va recopier l'image non zoomée dans la partie zoomée !
byte* src = Main_screen + y_offset * image_width + x_offset;
int y = y_pos;
int bx;
(void)transp_color; // unused
// Pour chaque ligne à zoomer
// Pour chaque ligne à zoomer
while(1){
Zoom_a_line(src,buffer,Main.magnifier_factor,width);

View File

@ -35,7 +35,7 @@
void Pixel_tall2 (word x,word y,byte color)
/* Affiche un pixel de la color aux coords x;y à l'écran */
/* Affiche un pixel de la color aux coords x;y à l'écran */
{
*(Screen_pixels + x * ZOOMX + y*ZOOMY * VIDEO_LINE_WIDTH)=color;
*(Screen_pixels + x * ZOOMX + y*ZOOMY * VIDEO_LINE_WIDTH + 1)=color;
@ -48,13 +48,13 @@ void Pixel_tall2 (word x,word y,byte color)
}
byte Read_pixel_tall2 (word x,word y)
/* On retourne la couleur du pixel aux coords données */
/* On retourne la couleur du pixel aux coords données */
{
return *( Screen_pixels + y * ZOOMY * VIDEO_LINE_WIDTH + x * ZOOMX);
}
void Block_tall2 (word start_x,word start_y,word width,word height,byte color)
/* On affiche un rectangle de la couleur donnée */
/* On affiche un rectangle de la couleur donnée */
{
SDL_Rect rectangle;
rectangle.x=start_x*ZOOMX;
@ -65,10 +65,10 @@ void Block_tall2 (word start_x,word start_y,word width,word height,byte color)
}
void Display_part_of_screen_tall2 (word width,word height,word image_width)
/* Afficher une partie de l'image telle quelle sur l'écran */
/* Afficher une partie de l'image telle quelle sur l'écran */
{
byte* dest=Screen_pixels; //On va se mettre en 0,0 dans l'écran (dest)
byte* src=Main.offset_Y*image_width+Main.offset_X+Main_screen; //Coords de départ ds la source (src)
byte* dest=Screen_pixels; //On va se mettre en 0,0 dans l'écran (dest)
byte* src=Main.offset_Y*image_width+Main.offset_X+Main_screen; //Coords de départ ds la source (src)
int y;
int dy;
@ -89,7 +89,7 @@ void Display_part_of_screen_tall2 (word width,word height,word image_width)
// On la quadruple
memcpy(dest-width*ZOOMX+3*VIDEO_LINE_WIDTH,dest-width*ZOOMX,width*ZOOMX);
// On passe à la ligne suivante
// On passe à la ligne suivante
src+=image_width-width;
dest+=VIDEO_LINE_WIDTH*ZOOMY - width*ZOOMX;
}
@ -97,10 +97,10 @@ void Display_part_of_screen_tall2 (word width,word height,word image_width)
}
void Pixel_preview_normal_tall2 (word x,word y,byte color)
/* Affichage d'un pixel dans l'écran, par rapport au décalage de l'image
* dans l'écran, en mode normal (pas en mode loupe)
* Note: si on modifie cette procédure, il faudra penser à faire également
* la modif dans la procédure Pixel_Preview_Loupe_SDL. */
/* Affichage d'un pixel dans l'écran, par rapport au décalage de l'image
* dans l'écran, en mode normal (pas en mode loupe)
* Note: si on modifie cette procédure, il faudra penser à faire également
* la modif dans la procédure Pixel_Preview_Loupe_SDL. */
{
// if(x-Main.offset_X >= 0 && y - Main.offset_Y >= 0)
Pixel_tall2(x-Main.offset_X,y-Main.offset_Y,color);
@ -108,10 +108,10 @@ void Pixel_preview_normal_tall2 (word x,word y,byte color)
void Pixel_preview_magnifier_tall2 (word x,word y,byte color)
{
// Affiche le pixel dans la partie non zoomée
// Affiche le pixel dans la partie non zoomée
Pixel_tall2(x-Main.offset_X,y-Main.offset_Y,color);
// Regarde si on doit aussi l'afficher dans la partie zoomée
// Regarde si on doit aussi l'afficher dans la partie zoomée
if (y >= Limit_top_zoom && y <= Limit_visible_bottom_zoom
&& x >= Limit_left_zoom && x <= Limit_visible_right_zoom)
{
@ -121,7 +121,7 @@ void Pixel_preview_magnifier_tall2 (word x,word y,byte color)
if (Menu_Y - y_zoom < Main.magnifier_factor)
// On ne doit dessiner qu'un morceau du pixel
// sinon on dépasse sur le menu
// sinon on dépasse sur le menu
height = Menu_Y - y_zoom;
else
height = Main.magnifier_factor;
@ -157,7 +157,7 @@ void Vertical_XOR_line_tall2(word x_pos,word y_pos,word height)
void Display_brush_color_tall2(word x_pos,word y_pos,word x_offset,word y_offset,word width,word height,byte transp_color,word brush_width)
{
// dest = Position à l'écran
// dest = Position à l'écran
byte* dest = Screen_pixels + y_pos * ZOOMY * VIDEO_LINE_WIDTH + x_pos * ZOOMX;
// src = Position dans la brosse
byte* src = Brush + y_offset * brush_width + x_offset;
@ -170,7 +170,7 @@ void Display_brush_color_tall2(word x_pos,word y_pos,word x_offset,word y_offset
// Pour chaque pixel
for(x = width;x > 0; x--)
{
// On vérifie que ce n'est pas la transparence
// On vérifie que ce n'est pas la transparence
if(*src != transp_color)
{
*(dest+3*VIDEO_LINE_WIDTH+1) = *(dest+3*VIDEO_LINE_WIDTH) = *(dest+2*VIDEO_LINE_WIDTH+1) = *(dest+2*VIDEO_LINE_WIDTH) = *(dest+VIDEO_LINE_WIDTH+1) = *(dest+VIDEO_LINE_WIDTH) = *(dest+1) = *dest = *src;
@ -181,7 +181,7 @@ void Display_brush_color_tall2(word x_pos,word y_pos,word x_offset,word y_offset
dest+=ZOOMX;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
dest = dest + VIDEO_LINE_WIDTH*ZOOMY - width*ZOOMX;
src = src + brush_width - width;
}
@ -193,8 +193,8 @@ void Display_brush_mono_tall2(word x_pos, word y_pos,
byte transp_color, byte color, word brush_width)
/* On affiche la brosse en monochrome */
{
byte* dest=y_pos*ZOOMY*VIDEO_LINE_WIDTH+x_pos*ZOOMX+Screen_pixels; // dest = adr destination à
// l'écran
byte* dest=y_pos*ZOOMY*VIDEO_LINE_WIDTH+x_pos*ZOOMX+Screen_pixels; // dest = adr destination à
// l'écran
byte* src=brush_width*y_offset+x_offset+Brush; // src = adr ds
// la brosse
int x,y;
@ -213,7 +213,7 @@ void Display_brush_mono_tall2(word x_pos, word y_pos,
dest+=ZOOMX;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
src+=brush_width-width;
dest+=VIDEO_LINE_WIDTH*ZOOMY-width*ZOOMX;
}
@ -222,8 +222,8 @@ void Display_brush_mono_tall2(word x_pos, word y_pos,
void Clear_brush_tall2(word x_pos,word y_pos,word x_offset,word y_offset,word width,word height,byte transp_color,word image_width)
{
byte* dest=Screen_pixels+x_pos*ZOOMX+y_pos*ZOOMY*VIDEO_LINE_WIDTH; //On va se mettre en 0,0 dans l'écran (dest)
byte* src = ( y_pos + Main.offset_Y ) * image_width + x_pos + Main.offset_X + Main_screen; //Coords de départ ds la source (src)
byte* dest=Screen_pixels+x_pos*ZOOMX+y_pos*ZOOMY*VIDEO_LINE_WIDTH; //On va se mettre en 0,0 dans l'écran (dest)
byte* src = ( y_pos + Main.offset_Y ) * image_width + x_pos + Main.offset_X + Main_screen; //Coords de départ ds la source (src)
int y;
int x;
(void)x_offset; // unused
@ -243,17 +243,17 @@ void Clear_brush_tall2(word x_pos,word y_pos,word x_offset,word y_offset,word wi
dest+=ZOOMX;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
src+=image_width-width;
dest+=VIDEO_LINE_WIDTH*ZOOMY-width*ZOOMX;
}
Update_rect(x_pos,y_pos,width,height);
}
// Affiche une brosse (arbitraire) à l'écran
// Affiche une brosse (arbitraire) à l'écran
void Display_brush_tall2(byte * brush, word x_pos,word y_pos,word x_offset,word y_offset,word width,word height,byte transp_color,word brush_width)
{
// dest = Position à l'écran
// dest = Position à l'écran
byte* dest = Screen_pixels + y_pos * ZOOMY * VIDEO_LINE_WIDTH + x_pos * ZOOMX;
// src = Position dans la brosse
byte* src = brush + y_offset * brush_width + x_offset;
@ -266,7 +266,7 @@ void Display_brush_tall2(byte * brush, word x_pos,word y_pos,word x_offset,word
// Pour chaque pixel
for(x = width;x > 0; x--)
{
// On vérifie que ce n'est pas la transparence
// On vérifie que ce n'est pas la transparence
if(*src != transp_color)
{
*(dest+3*VIDEO_LINE_WIDTH+1)=*(dest+3*VIDEO_LINE_WIDTH)=*(dest+2*VIDEO_LINE_WIDTH+1)=*(dest+2*VIDEO_LINE_WIDTH)=*(dest+VIDEO_LINE_WIDTH+1)=*(dest+VIDEO_LINE_WIDTH)=*(dest+1)=*(dest)=*src;
@ -276,7 +276,7 @@ void Display_brush_tall2(byte * brush, word x_pos,word y_pos,word x_offset,word
src++; dest+=ZOOMX;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
dest = dest + VIDEO_LINE_WIDTH*ZOOMY - width*ZOOMX;
src = src + brush_width - width;
}
@ -284,7 +284,7 @@ void Display_brush_tall2(byte * brush, word x_pos,word y_pos,word x_offset,word
void Remap_screen_tall2(word x_pos,word y_pos,word width,word height,byte * conversion_table)
{
// dest = coords a l'écran
// dest = coords a l'écran
byte* dest = Screen_pixels + y_pos * ZOOMY * VIDEO_LINE_WIDTH + x_pos * ZOOMX;
int x,y;
@ -307,7 +307,7 @@ void Remap_screen_tall2(word x_pos,word y_pos,word width,word height,byte * conv
void Display_line_on_screen_fast_tall2(word x_pos,word y_pos,word width,byte * line)
/* On affiche toute une ligne de pixels telle quelle. */
/* Utilisée si le buffer contient déja des pixel doublés. */
/* Utilisée si le buffer contient déja des pixel doublés. */
{
memcpy(Screen_pixels+x_pos*ZOOMX+y_pos*ZOOMY*VIDEO_LINE_WIDTH,line,width*ZOOMX);
memcpy(Screen_pixels+x_pos*ZOOMX+(y_pos*ZOOMY+1)*VIDEO_LINE_WIDTH,line,width*ZOOMX);
@ -331,8 +331,8 @@ void Display_line_on_screen_tall2(word x_pos,word y_pos,word width,byte * line)
void Display_transparent_mono_line_on_screen_tall2(
word x_pos, word y_pos, word width, byte* line,
byte transp_color, byte color)
// Affiche une ligne à l'écran avec une couleur + transparence.
// Utilisé par les brosses en mode zoom
// Affiche une ligne à l'écran avec une couleur + transparence.
// Utilisé par les brosses en mode zoom
{
byte* dest = Screen_pixels+ y_pos*VIDEO_LINE_WIDTH + x_pos*ZOOMX;
int x;
@ -354,31 +354,31 @@ void Read_line_screen_tall2(word x_pos,word y_pos,word width,byte * line)
}
void Display_part_of_screen_scaled_tall2(
word width, // width non zoomée
word height, // height zoomée
word width, // width non zoomée
word height, // height zoomée
word image_width,byte * buffer)
{
byte* src = Main_screen + Main.magnifier_offset_Y * image_width
+ Main.magnifier_offset_X;
int y = 0; // Ligne en cours de traitement
// Pour chaque ligne à zoomer
// Pour chaque ligne à zoomer
while(1)
{
int x;
// On éclate la ligne
// On éclate la ligne
Zoom_a_line(src,buffer,Main.magnifier_factor*ZOOMX,width);
// On l'affiche Facteur fois, sur des lignes consécutives
// On l'affiche Facteur fois, sur des lignes consécutives
x = Main.magnifier_factor/**ZOOMY*/;
// Pour chaque ligne
do{
// On affiche la ligne zoomée
// On affiche la ligne zoomée
Display_line_on_screen_fast_tall2(
Main.X_zoom, y, width*Main.magnifier_factor,
buffer
);
// On passe à la suivante
// On passe à la suivante
y++;
if(y==height/**ZOOMY*/)
{
@ -395,12 +395,12 @@ void Display_part_of_screen_scaled_tall2(
// ATTENTION on n'arrive jamais ici !
}
// Affiche une partie de la brosse couleur zoomée
// Affiche une partie de la brosse couleur zoomée
void Display_brush_color_zoom_tall2(word x_pos,word y_pos,
word x_offset,word y_offset,
word width, // width non zoomée
word width, // width non zoomée
word end_y_pos,byte transp_color,
word brush_width, // width réelle de la brosse
word brush_width, // width réelle de la brosse
byte * buffer)
{
byte* src = Brush+y_offset*brush_width + x_offset;
@ -411,7 +411,7 @@ void Display_brush_color_zoom_tall2(word x_pos,word y_pos,
while(1)
{
Zoom_a_line(src,buffer,Main.magnifier_factor,width);
// On affiche facteur fois la ligne zoomée
// On affiche facteur fois la ligne zoomée
for(bx=Main.magnifier_factor;bx>0;bx--)
{
byte* line_src = buffer;
@ -446,10 +446,10 @@ void Display_brush_color_zoom_tall2(word x_pos,word y_pos,
void Display_brush_mono_zoom_tall2(word x_pos, word y_pos,
word x_offset, word y_offset,
word width, // width non zoomée
word width, // width non zoomée
word end_y_pos,
byte transp_color, byte color,
word brush_width, // width réelle de la brosse
word brush_width, // width réelle de la brosse
byte * buffer
)
@ -457,29 +457,29 @@ void Display_brush_mono_zoom_tall2(word x_pos, word y_pos,
byte* src = Brush + y_offset * brush_width + x_offset;
int y=y_pos*ZOOMY;
//Pour chaque ligne à zoomer :
//Pour chaque ligne à zoomer :
while(1)
{
int bx;
// src = Ligne originale
// On éclate la ligne
// On éclate la ligne
Zoom_a_line(src,buffer,Main.magnifier_factor,width);
// On affiche la ligne Facteur fois à l'écran (sur des
// lignes consécutives)
// On affiche la ligne Facteur fois à l'écran (sur des
// lignes consécutives)
bx = Main.magnifier_factor*ZOOMY;
// Pour chaque ligne écran
// Pour chaque ligne écran
do
{
// On affiche la ligne zoomée
// On affiche la ligne zoomée
Display_transparent_mono_line_on_screen_tall2(
x_pos, y, width * Main.magnifier_factor,
buffer, transp_color, color
);
// On passe à la ligne suivante
// On passe à la ligne suivante
y++;
// On vérifie qu'on est pas à la ligne finale
// On vérifie qu'on est pas à la ligne finale
if(y == end_y_pos*ZOOMY)
{
Redraw_grid( x_pos, y_pos,
@ -492,7 +492,7 @@ void Display_brush_mono_zoom_tall2(word x_pos, word y_pos,
}
while (bx > 0);
// Passage à la ligne suivante dans la brosse aussi
// Passage à la ligne suivante dans la brosse aussi
src+=brush_width;
}
}
@ -500,13 +500,13 @@ void Display_brush_mono_zoom_tall2(word x_pos, word y_pos,
void Clear_brush_scaled_tall2(word x_pos,word y_pos,word x_offset,word y_offset,word width,word end_y_pos,byte transp_color,word image_width,byte * buffer)
{
// En fait on va recopier l'image non zoomée dans la partie zoomée !
// En fait on va recopier l'image non zoomée dans la partie zoomée !
byte* src = Main_screen + y_offset * image_width + x_offset;
int y = y_pos;
int bx;
(void)transp_color; // unused
// Pour chaque ligne à zoomer
// Pour chaque ligne à zoomer
while(1){
Zoom_a_line(src,buffer,Main.magnifier_factor*ZOOMX,width);

View File

@ -35,7 +35,7 @@
void Pixel_tall3 (word x,word y,byte color)
/* Affiche un pixel de la color aux coords x;y à l'écran */
/* Affiche un pixel de la color aux coords x;y à l'écran */
{
*(Screen_pixels + x * ZOOMX + y*ZOOMY * VIDEO_LINE_WIDTH)=color;
*(Screen_pixels + x * ZOOMX + y*ZOOMY * VIDEO_LINE_WIDTH + 1)=color;
@ -52,13 +52,13 @@ void Pixel_tall3 (word x,word y,byte color)
}
byte Read_pixel_tall3 (word x,word y)
/* On retourne la couleur du pixel aux coords données */
/* On retourne la couleur du pixel aux coords données */
{
return *( Screen_pixels + y * ZOOMY * VIDEO_LINE_WIDTH + x * ZOOMX);
}
void Block_tall3 (word start_x,word start_y,word width,word height,byte color)
/* On affiche un rectangle de la couleur donnée */
/* On affiche un rectangle de la couleur donnée */
{
SDL_Rect rectangle;
rectangle.x=start_x*ZOOMX;
@ -69,10 +69,10 @@ void Block_tall3 (word start_x,word start_y,word width,word height,byte color)
}
void Display_part_of_screen_tall3 (word width,word height,word image_width)
/* Afficher une partie de l'image telle quelle sur l'écran */
/* Afficher une partie de l'image telle quelle sur l'écran */
{
byte* dest=Screen_pixels; //On va se mettre en 0,0 dans l'écran (dest)
byte* src=Main.offset_Y*image_width+Main.offset_X+Main_screen; //Coords de départ ds la source (src)
byte* dest=Screen_pixels; //On va se mettre en 0,0 dans l'écran (dest)
byte* src=Main.offset_Y*image_width+Main.offset_X+Main_screen; //Coords de départ ds la source (src)
int y;
int dy;
@ -93,7 +93,7 @@ void Display_part_of_screen_tall3 (word width,word height,word image_width)
// On la quadruple
memcpy(dest-width*ZOOMX+3*VIDEO_LINE_WIDTH,dest-width*ZOOMX,width*ZOOMX);
// On passe à la ligne suivante
// On passe à la ligne suivante
src+=image_width-width;
dest+=VIDEO_LINE_WIDTH*ZOOMY - width*ZOOMX;
}
@ -101,10 +101,10 @@ void Display_part_of_screen_tall3 (word width,word height,word image_width)
}
void Pixel_preview_normal_tall3 (word x,word y,byte color)
/* Affichage d'un pixel dans l'écran, par rapport au décalage de l'image
* dans l'écran, en mode normal (pas en mode loupe)
* Note: si on modifie cette procédure, il faudra penser à faire également
* la modif dans la procédure Pixel_Preview_Loupe_SDL. */
/* Affichage d'un pixel dans l'écran, par rapport au décalage de l'image
* dans l'écran, en mode normal (pas en mode loupe)
* Note: si on modifie cette procédure, il faudra penser à faire également
* la modif dans la procédure Pixel_Preview_Loupe_SDL. */
{
// if(x-Main.offset_X >= 0 && y - Main.offset_Y >= 0)
Pixel_tall3(x-Main.offset_X,y-Main.offset_Y,color);
@ -112,10 +112,10 @@ void Pixel_preview_normal_tall3 (word x,word y,byte color)
void Pixel_preview_magnifier_tall3 (word x,word y,byte color)
{
// Affiche le pixel dans la partie non zoomée
// Affiche le pixel dans la partie non zoomée
Pixel_tall3(x-Main.offset_X,y-Main.offset_Y,color);
// Regarde si on doit aussi l'afficher dans la partie zoomée
// Regarde si on doit aussi l'afficher dans la partie zoomée
if (y >= Limit_top_zoom && y <= Limit_visible_bottom_zoom
&& x >= Limit_left_zoom && x <= Limit_visible_right_zoom)
{
@ -125,7 +125,7 @@ void Pixel_preview_magnifier_tall3 (word x,word y,byte color)
if (Menu_Y - y_zoom < Main.magnifier_factor)
// On ne doit dessiner qu'un morceau du pixel
// sinon on dépasse sur le menu
// sinon on dépasse sur le menu
height = Menu_Y - y_zoom;
else
height = Main.magnifier_factor;
@ -161,7 +161,7 @@ void Vertical_XOR_line_tall3(word x_pos,word y_pos,word height)
void Display_brush_color_tall3(word x_pos,word y_pos,word x_offset,word y_offset,word width,word height,byte transp_color,word brush_width)
{
// dest = Position à l'écran
// dest = Position à l'écran
byte* dest = Screen_pixels + y_pos * ZOOMY * VIDEO_LINE_WIDTH + x_pos * ZOOMX;
// src = Position dans la brosse
byte* src = Brush + y_offset * brush_width + x_offset;
@ -174,7 +174,7 @@ void Display_brush_color_tall3(word x_pos,word y_pos,word x_offset,word y_offset
// Pour chaque pixel
for(x = width;x > 0; x--)
{
// On vérifie que ce n'est pas la transparence
// On vérifie que ce n'est pas la transparence
if(*src != transp_color)
{
*(dest+3*VIDEO_LINE_WIDTH+2) =*(dest+3*VIDEO_LINE_WIDTH+1) = *(dest+3*VIDEO_LINE_WIDTH) = *(dest+2*VIDEO_LINE_WIDTH+2) =*(dest+2*VIDEO_LINE_WIDTH+1) = *(dest+2*VIDEO_LINE_WIDTH) = *(dest+VIDEO_LINE_WIDTH+2) =*(dest+VIDEO_LINE_WIDTH+1) = *(dest+VIDEO_LINE_WIDTH) = *(dest+2) =*(dest+1) = *dest = *src;
@ -185,7 +185,7 @@ void Display_brush_color_tall3(word x_pos,word y_pos,word x_offset,word y_offset
dest+=ZOOMX;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
dest = dest + VIDEO_LINE_WIDTH*ZOOMY - width*ZOOMX;
src = src + brush_width - width;
}
@ -197,8 +197,8 @@ void Display_brush_mono_tall3(word x_pos, word y_pos,
byte transp_color, byte color, word brush_width)
/* On affiche la brosse en monochrome */
{
byte* dest=y_pos*ZOOMY*VIDEO_LINE_WIDTH+x_pos*ZOOMX+Screen_pixels; // dest = adr destination à
// l'écran
byte* dest=y_pos*ZOOMY*VIDEO_LINE_WIDTH+x_pos*ZOOMX+Screen_pixels; // dest = adr destination à
// l'écran
byte* src=brush_width*y_offset+x_offset+Brush; // src = adr ds
// la brosse
int x,y;
@ -217,7 +217,7 @@ void Display_brush_mono_tall3(word x_pos, word y_pos,
dest+=ZOOMX;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
src+=brush_width-width;
dest+=VIDEO_LINE_WIDTH*ZOOMY-width*ZOOMX;
}
@ -226,8 +226,8 @@ void Display_brush_mono_tall3(word x_pos, word y_pos,
void Clear_brush_tall3(word x_pos,word y_pos,word x_offset,word y_offset,word width,word height,byte transp_color,word image_width)
{
byte* dest=Screen_pixels+x_pos*ZOOMX+y_pos*ZOOMY*VIDEO_LINE_WIDTH; //On va se mettre en 0,0 dans l'écran (dest)
byte* src = ( y_pos + Main.offset_Y ) * image_width + x_pos + Main.offset_X + Main_screen; //Coords de départ ds la source (src)
byte* dest=Screen_pixels+x_pos*ZOOMX+y_pos*ZOOMY*VIDEO_LINE_WIDTH; //On va se mettre en 0,0 dans l'écran (dest)
byte* src = ( y_pos + Main.offset_Y ) * image_width + x_pos + Main.offset_X + Main_screen; //Coords de départ ds la source (src)
int y;
int x;
(void)x_offset; // unused
@ -247,17 +247,17 @@ void Clear_brush_tall3(word x_pos,word y_pos,word x_offset,word y_offset,word wi
dest+=ZOOMX;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
src+=image_width-width;
dest+=VIDEO_LINE_WIDTH*ZOOMY-width*ZOOMX;
}
Update_rect(x_pos,y_pos,width,height);
}
// Affiche une brosse (arbitraire) à l'écran
// Affiche une brosse (arbitraire) à l'écran
void Display_brush_tall3(byte * brush, word x_pos,word y_pos,word x_offset,word y_offset,word width,word height,byte transp_color,word brush_width)
{
// dest = Position à l'écran
// dest = Position à l'écran
byte* dest = Screen_pixels + y_pos * ZOOMY * VIDEO_LINE_WIDTH + x_pos * ZOOMX;
// src = Position dans la brosse
byte* src = brush + y_offset * brush_width + x_offset;
@ -270,7 +270,7 @@ void Display_brush_tall3(byte * brush, word x_pos,word y_pos,word x_offset,word
// Pour chaque pixel
for(x = width;x > 0; x--)
{
// On vérifie que ce n'est pas la transparence
// On vérifie que ce n'est pas la transparence
if(*src != transp_color)
{
*(dest+3*VIDEO_LINE_WIDTH+2)=*(dest+3*VIDEO_LINE_WIDTH+1)=*(dest+3*VIDEO_LINE_WIDTH)=*(dest+2*VIDEO_LINE_WIDTH+2)=*(dest+2*VIDEO_LINE_WIDTH+1)=*(dest+2*VIDEO_LINE_WIDTH)=*(dest+VIDEO_LINE_WIDTH+2)=*(dest+VIDEO_LINE_WIDTH+1)=*(dest+VIDEO_LINE_WIDTH)=*(dest+2)=*(dest+1)=*(dest)=*src;
@ -280,7 +280,7 @@ void Display_brush_tall3(byte * brush, word x_pos,word y_pos,word x_offset,word
src++; dest+=ZOOMX;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
dest = dest + VIDEO_LINE_WIDTH*ZOOMY - width*ZOOMX;
src = src + brush_width - width;
}
@ -288,7 +288,7 @@ void Display_brush_tall3(byte * brush, word x_pos,word y_pos,word x_offset,word
void Remap_screen_tall3(word x_pos,word y_pos,word width,word height,byte * conversion_table)
{
// dest = coords a l'écran
// dest = coords a l'écran
byte* dest = Screen_pixels + y_pos * ZOOMY * VIDEO_LINE_WIDTH + x_pos * ZOOMX;
int x,y;
@ -311,7 +311,7 @@ void Remap_screen_tall3(word x_pos,word y_pos,word width,word height,byte * conv
void Display_line_on_screen_fast_tall3(word x_pos,word y_pos,word width,byte * line)
/* On affiche toute une ligne de pixels telle quelle. */
/* Utilisée si le buffer contient déja des pixel doublés. */
/* Utilisée si le buffer contient déja des pixel doublés. */
{
memcpy(Screen_pixels+x_pos*ZOOMX+y_pos*ZOOMY*VIDEO_LINE_WIDTH,line,width*ZOOMX);
memcpy(Screen_pixels+x_pos*ZOOMX+(y_pos*ZOOMY+1)*VIDEO_LINE_WIDTH,line,width*ZOOMX);
@ -335,8 +335,8 @@ void Display_line_on_screen_tall3(word x_pos,word y_pos,word width,byte * line)
void Display_transparent_mono_line_on_screen_tall3(
word x_pos, word y_pos, word width, byte* line,
byte transp_color, byte color)
// Affiche une ligne à l'écran avec une couleur + transparence.
// Utilisé par les brosses en mode zoom
// Affiche une ligne à l'écran avec une couleur + transparence.
// Utilisé par les brosses en mode zoom
{
byte* dest = Screen_pixels+ y_pos*VIDEO_LINE_WIDTH + x_pos*ZOOMX;
int x;
@ -358,31 +358,31 @@ void Read_line_screen_tall3(word x_pos,word y_pos,word width,byte * line)
}
void Display_part_of_screen_scaled_tall3(
word width, // width non zoomée
word height, // height zoomée
word width, // width non zoomée
word height, // height zoomée
word image_width,byte * buffer)
{
byte* src = Main_screen + Main.magnifier_offset_Y * image_width
+ Main.magnifier_offset_X;
int y = 0; // Ligne en cours de traitement
// Pour chaque ligne à zoomer
// Pour chaque ligne à zoomer
while(1)
{
int x;
// On éclate la ligne
// On éclate la ligne
Zoom_a_line(src,buffer,Main.magnifier_factor*ZOOMX,width);
// On l'affiche Facteur fois, sur des lignes consécutives
// On l'affiche Facteur fois, sur des lignes consécutives
x = Main.magnifier_factor/**ZOOMY*/;
// Pour chaque ligne
do{
// On affiche la ligne zoomée
// On affiche la ligne zoomée
Display_line_on_screen_fast_tall3(
Main.X_zoom, y, width*Main.magnifier_factor,
buffer
);
// On passe à la suivante
// On passe à la suivante
y++;
if(y==height/**ZOOMY*/)
{
@ -399,12 +399,12 @@ void Display_part_of_screen_scaled_tall3(
// ATTENTION on n'arrive jamais ici !
}
// Affiche une partie de la brosse couleur zoomée
// Affiche une partie de la brosse couleur zoomée
void Display_brush_color_zoom_tall3(word x_pos,word y_pos,
word x_offset,word y_offset,
word width, // width non zoomée
word width, // width non zoomée
word end_y_pos,byte transp_color,
word brush_width, // width réelle de la brosse
word brush_width, // width réelle de la brosse
byte * buffer)
{
byte* src = Brush+y_offset*brush_width + x_offset;
@ -415,7 +415,7 @@ void Display_brush_color_zoom_tall3(word x_pos,word y_pos,
while(1)
{
Zoom_a_line(src,buffer,Main.magnifier_factor,width);
// On affiche facteur fois la ligne zoomée
// On affiche facteur fois la ligne zoomée
for(bx=Main.magnifier_factor;bx>0;bx--)
{
byte* line_src = buffer;
@ -450,10 +450,10 @@ void Display_brush_color_zoom_tall3(word x_pos,word y_pos,
void Display_brush_mono_zoom_tall3(word x_pos, word y_pos,
word x_offset, word y_offset,
word width, // width non zoomée
word width, // width non zoomée
word end_y_pos,
byte transp_color, byte color,
word brush_width, // width réelle de la brosse
word brush_width, // width réelle de la brosse
byte * buffer
)
@ -461,29 +461,29 @@ void Display_brush_mono_zoom_tall3(word x_pos, word y_pos,
byte* src = Brush + y_offset * brush_width + x_offset;
int y=y_pos*ZOOMY;
//Pour chaque ligne à zoomer :
//Pour chaque ligne à zoomer :
while(1)
{
int bx;
// src = Ligne originale
// On éclate la ligne
// On éclate la ligne
Zoom_a_line(src,buffer,Main.magnifier_factor,width);
// On affiche la ligne Facteur fois à l'écran (sur des
// lignes consécutives)
// On affiche la ligne Facteur fois à l'écran (sur des
// lignes consécutives)
bx = Main.magnifier_factor*ZOOMY;
// Pour chaque ligne écran
// Pour chaque ligne écran
do
{
// On affiche la ligne zoomée
// On affiche la ligne zoomée
Display_transparent_mono_line_on_screen_tall3(
x_pos, y, width * Main.magnifier_factor,
buffer, transp_color, color
);
// On passe à la ligne suivante
// On passe à la ligne suivante
y++;
// On vérifie qu'on est pas à la ligne finale
// On vérifie qu'on est pas à la ligne finale
if(y == end_y_pos*ZOOMY)
{
Redraw_grid( x_pos, y_pos,
@ -496,7 +496,7 @@ void Display_brush_mono_zoom_tall3(word x_pos, word y_pos,
}
while (bx > 0);
// Passage à la ligne suivante dans la brosse aussi
// Passage à la ligne suivante dans la brosse aussi
src+=brush_width;
}
}
@ -504,13 +504,13 @@ void Display_brush_mono_zoom_tall3(word x_pos, word y_pos,
void Clear_brush_scaled_tall3(word x_pos,word y_pos,word x_offset,word y_offset,word width,word end_y_pos,byte transp_color,word image_width,byte * buffer)
{
// En fait on va recopier l'image non zoomée dans la partie zoomée !
// En fait on va recopier l'image non zoomée dans la partie zoomée !
byte* src = Main_screen + y_offset * image_width + x_offset;
int y = y_pos;
int bx;
(void)transp_color; // unused
// Pour chaque ligne à zoomer
// Pour chaque ligne à zoomer
while(1){
Zoom_a_line(src,buffer,Main.magnifier_factor*ZOOMX,width);

View File

@ -35,7 +35,7 @@
void Pixel_triple (word x,word y,byte color)
/* Affiche un pixel de la color aux coords x;y à l'écran */
/* Affiche un pixel de la color aux coords x;y à l'écran */
{
*(Screen_pixels + x * ZOOMX + y*ZOOMY * VIDEO_LINE_WIDTH)=color;
*(Screen_pixels + x * ZOOMX + y*ZOOMY * VIDEO_LINE_WIDTH + 1)=color;
@ -49,13 +49,13 @@ void Pixel_triple (word x,word y,byte color)
}
byte Read_pixel_triple (word x,word y)
/* On retourne la couleur du pixel aux coords données */
/* On retourne la couleur du pixel aux coords données */
{
return *( Screen_pixels + y * ZOOMY * VIDEO_LINE_WIDTH + x * ZOOMX);
}
void Block_triple (word start_x,word start_y,word width,word height,byte color)
/* On affiche un rectangle de la couleur donnée */
/* On affiche un rectangle de la couleur donnée */
{
SDL_Rect rectangle;
rectangle.x=start_x*ZOOMX;
@ -66,10 +66,10 @@ void Block_triple (word start_x,word start_y,word width,word height,byte color)
}
void Display_part_of_screen_triple (word width,word height,word image_width)
/* Afficher une partie de l'image telle quelle sur l'écran */
/* Afficher une partie de l'image telle quelle sur l'écran */
{
byte* dest=Screen_pixels; //On va se mettre en 0,0 dans l'écran (dest)
byte* src=Main.offset_Y*image_width+Main.offset_X+Main_screen; //Coords de départ ds la source (src)
byte* dest=Screen_pixels; //On va se mettre en 0,0 dans l'écran (dest)
byte* src=Main.offset_Y*image_width+Main.offset_X+Main_screen; //Coords de départ ds la source (src)
int y;
int dy;
@ -88,7 +88,7 @@ void Display_part_of_screen_triple (word width,word height,word image_width)
// On la triple
memcpy(dest-width*ZOOMX+2*VIDEO_LINE_WIDTH,dest-width*ZOOMX,width*ZOOMX);
// On passe à la ligne suivante
// On passe à la ligne suivante
src+=image_width-width;
dest+=VIDEO_LINE_WIDTH*ZOOMY - width*ZOOMX;
}
@ -96,10 +96,10 @@ void Display_part_of_screen_triple (word width,word height,word image_width)
}
void Pixel_preview_normal_triple (word x,word y,byte color)
/* Affichage d'un pixel dans l'écran, par rapport au décalage de l'image
* dans l'écran, en mode normal (pas en mode loupe)
* Note: si on modifie cette procédure, il faudra penser à faire également
* la modif dans la procédure Pixel_Preview_Loupe_SDL. */
/* Affichage d'un pixel dans l'écran, par rapport au décalage de l'image
* dans l'écran, en mode normal (pas en mode loupe)
* Note: si on modifie cette procédure, il faudra penser à faire également
* la modif dans la procédure Pixel_Preview_Loupe_SDL. */
{
// if(x-Main.offset_X >= 0 && y - Main.offset_Y >= 0)
Pixel_triple(x-Main.offset_X,y-Main.offset_Y,color);
@ -107,10 +107,10 @@ void Pixel_preview_normal_triple (word x,word y,byte color)
void Pixel_preview_magnifier_triple (word x,word y,byte color)
{
// Affiche le pixel dans la partie non zoomée
// Affiche le pixel dans la partie non zoomée
Pixel_triple(x-Main.offset_X,y-Main.offset_Y,color);
// Regarde si on doit aussi l'afficher dans la partie zoomée
// Regarde si on doit aussi l'afficher dans la partie zoomée
if (y >= Limit_top_zoom && y <= Limit_visible_bottom_zoom
&& x >= Limit_left_zoom && x <= Limit_visible_right_zoom)
{
@ -120,7 +120,7 @@ void Pixel_preview_magnifier_triple (word x,word y,byte color)
if (Menu_Y - y_zoom < Main.magnifier_factor)
// On ne doit dessiner qu'un morceau du pixel
// sinon on dépasse sur le menu
// sinon on dépasse sur le menu
height = Menu_Y - y_zoom;
else
height = Main.magnifier_factor;
@ -156,7 +156,7 @@ void Vertical_XOR_line_triple(word x_pos,word y_pos,word height)
void Display_brush_color_triple(word x_pos,word y_pos,word x_offset,word y_offset,word width,word height,byte transp_color,word brush_width)
{
// dest = Position à l'écran
// dest = Position à l'écran
byte* dest = Screen_pixels + y_pos * ZOOMY * VIDEO_LINE_WIDTH + x_pos * ZOOMX;
// src = Position dans la brosse
byte* src = Brush + y_offset * brush_width + x_offset;
@ -169,7 +169,7 @@ void Display_brush_color_triple(word x_pos,word y_pos,word x_offset,word y_offse
// Pour chaque pixel
for(x = width;x > 0; x--)
{
// On vérifie que ce n'est pas la transparence
// On vérifie que ce n'est pas la transparence
if(*src != transp_color)
{
*(dest+2*VIDEO_LINE_WIDTH+2) = *(dest+2*VIDEO_LINE_WIDTH+1) = *(dest+2*VIDEO_LINE_WIDTH) = *(dest+VIDEO_LINE_WIDTH+2) = *(dest+VIDEO_LINE_WIDTH+1) = *(dest+VIDEO_LINE_WIDTH) = *(dest+2) = *(dest+1) = *dest = *src;
@ -180,7 +180,7 @@ void Display_brush_color_triple(word x_pos,word y_pos,word x_offset,word y_offse
dest+=ZOOMX;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
dest = dest + VIDEO_LINE_WIDTH*ZOOMY - width*ZOOMX;
src = src + brush_width - width;
}
@ -192,8 +192,8 @@ void Display_brush_mono_triple(word x_pos, word y_pos,
byte transp_color, byte color, word brush_width)
/* On affiche la brosse en monochrome */
{
byte* dest=y_pos*ZOOMY*VIDEO_LINE_WIDTH+x_pos*ZOOMX+Screen_pixels; // dest = adr destination à
// l'écran
byte* dest=y_pos*ZOOMY*VIDEO_LINE_WIDTH+x_pos*ZOOMX+Screen_pixels; // dest = adr destination à
// l'écran
byte* src=brush_width*y_offset+x_offset+Brush; // src = adr ds
// la brosse
int x,y;
@ -212,7 +212,7 @@ void Display_brush_mono_triple(word x_pos, word y_pos,
dest+=ZOOMX;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
src+=brush_width-width;
dest+=VIDEO_LINE_WIDTH*ZOOMY-width*ZOOMX;
}
@ -221,8 +221,8 @@ void Display_brush_mono_triple(word x_pos, word y_pos,
void Clear_brush_triple(word x_pos,word y_pos,word x_offset,word y_offset,word width,word height,byte transp_color,word image_width)
{
byte* dest=Screen_pixels+x_pos*ZOOMX+y_pos*ZOOMY*VIDEO_LINE_WIDTH; //On va se mettre en 0,0 dans l'écran (dest)
byte* src = ( y_pos + Main.offset_Y ) * image_width + x_pos + Main.offset_X + Main_screen; //Coords de départ ds la source (src)
byte* dest=Screen_pixels+x_pos*ZOOMX+y_pos*ZOOMY*VIDEO_LINE_WIDTH; //On va se mettre en 0,0 dans l'écran (dest)
byte* src = ( y_pos + Main.offset_Y ) * image_width + x_pos + Main.offset_X + Main_screen; //Coords de départ ds la source (src)
int y;
int x;
(void)x_offset; // unused
@ -242,17 +242,17 @@ void Clear_brush_triple(word x_pos,word y_pos,word x_offset,word y_offset,word w
dest+=ZOOMX;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
src+=image_width-width;
dest+=VIDEO_LINE_WIDTH*ZOOMY-width*ZOOMX;
}
Update_rect(x_pos,y_pos,width,height);
}
// Affiche une brosse (arbitraire) à l'écran
// Affiche une brosse (arbitraire) à l'écran
void Display_brush_triple(byte * brush, word x_pos,word y_pos,word x_offset,word y_offset,word width,word height,byte transp_color,word brush_width)
{
// dest = Position à l'écran
// dest = Position à l'écran
byte* dest = Screen_pixels + y_pos * ZOOMY * VIDEO_LINE_WIDTH + x_pos * ZOOMX;
// src = Position dans la brosse
byte* src = brush + y_offset * brush_width + x_offset;
@ -265,7 +265,7 @@ void Display_brush_triple(byte * brush, word x_pos,word y_pos,word x_offset,word
// Pour chaque pixel
for(x = width;x > 0; x--)
{
// On vérifie que ce n'est pas la transparence
// On vérifie que ce n'est pas la transparence
if(*src != transp_color)
{
*(dest+2*VIDEO_LINE_WIDTH+2)=*(dest+2*VIDEO_LINE_WIDTH+1)=*(dest+2*VIDEO_LINE_WIDTH)=*(dest+VIDEO_LINE_WIDTH+2)=*(dest+VIDEO_LINE_WIDTH+1)=*(dest+VIDEO_LINE_WIDTH)=*(dest+2)=*(dest+1)=*dest=*src;
@ -275,7 +275,7 @@ void Display_brush_triple(byte * brush, word x_pos,word y_pos,word x_offset,word
src++; dest+=ZOOMX;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
dest = dest + VIDEO_LINE_WIDTH*ZOOMY - width*ZOOMX;
src = src + brush_width - width;
}
@ -283,7 +283,7 @@ void Display_brush_triple(byte * brush, word x_pos,word y_pos,word x_offset,word
void Remap_screen_triple(word x_pos,word y_pos,word width,word height,byte * conversion_table)
{
// dest = coords a l'écran
// dest = coords a l'écran
byte* dest = Screen_pixels + y_pos * ZOOMY * VIDEO_LINE_WIDTH + x_pos * ZOOMX;
int x,y;
@ -306,7 +306,7 @@ void Remap_screen_triple(word x_pos,word y_pos,word width,word height,byte * con
void Display_line_on_screen_fast_triple(word x_pos,word y_pos,word width,byte * line)
/* On affiche toute une ligne de pixels telle quelle. */
/* Utilisée si le buffer contient déja des pixel doublés. */
/* Utilisée si le buffer contient déja des pixel doublés. */
{
memcpy(Screen_pixels+x_pos*ZOOMX+y_pos*ZOOMY*VIDEO_LINE_WIDTH,line,width*ZOOMX);
memcpy(Screen_pixels+x_pos*ZOOMX+(y_pos*ZOOMY+1)*VIDEO_LINE_WIDTH,line,width*ZOOMX);
@ -329,8 +329,8 @@ void Display_line_on_screen_triple(word x_pos,word y_pos,word width,byte * line)
void Display_transparent_mono_line_on_screen_triple(
word x_pos, word y_pos, word width, byte* line,
byte transp_color, byte color)
// Affiche une ligne à l'écran avec une couleur + transparence.
// Utilisé par les brosses en mode zoom
// Affiche une ligne à l'écran avec une couleur + transparence.
// Utilisé par les brosses en mode zoom
{
byte* dest = Screen_pixels+ y_pos*VIDEO_LINE_WIDTH + x_pos*ZOOMX;
int x;
@ -352,31 +352,31 @@ void Read_line_screen_triple(word x_pos,word y_pos,word width,byte * line)
}
void Display_part_of_screen_scaled_triple(
word width, // width non zoomée
word height, // height zoomée
word width, // width non zoomée
word height, // height zoomée
word image_width,byte * buffer)
{
byte* src = Main_screen + Main.magnifier_offset_Y * image_width
+ Main.magnifier_offset_X;
int y = 0; // Ligne en cours de traitement
// Pour chaque ligne à zoomer
// Pour chaque ligne à zoomer
while(1)
{
int x;
// On éclate la ligne
// On éclate la ligne
Zoom_a_line(src,buffer,Main.magnifier_factor*ZOOMX,width);
// On l'affiche Facteur fois, sur des lignes consécutives
// On l'affiche Facteur fois, sur des lignes consécutives
x = Main.magnifier_factor/**ZOOMY*/;
// Pour chaque ligne
do{
// On affiche la ligne zoomée
// On affiche la ligne zoomée
Display_line_on_screen_fast_triple(
Main.X_zoom, y, width*Main.magnifier_factor,
buffer
);
// On passe à la suivante
// On passe à la suivante
y++;
if(y==height/**ZOOMY*/)
{
@ -393,12 +393,12 @@ void Display_part_of_screen_scaled_triple(
// ATTENTION on n'arrive jamais ici !
}
// Affiche une partie de la brosse couleur zoomée
// Affiche une partie de la brosse couleur zoomée
void Display_brush_color_zoom_triple(word x_pos,word y_pos,
word x_offset,word y_offset,
word width, // width non zoomée
word width, // width non zoomée
word end_y_pos,byte transp_color,
word brush_width, // width réelle de la brosse
word brush_width, // width réelle de la brosse
byte * buffer)
{
byte* src = Brush+y_offset*brush_width + x_offset;
@ -409,7 +409,7 @@ void Display_brush_color_zoom_triple(word x_pos,word y_pos,
while(1)
{
Zoom_a_line(src,buffer,Main.magnifier_factor,width);
// On affiche facteur fois la ligne zoomée
// On affiche facteur fois la ligne zoomée
for(bx=Main.magnifier_factor;bx>0;bx--)
{
byte* line_src = buffer;
@ -442,10 +442,10 @@ void Display_brush_color_zoom_triple(word x_pos,word y_pos,
void Display_brush_mono_zoom_triple(word x_pos, word y_pos,
word x_offset, word y_offset,
word width, // width non zoomée
word width, // width non zoomée
word end_y_pos,
byte transp_color, byte color,
word brush_width, // width réelle de la brosse
word brush_width, // width réelle de la brosse
byte * buffer
)
@ -453,29 +453,29 @@ void Display_brush_mono_zoom_triple(word x_pos, word y_pos,
byte* src = Brush + y_offset * brush_width + x_offset;
int y=y_pos*ZOOMY;
//Pour chaque ligne à zoomer :
//Pour chaque ligne à zoomer :
while(1)
{
int bx;
// src = Ligne originale
// On éclate la ligne
// On éclate la ligne
Zoom_a_line(src,buffer,Main.magnifier_factor,width);
// On affiche la ligne Facteur fois à l'écran (sur des
// lignes consécutives)
// On affiche la ligne Facteur fois à l'écran (sur des
// lignes consécutives)
bx = Main.magnifier_factor*ZOOMY;
// Pour chaque ligne écran
// Pour chaque ligne écran
do
{
// On affiche la ligne zoomée
// On affiche la ligne zoomée
Display_transparent_mono_line_on_screen_triple(
x_pos, y, width * Main.magnifier_factor,
buffer, transp_color, color
);
// On passe à la ligne suivante
// On passe à la ligne suivante
y++;
// On vérifie qu'on est pas à la ligne finale
// On vérifie qu'on est pas à la ligne finale
if(y == end_y_pos*ZOOMY)
{
Redraw_grid( x_pos, y_pos,
@ -488,7 +488,7 @@ void Display_brush_mono_zoom_triple(word x_pos, word y_pos,
}
while (bx > 0);
// Passage à la ligne suivante dans la brosse aussi
// Passage à la ligne suivante dans la brosse aussi
src+=brush_width;
}
}
@ -496,13 +496,13 @@ void Display_brush_mono_zoom_triple(word x_pos, word y_pos,
void Clear_brush_scaled_triple(word x_pos,word y_pos,word x_offset,word y_offset,word width,word end_y_pos,byte transp_color,word image_width,byte * buffer)
{
// En fait on va recopier l'image non zoomée dans la partie zoomée !
// En fait on va recopier l'image non zoomée dans la partie zoomée !
byte* src = Main_screen + y_offset * image_width + x_offset;
int y = y_pos;
int bx;
(void)transp_color; // unused
// Pour chaque ligne à zoomer
// Pour chaque ligne à zoomer
while(1){
Zoom_a_line(src,buffer,Main.magnifier_factor*ZOOMX,width);

View File

@ -35,20 +35,20 @@
void Pixel_wide (word x,word y,byte color)
/* Affiche un pixel de la color aux coords x;y à l'écran */
/* Affiche un pixel de la color aux coords x;y à l'écran */
{
*(Screen_pixels + x * ZOOMX + y*ZOOMY * VIDEO_LINE_WIDTH)=color;
*(Screen_pixels + x * ZOOMX + y*ZOOMY * VIDEO_LINE_WIDTH + 1)=color;
}
byte Read_pixel_wide (word x,word y)
/* On retourne la couleur du pixel aux coords données */
/* On retourne la couleur du pixel aux coords données */
{
return *( Screen_pixels + y * ZOOMY * VIDEO_LINE_WIDTH + x * ZOOMX);
}
void Block_wide (word start_x,word start_y,word width,word height,byte color)
/* On affiche un rectangle de la couleur donnée */
/* On affiche un rectangle de la couleur donnée */
{
SDL_Rect rectangle;
rectangle.x=start_x*ZOOMX;
@ -59,10 +59,10 @@ void Block_wide (word start_x,word start_y,word width,word height,byte color)
}
void Display_part_of_screen_wide (word width,word height,word image_width)
/* Afficher une partie de l'image telle quelle sur l'écran */
/* Afficher une partie de l'image telle quelle sur l'écran */
{
byte* dest=Screen_pixels; //On va se mettre en 0,0 dans l'écran (dest)
byte* src=Main.offset_Y*image_width+Main.offset_X+Main_screen; //Coords de départ ds la source (src)
byte* dest=Screen_pixels; //On va se mettre en 0,0 dans l'écran (dest)
byte* src=Main.offset_Y*image_width+Main.offset_X+Main_screen; //Coords de départ ds la source (src)
int y;
int dy;
@ -77,7 +77,7 @@ void Display_part_of_screen_wide (word width,word height,word image_width)
dest+=ZOOMX;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
src+=image_width-width;
dest+=VIDEO_LINE_WIDTH*ZOOMY - width*ZOOMX;
}
@ -85,10 +85,10 @@ void Display_part_of_screen_wide (word width,word height,word image_width)
}
void Pixel_preview_normal_wide (word x,word y,byte color)
/* Affichage d'un pixel dans l'écran, par rapport au décalage de l'image
* dans l'écran, en mode normal (pas en mode loupe)
* Note: si on modifie cette procédure, il faudra penser à faire également
* la modif dans la procédure Pixel_Preview_Loupe_SDL. */
/* Affichage d'un pixel dans l'écran, par rapport au décalage de l'image
* dans l'écran, en mode normal (pas en mode loupe)
* Note: si on modifie cette procédure, il faudra penser à faire également
* la modif dans la procédure Pixel_Preview_Loupe_SDL. */
{
// if(x-Main.offset_X >= 0 && y - Main.offset_Y >= 0)
Pixel_wide(x-Main.offset_X,y-Main.offset_Y,color);
@ -96,10 +96,10 @@ void Pixel_preview_normal_wide (word x,word y,byte color)
void Pixel_preview_magnifier_wide (word x,word y,byte color)
{
// Affiche le pixel dans la partie non zoomée
// Affiche le pixel dans la partie non zoomée
Pixel_wide(x-Main.offset_X,y-Main.offset_Y,color);
// Regarde si on doit aussi l'afficher dans la partie zoomée
// Regarde si on doit aussi l'afficher dans la partie zoomée
if (y >= Limit_top_zoom && y <= Limit_visible_bottom_zoom
&& x >= Limit_left_zoom && x <= Limit_visible_right_zoom)
{
@ -109,7 +109,7 @@ void Pixel_preview_magnifier_wide (word x,word y,byte color)
if (Menu_Y - y_zoom < Main.magnifier_factor)
// On ne doit dessiner qu'un morceau du pixel
// sinon on dépasse sur le menu
// sinon on dépasse sur le menu
height = Menu_Y - y_zoom;
else
height = Main.magnifier_factor;
@ -145,7 +145,7 @@ void Vertical_XOR_line_wide(word x_pos,word y_pos,word height)
void Display_brush_color_wide(word x_pos,word y_pos,word x_offset,word y_offset,word width,word height,byte transp_color,word brush_width)
{
// dest = Position à l'écran
// dest = Position à l'écran
byte* dest = Screen_pixels + y_pos * ZOOMY * VIDEO_LINE_WIDTH + x_pos * ZOOMX;
// src = Position dans la brosse
byte* src = Brush + y_offset * brush_width + x_offset;
@ -158,7 +158,7 @@ void Display_brush_color_wide(word x_pos,word y_pos,word x_offset,word y_offset,
// Pour chaque pixel
for(x = width;x > 0; x--)
{
// On vérifie que ce n'est pas la transparence
// On vérifie que ce n'est pas la transparence
if(*src != transp_color)
{
*(dest+1) = *dest = *src;
@ -169,7 +169,7 @@ void Display_brush_color_wide(word x_pos,word y_pos,word x_offset,word y_offset,
dest+=ZOOMX;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
dest = dest + VIDEO_LINE_WIDTH*ZOOMY - width*ZOOMX;
src = src + brush_width - width;
}
@ -181,8 +181,8 @@ void Display_brush_mono_wide(word x_pos, word y_pos,
byte transp_color, byte color, word brush_width)
/* On affiche la brosse en monochrome */
{
byte* dest=y_pos*ZOOMY*VIDEO_LINE_WIDTH+x_pos*ZOOMX+Screen_pixels; // dest = adr destination à
// l'écran
byte* dest=y_pos*ZOOMY*VIDEO_LINE_WIDTH+x_pos*ZOOMX+Screen_pixels; // dest = adr destination à
// l'écran
byte* src=brush_width*y_offset+x_offset+Brush; // src = adr ds
// la brosse
int x,y;
@ -201,7 +201,7 @@ void Display_brush_mono_wide(word x_pos, word y_pos,
dest+=ZOOMX;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
src+=brush_width-width;
dest+=VIDEO_LINE_WIDTH*ZOOMY-width*ZOOMX;
}
@ -210,8 +210,8 @@ void Display_brush_mono_wide(word x_pos, word y_pos,
void Clear_brush_wide(word x_pos,word y_pos,word x_offset,word y_offset,word width,word height,byte transp_color,word image_width)
{
byte* dest=Screen_pixels+x_pos*ZOOMX+y_pos*ZOOMY*VIDEO_LINE_WIDTH; //On va se mettre en 0,0 dans l'écran (dest)
byte* src = ( y_pos + Main.offset_Y ) * image_width + x_pos + Main.offset_X + Main_screen; //Coords de départ ds la source (src)
byte* dest=Screen_pixels+x_pos*ZOOMX+y_pos*ZOOMY*VIDEO_LINE_WIDTH; //On va se mettre en 0,0 dans l'écran (dest)
byte* src = ( y_pos + Main.offset_Y ) * image_width + x_pos + Main.offset_X + Main_screen; //Coords de départ ds la source (src)
int y;
int x;
(void)x_offset; // unused
@ -231,17 +231,17 @@ void Clear_brush_wide(word x_pos,word y_pos,word x_offset,word y_offset,word wid
dest+=ZOOMX;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
src+=image_width-width;
dest+=VIDEO_LINE_WIDTH*ZOOMY-width*ZOOMX;
}
Update_rect(x_pos,y_pos,width,height);
}
// Affiche une brosse (arbitraire) à l'écran
// Affiche une brosse (arbitraire) à l'écran
void Display_brush_wide(byte * brush, word x_pos,word y_pos,word x_offset,word y_offset,word width,word height,byte transp_color,word brush_width)
{
// dest = Position à l'écran
// dest = Position à l'écran
byte* dest = Screen_pixels + y_pos * ZOOMY * VIDEO_LINE_WIDTH + x_pos * ZOOMX;
// src = Position dans la brosse
byte* src = brush + y_offset * brush_width + x_offset;
@ -254,7 +254,7 @@ void Display_brush_wide(byte * brush, word x_pos,word y_pos,word x_offset,word y
// Pour chaque pixel
for(x = width;x > 0; x--)
{
// On vérifie que ce n'est pas la transparence
// On vérifie que ce n'est pas la transparence
if(*src != transp_color)
{
*(dest+1) = *dest = *src;
@ -264,7 +264,7 @@ void Display_brush_wide(byte * brush, word x_pos,word y_pos,word x_offset,word y
src++; dest+=ZOOMX;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
dest = dest + VIDEO_LINE_WIDTH*ZOOMY - width*ZOOMX;
src = src + brush_width - width;
}
@ -272,7 +272,7 @@ void Display_brush_wide(byte * brush, word x_pos,word y_pos,word x_offset,word y
void Remap_screen_wide(word x_pos,word y_pos,word width,word height,byte * conversion_table)
{
// dest = coords a l'écran
// dest = coords a l'écran
byte* dest = Screen_pixels + y_pos * ZOOMY * VIDEO_LINE_WIDTH + x_pos * ZOOMX;
int x,y;
@ -294,7 +294,7 @@ void Remap_screen_wide(word x_pos,word y_pos,word width,word height,byte * conve
void Display_line_on_screen_fast_wide(word x_pos,word y_pos,word width,byte * line)
/* On affiche toute une ligne de pixels telle quelle. */
/* Utilisée si le buffer contient déja des pixel doublés. */
/* Utilisée si le buffer contient déja des pixel doublés. */
{
memcpy(Screen_pixels+x_pos*ZOOMX+y_pos*ZOOMY*VIDEO_LINE_WIDTH,line,width*ZOOMX);
}
@ -315,8 +315,8 @@ void Display_line_on_screen_wide(word x_pos,word y_pos,word width,byte * line)
void Display_transparent_mono_line_on_screen_wide(
word x_pos, word y_pos, word width, byte* line,
byte transp_color, byte color)
// Affiche une ligne à l'écran avec une couleur + transparence.
// Utilisé par les brosses en mode zoom
// Affiche une ligne à l'écran avec une couleur + transparence.
// Utilisé par les brosses en mode zoom
{
byte* dest = Screen_pixels+ y_pos*VIDEO_LINE_WIDTH + x_pos*ZOOMX;
int x;
@ -338,31 +338,31 @@ void Read_line_screen_wide(word x_pos,word y_pos,word width,byte * line)
}
void Display_part_of_screen_scaled_wide(
word width, // width non zoomée
word height, // height zoomée
word width, // width non zoomée
word height, // height zoomée
word image_width,byte * buffer)
{
byte* src = Main_screen + Main.magnifier_offset_Y * image_width
+ Main.magnifier_offset_X;
int y = 0; // Ligne en cours de traitement
// Pour chaque ligne à zoomer
// Pour chaque ligne à zoomer
while(1)
{
int x;
// On éclate la ligne
// On éclate la ligne
Zoom_a_line(src,buffer,Main.magnifier_factor*ZOOMX,width);
// On l'affiche Facteur fois, sur des lignes consécutives
// On l'affiche Facteur fois, sur des lignes consécutives
x = Main.magnifier_factor;
// Pour chaque ligne
do{
// On affiche la ligne zoomée
// On affiche la ligne zoomée
Display_line_on_screen_fast_wide(
Main.X_zoom, y, width*Main.magnifier_factor,
buffer
);
// On passe à la suivante
// On passe à la suivante
y++;
if(y==height)
{
@ -397,12 +397,12 @@ void Display_transparent_line_on_screen_wide(word x_pos,word y_pos,word width,by
}
}
// Affiche une partie de la brosse couleur zoomée
// Affiche une partie de la brosse couleur zoomée
void Display_brush_color_zoom_wide(word x_pos,word y_pos,
word x_offset,word y_offset,
word width, // width non zoomée
word width, // width non zoomée
word end_y_pos,byte transp_color,
word brush_width, // width réelle de la brosse
word brush_width, // width réelle de la brosse
byte * buffer)
{
byte* src = Brush+y_offset*brush_width + x_offset;
@ -413,7 +413,7 @@ void Display_brush_color_zoom_wide(word x_pos,word y_pos,
while(1)
{
Zoom_a_line(src,buffer,Main.magnifier_factor,width);
// On affiche facteur fois la ligne zoomée
// On affiche facteur fois la ligne zoomée
for(bx=Main.magnifier_factor;bx>0;bx--)
{
Display_transparent_line_on_screen_wide(x_pos,y*ZOOMY,width*Main.magnifier_factor,buffer,transp_color);
@ -430,10 +430,10 @@ void Display_brush_color_zoom_wide(word x_pos,word y_pos,
void Display_brush_mono_zoom_wide(word x_pos, word y_pos,
word x_offset, word y_offset,
word width, // width non zoomée
word width, // width non zoomée
word end_y_pos,
byte transp_color, byte color,
word brush_width, // width réelle de la brosse
word brush_width, // width réelle de la brosse
byte * buffer
)
@ -441,29 +441,29 @@ void Display_brush_mono_zoom_wide(word x_pos, word y_pos,
byte* src = Brush + y_offset * brush_width + x_offset;
int y=y_pos*ZOOMY;
//Pour chaque ligne à zoomer :
//Pour chaque ligne à zoomer :
while(1)
{
int bx;
// src = Ligne originale
// On éclate la ligne
// On éclate la ligne
Zoom_a_line(src,buffer,Main.magnifier_factor,width);
// On affiche la ligne Facteur fois à l'écran (sur des
// lignes consécutives)
// On affiche la ligne Facteur fois à l'écran (sur des
// lignes consécutives)
bx = Main.magnifier_factor*ZOOMY;
// Pour chaque ligne écran
// Pour chaque ligne écran
do
{
// On affiche la ligne zoomée
// On affiche la ligne zoomée
Display_transparent_mono_line_on_screen_wide(
x_pos, y, width * Main.magnifier_factor,
buffer, transp_color, color
);
// On passe à la ligne suivante
// On passe à la ligne suivante
y++;
// On vérifie qu'on est pas à la ligne finale
// On vérifie qu'on est pas à la ligne finale
if(y == end_y_pos*ZOOMY)
{
Redraw_grid( x_pos, y_pos,
@ -476,20 +476,20 @@ void Display_brush_mono_zoom_wide(word x_pos, word y_pos,
}
while (bx > 0);
// Passage à la ligne suivante dans la brosse aussi
// Passage à la ligne suivante dans la brosse aussi
src+=brush_width;
}
}
void Clear_brush_scaled_wide(word x_pos,word y_pos,word x_offset,word y_offset,word width,word end_y_pos,byte transp_color,word image_width,byte * buffer)
{
// En fait on va recopier l'image non zoomée dans la partie zoomée !
// En fait on va recopier l'image non zoomée dans la partie zoomée !
byte* src = Main_screen + y_offset * image_width + x_offset;
int y = y_pos;
int bx;
(void)transp_color; // unused
// Pour chaque ligne à zoomer
// Pour chaque ligne à zoomer
while(1){
Zoom_a_line(src,buffer,Main.magnifier_factor*ZOOMX,width);

View File

@ -35,7 +35,7 @@
void Pixel_wide2 (word x,word y,byte color)
/* Affiche un pixel de la color aux coords x;y à l'écran */
/* Affiche un pixel de la color aux coords x;y à l'écran */
{
*(Screen_pixels + x * ZOOMX + y*ZOOMY * VIDEO_LINE_WIDTH)=color;
*(Screen_pixels + x * ZOOMX + y*ZOOMY * VIDEO_LINE_WIDTH + 1)=color;
@ -48,13 +48,13 @@ void Pixel_wide2 (word x,word y,byte color)
}
byte Read_pixel_wide2 (word x,word y)
/* On retourne la couleur du pixel aux coords données */
/* On retourne la couleur du pixel aux coords données */
{
return *( Screen_pixels + y * ZOOMY * VIDEO_LINE_WIDTH + x * ZOOMX);
}
void Block_wide2 (word start_x,word start_y,word width,word height,byte color)
/* On affiche un rectangle de la couleur donnée */
/* On affiche un rectangle de la couleur donnée */
{
SDL_Rect rectangle;
rectangle.x=start_x*ZOOMX;
@ -65,10 +65,10 @@ void Block_wide2 (word start_x,word start_y,word width,word height,byte color)
}
void Display_part_of_screen_wide2 (word width,word height,word image_width)
/* Afficher une partie de l'image telle quelle sur l'écran */
/* Afficher une partie de l'image telle quelle sur l'écran */
{
byte* dest=Screen_pixels; //On va se mettre en 0,0 dans l'écran (dest)
byte* src=Main.offset_Y*image_width+Main.offset_X+Main_screen; //Coords de départ ds la source (src)
byte* dest=Screen_pixels; //On va se mettre en 0,0 dans l'écran (dest)
byte* src=Main.offset_Y*image_width+Main.offset_X+Main_screen; //Coords de départ ds la source (src)
int y;
int dy;
@ -85,7 +85,7 @@ void Display_part_of_screen_wide2 (word width,word height,word image_width)
// On double la ligne qu'on vient de copier
memcpy(dest-width*ZOOMX+VIDEO_LINE_WIDTH,dest-width*ZOOMX,width*ZOOMX);
// On passe à la ligne suivante
// On passe à la ligne suivante
src+=image_width-width;
dest+=VIDEO_LINE_WIDTH*ZOOMY - width*ZOOMX;
}
@ -93,10 +93,10 @@ void Display_part_of_screen_wide2 (word width,word height,word image_width)
}
void Pixel_preview_normal_wide2 (word x,word y,byte color)
/* Affichage d'un pixel dans l'écran, par rapport au décalage de l'image
* dans l'écran, en mode normal (pas en mode loupe)
* Note: si on modifie cette procédure, il faudra penser à faire également
* la modif dans la procédure Pixel_Preview_Loupe_SDL. */
/* Affichage d'un pixel dans l'écran, par rapport au décalage de l'image
* dans l'écran, en mode normal (pas en mode loupe)
* Note: si on modifie cette procédure, il faudra penser à faire également
* la modif dans la procédure Pixel_Preview_Loupe_SDL. */
{
// if(x-Main.offset_X >= 0 && y - Main.offset_Y >= 0)
Pixel_wide2(x-Main.offset_X,y-Main.offset_Y,color);
@ -104,10 +104,10 @@ void Pixel_preview_normal_wide2 (word x,word y,byte color)
void Pixel_preview_magnifier_wide2 (word x,word y,byte color)
{
// Affiche le pixel dans la partie non zoomée
// Affiche le pixel dans la partie non zoomée
Pixel_wide2(x-Main.offset_X,y-Main.offset_Y,color);
// Regarde si on doit aussi l'afficher dans la partie zoomée
// Regarde si on doit aussi l'afficher dans la partie zoomée
if (y >= Limit_top_zoom && y <= Limit_visible_bottom_zoom
&& x >= Limit_left_zoom && x <= Limit_visible_right_zoom)
{
@ -117,7 +117,7 @@ void Pixel_preview_magnifier_wide2 (word x,word y,byte color)
if (Menu_Y - y_zoom < Main.magnifier_factor)
// On ne doit dessiner qu'un morceau du pixel
// sinon on dépasse sur le menu
// sinon on dépasse sur le menu
height = Menu_Y - y_zoom;
else
height = Main.magnifier_factor;
@ -153,7 +153,7 @@ void Vertical_XOR_line_wide2(word x_pos,word y_pos,word height)
void Display_brush_color_wide2(word x_pos,word y_pos,word x_offset,word y_offset,word width,word height,byte transp_color,word brush_width)
{
// dest = Position à l'écran
// dest = Position à l'écran
byte* dest = Screen_pixels + y_pos * ZOOMY * VIDEO_LINE_WIDTH + x_pos * ZOOMX;
// src = Position dans la brosse
byte* src = Brush + y_offset * brush_width + x_offset;
@ -166,7 +166,7 @@ void Display_brush_color_wide2(word x_pos,word y_pos,word x_offset,word y_offset
// Pour chaque pixel
for(x = width;x > 0; x--)
{
// On vérifie que ce n'est pas la transparence
// On vérifie que ce n'est pas la transparence
if(*src != transp_color)
{
*(dest+VIDEO_LINE_WIDTH+3) = *(dest+VIDEO_LINE_WIDTH+2) = *(dest+VIDEO_LINE_WIDTH+1) = *(dest+VIDEO_LINE_WIDTH) = *(dest+3) = *(dest+2) = *(dest+1) = *dest = *src;
@ -177,7 +177,7 @@ void Display_brush_color_wide2(word x_pos,word y_pos,word x_offset,word y_offset
dest+=ZOOMX;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
dest = dest + VIDEO_LINE_WIDTH*ZOOMY - width*ZOOMX;
src = src + brush_width - width;
}
@ -189,8 +189,8 @@ void Display_brush_mono_wide2(word x_pos, word y_pos,
byte transp_color, byte color, word brush_width)
/* On affiche la brosse en monochrome */
{
byte* dest=y_pos*ZOOMY*VIDEO_LINE_WIDTH+x_pos*ZOOMX+Screen_pixels; // dest = adr destination à
// l'écran
byte* dest=y_pos*ZOOMY*VIDEO_LINE_WIDTH+x_pos*ZOOMX+Screen_pixels; // dest = adr destination à
// l'écran
byte* src=brush_width*y_offset+x_offset+Brush; // src = adr ds
// la brosse
int x,y;
@ -209,7 +209,7 @@ void Display_brush_mono_wide2(word x_pos, word y_pos,
dest+=ZOOMX;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
src+=brush_width-width;
dest+=VIDEO_LINE_WIDTH*ZOOMY-width*ZOOMX;
}
@ -218,8 +218,8 @@ void Display_brush_mono_wide2(word x_pos, word y_pos,
void Clear_brush_wide2(word x_pos,word y_pos,word x_offset,word y_offset,word width,word height,byte transp_color,word image_width)
{
byte* dest=Screen_pixels+x_pos*ZOOMX+y_pos*ZOOMY*VIDEO_LINE_WIDTH; //On va se mettre en 0,0 dans l'écran (dest)
byte* src = ( y_pos + Main.offset_Y ) * image_width + x_pos + Main.offset_X + Main_screen; //Coords de départ ds la source (src)
byte* dest=Screen_pixels+x_pos*ZOOMX+y_pos*ZOOMY*VIDEO_LINE_WIDTH; //On va se mettre en 0,0 dans l'écran (dest)
byte* src = ( y_pos + Main.offset_Y ) * image_width + x_pos + Main.offset_X + Main_screen; //Coords de départ ds la source (src)
int y;
int x;
(void)x_offset; // unused
@ -239,17 +239,17 @@ void Clear_brush_wide2(word x_pos,word y_pos,word x_offset,word y_offset,word wi
dest+=ZOOMX;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
src+=image_width-width;
dest+=VIDEO_LINE_WIDTH*ZOOMY-width*ZOOMX;
}
Update_rect(x_pos,y_pos,width,height);
}
// Affiche une brosse (arbitraire) à l'écran
// Affiche une brosse (arbitraire) à l'écran
void Display_brush_wide2(byte * brush, word x_pos,word y_pos,word x_offset,word y_offset,word width,word height,byte transp_color,word brush_width)
{
// dest = Position à l'écran
// dest = Position à l'écran
byte* dest = Screen_pixels + y_pos * ZOOMY * VIDEO_LINE_WIDTH + x_pos * ZOOMX;
// src = Position dans la brosse
byte* src = brush + y_offset * brush_width + x_offset;
@ -262,7 +262,7 @@ void Display_brush_wide2(byte * brush, word x_pos,word y_pos,word x_offset,word
// Pour chaque pixel
for(x = width;x > 0; x--)
{
// On vérifie que ce n'est pas la transparence
// On vérifie que ce n'est pas la transparence
if(*src != transp_color)
{
*(dest+VIDEO_LINE_WIDTH+3)=*(dest+VIDEO_LINE_WIDTH+2)=*(dest+VIDEO_LINE_WIDTH+1)=*(dest+VIDEO_LINE_WIDTH)=*(dest+3)=*(dest+2)=*(dest+1)=*dest=*src;
@ -272,7 +272,7 @@ void Display_brush_wide2(byte * brush, word x_pos,word y_pos,word x_offset,word
src++; dest+=ZOOMX;
}
// On passe à la ligne suivante
// On passe à la ligne suivante
dest = dest + VIDEO_LINE_WIDTH*ZOOMY - width*ZOOMX;
src = src + brush_width - width;
}
@ -280,7 +280,7 @@ void Display_brush_wide2(byte * brush, word x_pos,word y_pos,word x_offset,word
void Remap_screen_wide2(word x_pos,word y_pos,word width,word height,byte * conversion_table)
{
// dest = coords a l'écran
// dest = coords a l'écran
byte* dest = Screen_pixels + y_pos * ZOOMY * VIDEO_LINE_WIDTH + x_pos * ZOOMX;
int x,y;
@ -303,7 +303,7 @@ void Remap_screen_wide2(word x_pos,word y_pos,word width,word height,byte * conv
void Display_line_on_screen_fast_wide2(word x_pos,word y_pos,word width,byte * line)
/* On affiche toute une ligne de pixels telle quelle. */
/* Utilisée si le buffer contient déja des pixel doublés. */
/* Utilisée si le buffer contient déja des pixel doublés. */
{
memcpy(Screen_pixels+x_pos*ZOOMX+y_pos*ZOOMY*VIDEO_LINE_WIDTH,line,width*ZOOMX);
memcpy(Screen_pixels+x_pos*ZOOMX+(y_pos*ZOOMY+1)*VIDEO_LINE_WIDTH,line,width*ZOOMX);
@ -325,8 +325,8 @@ void Display_line_on_screen_wide2(word x_pos,word y_pos,word width,byte * line)
void Display_transparent_mono_line_on_screen_wide2(
word x_pos, word y_pos, word width, byte* line,
byte transp_color, byte color)
// Affiche une ligne à l'écran avec une couleur + transparence.
// Utilisé par les brosses en mode zoom
// Affiche une ligne à l'écran avec une couleur + transparence.
// Utilisé par les brosses en mode zoom
{
byte* dest = Screen_pixels+ y_pos*VIDEO_LINE_WIDTH + x_pos*ZOOMX;
int x;
@ -348,31 +348,31 @@ void Read_line_screen_wide2(word x_pos,word y_pos,word width,byte * line)
}
void Display_part_of_screen_scaled_wide2(
word width, // width non zoomée
word height, // height zoomée
word width, // width non zoomée
word height, // height zoomée
word image_width,byte * buffer)
{
byte* src = Main_screen + Main.magnifier_offset_Y * image_width
+ Main.magnifier_offset_X;
int y = 0; // Ligne en cours de traitement
// Pour chaque ligne à zoomer
// Pour chaque ligne à zoomer
while(1)
{
int x;
// On éclate la ligne
// On éclate la ligne
Zoom_a_line(src,buffer,Main.magnifier_factor*ZOOMX,width);
// On l'affiche Facteur fois, sur des lignes consécutives
// On l'affiche Facteur fois, sur des lignes consécutives
x = Main.magnifier_factor/**ZOOMY*/;
// Pour chaque ligne
do{
// On affiche la ligne zoomée
// On affiche la ligne zoomée
Display_line_on_screen_fast_wide2(
Main.X_zoom, y, width*Main.magnifier_factor,
buffer
);
// On passe à la suivante
// On passe à la suivante
y++;
if(y==height/**ZOOMY*/)
{
@ -389,12 +389,12 @@ void Display_part_of_screen_scaled_wide2(
// ATTENTION on n'arrive jamais ici !
}
// Affiche une partie de la brosse couleur zoomée
// Affiche une partie de la brosse couleur zoomée
void Display_brush_color_zoom_wide2(word x_pos,word y_pos,
word x_offset,word y_offset,
word width, // width non zoomée
word width, // width non zoomée
word end_y_pos,byte transp_color,
word brush_width, // width réelle de la brosse
word brush_width, // width réelle de la brosse
byte * buffer)
{
byte* src = Brush+y_offset*brush_width + x_offset;
@ -405,7 +405,7 @@ void Display_brush_color_zoom_wide2(word x_pos,word y_pos,
while(1)
{
Zoom_a_line(src,buffer,Main.magnifier_factor,width);
// On affiche facteur fois la ligne zoomée
// On affiche facteur fois la ligne zoomée
for(bx=Main.magnifier_factor;bx>0;bx--)
{
byte* line_src = buffer;
@ -436,10 +436,10 @@ void Display_brush_color_zoom_wide2(word x_pos,word y_pos,
void Display_brush_mono_zoom_wide2(word x_pos, word y_pos,
word x_offset, word y_offset,
word width, // width non zoomée
word width, // width non zoomée
word end_y_pos,
byte transp_color, byte color,
word brush_width, // width réelle de la brosse
word brush_width, // width réelle de la brosse
byte * buffer
)
@ -447,29 +447,29 @@ void Display_brush_mono_zoom_wide2(word x_pos, word y_pos,
byte* src = Brush + y_offset * brush_width + x_offset;
int y=y_pos*ZOOMY;
//Pour chaque ligne à zoomer :
//Pour chaque ligne à zoomer :
while(1)
{
int bx;
// src = Ligne originale
// On éclate la ligne
// On éclate la ligne
Zoom_a_line(src,buffer,Main.magnifier_factor,width);
// On affiche la ligne Facteur fois à l'écran (sur des
// lignes consécutives)
// On affiche la ligne Facteur fois à l'écran (sur des
// lignes consécutives)
bx = Main.magnifier_factor*ZOOMY;
// Pour chaque ligne écran
// Pour chaque ligne écran
do
{
// On affiche la ligne zoomée
// On affiche la ligne zoomée
Display_transparent_mono_line_on_screen_wide2(
x_pos, y, width * Main.magnifier_factor,
buffer, transp_color, color
);
// On passe à la ligne suivante
// On passe à la ligne suivante
y++;
// On vérifie qu'on est pas à la ligne finale
// On vérifie qu'on est pas à la ligne finale
if(y == end_y_pos*ZOOMY)
{
Redraw_grid( x_pos, y_pos,
@ -482,7 +482,7 @@ void Display_brush_mono_zoom_wide2(word x_pos, word y_pos,
}
while (bx > 0);
// Passage à la ligne suivante dans la brosse aussi
// Passage à la ligne suivante dans la brosse aussi
src+=brush_width;
}
}
@ -490,13 +490,13 @@ void Display_brush_mono_zoom_wide2(word x_pos, word y_pos,
void Clear_brush_scaled_wide2(word x_pos,word y_pos,word x_offset,word y_offset,word width,word end_y_pos,byte transp_color,word image_width,byte * buffer)
{
// En fait on va recopier l'image non zoomée dans la partie zoomée !
// En fait on va recopier l'image non zoomée dans la partie zoomée !
byte* src = Main_screen + y_offset * image_width + x_offset;
int y = y_pos;
int bx;
(void)transp_color; // unused
// Pour chaque ligne à zoomer
// Pour chaque ligne à zoomer
while(1){
Zoom_a_line(src,buffer,Main.magnifier_factor*ZOOMX,width);

View File

@ -2,7 +2,7 @@
*/
/* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2011 Pawel Góralski
Copyright 2011 Pawel Góralski
Copyright 2008 Peter Gordon
Copyright 2008 Yves Rizoud
Copyright 2007 Adrien Destugues
@ -55,7 +55,7 @@ void Load_INI_clear_string(char * str, byte keep_comments)
{
equal_found=1;
index++;
// On enleve les espaces après le '='
// On enleve les espaces après le '='
while (str[index]==' ' || str[index]=='\t')
memmove(str+index,str+index+1,strlen(str+index));
}
@ -78,7 +78,7 @@ void Load_INI_clear_string(char * str, byte keep_comments)
{
if (!equal_found)
{
// Passage en majuscule d'un caractère:
// Passage en majuscule d'un caractère:
#ifndef GCWZERO //this causes gcw to crash
str[index]=toupper((int)str[index]);
#endif
@ -86,7 +86,7 @@ void Load_INI_clear_string(char * str, byte keep_comments)
index++;
}
}
// On enlève les espaces avant la fin de chaine
// On enlève les espaces avant la fin de chaine
while (index>0 && (str[index-1]==' ' || str[index-1]=='\t'))
{
index--;
@ -101,22 +101,22 @@ int Load_INI_seek_pattern(char * buffer,char * pattern)
int buffer_index;
int pattern_index;
// A partir de chaque lettre de la chaîne buffer
// A partir de chaque lettre de la chaîne buffer
for (buffer_index=0;buffer[buffer_index]!='\0';buffer_index++)
{
// On regarde si la chaîne pattern est équivalente à la position courante
// de la chaîne buffer:
// On regarde si la chaîne pattern est équivalente à la position courante
// de la chaîne buffer:
for (pattern_index=0;(pattern[pattern_index]!='\0') && (buffer[buffer_index+pattern_index]==pattern[pattern_index]);pattern_index++);
// Si on a trouvé la chaîne pattern dans la chaîne buffer, on renvoie la
// position à laquelle on l'a trouvée (+1 pour que si on la trouve au
// début ça ne renvoie pas la même chose que si on ne l'avait pas
// trouvée):
// Si on a trouvé la chaîne pattern dans la chaîne buffer, on renvoie la
// position à laquelle on l'a trouvée (+1 pour que si on la trouve au
// début ça ne renvoie pas la même chose que si on ne l'avait pas
// trouvée):
if (pattern[pattern_index]=='\0')
return (buffer_index+1);
}
// Si on ne l'a pas trouvée, on renvoie 0:
// Si on ne l'a pas trouvée, on renvoie 0:
return 0;
}
@ -128,11 +128,11 @@ int Load_INI_reach_group(FILE * file,char * buffer,char * group)
char * group_upper;
char * upper_buffer;
// On alloue les zones de mémoire:
// On alloue les zones de mémoire:
group_upper=(char *)malloc(1024);
upper_buffer=(char *)malloc(1024);
// On commence par se faire une version majuscule du groupe à rechercher:
// On commence par se faire une version majuscule du groupe à rechercher:
strcpy(group_upper,group);
Load_INI_clear_string(group_upper, 0);
@ -153,7 +153,7 @@ int Load_INI_reach_group(FILE * file,char * buffer,char * group)
strcpy(upper_buffer,buffer);
Load_INI_clear_string(upper_buffer, 0);
// On compare la chaîne avec le groupe recherché:
// On compare la chaîne avec le groupe recherché:
stop_seek=Load_INI_seek_pattern(upper_buffer,group_upper);
}
while (!stop_seek);
@ -178,11 +178,11 @@ int Load_INI_get_string(FILE * file,char * buffer,char * option_name,char * retu
char * upper_buffer;
int buffer_index;
// On alloue les zones de mémoire:
// On alloue les zones de mémoire:
option_upper=(char *)malloc(1024);
upper_buffer=(char *)malloc(1024);
// On commence par se faire une version majuscule de l'option à rechercher:
// On commence par se faire une version majuscule de l'option à rechercher:
strcpy(option_upper,option_name);
Load_INI_clear_string(option_upper, 0);
@ -203,13 +203,13 @@ int Load_INI_get_string(FILE * file,char * buffer,char * option_name,char * retu
strcpy(upper_buffer,buffer);
Load_INI_clear_string(upper_buffer, raw_text);
// On compare la chaîne avec l'option recherchée:
// On compare la chaîne avec l'option recherchée:
stop_seek=Load_INI_seek_pattern(upper_buffer,option_upper);
// Si on l'a trouvée:
// Si on l'a trouvée:
if (stop_seek)
{
// On se positionne juste après la chaîne "="
// On se positionne juste après la chaîne "="
buffer_index=Load_INI_seek_pattern(upper_buffer,"=");
strcpy(return_code, upper_buffer + buffer_index);
@ -358,11 +358,11 @@ int Load_INI_get_values(FILE * file,char * buffer,char * option_name,int nb_expe
int buffer_index;
int nb_values;
// On alloue les zones de mémoire:
// On alloue les zones de mémoire:
option_upper=(char *)malloc(1024);
upper_buffer=(char *)malloc(1024);
// On commence par se faire une version majuscule de l'option à rechercher:
// On commence par se faire une version majuscule de l'option à rechercher:
strcpy(option_upper,option_name);
Load_INI_clear_string(option_upper, 0);
@ -383,15 +383,15 @@ int Load_INI_get_values(FILE * file,char * buffer,char * option_name,int nb_expe
strcpy(upper_buffer,buffer);
Load_INI_clear_string(upper_buffer, 0);
// On compare la chaîne avec l'option recherchée:
// On compare la chaîne avec l'option recherchée:
stop_seek=Load_INI_seek_pattern(upper_buffer,option_upper);
// Si on l'a trouvée:
// Si on l'a trouvée:
if (stop_seek)
{
nb_values=0;
// On se positionne juste après la chaîne "="
// On se positionne juste après la chaîne "="
buffer_index=Load_INI_seek_pattern(upper_buffer,"=");
// Tant qu'on a pas atteint la fin de la ligne
@ -451,7 +451,7 @@ int Load_INI(T_Config * conf)
#endif
// On alloue les zones de mémoire:
// On alloue les zones de mémoire:
buffer=(char *)malloc(1024);
filename=(char *)malloc(256);
@ -722,7 +722,7 @@ int Load_INI(T_Config * conf)
goto Erreur_ERREUR_INI_CORROMPU;
conf->Auto_nb_used=values[0];
// Optionnel, le mode video par défaut (à partir de beta 97.0%)
// Optionnel, le mode video par défaut (à partir de beta 97.0%)
conf->Default_resolution=0;
if (!Load_INI_get_string (file,buffer,"Default_video_mode",value_label, 0))
{
@ -731,7 +731,7 @@ int Load_INI(T_Config * conf)
conf->Default_resolution=mode;
}
// Optionnel, les dimensions de la fenêtre (à partir de beta 97.0%)
// Optionnel, les dimensions de la fenêtre (à partir de beta 97.0%)
// Do that only if the first mode is actually windowed (not the case on gp2x for example)
if(Video_mode[0].Fullscreen==0)
{
@ -747,7 +747,7 @@ int Load_INI(T_Config * conf)
}
conf->Mouse_merge_movement=100;
// Optionnel, paramètre pour grouper les mouvements souris (>98.0%)
// Optionnel, paramètre pour grouper les mouvements souris (>98.0%)
if (!Load_INI_get_values (file,buffer,"Merge_movement",1,values))
{
if ((values[0]<0) || (values[0]>1000))

View File

@ -23,7 +23,7 @@
*/
/************************************************************************
* *
* READLINE (procédure permettant de saisir une chaîne de caractères) *
* READLINE (procédure permettant de saisir une chaîne de caractères) *
* *
************************************************************************/
@ -100,11 +100,11 @@ static void Insert_character(char * str, char letter, int position)
for (;letter!='\0';position++)
{
// On mémorise le caractère qui se trouve en "position"
// On mémorise le caractère qui se trouve en "position"
temp_char=str[position];
// On splotch la lettre à insérer
// On splotch la lettre à insérer
str[position]=letter;
// On place le caractère mémorisé dans "letter" comme nouvelle lettre à insérer
// On place le caractère mémorisé dans "letter" comme nouvelle lettre à insérer
letter=temp_char;
}
// On termine la chaine
@ -185,11 +185,11 @@ static int Valid_character(word c, int input_type)
break;
case INPUT_TYPE_FILENAME:
{
// On regarde si la touche est autorisée
// On regarde si la touche est autorisée
// Sous Linux: Seul le / est strictement interdit, mais beaucoup
// d'autres poseront des problèmes au shell, alors on évite.
// Sous Windows : c'est moins grave car le fopen() échouerait de toutes façons.
// AmigaOS4: Pas de ':' car utilisé pour les volumes.
// d'autres poseront des problèmes au shell, alors on évite.
// Sous Windows : c'est moins grave car le fopen() échouerait de toutes façons.
// AmigaOS4: Pas de ':' car utilisé pour les volumes.
#if defined(__WIN32__)
char forbidden_char[] = {'/', '|', '?', '*', '<', '>', ':', '\\'};
#elif defined (__amigaos4__) || defined(__AROS__)
@ -418,17 +418,17 @@ bye:
* Enhanced super scanf deluxe pro plus giga mieux :-) *
****************************************************************************/
byte Readline(word x_pos,word y_pos,char * str,byte visible_size,byte input_type)
// Paramètres:
// x_pos, y_pos : Coordonnées de la saisie dans la fenêtre
// str : Chaîne recevant la saisie (et contenant éventuellement une valeur initiale)
// max_size : Nombre de caractères logeant dans la zone de saisie
// input_type : 0=Chaîne, 1=Nombre, 2=Nom de fichier
// Paramètres:
// x_pos, y_pos : Coordonnées de la saisie dans la fenêtre
// str : Chaîne recevant la saisie (et contenant éventuellement une valeur initiale)
// max_size : Nombre de caractères logeant dans la zone de saisie
// input_type : 0=Chaîne, 1=Nombre, 2=Nom de fichier
// Sortie:
// 0: Sortie par annulation (Esc.) / 1: sortie par acceptation (Return)
{
byte max_size;
// Grosse astuce pour les noms de fichiers: La taille affichée est différente
// de la taille maximum gérée.
// Grosse astuce pour les noms de fichiers: La taille affichée est différente
// de la taille maximum gérée.
if (input_type == INPUT_TYPE_FILENAME)
max_size = 255;
else
@ -445,10 +445,10 @@ byte Readline_ex(word x_pos,word y_pos,char * str,byte visible_size,byte max_siz
}
byte Readline_ex_unicode(word x_pos,word y_pos,char * str,word * str_unicode,byte visible_size,byte max_size, byte input_type, byte decimal_places)
// Paramètres:
// x_pos, y_pos : Coordonnées de la saisie dans la fenêtre
// str : Chaîne recevant la saisie (et contenant éventuellement une valeur initiale)
// max_size : Nombre de caractères logeant dans la zone de saisie
// Paramètres:
// x_pos, y_pos : Coordonnées de la saisie dans la fenêtre
// str : Chaîne recevant la saisie (et contenant éventuellement une valeur initiale)
// max_size : Nombre de caractères logeant dans la zone de saisie
// input_type : 0=String, 1=Unsigned int, 2=Filename 3=Signed Double
// decimal_places: Number of decimal places for a double
// Sortie:
@ -463,7 +463,7 @@ byte Readline_ex_unicode(word x_pos,word y_pos,char * str,word * str_unicode,byt
word input_key=0;
word window_x=Window_pos_X;
word window_y=Window_pos_Y;
byte offset=0; // index du premier caractère affiché
byte offset=0; // index du premier caractère affiché
// Virtual keyboard
byte use_virtual_keyboard=0;
@ -482,11 +482,11 @@ byte Readline_ex_unicode(word x_pos,word y_pos,char * str,word * str_unicode,byt
'!','?','^','&','#','$'
};
// Si on a commencé à editer par un clic-droit, on vide la chaine.
// Si on a commencé à editer par un clic-droit, on vide la chaine.
if (Mouse_K==RIGHT_SIDE)
str[0]='\0';
else if (input_type==INPUT_TYPE_INTEGER && str[0]!='\0')
snprintf(str,10,"%d",atoi(str)); // On tasse la chaine à gauche
snprintf(str,10,"%d",atoi(str)); // On tasse la chaine à gauche
else if (input_type==INPUT_TYPE_DECIMAL)
{
// Nothing. The caller should have used Sprint_double, with min_positions
@ -615,11 +615,11 @@ byte Readline_ex_unicode(word x_pos,word y_pos,char * str,word * str_unicode,byt
#endif
Hide_cursor();
// Effacement de la chaîne
// Effacement de la chaîne
Window_rectangle(x_pos,y_pos,visible_size<<3,8,BACKGROUND_COLOR);
Update_window_area(x_pos,y_pos,visible_size<<3,8);
// Mise à jour des variables se rapportant à la chaîne en fonction de la chaîne initiale
// Mise à jour des variables se rapportant à la chaîne en fonction de la chaîne initiale
strcpy(initial_string,str);
if (str_unicode != NULL)
{
@ -784,7 +784,7 @@ byte Readline_ex_unicode(word x_pos,word y_pos,char * str,word * str_unicode,byt
Remove_character(str,position);
size--;
// Effacement de la chaîne
// Effacement de la chaîne
Window_rectangle(x_pos,y_pos,visible_size<<3,8,BACKGROUND_COLOR);
goto affichage;
}
@ -792,7 +792,7 @@ byte Readline_ex_unicode(word x_pos,word y_pos,char * str,word * str_unicode,byt
case SDLK_LEFT : // Gauche
if (position>0)
{
// Effacement de la chaîne
// Effacement de la chaîne
if (position==size)
Window_rectangle(x_pos,y_pos,visible_size<<3,8,BACKGROUND_COLOR);
position--;
@ -823,7 +823,7 @@ byte Readline_ex_unicode(word x_pos,word y_pos,char * str,word * str_unicode,byt
case SDLK_HOME : // Home
if (position)
{
// Effacement de la chaîne
// Effacement de la chaîne
if (position==size)
Window_rectangle(x_pos,y_pos,visible_size<<3,8,BACKGROUND_COLOR);
position = 0;
@ -852,7 +852,7 @@ byte Readline_ex_unicode(word x_pos,word y_pos,char * str,word * str_unicode,byt
else
Remove_character(str,position);
size--;
// Effacement de la chaîne
// Effacement de la chaîne
Window_rectangle(x_pos,y_pos,visible_size<<3,8,BACKGROUND_COLOR);
goto affichage;
}
@ -862,7 +862,7 @@ byte Readline_ex_unicode(word x_pos,word y_pos,char * str,word * str_unicode,byt
if (str_unicode != NULL)
str_unicode[0] = 0;
position=offset=0;
// Effacement de la chaîne
// Effacement de la chaîne
Window_rectangle(x_pos,y_pos,visible_size<<3,8,BACKGROUND_COLOR);
goto affichage;
case SDLK_RETURN :
@ -882,18 +882,18 @@ byte Readline_ex_unicode(word x_pos,word y_pos,char * str,word * str_unicode,byt
default :
if (size<max_size)
{
// Si la touche était autorisée...
// Si la touche était autorisée...
byte is_authorized = Valid_character(input_key, input_type);
if (is_authorized == 1 || (is_authorized == 2 && position == 0 && str[position] != '-'))
{
// ... alors on l'insère ...
// ... alors on l'insère ...
if (str_unicode != NULL)
Insert_character_unicode(str_unicode,input_key,position/*,size*/);
else
Insert_character(str,input_key,position/*,size*/);
// ce qui augmente la taille de la chaine
size++;
// et qui risque de déplacer le curseur vers la droite
// et qui risque de déplacer le curseur vers la droite
if (size<max_size)
{
position++;
@ -959,7 +959,7 @@ affichage:
Input_sticky_control=0;
}
#endif // defined(__ANDROID__)
// Effacement de la chaîne
// Effacement de la chaîne
Window_rectangle(x_pos,y_pos,visible_size<<3,8,BACKGROUND_COLOR);
// On raffiche la chaine correctement
if (input_type==INPUT_TYPE_INTEGER)

View File

@ -2,7 +2,7 @@
*/
/* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2011 Pawel Góralski
Copyright 2011 Pawel Góralski
Copyright 2008 Peter Gordon
Copyright 2008 Yves Rizoud
Copyright 2007 Adrien Destugues
@ -40,11 +40,11 @@ int Save_INI_reach_group(FILE * old_file,FILE * new_file,char * buffer,char * gr
char * group_upper;
char * upper_buffer;
// On alloue les zones de mémoire:
// On alloue les zones de mémoire:
group_upper =(char *)malloc(1024);
upper_buffer=(char *)malloc(1024);
// On commence par se faire une version majuscule du groupe à rechercher:
// On commence par se faire une version majuscule du groupe à rechercher:
strcpy(group_upper,group);
Load_INI_clear_string(group_upper, 0);
@ -63,7 +63,7 @@ int Save_INI_reach_group(FILE * old_file,FILE * new_file,char * buffer,char * gr
strcpy(upper_buffer,buffer);
Load_INI_clear_string(upper_buffer, 0);
// On compare la chaîne avec le groupe recherché:
// On compare la chaîne avec le groupe recherché:
stop_seek=Load_INI_seek_pattern(upper_buffer,group_upper);
if (fprintf(new_file,"%s",buffer)<0)
{
@ -126,16 +126,16 @@ void Save_INI_set_value(char * dest,char * source,int nb_values_to_set,int * val
for (;source[source_index]==' ';source_index++)
dest[source_index]=source[source_index];
// Pour l'instant, la source et la destination en sont au même point:
// Pour l'instant, la source et la destination en sont au même point:
dest_index=source_index;
// Puis pour chaque valeur à recopier:
// Puis pour chaque valeur à recopier:
for (value_index=0;value_index<nb_values_to_set;value_index++)
{
// Dans la destination, on écrit la valeur:
// Dans la destination, on écrit la valeur:
if (litteral)
{
// La valeur doit être écrite sous la forme Yes/No
// La valeur doit être écrite sous la forme Yes/No
if (values[value_index])
{
@ -154,22 +154,22 @@ void Save_INI_set_value(char * dest,char * source,int nb_values_to_set,int * val
}
else
{
// La valeur doit être écrite sous forme numérique
// La valeur doit être écrite sous forme numérique
if (source[source_index]=='$')
{
// On va écrire la valeur sous forme hexadécimale:
// On va écrire la valeur sous forme hexadécimale:
// On commence par inscrire le symbole '$':
dest[dest_index]='$';
// Puis on y concatène la valeur:
// Puis on y concatène la valeur:
sprintf(dest+dest_index+1,"%x",values[value_index]);
dest_index+=strlen(dest+dest_index);
}
else
{
// On va écrire la valeur sous forme décimale:
// On va écrire la valeur sous forme décimale:
sprintf(dest+dest_index,"%d",values[value_index]);
dest_index+=strlen(dest+dest_index);
@ -181,16 +181,16 @@ void Save_INI_set_value(char * dest,char * source,int nb_values_to_set,int * val
if (value_index!=(nb_values_to_set-1))
{
// Il reste d'autres valeurs à écrire
// Il reste d'autres valeurs à écrire
// On recopie tous les caractères de la source jusqu'au suivant qui
// désigne une valeur:
// On recopie tous les caractères de la source jusqu'au suivant qui
// désigne une valeur:
for (;(!Save_INI_char_in_value_alphabet(source[source_index])) && (source[source_index]!='\0');source_index++,dest_index++)
dest[dest_index]=source[source_index];
}
else
{
// C'est la dernière valeur à initialiser
// C'est la dernière valeur à initialiser
// On recopie toute la fin de la ligne:
for (;source[source_index]!='\0';source_index++,dest_index++)
@ -219,10 +219,10 @@ void Save_INI_set_string(char * dest,char * source,char * value)
for (;source[source_index]==' ';source_index++)
dest[source_index]=source[source_index];
// Pour l'instant, la source et la destination en sont au même point:
// Pour l'instant, la source et la destination en sont au même point:
dest_index=source_index;
// Dans la destination, on écrit la valeur:
// Dans la destination, on écrit la valeur:
strcpy(dest+dest_index,value);
dest_index+=strlen(value);
@ -245,7 +245,7 @@ int Save_INI_set_strings(FILE * old_file,FILE * new_file,char * buffer,char * op
char * result_buffer;
//int buffer_index;
// On alloue les zones de mémoire:
// On alloue les zones de mémoire:
option_upper=(char *)malloc(1024);
upper_buffer=(char *)malloc(1024);
result_buffer=(char *)malloc(1024);
@ -254,7 +254,7 @@ int Save_INI_set_strings(FILE * old_file,FILE * new_file,char * buffer,char * op
if (value == NULL)
value="";
// On commence par se faire une version majuscule de l'option à rechercher:
// On commence par se faire une version majuscule de l'option à rechercher:
strcpy(option_upper,option_name);
Load_INI_clear_string(option_upper, 0);
@ -274,12 +274,12 @@ int Save_INI_set_strings(FILE * old_file,FILE * new_file,char * buffer,char * op
strcpy(upper_buffer,buffer);
Load_INI_clear_string(upper_buffer, 0);
// On compare la chaîne avec l'option recherchée:
// On compare la chaîne avec l'option recherchée:
stop_seek=Load_INI_seek_pattern(upper_buffer,option_upper);
if (stop_seek)
{
// On l'a trouvée:
// On l'a trouvée:
Save_INI_set_string(result_buffer,buffer,value);
if (fprintf(new_file,"%s",result_buffer)<0)
@ -292,7 +292,7 @@ int Save_INI_set_strings(FILE * old_file,FILE * new_file,char * buffer,char * op
}
else
{
// On l'a pas trouvée:
// On l'a pas trouvée:
if (fprintf(new_file,"%s",buffer)<0)
{
@ -320,12 +320,12 @@ int Save_INI_set_values(FILE * old_file,FILE * new_file,char * buffer,char * opt
char * result_buffer;
//int buffer_index;
// On alloue les zones de mémoire:
// On alloue les zones de mémoire:
option_upper=(char *)malloc(1024);
upper_buffer=(char *)malloc(1024);
result_buffer=(char *)malloc(1024);
// On commence par se faire une version majuscule de l'option à rechercher:
// On commence par se faire une version majuscule de l'option à rechercher:
strcpy(option_upper,option_name);
Load_INI_clear_string(option_upper, 0);
@ -346,12 +346,12 @@ int Save_INI_set_values(FILE * old_file,FILE * new_file,char * buffer,char * opt
strcpy(upper_buffer,buffer);
Load_INI_clear_string(upper_buffer, 0);
// On compare la chaîne avec l'option recherchée:
// On compare la chaîne avec l'option recherchée:
stop_seek=Load_INI_seek_pattern(upper_buffer,option_upper);
if (stop_seek)
{
// On l'a trouvée:
// On l'a trouvée:
Save_INI_set_value(result_buffer,buffer,nb_values_to_set,values,litteral);
if (fprintf(new_file,"%s",result_buffer)<0)
@ -364,7 +364,7 @@ int Save_INI_set_values(FILE * old_file,FILE * new_file,char * buffer,char * opt
}
else
{
// On l'a pas trouvée:
// On l'a pas trouvée:
if (fprintf(new_file,"%s",buffer)<0)
{
@ -407,14 +407,14 @@ int Save_INI(T_Config * conf)
int ini_file_exists;
int index;
// On alloue les zones de mémoire:
// On alloue les zones de mémoire:
buffer=(char *)malloc(1024);
// On calcule les noms des fichiers qu'on manipule:
strcpy(filename,Config_directory);
strcat(filename,INI_FILENAME);
// On vérifie si le fichier INI existe
// On vérifie si le fichier INI existe
if ((ini_file_exists = File_exists(filename)))
{
strcpy(temp_filename,Config_directory);
@ -428,7 +428,7 @@ int Save_INI(T_Config * conf)
goto Erreur_ERREUR_SAUVEGARDE_INI;
}
}
// On récupère un fichier INI "propre" à partir de gfx2def.ini
// On récupère un fichier INI "propre" à partir de gfx2def.ini
strcpy(ref_ini_file,Data_directory);
strcat(ref_ini_file,INIDEF_FILENAME);
old_file=fopen(ref_ini_file,"rb");

View File

@ -3,7 +3,7 @@
/* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2014 Sergii Pylypenko
Copyright 2011 Pawel Góralski
Copyright 2011 Pawel Góralski
Copyright 2008 Yves Rizoud
Copyright 2008 Franck Charlet
Copyright 2007 Adrien Destugues

View File

@ -3,7 +3,7 @@
/* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2014 Sergii Pylypenko
Copyright 2011 Pawel Góralski
Copyright 2011 Pawel Góralski
Copyright 2008 Peter Gordon
Copyright 2008 Yves Rizoud
Copyright 2008 Franck Charlet
@ -239,15 +239,15 @@ void Set_config_directory(const char * program_dir, char * config_dir)
strcat(config_dir,Config_SubDir);
if (Directory_exists(config_dir))
{
// Répertoire trouvé, ok
// Répertoire trouvé, ok
strcat(config_dir,PATH_SEPARATOR);
}
else
{
// Tentative de création
// Tentative de création
if (!Create_ConfigDirectory(config_dir))
{
// Réussi
// Réussi
strcat(config_dir,PATH_SEPARATOR);
}
else

View File

@ -2,7 +2,7 @@
*/
/* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2011 Pawel Góralski
Copyright 2011 Pawel Góralski
Copyright 2008 Peter Gordon
Copyright 2008 Yves Rizoud
Copyright 2008 Franck Charlet

View File

@ -110,7 +110,7 @@ void Shade_draw_grad_ranges(void)
{
// On regarde quel shade on va afficher en preview
shade_processed=((y_pos-start_y)*nb_shades)/y_size;
// Si ce n'est pas le shade précédemment traité on calcule ses infos
// Si ce n'est pas le shade précédemment traité on calcule ses infos
if (shade_processed>shade_processed_old)
{
// On commence par sauter tous les vides jusqu'au prochain shade
@ -161,7 +161,7 @@ void Tag_shades(word selection_start,word selection_end)
x_pos=Window_pos_X+(Menu_factor_X*((column<<2)+8));
y_pos=Window_pos_Y+(Menu_factor_Y*((line*7)+131));
// On regarde si la case est "disablée"
// On regarde si la case est "disablée"
if (Shade_list[Shade_current].List[position]&0x8000)
{
if ((position>=selection_start) && (position<=selection_end))
@ -172,7 +172,7 @@ void Tag_shades(word selection_start,word selection_end)
else
Block(x_pos,y_pos,Menu_factor_X<<2,Menu_factor_Y<<1,MC_White);
}
else // "enablée"
else // "enablée"
{
if ((position>=selection_start) && (position<=selection_end))
Block(x_pos,y_pos,Menu_factor_X<<2,Menu_factor_Y<<1,MC_Black);
@ -294,8 +294,8 @@ void Insert_shade(byte first_color, byte last_color, word selection_start)
first_color=temp;
}
// Avant d'insérer quoi que ce soit, on efface les éventuelles couleurs que
// l'on va réinsérer:
// Avant d'insérer quoi que ce soit, on efface les éventuelles couleurs que
// l'on va réinsérer:
limit=512-selection_start;
for (cursor=0; cursor<512; cursor++)
{
@ -305,7 +305,7 @@ void Insert_shade(byte first_color, byte last_color, word selection_start)
&& ((Shade_list[Shade_current].List[cursor]&0xFF)==temp) )
Shade_list[Shade_current].List[cursor]=(Shade_list[Shade_current].List[cursor]&0x8000)|0x0100;
}
// Voilà... Maintenant on peut y aller peinard.
// Voilà... Maintenant on peut y aller peinard.
temp=1+last_color-first_color;
limit=selection_start+temp;
@ -383,7 +383,7 @@ void Swap_shade(short block_1_start,short block_2_start,short block_size)
temp_shade=(word *)malloc(512*sizeof(word));
memcpy(temp_shade,Shade_list[Shade_current].List,512*sizeof(word));
// On calcul les dernières couleurs de chaque bloc.
// On calcul les dernières couleurs de chaque bloc.
end_1=block_1_start+block_size-1;
end_2=block_2_start+block_size-1;
@ -394,7 +394,7 @@ void Swap_shade(short block_1_start,short block_2_start,short block_size)
{
// Il faut transformer la case pos_1 en pos_2:
Shade_list[Shade_current].List[pos_1]=temp_shade[pos_2];
// On gère la mise à jour de pos_2
// On gère la mise à jour de pos_2
if (pos_2==end_2)
pos_2=block_1_start;
else
@ -404,12 +404,12 @@ void Swap_shade(short block_1_start,short block_2_start,short block_size)
else
if ((block_2_start<block_1_start) && (end_2>=block_1_start))
{
// Le bloc destination déborde dans le bloc source.
// Le bloc destination déborde dans le bloc source.
for (pos_1=block_2_start,pos_2=block_1_start;pos_1<=end_1;pos_1++)
{
// Il faut transformer la couleur pos_1 en pos_2:
Shade_list[Shade_current].List[pos_1]=temp_shade[pos_2];
// On gère la mise à jour de pos_2
// On gère la mise à jour de pos_2
if (pos_2==end_1)
pos_2=block_2_start;
else
@ -421,7 +421,7 @@ void Swap_shade(short block_1_start,short block_2_start,short block_size)
// Le bloc source et le bloc destination sont distincts.
for (pos_1=block_1_start,pos_2=block_2_start;pos_1<=end_1;pos_1++,pos_2++)
{
// On échange les cases
// On échange les cases
temp =Shade_list[Shade_current].List[pos_1];
Shade_list[Shade_current].List[pos_1]=Shade_list[Shade_current].List[pos_2];
Shade_list[Shade_current].List[pos_2]=temp;
@ -434,9 +434,9 @@ void Swap_shade(short block_1_start,short block_2_start,short block_size)
int Menu_shade(void)
{
short clicked_button; // Numéro du bouton sur lequel l'utilisateur a clické
char str[4]; // str d'affichage du n° de shade actif et du Pas
word old_mouse_x, old_mouse_x2; // Mémo. de l'ancienne pos. du curseur
short clicked_button; // Numéro du bouton sur lequel l'utilisateur a clické
char str[4]; // str d'affichage du n° de shade actif et du Pas
word old_mouse_x, old_mouse_x2; // Mémo. de l'ancienne pos. du curseur
word old_mouse_y, old_mouse_y2;
byte old_mouse_k, old_mouse_k2;
byte temp_color; // Variables de gestion des clicks dans la palette
@ -458,52 +458,52 @@ int Menu_shade(void)
undo_buffer =(word *)malloc(512*sizeof(word));
temp_ptr=(word *)malloc(512*sizeof(word));
// Ouverture de la fenêtre du menu
// Ouverture de la fenêtre du menu
Open_window(310,190,"Shade");
// Déclaration & tracé du bouton de palette
// Déclaration & tracé du bouton de palette
Window_set_palette_button(5,16); // 1
// Déclaration & tracé du scroller de sélection du n° de dégradé
// Déclaration & tracé du scroller de sélection du n° de dégradé
Window_set_scroller_button(192,17,84,8,1,Shade_current); // 2
// Déclaration & tracé de la zone de définition des dégradés
// Déclaration & tracé de la zone de définition des dégradés
Window_set_special_button(8,127,256,53,0); // 3
// Déclaration & tracé des boutons de sortie
// Déclaration & tracé des boutons de sortie
Window_set_normal_button(207,17,51,14,"Cancel",0,1,KEY_ESC); // 4
Window_set_normal_button(261,17,43,14,"OK" ,0,1,SDLK_RETURN); // 5
// Déclaration & tracé des boutons de copie de shade
// Déclaration & tracé des boutons de copie de shade
Window_set_normal_button(206,87,27,14,"Cpy" ,1,1,SDLK_c); // 6
Window_set_normal_button(234,87,43,14,"Paste" ,1,1,SDLK_p); // 7
// On tagge le bloc
Tag_color_range(Fore_color,Fore_color);
// Tracé d'un cadre creux autour du bloc dégradé
// Tracé d'un cadre creux autour du bloc dégradé
Window_display_frame_in(171,26,18,66);
Window_rectangle(172,27,16,64,MC_Black);
// Tracé d'un cadre creux autour de tous les dégradés
// Tracé d'un cadre creux autour de tous les dégradés
Window_display_frame_in(223,34,66,50);
Shade_draw_grad_ranges();
// Tracé d'un cadre autour de la zone de définition de dégradés
// Tracé d'un cadre autour de la zone de définition de dégradés
Window_display_frame(5,124,262,61);
Display_all_shade(first_color,last_color,selection_start,selection_end);
// Déclaration & tracé des boutons d'édition de shade
// Déclaration & tracé des boutons d'édition de shade
Window_set_normal_button( 6,107,27,14,"Ins" ,0,1,SDLK_INSERT); // 8
Window_set_normal_button( 38,107,27,14,"Del" ,0,1,SDLK_DELETE); // 9
Window_set_normal_button( 66,107,43,14,"Blank",1,1,SDLK_b); // 10
Window_set_normal_button(110,107,27,14,"Inv" ,1,1,SDLK_i); // 11
Window_set_normal_button(138,107,27,14,"Swp" ,1,1,SDLK_s); // 12
// Déclaration & tracé des boutons de taggage
// Déclaration & tracé des boutons de taggage
Print_in_window(268,123,"Disbl"/*"Dsabl"*/,MC_Dark,MC_Light);
Window_set_normal_button(274,133,27,14,"Set" ,0,1,SDLK_F1); // 13
Window_set_normal_button(274,148,27,14,"Clr" ,0,1,SDLK_F2); // 14
// Déclaration & tracé de la zone de saisie du pas
// Déclaration & tracé de la zone de saisie du pas
Print_in_window(272,165,"Step",MC_Dark,MC_Light);
input_button = Window_set_input_button(274,174,3); // 15
Num2str(Shade_list[Shade_current].Step,str,3);
@ -517,7 +517,7 @@ int Menu_shade(void)
// Button Mode
Window_set_normal_button(244,107,60,14,"",0,1,SDLK_TAB); // 18
// Affichage du n° de shade actif
// Affichage du n° de shade actif
Num2str(Shade_current+1,str,1);
Print_in_window(210,55,str,MC_Black,MC_Light);
@ -550,11 +550,11 @@ int Menu_shade(void)
if (!old_mouse_k)
{ // On vient de clicker
// On met à jour l'intervalle du Shade
// On met à jour l'intervalle du Shade
first_color=last_color=temp_color;
// On tagge le bloc
Tag_color_range(first_color,last_color);
// Tracé du bloc dégradé:
// Tracé du bloc dégradé:
Display_grad_block_in_window(172,27,16,64,first_color,last_color);
}
else
@ -577,7 +577,7 @@ int Menu_shade(void)
}
}
// On affiche le numéro de la couleur sélectionnée
// On affiche le numéro de la couleur sélectionnée
Display_selected_color(first_color,last_color);
Display_cursor();
@ -587,20 +587,20 @@ int Menu_shade(void)
case 2 : // Gestion du changement de Shade (scroller)
Hide_cursor();
Shade_current=Window_attribute2;
// Affichade du n° de shade actif
// Affichade du n° de shade actif
Num2str(Shade_current+1,str,1);
Print_in_window(210,55,str,MC_Black,MC_Light);
// Affichade du Pas
Num2str(Shade_list[Shade_current].Step,str,3);
Print_in_window(276,176,str,MC_Black,MC_Light);
// Tracé du bloc dégradé:
// Tracé du bloc dégradé:
Display_all_shade(first_color,last_color,selection_start,selection_end);
Display_cursor();
// On place le nouveau shade dans le buffer du Undo
memcpy(undo_buffer,Shade_list[Shade_current].List,512*sizeof(word));
break;
case 3 : // Gestion de la zone de définition de shades
case 3 : // Gestion de la zone de définition de shades
if (((((Mouse_Y-Window_pos_Y)/Menu_factor_Y)-127)%7)<4)
if ( (Mouse_X!=old_mouse_x2) || (Mouse_Y!=old_mouse_y2) || (Mouse_K!=old_mouse_k2) )
{
@ -645,12 +645,12 @@ int Menu_shade(void)
else
temp=first_color-last_color;
if (selection_start==selection_end) // Une couleur sélectionnée
if (selection_start==selection_end) // Une couleur sélectionnée
{
if (Window_attribute1==2)
Remove_shade(selection_start,selection_start+temp);
}
else // Un bloc sélectionné
else // Un bloc sélectionné
{
Remove_shade(selection_start,selection_end);
@ -677,7 +677,7 @@ int Menu_shade(void)
}
Insert_shade(first_color,last_color,selection_start);
// On sélectionne la position juste après ce qu'on vient d'insérer
// On sélectionne la position juste après ce qu'on vient d'insérer
selection_start+=temp+1;
if (selection_start>=512)
selection_start=511;
@ -782,7 +782,7 @@ int Menu_shade(void)
// On place le shade dans le buffer du Undo
memcpy(undo_buffer,Shade_list[Shade_current].List,512*sizeof(word));
// Et on le modifie
// On échange le bloc avec sa destination
// On échange le bloc avec sa destination
if (selection_start<=selection_end)
{
temp=(temp_cell+selection_end-selection_start<512)?selection_end+1-selection_start:512-temp_cell;
@ -793,7 +793,7 @@ int Menu_shade(void)
temp=(temp_cell+selection_start-selection_end<512)?selection_start+1-selection_end:512-temp_cell;
Swap_shade(selection_end,temp_cell,temp);
}
// On place la sélection sur la nouvelle position du bloc
// On place la sélection sur la nouvelle position du bloc
selection_start=temp_cell;
selection_end=selection_start+temp-1;
// Et on raffiche tout
@ -883,8 +883,8 @@ int Menu_shade(void)
if (!Mouse_K)
switch (Key)
{
case SDLK_LEFTBRACKET : // Décaler couleur dans palette vers la gauche
case SDLK_RIGHTBRACKET : // Décaler couleur dans palette vers la droite
case SDLK_LEFTBRACKET : // Décaler couleur dans palette vers la gauche
case SDLK_RIGHTBRACKET : // Décaler couleur dans palette vers la droite
if (first_color==last_color)
{
if (Key==SDLK_LEFTBRACKET)
@ -902,7 +902,7 @@ int Menu_shade(void)
Block(Window_pos_X+(Menu_factor_X*172),
Window_pos_Y+(Menu_factor_Y*27),
Menu_factor_X<<4,Menu_factor_Y*64,first_color);
// On affiche le numéro de la couleur sélectionnée
// On affiche le numéro de la couleur sélectionnée
Display_selected_color(first_color,last_color);
Display_cursor();
}
@ -957,7 +957,7 @@ int Menu_shade(void)
Key=0;
break;
case SDLK_BACKQUOTE : // Récupération d'une couleur derrière le menu
case SDLK_BACKQUOTE : // Récupération d'une couleur derrière le menu
case SDLK_COMMA :
Get_color_behind_window(&color,&click);
if (click)
@ -965,14 +965,14 @@ int Menu_shade(void)
Hide_cursor();
temp_color=color;
// On met à jour l'intervalle du Shade
// On met à jour l'intervalle du Shade
first_color=last_color=temp_color;
// On tagge le bloc
Tag_color_range(first_color,last_color);
// Tracé du bloc dégradé:
// Tracé du bloc dégradé:
Display_grad_block_in_window(172,27,16,64,first_color,last_color);
// On affiche le numéro de la couleur sélectionnée
// On affiche le numéro de la couleur sélectionnée
Display_selected_color(first_color,last_color);
Display_cursor();
@ -1004,11 +1004,11 @@ int Menu_shade(void)
/// @return true if user clicked ok, false if he cancelled
int Shade_settings_menu(void)
{
T_Shade * initial_shade_list; // Anciennes données des shades
byte old_shade; // old n° de shade actif
T_Shade * initial_shade_list; // Anciennes données des shades
byte old_shade; // old n° de shade actif
int return_code;
// Backup des anciennes données
// Backup des anciennes données
initial_shade_list=(T_Shade *)malloc(sizeof(Shade_list));
memcpy(initial_shade_list,Shade_list,sizeof(Shade_list));
old_shade=Shade_current;
@ -1052,7 +1052,7 @@ void Button_Quick_shade_menu(void)
int temp;
char str[4];
byte step_backup=Quick_shade_step; // Backup des
byte loop_backup=Quick_shade_loop; // anciennes données
byte loop_backup=Quick_shade_loop; // anciennes données
T_Special_button * step_button;
Open_window(142,56,"Quick-shade");
@ -1062,7 +1062,7 @@ void Button_Quick_shade_menu(void)
Window_set_normal_button(76,18,60,14,"",0,1,SDLK_TAB); // 3
Display_shade_mode(83,21,Quick_shade_loop);
// Déclaration & tracé de la zone de saisie du pas
// Déclaration & tracé de la zone de saisie du pas
Print_in_window(5,21,"Step",MC_Dark,MC_Light);
step_button = Window_set_input_button(40,19,3); // 4
Num2str(Quick_shade_step,str,3);
@ -1121,7 +1121,7 @@ void Button_Quick_shade_menu(void)
}
else // OK
{
// Si avant de rentrer dans le menu on n'était pas en mode Quick-Shade
// Si avant de rentrer dans le menu on n'était pas en mode Quick-Shade
if (!Quick_shade_mode)
Button_Quick_shade_mode(); // => On y passe (cool!)
}

View File

@ -35,7 +35,7 @@
//---------------------- Modifier le pinceau spécial -------------------------
//---------------------- Modifier le pinceau spécial -------------------------
void Set_paintbrush_size(int width, int height)
{
@ -295,7 +295,7 @@ void Special_previous_user_backcolor(void)
Display_cursor();
}
// ------------------- Scroller l'écran (pas en mode loupe) ------------------
// ------------------- Scroller l'écran (pas en mode loupe) ------------------
void Scroll_screen(short delta_x,short delta_y)
{
short temp_x_offset;
@ -329,7 +329,7 @@ void Scroll_screen(short delta_x,short delta_y)
}
// ---------------------- Scroller la fenêtre de la loupe --------------------
// ---------------------- Scroller la fenêtre de la loupe --------------------
void Scroll_magnifier(short delta_x,short delta_y)
{
short temp_x_offset;
@ -358,7 +358,7 @@ void Scroll_magnifier(short delta_x,short delta_y)
}
// -------------- Changer le Zoom (grâce aux touches [+] et [-]) -------------
// -------------- Changer le Zoom (grâce aux touches [+] et [-]) -------------
void Zoom(short delta)
{
short index;

View File

@ -3,7 +3,7 @@
/* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2014 Sergii Pylypenko
Copyright 2011 Pawel Góralski
Copyright 2011 Pawel Góralski
Copyright 2008 Yves Rizoud
Copyright 2007 Adrien Destugues
Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud)
@ -386,11 +386,11 @@ typedef struct
} T_Config;
// Structures utilisées pour les descriptions de pages et de liste de pages.
// Lorsqu'on gèrera les animations, il faudra aussi des listes de listes de
// Structures utilisées pour les descriptions de pages et de liste de pages.
// Lorsqu'on gèrera les animations, il faudra aussi des listes de listes de
// pages.
// Ces structures sont manipulées à travers des fonctions de gestion du
// Ces structures sont manipulées à travers des fonctions de gestion du
// backup dans "graph.c".
typedef struct T_Image

View File

@ -3,7 +3,7 @@
/* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2014 Sergii Pylypenko
Copyright 2011 Pawel Góralski
Copyright 2011 Pawel Góralski
Copyright 2008 Yves Rizoud
Copyright 2008 Franck Charlet
Copyright 2008 Adrien Destugues
@ -23,7 +23,7 @@
along with Grafx2; if not, see <http://www.gnu.org/licenses/>
*/
// Pour désactiver le support TrueType, définir NOTTF
// Pour désactiver le support TrueType, définir NOTTF
// To disable TrueType support, define NOTTF
#include <string.h>
@ -77,15 +77,15 @@ typedef struct T_Font
int Is_bitmap;
char Label[22];
// Liste chainée simple
// Liste chainée simple
struct T_Font * Next;
struct T_Font * Previous;
} T_Font;
// Liste chainée des polices de texte
// Liste chainée des polices de texte
T_Font * font_list_start;
int Nb_fonts;
// Inspiré par Allegro
// Inspiré par Allegro
#define EXTID(a,b,c) ((((a)&255)<<16) | (((b)&255)<<8) | (((c)&255)))
#define EXTID4(a,b,c,d) ((((a)&255)<<24) | (((b)&255)<<16) | (((c)&255)<<8) | (((d)&255)))
@ -98,14 +98,14 @@ int Compare_fonts(T_Font * font_1, T_Font * font_2)
return strcmp(font_1->Label, font_2->Label);
}
// Ajout d'une fonte à la liste.
// Ajout d'une fonte à la liste.
static void Add_font(const char *name, const char * font_name)
{
T_Font * font;
int size=strlen(name)+1;
int index;
// Détermination du type:
// Détermination du type:
#if defined(__macosx__)
char strFontName[512];
@ -211,7 +211,7 @@ static void Add_font(const char *name, const char * font_name)
searched_font=font_list_start;
while (searched_font->Next && (compare=Compare_fonts(font, searched_font->Next))>0)
searched_font=searched_font->Next;
// Après searched_font
// Après searched_font
if (compare==0 && strcmp(font->Name, searched_font->Next->Name)==0)
{
// Doublon
@ -227,7 +227,7 @@ static void Add_font(const char *name, const char * font_name)
}
// Trouve le nom d'une fonte par son numéro
// Trouve le nom d'une fonte par son numéro
char * Font_name(int index)
{
T_Font *font = font_list_start;
@ -239,7 +239,7 @@ char * Font_name(int index)
}
// Trouve le libellé d'affichage d'une fonte par son numéro
// Trouve le libellé d'affichage d'une fonte par son numéro
// Renvoie un pointeur sur un buffer statique de 20 caracteres.
char * Font_label(int index)
{
@ -255,13 +255,13 @@ char * Font_label(int index)
while (index--)
font = font->Next;
// Libellé
// Libellé
strcpy(label, font->Label);
return label;
}
// Vérifie si une fonte donnée est TrueType
// Vérifie si une fonte donnée est TrueType
int TrueType_font(int index)
{
T_Font *font = font_list_start;
@ -274,7 +274,7 @@ int TrueType_font(int index)
// Initialisation à faire une fois au début du programme
// Initialisation à faire une fois au début du programme
void Init_text(void)
{
char directory_name[MAX_PATH_CHARACTERS];
@ -286,7 +286,7 @@ void Init_text(void)
// Initialisation des fontes
font_list_start = NULL;
Nb_fonts=0;
// Parcours du répertoire "fonts"
// Parcours du répertoire "fonts"
snprintf(directory_name, sizeof(directory_name), "%s%s", Data_directory,FONTS_SUBDIRECTORY);
For_each_file(directory_name, Add_font);
// fonts subdirectory in Config_directory
@ -294,7 +294,7 @@ void Init_text(void)
For_each_file(directory_name, Add_font);
#if defined(__WIN32__)
// Parcours du répertoire systeme windows "fonts"
// Parcours du répertoire systeme windows "fonts"
#ifndef NOTTF
{
char * WindowsPath=getenv("windir");
@ -306,7 +306,7 @@ void Init_text(void)
}
#endif
#elif defined(__macosx__)
// Récupération de la liste des fonts avec fontconfig
// Récupération de la liste des fonts avec fontconfig
#ifndef NOTTF
@ -375,7 +375,7 @@ void Init_text(void)
#endif
}
// Informe si texte.c a été compilé avec l'option de support TrueType ou pas.
// Informe si texte.c a été compilé avec l'option de support TrueType ou pas.
int TrueType_is_supported()
{
#ifdef NOTTF
@ -662,8 +662,8 @@ byte *Render_text_SFont(const char *str, int font_number, int *width, int *heigh
return new_brush;
}
// Crée une brosse à partir des paramètres de texte demandés.
// Si cela réussit, la fonction place les dimensions dans width et height,
// Crée une brosse à partir des paramètres de texte demandés.
// Si cela réussit, la fonction place les dimensions dans width et height,
// et retourne l'adresse du bloc d'octets.
byte *Render_text(const char *str, int font_number, int size, int antialias, int bold, int italic, int *width, int *height, T_Palette palette)
{

View File

@ -355,13 +355,13 @@ void Button_Transform_menu(int btn)
break;
case 2 : // Flip X
case 3 : // Flip Y
case 6 : // 180° Rotation
case 6 : // 180° Rotation
new_width=Main.image_width;
new_height=Main.image_height;
break;
case 4 : // -90° Rotation
case 5 : // +90° Rotation
case 4 : // -90° Rotation
case 5 : // +90° Rotation
new_width=Main.image_height;
new_height=Main.image_width;
@ -398,19 +398,19 @@ void Button_Transform_menu(int btn)
Flip_Y_lowlevel(Main.backups->Pages->Image[i].Pixels, Main.image_width, Main.image_height);
}
break;
case 4 : // -90° Rotation
case 4 : // -90° Rotation
for (i=0; i<Main.backups->Pages->Nb_layers; i++)
{
Rotate_270_deg_lowlevel(Main.backups->Pages->Next->Image[i].Pixels, Main.backups->Pages->Image[i].Pixels, old_width, old_height);
}
break;
case 5 : // +90° Rotation
case 5 : // +90° Rotation
for (i=0; i<Main.backups->Pages->Nb_layers; i++)
{
Rotate_90_deg_lowlevel(Main.backups->Pages->Next->Image[i].Pixels, Main.backups->Pages->Image[i].Pixels, old_width, old_height);
}
break;
case 6 : // 180° Rotation
case 6 : // 180° Rotation
for (i=0; i<Main.backups->Pages->Nb_layers; i++)
{
memcpy(Main.backups->Pages->Image[i].Pixels,Main.backups->Pages->Next->Image[i].Pixels,Main.image_width*Main.image_height);

View File

@ -62,9 +62,9 @@ T_Menu_Bar Menu_bars[MENUBAR_COUNT] =
/// Width of one layer button, in pixels before scaling
word Layer_button_width = 1;
// L'encapsulation tente une percée...ou un dernier combat.
// L'encapsulation tente une percée...ou un dernier combat.
// Nombre de cellules réel dans la palette du menu
// Nombre de cellules réel dans la palette du menu
word Menu_cells_X;
word Palette_cells_X()
{
@ -90,42 +90,42 @@ void Pixel_in_menu_and_skin(word bar, word x, word y, byte color)
Menu_bars[bar].Skin[2][y*Menu_bars[bar].Skin_width + x] = color;
}
// Affichage d'un pixel dans la fenêtre (la fenêtre doit être visible)
// Affichage d'un pixel dans la fenêtre (la fenêtre doit être visible)
void Pixel_in_window(word x,word y,byte color)
{
Block((x*Menu_factor_X)+Window_pos_X,(y*Menu_factor_Y)+Window_pos_Y,Menu_factor_X,Menu_factor_Y,color);
}
// Affichage d'un rectangle dans la fenêtre (la fenêtre doit être visible)
// Affichage d'un rectangle dans la fenêtre (la fenêtre doit être visible)
void Window_rectangle(word x_pos,word y_pos,word width,word height,byte color)
{
Block((x_pos*Menu_factor_X)+Window_pos_X,(y_pos*Menu_factor_Y)+Window_pos_Y,width*Menu_factor_X,height*Menu_factor_Y,color);
}
// -- Affichages de différents cadres dans une fenêtre -----------------------
// -- Affichages de différents cadres dans une fenêtre -----------------------
// -- Frame général avec couleurs paramètrables --
// -- Frame général avec couleurs paramètrables --
void Window_display_frame_generic(word x_pos,word y_pos,word width,word height,
byte color_tl,byte color_br,byte color_s,byte color_tlc,byte color_brc)
// Paramètres de couleurs:
// Paramètres de couleurs:
// color_tl =Bords Haut et Gauche
// color_br =Bords Bas et Droite
// color_s =Coins Haut-Droite et Bas-Gauche
// color_tlc=Coin Haut-Gauche
// color_brc=Coin Bas-Droite
{
// Bord haut (sans les extrémités)
// Bord haut (sans les extrémités)
Window_rectangle(x_pos+1,y_pos,width-2,1,color_tl);
// Bord bas (sans les extrémités)
// Bord bas (sans les extrémités)
Window_rectangle(x_pos+1,y_pos+height-1,width-2,1,color_br);
// Bord gauche (sans les extrémités)
// Bord gauche (sans les extrémités)
Window_rectangle(x_pos, y_pos+1,1,height-2,color_tl);
// Bord droite (sans les extrémités)
// Bord droite (sans les extrémités)
Window_rectangle(x_pos+width-1,y_pos+1,1,height-2,color_br);
// Coin haut gauche
@ -145,21 +145,21 @@ void Window_display_frame_mono(word x_pos,word y_pos,word width,word height,byte
Window_display_frame_generic(x_pos,y_pos,width,height,color,color,color,color,color);
}
// -- Frame creux: foncé en haut-gauche et clair en bas-droite --
// -- Frame creux: foncé en haut-gauche et clair en bas-droite --
void Window_display_frame_in(word x_pos,word y_pos,word width,word height)
{
Window_display_frame_generic(x_pos,y_pos,width,height,MC_Dark,MC_White,MC_Light,MC_Dark,MC_White);
}
// -- Frame bombé: clair en haut-gauche et foncé en bas-droite --
// -- Frame bombé: clair en haut-gauche et foncé en bas-droite --
void Window_display_frame_out(word x_pos,word y_pos,word width,word height)
{
Window_display_frame_generic(x_pos,y_pos,width,height,MC_White,MC_Dark,MC_Light,MC_White,MC_Dark);
}
// -- Frame de séparation: un cadre bombé dans un cadre creux (3D!!!) --
// -- Frame de séparation: un cadre bombé dans un cadre creux (3D!!!) --
void Window_display_frame(word x_pos,word y_pos,word width,word height)
{
@ -168,7 +168,7 @@ void Window_display_frame(word x_pos,word y_pos,word width,word height)
}
//-- Affichages relatifs à la palette dans le menu ---------------------------
//-- Affichages relatifs à la palette dans le menu ---------------------------
// -- Affichage des couleurs courante (fore/back) de pinceau dans le menu --
@ -438,19 +438,19 @@ void Change_palette_cells()
{
Menu_palette_cell_width = ((Screen_width/Menu_factor_X)-(MENU_WIDTH+2)) / Menu_cells_X;
// Si ça tient, c'est bon. Sinon, on retente avec une colonne de moins
// Si ça tient, c'est bon. Sinon, on retente avec une colonne de moins
if (Menu_palette_cell_width>2)
break;
Menu_cells_X--;
}
// Cale First_color_in_palette sur un multiple du nombre de cellules (arrondi inférieur)
// Cale First_color_in_palette sur un multiple du nombre de cellules (arrondi inférieur)
if (Config.Palette_vertical)
First_color_in_palette=First_color_in_palette/Menu_cells_X*Menu_cells_X;
else
First_color_in_palette=First_color_in_palette/Menu_cells_Y*Menu_cells_Y;
// Si le nombre de cellules a beaucoup augmenté et qu'on était près de
// Si le nombre de cellules a beaucoup augmenté et qu'on était près de
// la fin, il faut reculer First_color_in_palette pour montrer plein
// de couleurs.
if ((int)First_color_in_palette+(Menu_cells_Y)*Menu_cells_X*2>=256)
@ -461,17 +461,17 @@ void Change_palette_cells()
First_color_in_palette=255/Menu_cells_Y*Menu_cells_Y-(Menu_cells_X-1)*Menu_cells_Y;
}
// Mise à jour de la taille du bouton dans le menu. C'est pour pas que
// Mise à jour de la taille du bouton dans le menu. C'est pour pas que
// la bordure noire soit active.
Buttons_Pool[BUTTON_CHOOSE_COL].Width=(Menu_palette_cell_width*Menu_cells_X)-1;
Buttons_Pool[BUTTON_CHOOSE_COL].Height=(MENU_HEIGHT-9)/Menu_cells_Y*Menu_cells_Y-1;
}
// Retrouve la couleur sur laquelle pointe le curseur souris.
// Cette fonction suppose qu'on a déja vérifié que le curseur est dans
// Cette fonction suppose qu'on a déja vérifié que le curseur est dans
// la zone rectangulaire du BUTTON_CHOOSE_COL
// La fonction renvoie -1 si on est "trop à gauche" (pas possible)
// ou après la couleur 255 (Ce qui peut arriver si la palette est affichée
// La fonction renvoie -1 si on est "trop à gauche" (pas possible)
// ou après la couleur 255 (Ce qui peut arriver si la palette est affichée
// avec un nombre de lignes qui n'est pas une puissance de deux.)
int Pick_color_in_palette()
{
@ -870,7 +870,7 @@ static const byte * Get_font_character_pixel(unsigned int c)
}
}
// -- Afficher une chaîne n'importe où à l'écran --
// -- Afficher une chaîne n'importe où à l'écran --
void Print_general(short x,short y,const char * str,byte text_color,byte background_color)
{
@ -889,7 +889,7 @@ void Print_general(short x,short y,const char * str,byte text_color,byte backgro
real_x=0; // Position dans le buffer
for (index=0;str[index]!='\0';index++)
{
// Pointeur sur le premier pixel du caractère
// Pointeur sur le premier pixel du caractère
font_pixel=Menu_font+((unsigned char)str[index]<<6);
for (x_pos=0;x_pos<8;x_pos+=1)
for (repeat_menu_x_factor=0;repeat_menu_x_factor<Menu_factor_X*Pixel_width;repeat_menu_x_factor++)
@ -1093,11 +1093,11 @@ void Print_filename(void)
}
}
// Fonction d'affichage d'une chaine numérique avec une fonte très fine
// Spécialisée pour les compteurs RGB
// Fonction d'affichage d'une chaine numérique avec une fonte très fine
// Spécialisée pour les compteurs RGB
void Print_counter(short x,short y,const char * str,byte text_color,byte background_color)
{
// Macros pour écrire des litteraux binaires.
// Macros pour écrire des litteraux binaires.
// Ex: Ob(11110000) == 0xF0
#define Ob(x) ((unsigned)Ob_(0 ## x ## uL))
#define Ob_(x) ((x & 1) | (x >> 2 & 2) | (x >> 4 & 4) | (x >> 6 & 8) | \
@ -1554,10 +1554,10 @@ void Display_paintbrush_in_menu(void)
Draw_menu_button(BUTTON_PAINTBRUSHES,BUTTON_RELEASED);
}
// -- Dessiner un pinceau prédéfini dans la fenêtre --
// -- Dessiner un pinceau prédéfini dans la fenêtre --
void Display_paintbrush_in_window(word x,word y,int number)
// Pinceau = 0..NB_PAINTBRUSH_SPRITES-1 : Pinceau prédéfini
// Pinceau = 0..NB_PAINTBRUSH_SPRITES-1 : Pinceau prédéfini
{
word x_pos;
word y_pos;
@ -1588,7 +1588,7 @@ void Display_paintbrush_in_window(word x,word y,int number)
if (Paintbrush[number].Sprite[y_pos][x_pos])
Block(origin_x+window_x_pos*x_size,origin_y+window_y_pos*y_size,x_size,y_size,MC_Black);
// On n'utilise pas Pixel_in_window() car on ne dessine pas
// forcément avec la même taille de pixel.
// forcément avec la même taille de pixel.
Update_rect( ToWinX(origin_x), ToWinY(origin_y),
ToWinL(Paintbrush[number].Width),
@ -1611,7 +1611,7 @@ void Draw_thingumajig(word x,word y, byte color, short direction)
Pixel_in_window(x,y+5,color);
}
// -- Dessiner un bloc de couleurs dégradé verticalement
// -- Dessiner un bloc de couleurs dégradé verticalement
void Display_grad_block_in_window(word x_pos,word y_pos,word width,word height,word block_start,word block_end)
{
@ -1641,7 +1641,7 @@ void Display_grad_block_in_window(word x_pos,word y_pos,word width,word height,w
// -- Dessiner un petit sprite représentant le type d'un drive --
// -- Dessiner un petit sprite représentant le type d'un drive --
void Window_display_icon_sprite(word x_pos,word y_pos,byte type)
{
@ -1657,15 +1657,15 @@ void Window_display_icon_sprite(word x_pos,word y_pos,byte type)
void Display_menu_palette_avoiding_window(byte * table)
{
// On part du principe qu'il n'y a que le bas d'une fenêtre qui puisse
// empiéter sur la palette... Et c'est déjà pas mal!
// On part du principe qu'il n'y a que le bas d'une fenêtre qui puisse
// empiéter sur la palette... Et c'est déjà pas mal!
word color,real_color;
word start_x,start_y;
word end_x,end_y;
word width;
word height;
word corner_x=Window_pos_X+Window_width*Menu_factor_X; // |_ Coin bas-droit
word corner_y=Window_pos_Y+Window_height*Menu_factor_Y; // | de la fenêtre +1
word corner_y=Window_pos_Y+Window_height*Menu_factor_Y; // | de la fenêtre +1
if (Config.Separate_colors)
{
@ -1687,8 +1687,8 @@ void Display_menu_palette_avoiding_window(byte * table)
end_x=start_x+width;
end_y=start_y+height;
// On affiche le bloc en entier si on peut, sinon on le découpe autour
// de la fenêtre.
// On affiche le bloc en entier si on peut, sinon on le découpe autour
// de la fenêtre.
if ( (start_y>=corner_y) || (end_x<=Window_pos_X) || (start_x>=corner_x) )
Block(start_x,start_y,width,height,real_color);
else
@ -1742,12 +1742,12 @@ void Display_menu_palette_avoiding_window(byte * table)
}
{
// Affichage du bloc directement dans le "buffer de fond" de la fenetre.
// Cela permet au bloc de couleur d'apparaitre si on déplace la fenetre.
// Cela permet au bloc de couleur d'apparaitre si on déplace la fenetre.
short x_pos;
short y_pos;
short relative_x; // besoin d'une variable signée
short relative_y; // besoin d'une variable signée
// Attention aux unités
short relative_x; // besoin d'une variable signée
short relative_y; // besoin d'une variable signée
// Attention aux unités
relative_x = ((short)start_x - (short)Window_pos_X);
relative_y = ((short)start_y - (short)Window_pos_Y);
@ -1761,15 +1761,15 @@ void Display_menu_palette_avoiding_window(byte * table)
Update_rect(MENU_WIDTH*Menu_factor_X,Menu_Y_before_window,Screen_width-(MENU_WIDTH*Menu_factor_X),(Menu_height-11)*Menu_factor_Y);
}
// -------- Calcul des bornes de la partie d'image visible à l'écran ---------
// -------- Calcul des bornes de la partie d'image visible à l'écran ---------
void Compute_limits(void)
/*
Avant l'appel à cette fonction, les données de la loupe doivent être à jour.
Avant l'appel à cette fonction, les données de la loupe doivent être à jour.
*/
{
if (Main.magnifier_mode)
{
// -- Calcul des limites de la partie non zoomée de l'image --
// -- Calcul des limites de la partie non zoomée de l'image --
Limit_top =Main.offset_Y;
Limit_left=Main.offset_X;
Limit_visible_bottom =Limit_top+Menu_Y-1;
@ -1785,7 +1785,7 @@ void Compute_limits(void)
else
Limit_right=Limit_visible_right;
// -- Calcul des limites de la partie zoomée de l'image --
// -- Calcul des limites de la partie zoomée de l'image --
Limit_top_zoom =Main.magnifier_offset_Y;
Limit_left_zoom=Main.magnifier_offset_X;
Limit_visible_bottom_zoom =Limit_top_zoom+Main.magnifier_height-1;
@ -1822,7 +1822,7 @@ void Compute_limits(void)
}
// -- Calculer les coordonnées du pinceau en fonction du snap et de la loupe -
// -- Calculer les coordonnées du pinceau en fonction du snap et de la loupe -
void Compute_paintbrush_coordinates(void)
{
if ((Main.magnifier_mode) && (Mouse_X>=Main.X_zoom))
@ -1900,7 +1900,7 @@ void Display_image_limits(void)
bottom_is_visible =Main.image_height<Menu_Y;
// On vérifie que la limite à droite est visible:
// On vérifie que la limite à droite est visible:
if (right_is_visible)
{
start=Limit_top;
@ -1910,7 +1910,7 @@ void Display_image_limits(void)
if (bottom_is_visible)
end++;
// Juste le temps d'afficher les limites, on étend les limites de la loupe
// Juste le temps d'afficher les limites, on étend les limites de la loupe
// aux limites visibles, car sinon Pixel_preview ne voudra pas afficher.
old_zoom_limit=Limit_right_zoom;
Limit_right_zoom=Limit_visible_right_zoom;
@ -1923,14 +1923,14 @@ void Display_image_limits(void)
Limit_right_zoom=old_zoom_limit;
}
// On vérifie que la limite en bas est visible:
// On vérifie que la limite en bas est visible:
if (bottom_is_visible)
{
start=Limit_left;
end=(Limit_right<Main.image_width)?
Limit_right:Main.image_width;
// On étend également les limites en bas (comme pour la limite droit)
// On étend également les limites en bas (comme pour la limite droit)
old_zoom_limit=Limit_bottom_zoom;
Limit_bottom_zoom=Limit_visible_bottom_zoom;
@ -1946,7 +1946,7 @@ void Display_image_limits(void)
// -- Recadrer la partie non-zoomée de l'image par rapport à la partie zoomée
// -- Recadrer la partie non-zoomée de l'image par rapport à la partie zoomée
// lorsqu'on scrolle en mode Loupe --
void Position_screen_according_to_zoom(void)
{
@ -2022,7 +2022,7 @@ void Position_screen_according_to_position(int target_x, int target_y)
}
// - Calcul des données du split en fonction de la proportion de chaque zone -
// - Calcul des données du split en fonction de la proportion de chaque zone -
void Compute_separator_data(void)
{
//short temp;
@ -2031,13 +2031,13 @@ void Compute_separator_data(void)
Main.X_zoom=Screen_width-(((Screen_width+(Main.magnifier_factor>>1)-theoric_X)/Main.magnifier_factor)*Main.magnifier_factor);
Main.separator_position=Main.X_zoom-(Menu_factor_X*SEPARATOR_WIDTH);
// Correction en cas de débordement sur la gauche
// Correction en cas de débordement sur la gauche
while (Main.separator_position*(Main.magnifier_factor+1)<Screen_width-(Menu_factor_X*SEPARATOR_WIDTH))
{
Main.separator_position+=Main.magnifier_factor;
Main.X_zoom+=Main.magnifier_factor;
}
// Correction en cas de débordement sur la droite
// Correction en cas de débordement sur la droite
theoric_X=Screen_width-((NB_ZOOMED_PIXELS_MIN-1)*Main.magnifier_factor);
while (Main.X_zoom>=theoric_X)
{
@ -2051,7 +2051,7 @@ void Compute_separator_data(void)
// -------------------- Calcul des information de la loupe -------------------
void Compute_magnifier_data(void)
/*
Après modification des données de la loupe, il faut recalculer les limites.
Après modification des données de la loupe, il faut recalculer les limites.
*/
{
Compute_separator_data();
@ -2159,31 +2159,31 @@ void Copy_view_to_spare(void)
if (Main.image_width!=Spare.image_width || Main.image_height!=Spare.image_height)
return;
// Copie des décalages de la fenêtre principale (non zoomée) de l'image
// Copie des décalages de la fenêtre principale (non zoomée) de l'image
Spare.offset_X=Main.offset_X;
Spare.offset_Y=Main.offset_Y;
// Copie du booléen "Mode loupe" de l'image
// Copie du booléen "Mode loupe" de l'image
Spare.magnifier_mode=Main.magnifier_mode;
// Copie du facteur de zoom du brouillon
Spare.magnifier_factor=Main.magnifier_factor;
// Copie des dimensions de la fenêtre de zoom
// Copie des dimensions de la fenêtre de zoom
Spare.magnifier_width=Main.magnifier_width;
Spare.magnifier_height=Main.magnifier_height;
// Copie des décalages de la fenêtre de zoom
// Copie des décalages de la fenêtre de zoom
Spare.magnifier_offset_X=Main.magnifier_offset_X;
Spare.magnifier_offset_Y=Main.magnifier_offset_Y;
// Copie des données du split du zoom
// Copie des données du split du zoom
Spare.separator_position=Main.separator_position;
Spare.X_zoom=Main.X_zoom;
Spare.separator_proportion=Main.separator_proportion;
}
// -- Afficher la barre de séparation entre les parties zoomées ou non en
// -- Afficher la barre de séparation entre les parties zoomées ou non en
// mode Loupe --
void Display_separator(void)
@ -2207,11 +2207,11 @@ void Display_separator(void)
Block(Main.separator_position+Menu_factor_X,Menu_factor_Y,
Menu_factor_X,(Menu_Y-(Menu_factor_Y<<1)),MC_White);
// Bord droite (gris foncé)
// Bord droite (gris foncé)
Block(Main.X_zoom-(Menu_factor_X<<1),Menu_factor_Y,
Menu_factor_X,(Menu_Y-(Menu_factor_Y<<1)),MC_Dark);
// Bord bas (gris foncé)
// Bord bas (gris foncé)
Block(Main.separator_position+(Menu_factor_X<<1),Menu_Y-Menu_factor_Y,
(SEPARATOR_WIDTH-3)*Menu_factor_X,Menu_factor_Y,MC_Dark);
@ -2222,7 +2222,7 @@ void Display_separator(void)
Block(Main.X_zoom-(Menu_factor_X<<1),0,
Menu_factor_X,Menu_factor_Y,MC_Light);
Update_rect(Main.separator_position,0,SEPARATOR_WIDTH*Menu_factor_X,Menu_Y); // On réaffiche toute la partie à gauche du split, ce qui permet d'effacer son ancienne position
Update_rect(Main.separator_position,0,SEPARATOR_WIDTH*Menu_factor_X,Menu_Y); // On réaffiche toute la partie à gauche du split, ce qui permet d'effacer son ancienne position
}
@ -2230,7 +2230,7 @@ void Display_separator(void)
// -- Fonctions de manipulation du curseur -----------------------------------
// -- Afficher une barre horizontale XOR zoomée
// -- Afficher une barre horizontale XOR zoomée
void Horizontal_XOR_line_zoom(short x_pos, short y_pos, short width)
{
@ -2247,7 +2247,7 @@ void Horizontal_XOR_line_zoom(short x_pos, short y_pos, short width)
}
// -- Afficher une barre verticale XOR zoomée
// -- Afficher une barre verticale XOR zoomée
void Vertical_XOR_line_zoom(short x_pos, short y_pos, short height)
{
@ -2281,7 +2281,7 @@ void Display_cursor(void)
float cos_a,sin_a;
short x1,y1,x2,y2,x3,y3,x4,y4;
// Si le curseur est dans le menu ou sur la barre de split, on affiche toujours une flèche.
// Si le curseur est dans le menu ou sur la barre de split, on affiche toujours une flèche.
if ( ( (Mouse_Y<Menu_Y)
&& ( (!Main.magnifier_mode) || (Mouse_X<Main.separator_position) || (Mouse_X>=Main.X_zoom) ) )
|| (Windows_open) || (Cursor_shape==CURSOR_SHAPE_HOURGLASS) )
@ -2365,7 +2365,7 @@ void Display_cursor(void)
if (end_y<3)
Vertical_XOR_line (Mouse_X,Mouse_Y+3,3-end_y);
// Petites barres aux extrémités
// Petites barres aux extrémités
start_x=(!Mouse_X);
start_y=(!Mouse_Y);
@ -2464,7 +2464,7 @@ void Display_cursor(void)
}
break;
case CURSOR_SHAPE_XOR_RECTANGLE :
// !!! Cette forme ne peut pas être utilisée en mode Loupe !!!
// !!! Cette forme ne peut pas être utilisée en mode Loupe !!!
// Petite croix au centre
start_x=(Mouse_X-3);
@ -2573,7 +2573,7 @@ void Display_cursor(void)
void Hide_cursor(void)
{
byte shape;
int start_x; // int car sont parfois négatifs ! (quand on dessine sur un bord)
int start_x; // int car sont parfois négatifs ! (quand on dessine sur un bord)
int start_y;
short end_x;
short end_y;
@ -2762,7 +2762,7 @@ void Hide_cursor(void)
break;
case CURSOR_SHAPE_XOR_RECTANGLE :
// !!! Cette forme ne peut pas être utilisée en mode Loupe !!!
// !!! Cette forme ne peut pas être utilisée en mode Loupe !!!
// Petite croix au centre
start_x=(Mouse_X-3);
@ -2878,7 +2878,7 @@ void Display_all_screen(void)
word width;
word height;
// ---/\/\/\ Partie non zoomée: /\/\/\---
// ---/\/\/\ Partie non zoomée: /\/\/\---
if (Main.magnifier_mode)
{
if (Main.image_width<Main.separator_position)
@ -2899,7 +2899,7 @@ void Display_all_screen(void)
height=Menu_Y;
Display_screen(width,height,Main.image_width);
// Effacement de la partie non-image dans la partie non zoomée:
// Effacement de la partie non-image dans la partie non zoomée:
if (Main.magnifier_mode)
{
if (Main.image_width<Main.separator_position && Main.image_width < Screen_width)
@ -2913,7 +2913,7 @@ void Display_all_screen(void)
if (Main.image_height<Menu_Y)
Block(0,Main.image_height,width,(Menu_Y-height),Main.backups->Pages->Transparent_color);
// ---/\/\/\ Partie zoomée: /\/\/\---
// ---/\/\/\ Partie zoomée: /\/\/\---
if (Main.magnifier_mode)
{
// Affichage de la barre de split
@ -2925,7 +2925,7 @@ void Display_all_screen(void)
else
width=Main.magnifier_width;
// Calcul du nombre de lignes visibles de l'image zoomée
// Calcul du nombre de lignes visibles de l'image zoomée
if (Main.image_height<Main.magnifier_height)
height=Main.image_height*Main.magnifier_factor;
else if (Main.image_height<Main.magnifier_offset_Y+Main.magnifier_height)
@ -2936,7 +2936,7 @@ void Display_all_screen(void)
Display_zoomed_screen(width,height,Main.image_width,Horizontal_line_buffer);
// Effacement de la partie non-image dans la partie zoomée:
// Effacement de la partie non-image dans la partie zoomée:
if (Main.image_width<Main.magnifier_width)
Block(Main.X_zoom+(Main.image_width*Main.magnifier_factor),0,
(Main.magnifier_width-Main.image_width)*Main.magnifier_factor,
@ -2948,7 +2948,7 @@ void Display_all_screen(void)
// ---/\/\/\ Affichage des limites /\/\/\---
if (Config.Display_image_limits)
Display_image_limits();
Update_rect(0,0,Screen_width,Menu_Y); // TODO On peut faire plus fin, en évitant de mettre à jour la partie à droite du split quand on est en mode loupe. Mais c'est pas vraiment intéressant ?
Update_rect(0,0,Screen_width,Menu_Y); // TODO On peut faire plus fin, en évitant de mettre à jour la partie à droite du split quand on est en mode loupe. Mais c'est pas vraiment intéressant ?
}
@ -3156,7 +3156,7 @@ static byte Old_trans;
void Remap_pixel(byte * pixel)
{
if (*pixel==Old_light) // On commence par tester le Gris clair
*pixel=MC_Light; // qui est pas mal utilisé.
*pixel=MC_Light; // qui est pas mal utilisé.
else
{
if (*pixel==Old_black) // Puis le Noir...
@ -3191,7 +3191,7 @@ void Remap_screen_after_menu_colors_change(void)
if ( (MC_Light!=Old_light) || (MC_Dark!=Old_dark) || (MC_White!=Old_white) || (MC_Black !=Old_black )
|| (MC_Trans!=Old_trans) )
{
// Création de la table de conversion
// Création de la table de conversion
for (index=0; index<256; index++)
conversion_table[index]=index;
@ -3200,7 +3200,7 @@ void Remap_screen_after_menu_colors_change(void)
conversion_table[Old_light]=MC_Light;
conversion_table[Old_white]=MC_White;
// Remappage de l'écran
// Remappage de l'écran
// remap only screen pixels covered by a window or the menu
for (pos_y = 0; pos_y < Screen_height; pos_y++)
@ -3231,11 +3231,11 @@ void Remap_screen_after_menu_colors_change(void)
if (Menu_is_visible_before_window)
{
/*
Il faudrait peut-être remapper les pointillés délimitant l'image.
Mais ça va être chiant parce qu'ils peuvent être affichés en mode Loupe.
Mais de toutes façons, c'est franchement facultatif...
Il faudrait peut-être remapper les pointillés délimitant l'image.
Mais ça va être chiant parce qu'ils peuvent être affichés en mode Loupe.
Mais de toutes façons, c'est franchement facultatif...
*/
// On passe la table juste pour ne rafficher que les couleurs modifiées
// On passe la table juste pour ne rafficher que les couleurs modifiées
Display_menu_palette_avoiding_window(conversion_table);
}
Clear_border(MC_Black);
@ -3369,7 +3369,7 @@ void Compute_optimal_menu_colors(T_Components * palette)
&& Round_palette_component(palette[i].B)/tolerence==Gfx->Default_palette[Gfx->Color[0]].B/tolerence)
{
MC_Black=i;
// On cherche une couleur de transparence différente des 4 autres.
// On cherche une couleur de transparence différente des 4 autres.
for (MC_Trans=0; ((MC_Trans==MC_Black) || (MC_Trans==MC_Dark) ||
(MC_Trans==MC_Light) || (MC_Trans==MC_White)); MC_Trans++);
// Easy case
@ -3419,7 +3419,7 @@ void Compute_optimal_menu_colors(T_Components * palette)
&& Round_palette_component(palette[i].B)/tolerence==cpc_colors[0].B/tolerence)
{
MC_Black=i;
// On cherche une couleur de transparence différente des 4 autres.
// On cherche une couleur de transparence différente des 4 autres.
for (MC_Trans=0; ((MC_Trans==MC_Black) || (MC_Trans==MC_Dark) ||
(MC_Trans==MC_Light) || (MC_Trans==MC_White)); MC_Trans++);
// Easy case
@ -3510,16 +3510,16 @@ void Compute_optimal_menu_colors(T_Components * palette)
// SWAP_BYTES(MC_Light, MC_Dark)
//}
// Si deux des couleurs choisies ont le même index, c'est destructif car
// on fait ensuite un remap de l'image. Donc on évite ce problème (un
// Si deux des couleurs choisies ont le même index, c'est destructif car
// on fait ensuite un remap de l'image. Donc on évite ce problème (un
// peu brutalement)
// On commence par déplacer les gris, comme ça on a plus de chances de garder au moins
// On commence par déplacer les gris, comme ça on a plus de chances de garder au moins
// le blanc et le noir
//while (MC_Dark == MC_Light || MC_Dark == MC_White || MC_Black == MC_Dark || Same_color(palette, MC_Dark, MC_White)) MC_Dark--;
//while (MC_White == MC_Light || MC_Dark == MC_Light || MC_Black == MC_Light || Same_color(palette, MC_Light, MC_Black)) MC_Light--;
//while (MC_White == MC_Light || MC_Dark == MC_White || MC_Black == MC_White) MC_White--;
// On cherche une couleur de transparence différente des 4 autres.
// On cherche une couleur de transparence différente des 4 autres.
for (MC_Trans=0; ((MC_Trans==MC_Black) || (MC_Trans==MC_Dark) ||
(MC_Trans==MC_Light) || (MC_Trans==MC_White)); MC_Trans++);