Lots of speedup-cleanup-debug. Menu is usable, we need to implement drawing functions now...

git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@39 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
Adrien Destugues 2007-11-03 19:12:03 +00:00
parent d3b41bb251
commit a6ea5950f6
9 changed files with 3440 additions and 3364 deletions

480
boutons.c

File diff suppressed because it is too large Load Diff

View File

@ -74,11 +74,11 @@ void Attendre_fin_de_click(void)
{
do
{
SDL_PumpEvents();
puts("Attente fin clic...");
SDL_PumpEvents();
}
while(SDL_GetMouseState(NULL, NULL)&(SDL_BUTTON(1) | SDL_BUTTON(2) | SDL_BUTTON(3))); //On attend tant que l'un des trois boutons est enfoncé
while(SDL_GetMouseState(NULL, NULL)&SDL_BUTTON(1)); //On attend tant que le bouton est enfoncé (TODO: vérif clic droit aussi ?)
Mouse_K=0;
INPUT_Nouveau_Mouse_K=0;
}
void Effacer_image_courante_Stencil(byte Couleur, byte * Pochoir)
@ -126,9 +126,8 @@ void Get_input(void)
{
case SDL_MOUSEMOTION:
//Mouvement de la souris
INPUT_Nouveau_Mouse_X = event.motion.x;
INPUT_Nouveau_Mouse_Y = event.motion.y;
puts("Get_input: Mouse_Facteur_De_Correction_X et Mouse_Facteur_De_Correction_Y non gérés!");
INPUT_Nouveau_Mouse_X = event.motion.x*Mouse_Facteur_de_correction_X;
INPUT_Nouveau_Mouse_Y = event.motion.y*Mouse_Facteur_de_correction_Y;
break;
case SDL_MOUSEBUTTONDOWN:
//Clic sur un des boutons de la souris
@ -424,17 +423,17 @@ void Initialiser_chrono(dword Delai)
void Wait_VBL(void)
{
puts("Wait_VBL non implémenté!\n");
puts("Wait_VBL non implémenté!");
}
void Passer_en_mode_texte(byte Nb_lignes)
{
puts("Passer_en_mode_texte non implémenté!\n");
puts("Passer_en_mode_texte non implémenté!");
}
void Pixel_dans_brosse (word X,word Y,byte Couleur)
{
puts("Pixel_dans_brosse non implémenté!\n");
puts("Pixel_dans_brosse non implémenté!");
}
byte Lit_pixel_dans_brosse (word X,word Y)
@ -515,15 +514,22 @@ void Remap_general_LOWLEVEL(byte * Table_conv,byte * Buffer,short Largeur,short
void Copier_image_dans_brosse(short Debut_X,short Debut_Y,short Brosse_Largeur,short Brosse_Hauteur,word Largeur_image)
{
int i,j;
for(i=0;i<Brosse_Hauteur;i++)
{
for(j=0;j<Brosse_Largeur;j++)
{
*(Brosse+i*Largeur_image+j)=*(Principal_Ecran+Debut_X+j+(Debut_Y+i)*Largeur_image);
}
}
puts("Copier_image_dans_brosse à tester!\n");
byte* Src=Debut_Y*Largeur_image+Debut_X+Principal_Ecran; //Adr départ image (ESI)
byte* Dest=Brosse; //Adr dest brosse (EDI)
int dx;
for (dx=Brosse_Hauteur;dx!=0;dx--)
//Pour chaque ligne
{
// On fait une copie de la ligne
memcpy(Dest,Src,Brosse_Largeur);
// On passe à la ligne suivante
Src+=Largeur_image;
Dest+=Brosse_Largeur;
}
}
byte Lit_pixel_dans_ecran_feedback (word X,word Y)
@ -534,8 +540,7 @@ byte Lit_pixel_dans_ecran_feedback (word X,word Y)
dword Round_div(dword Numerateur,dword Diviseur)
{
puts("Round_div non implémenté!\n");
return 0;
return Numerateur/Diviseur;
}
byte Effet_Trame(word X,word Y)
@ -659,8 +664,13 @@ void Rotate_180_deg_LOWLEVEL(void)
}
void Tempo_jauge(byte Vitesse)
//Boucle d'attente pour faire bouger les scrollbars à une vitesse correcte
{
puts("Tempo_jauge non implémenté!\n");
while (Vitesse!=0)
{
Wait_VBL();
Vitesse--;
}
}
byte Meilleure_couleur_sans_exclusion(byte Rouge,byte Vert,byte Bleu)

View File

@ -55,8 +55,8 @@
; Win95 window, you should turn ³ fenˆtre Windows95, vous devriez passer
; these values to 0 (and increase X ³ ces valeurs … 0 (et augmenter les sen-
; and Y sensitivities above). ³ sibilits X et Y dfinies plus haut).
X_correction_factor = 3 ; (default 3)
Y_correction_factor = 3 ; (default 3)
X_correction_factor = 1 ; (default 3)
Y_correction_factor = 1 ; (default 3)
; Aspect of the main cursor (cross) ³ Aspect du curseur principal (croix)
; 1: Solid ³ 1: Solide

325
global.h
View File

@ -6,7 +6,7 @@
//////////////////////////////////////////////////////////////////////////////
// //
// Ce fichier contient les déclaration des variables globales //
// Ce fichier contient les dÚclaration des variables globales //
// //
//////////////////////////////////////////////////////////////////////////////
@ -59,7 +59,7 @@ GLOBAL struct S_Config
byte Resolution_par_defaut;
} Config;
// Tableau des touches spéciales
// Tableau des touches spÚciales
GLOBAL word Config_Touche[NB_TOUCHES_SPECIALES];
@ -71,7 +71,7 @@ struct S_Mode_video
word Facteur_X;
word Facteur_Y;
char Ratio[5];
signed char Refresh; // <0 => entrelacé
signed char Refresh; // <0 => entrelacÚ
word Mode_VESA_de_base;
void * Pointeur;
byte Etat; // 0:Cool 1:OK ; 2:Bof ; 3:Naze ; si on rajoute +128 => incompatible
@ -81,16 +81,16 @@ GLOBAL struct S_Mode_video Mode_video[NB_MODES_VIDEO];
GLOBAL struct
{
byte Granularite; // Facteur de gestion de la granularité
byte Code_fenetres; // Utilisation des fenˆtres: 0=AA 1=BB 2=AB 3=BA
byte Granularite; // Facteur de gestion de la granularitÚ
byte Code_fenetres; // Utilisation des fenêtres: 0=AA 1=BB 2=AB 3=BA
byte * WinFuncPtr;
byte * Adresse_physique_LFB; // Si = 0 => Pas de LFB
dword Taille_LFB; // Taille de la mémoire LFB
dword Taille_LFB; // Taille de la mÚmoire LFB
} VESA_Mode_Infos[4];
// Palette par défaut
// Palette par dÚfaut
GLOBAL T_Palette Palette_defaut;
@ -103,10 +103,10 @@ GLOBAL byte CM_Blanc;
GLOBAL byte CM_Trans;
GLOBAL struct Composantes Coul_menu_pref[4];
// Etat des entrées
// Etat des entrÚes
GLOBAL word Mouse_X; // Abscisse de la souris
GLOBAL word Mouse_Y; // Ordonnée de la souris
GLOBAL word Mouse_Y; // OrdonnÚe de la souris
GLOBAL byte Mouse_K; // Etat des boutons de la souris
GLOBAL word Touche;
GLOBAL Uint8* Etat_Du_Clavier; // Scancode de la touche en cours et etat des touches de ctrl
@ -117,20 +117,20 @@ GLOBAL byte Mouse_Facteur_de_correction_Y;
GLOBAL byte Autoriser_changement_de_couleur_pendant_operation;
// Données sur le curseur
// DonnÚes sur le curseur
GLOBAL byte Forme_curseur;
GLOBAL byte Forme_curseur_avant_fenetre; // Forme du curseur avant l'ouverture d'une fenˆtre
GLOBAL byte Forme_curseur_avant_fenetre; // Forme du curseur avant l'ouverture d'une fenêtre
GLOBAL byte Forcer_affichage_curseur; // Forcer l'affichage du curseur au prochain Get_input();
GLOBAL byte Cacher_curseur;
GLOBAL byte Curseur_dans_menu; // Booléen "Le curseur se trouve dans le menu"
GLOBAL byte Curseur_dans_menu_precedent; // Booléen "Le curseur se trouvait précédemment dans le menu"
GLOBAL word Curseur_Decalage_X[NB_SPRITES_CURSEUR]; // Coordonnées X du point sensible de curseurs en sprite
GLOBAL word Curseur_Decalage_Y[NB_SPRITES_CURSEUR]; // Coordonnées Y du point sensible de curseurs en sprite
GLOBAL byte Curseur_dans_menu; // BoolÚen "Le curseur se trouve dans le menu"
GLOBAL byte Curseur_dans_menu_precedent; // BoolÚen "Le curseur se trouvait prÚcÚdemment dans le menu"
GLOBAL word Curseur_Decalage_X[NB_SPRITES_CURSEUR]; // CoordonnÚes X du point sensible de curseurs en sprite
GLOBAL word Curseur_Decalage_Y[NB_SPRITES_CURSEUR]; // CoordonnÚes Y du point sensible de curseurs en sprite
GLOBAL byte SPRITE_CURSEUR[NB_SPRITES_CURSEUR][HAUTEUR_SPRITE_CURSEUR][LARGEUR_SPRITE_CURSEUR]; // Dessins des sprites de curseur
GLOBAL byte FOND_CURSEUR[HAUTEUR_SPRITE_CURSEUR][LARGEUR_SPRITE_CURSEUR]; // Contenu du dessous du curseur
// Données sur le pinceau
// DonnÚes sur le pinceau
GLOBAL byte Pinceau_Forme;
GLOBAL byte Pinceau_Forme_avant_fill;
@ -153,120 +153,121 @@ GLOBAL short Pinceau_Decalage_Y;
// Commandes graphiques
GLOBAL fonction_afficheur Pixel; // Affiche un point l'écran
GLOBAL fonction_afficheur Pixel; // Affiche un point à l'écran
GLOBAL fonction_afficheur Pixel_dans_menu;// Affiche un point dans le menu (ou pas si le menu est invisible)
GLOBAL fonction_lecteur Lit_pixel; // Teste la couleur d'un pixel dans l'écran
GLOBAL fonction_lecteur Lit_pixel; // Teste la couleur d'un pixel dans l'Úcran
GLOBAL fonction_effaceur Clear_screen; // Efface rapidement tout l'écran (en faisant attention de ne pas effacer le menu)
GLOBAL fonction_display Display_screen; // Affiche rapidement tout l'écran (en faisant attention de ne pas effacer le menu)
GLOBAL fonction_block Block; // Affiche rapidement un bloc … l'écran
GLOBAL fonction_afficheur Pixel_Preview_Normal; // Affiche un point de l'image … l'écran en mode normal (pas en mode loupe)
GLOBAL fonction_afficheur Pixel_Preview_Loupe; // Affiche un point de l'image … l'écran en mode loupe
GLOBAL fonction_afficheur Pixel_Preview; // Affiche un point de l'image … l'écran en fonction de l'état du mode loupe
GLOBAL fonction_block Block; // Affiche rapidement un bloc à l'écran
GLOBAL fonction_block Block_Fast; // Affiche rapidement un bloc à l'écran sans rafraichir
GLOBAL fonction_afficheur Pixel_Preview_Normal; // Affiche un point de l'image à l'Úcran en mode normal (pas en mode loupe)
GLOBAL fonction_afficheur Pixel_Preview_Loupe; // Affiche un point de l'image à l'Úcran en mode loupe
GLOBAL fonction_afficheur Pixel_Preview; // Affiche un point de l'image à l'Úcran en fonction de l'Útat du mode loupe
GLOBAL fonction_Ligne_XOR Ligne_horizontale_XOR;// Affiche une ligne horizontale en XOR (pour placer la loupe)
GLOBAL fonction_Ligne_XOR Ligne_verticale_XOR; // Affiche une ligne verticale en XOR (pour placer la loupe)
GLOBAL fonction_display_brush_Color Display_brush_Color; // Affiche une partie de la brosse en couleur
GLOBAL fonction_display_brush_Mono Display_brush_Mono; // Affiche une partie de la brosse en monochrome
GLOBAL fonction_display_brush_Color Clear_brush; // Efface la partie de la brosse affichée … l'écran
GLOBAL fonction_remap Remap_screen; // Remappe une partie de l'écran avec les nouvelles couleurs du menu
GLOBAL fonction_display_brush_Color Clear_brush; // Efface la partie de la brosse affichÚe à l'Úcran
GLOBAL fonction_remap Remap_screen; // Remappe une partie de l'Úcran avec les nouvelles couleurs du menu
GLOBAL fonction_procsline Afficher_ligne; // Afficher une ligne
GLOBAL fonction_procsline Lire_ligne; // Afficher ou lire une ligne
GLOBAL fonction_display_zoom Display_zoomed_screen; // Affiche rapidement toute la partie zoomée … l'écran (en faisant attention de ne pas effacer le menu)
GLOBAL fonction_display_zoom Display_zoomed_screen; // Affiche rapidement toute la partie zoomÚe à l'Úcran (en faisant attention de ne pas effacer le menu)
GLOBAL fonction_display_brush_Color_zoom Display_brush_Color_zoom;
GLOBAL fonction_display_brush_Mono_zoom Display_brush_Mono_zoom;
GLOBAL fonction_display_brush_Color_zoom Clear_brush_zoom;
// Données sur les dimensions de l'écran
// DonnÚes sur les dimensions de l'Úcran
GLOBAL int Resolution_actuelle; // Résolution graphique courante
GLOBAL short Ecran_original_X; // |_ Dimensions de l'écran d'origine de
GLOBAL short Ecran_original_Y; // | l'image qui vient d'ˆtre chargée.
GLOBAL short Largeur_ecran; // Largeur de l'écran
GLOBAL short Hauteur_ecran; // Hauteur de l'écran
GLOBAL int Resolution_actuelle; // RÚsolution graphique courante
GLOBAL short Ecran_original_X; // |_ Dimensions de l'Úcran d'origine de
GLOBAL short Ecran_original_Y; // | l'image qui vient d'être chargÚe.
GLOBAL short Largeur_ecran; // Largeur de l'Úcran
GLOBAL short Hauteur_ecran; // Hauteur de l'Úcran
GLOBAL short Limite_Haut; // |
GLOBAL short Limite_Bas; // |_ Limites dans lesquelles
GLOBAL short Limite_Gauche; // | on peut écrire
GLOBAL short Limite_Gauche; // | on peut Úcrire
GLOBAL short Limite_Droite; // |
GLOBAL short Limite_visible_Bas; // |_ Derniers points visibles
GLOBAL short Limite_visible_Droite; // | " l'image"
GLOBAL short Limite_visible_Droite; // | "à l'image"
GLOBAL short Limite_Haut_Zoom; // |
GLOBAL short Limite_Bas_Zoom; // |_ Limites dans lesquelles on peut
GLOBAL short Limite_Gauche_Zoom; // | écrire dans la partie zoomée
GLOBAL short Limite_Gauche_Zoom; // | Úcrire dans la partie zoomÚe
GLOBAL short Limite_Droite_Zoom; // |
GLOBAL short Limite_visible_Bas_Zoom; // |_ Derniers points visibles "
GLOBAL short Limite_visible_Droite_Zoom; // | l'image" dans la partie zoomée
GLOBAL short Limite_visible_Bas_Zoom; // |_ Derniers points visibles "à
GLOBAL short Limite_visible_Droite_Zoom; // | l'image" dans la partie zoomÚe
GLOBAL byte * Buffer_de_ligne_horizontale; // Buffer d'affichage de lignes
// Données sur l'image actuelle:
// DonnÚes sur l'image actuelle:
GLOBAL byte * Principal_Ecran; // Ecran virtuel courant
GLOBAL T_Palette Principal_Palette; // Palette de l'écran en cours
GLOBAL T_Palette Principal_Palette; // Palette de l'Úcran en cours
GLOBAL byte Principal_Image_modifiee; // L'image courante a été modifiée
GLOBAL short Principal_Largeur_image; // Largeur de l'image dans laquelle l'utilisateur désire travailler
GLOBAL short Principal_Hauteur_image; // Hauteur de l'image dans laquelle l'utilisateur désire travailler
GLOBAL short Principal_Decalage_X; // Décalage en X de l'écran par rapport au début de l'image
GLOBAL short Principal_Decalage_Y; // Décalage en Y de l'écran par rapport au début de l'image
GLOBAL byte Principal_Image_modifiee; // L'image courante a ÚtÚ modifiÚe
GLOBAL short Principal_Largeur_image; // Largeur de l'image dans laquelle l'utilisateur dÚsire travailler
GLOBAL short Principal_Hauteur_image; // Hauteur de l'image dans laquelle l'utilisateur dÚsire travailler
GLOBAL short Principal_Decalage_X; // DÚcalage en X de l'Úcran par rapport au dÚbut de l'image
GLOBAL short Principal_Decalage_Y; // DÚcalage en Y de l'Úcran par rapport au dÚbut de l'image
GLOBAL short Ancien_Principal_Decalage_X;
GLOBAL short Ancien_Principal_Decalage_Y;
GLOBAL char Principal_Repertoire_fichier[256]; // |_ Nom complet =
GLOBAL char Principal_Nom_fichier[13]; // | Repertoire_fichier+"\"+Nom_fichier
GLOBAL byte Principal_Format_fichier; // Format auquel il faut lire et écrire le fichier
GLOBAL byte Principal_Format_fichier; // Format auquel il faut lire et Úcrire le fichier
GLOBAL byte Principal_Format; // Format du fileselect
GLOBAL short Principal_File_list_Position; // Début de la partie affichée dans la liste de fichiers
GLOBAL short Principal_File_list_Decalage; // Décalage de la barre de sélection dans le fileselector
GLOBAL char Principal_Repertoire_courant[256]; // Répertoire actuel sur disque
GLOBAL short Principal_File_list_Position; // DÚbut de la partie affichÚe dans la liste de fichiers
GLOBAL short Principal_File_list_Decalage; // DÚcalage de la barre de sÚlection dans le fileselector
GLOBAL char Principal_Repertoire_courant[256]; // RÚpertoire actuel sur disque
GLOBAL char Principal_Commentaire[TAILLE_COMMENTAIRE+1]; // Commentaire de l'image
GLOBAL short Principal_Split; // Position en X du bord gauche du split de la loupe
GLOBAL short Principal_X_Zoom; // (Menu_Facteur_X) + Position en X du bord droit du split de la loupe
GLOBAL float Principal_Proportion_split; // Proportion de la zone non-zoomée par rapport … l'écran
GLOBAL float Principal_Proportion_split; // Proportion de la zone non-zoomÚe par rapport à l'Úcran
// Données sur le brouillon:
// DonnÚes sur le brouillon:
GLOBAL byte * Brouillon_Ecran; // Ecran virtuel brouillon
GLOBAL T_Palette Brouillon_Palette; // Palette de l'écran de brouillon
GLOBAL T_Palette Brouillon_Palette; // Palette de l'Úcran de brouillon
GLOBAL byte Brouillon_Image_modifiee; // Le brouillon a été modifié
GLOBAL short Brouillon_Largeur_image; // Largeur du brouillon dans laquelle l'utilisateur désire travailler
GLOBAL short Brouillon_Hauteur_image; // Hauteur du brouillon dans laquelle l'utilisateur désire travailler
GLOBAL short Brouillon_Decalage_X; // Décalage en X du brouillon par rapport au début de l'image
GLOBAL short Brouillon_Decalage_Y; // Décalage en Y du brouillon par rapport au début de l'image
GLOBAL byte Brouillon_Image_modifiee; // Le brouillon a ÚtÚ modifiÚ
GLOBAL short Brouillon_Largeur_image; // Largeur du brouillon dans laquelle l'utilisateur dÚsire travailler
GLOBAL short Brouillon_Hauteur_image; // Hauteur du brouillon dans laquelle l'utilisateur dÚsire travailler
GLOBAL short Brouillon_Decalage_X; // DÚcalage en X du brouillon par rapport au dÚbut de l'image
GLOBAL short Brouillon_Decalage_Y; // DÚcalage en Y du brouillon par rapport au dÚbut de l'image
GLOBAL short Ancien_Brouillon_Decalage_X;
GLOBAL short Ancien_Brouillon_Decalage_Y;
GLOBAL char Brouillon_Repertoire_fichier[256]; // |_ Nom complet =
GLOBAL char Brouillon_Nom_fichier[13]; // | Repertoire_fichier+"\"+Nom_fichier
GLOBAL byte Brouillon_Format_fichier; // Format auquel il faut lire et écrire le fichier
GLOBAL byte Brouillon_Format_fichier; // Format auquel il faut lire et Úcrire le fichier
GLOBAL byte Brouillon_Format; // Format du fileselect
GLOBAL short Brouillon_File_list_Position; // Début de la partie affichée dans la liste de fichiers
GLOBAL short Brouillon_File_list_Decalage; // Décalage de la barre de sélection dans le fileselector
GLOBAL char Brouillon_Repertoire_courant[256]; // Répertoire actuel sur disque
GLOBAL short Brouillon_File_list_Position; // DÚbut de la partie affichÚe dans la liste de fichiers
GLOBAL short Brouillon_File_list_Decalage; // DÚcalage de la barre de sÚlection dans le fileselector
GLOBAL char Brouillon_Repertoire_courant[256]; // RÚpertoire actuel sur disque
GLOBAL char Brouillon_Commentaire[TAILLE_COMMENTAIRE+1]; // Commentaire de l'image
GLOBAL short Brouillon_Split; // Position en X du bord gauche du split de la loupe
GLOBAL short Brouillon_X_Zoom; // (Menu_Facteur_X) + Position en X du bord droit du split de la loupe
GLOBAL float Brouillon_Proportion_split; // Proportion de la zone non-zoomée par rapport … l'écran
GLOBAL float Brouillon_Proportion_split; // Proportion de la zone non-zoomÚe par rapport à l'Úcran
GLOBAL byte Brouillon_Loupe_Mode; // On est en mode loupe dans le brouillon
GLOBAL word Brouillon_Loupe_Facteur; // Facteur de zoom dans le brouillon
GLOBAL word Brouillon_Loupe_Hauteur; // Largeur de la fenˆtre de zoom dans le brouillon
GLOBAL word Brouillon_Loupe_Largeur; // Hauteur de la fenˆtre de zoom dans le brouillon
GLOBAL short Brouillon_Loupe_Decalage_X;// Decalage horizontal de la fenˆtre de zoom dans le brouillon
GLOBAL short Brouillon_Loupe_Decalage_Y;// Decalage vertical de la fenˆtre de zoom dans le brouillon
GLOBAL word Brouillon_Loupe_Hauteur; // Largeur de la fenêtre de zoom dans le brouillon
GLOBAL word Brouillon_Loupe_Largeur; // Hauteur de la fenêtre de zoom dans le brouillon
GLOBAL short Brouillon_Loupe_Decalage_X;// Decalage horizontal de la fenêtre de zoom dans le brouillon
GLOBAL short Brouillon_Loupe_Decalage_Y;// Decalage vertical de la fenêtre de zoom dans le brouillon
GLOBAL byte Masque_copie_couleurs[256]; // Tableau des couleurs copier vers le brouillon
GLOBAL byte Masque_copie_couleurs[256]; // Tableau des couleurs à copier vers le brouillon
// Sauvegarde de l'image:
GLOBAL byte * Ecran_backup; // Sauvegarde de l'écran virtuel courant
GLOBAL byte * Ecran_backup; // Sauvegarde de l'Úcran virtuel courant
GLOBAL S_Liste_de_pages * Principal_Backups; // Liste des pages de backup de la page principale
GLOBAL S_Liste_de_pages * Brouillon_Backups; // Liste des pages de backup de la page de brouillon
// Données sur la brosse:
// DonnÚes sur la brosse:
GLOBAL byte * Brosse; // Sprite de la brosse
GLOBAL word Brosse_Decalage_X; // Centre horizontal de la brosse
@ -277,7 +278,7 @@ GLOBAL word Brosse_Hauteur; // Hauteur de la brosse
GLOBAL char Brosse_Repertoire_fichier[256]; // |
GLOBAL char Brosse_Nom_fichier[13]; // |
GLOBAL byte Brosse_Format_fichier; // | Infos sur le
GLOBAL byte Brosse_Format; // |_ sélecteur de
GLOBAL byte Brosse_Format; // |_ sÚlecteur de
GLOBAL short Brosse_File_list_Position; // | fichiers de la
GLOBAL short Brosse_File_list_Decalage; // | brosse.
GLOBAL char Brosse_Repertoire_courant[256]; // |
@ -287,28 +288,28 @@ GLOBAL byte Brosse_Centre_rotation_defini; // | Infos sur le
GLOBAL short Brosse_Centre_rotation_X; // |- centre de rotation
GLOBAL short Brosse_Centre_rotation_Y; // | de la brosse
// Données sur le menu
// DonnÚes sur le menu
GLOBAL byte Menu_visible; // Le menu est actif … l'écran
GLOBAL word Menu_Ordonnee; // Ordonnée o— commence le menu
GLOBAL word Menu_Ordonnee_Texte; // Ordonnée o— commence le texte dans le menu
GLOBAL byte Menu_visible; // Le menu est actif à l'Úcran
GLOBAL word Menu_Ordonnee; // OrdonnÚe où commence le menu
GLOBAL word Menu_Ordonnee_Texte; // OrdonnÚe où commence le texte dans le menu
GLOBAL word Menu_Facteur_X; // Facteur de grossissement du menu en X
GLOBAL word Menu_Facteur_Y; // Facteur de grossissement du menu en Y
GLOBAL word Menu_Taille_couleur; // Taille d'une couleur de la palette du menu
// Données sur la fenˆtre de menu
// DonnÚes sur la fenêtre de menu
GLOBAL byte Une_fenetre_est_ouverte;
GLOBAL word Fenetre_Pos_X; // Position du bord gauche de la fenˆtre dans l'écran
GLOBAL word Fenetre_Pos_Y; // Position du bord haut de la fenˆtre dans l'écran
GLOBAL word Fenetre_Largeur; // Largeur de la fenˆtre
GLOBAL word Fenetre_Hauteur; // Hauteur de la fenˆtre
GLOBAL word Fenetre_Pos_X; // Position du bord gauche de la fenêtre dans l'Úcran
GLOBAL word Fenetre_Pos_Y; // Position du bord haut de la fenêtre dans l'Úcran
GLOBAL word Fenetre_Largeur; // Largeur de la fenêtre
GLOBAL word Fenetre_Hauteur; // Hauteur de la fenêtre
GLOBAL byte Menu_visible_avant_fenetre; // Le menu était visible avant d'ouvir une fenˆtre
GLOBAL word Menu_Ordonnee_avant_fenetre; // Ordonnée du menu avant d'ouvrir une fenˆtre
GLOBAL byte Cacher_pinceau_avant_fenetre;// Le pinceau étatit déj… caché avant l'ouverture de la fenetre?
GLOBAL byte Menu_visible_avant_fenetre; // Le menu Útait visible avant d'ouvir une fenêtre
GLOBAL word Menu_Ordonnee_avant_fenetre; // OrdonnÚe du menu avant d'ouvrir une fenêtre
GLOBAL byte Cacher_pinceau_avant_fenetre;// Le pinceau Útatit dÚjà cachÚ avant l'ouverture de la fenetre?
GLOBAL word Nb_boutons_fenetre;
GLOBAL struct Fenetre_Bouton_normal * Fenetre_Liste_boutons_normal;
@ -321,44 +322,44 @@ GLOBAL int Fenetre_Attribut2;
// Définition des boutons ////////////////////////////////////////////////////
// DÚfinition des boutons ////////////////////////////////////////////////////
GLOBAL struct
{
// Informations sur l'aspect du bouton (graphisme):
word Decalage_X; // Décalage par rapport … la gauche du menu
word Decalage_Y; // Décalage par rapport au haut du menu
word Decalage_X; // DÚcalage par rapport à la gauche du menu
word Decalage_Y; // DÚcalage par rapport au haut du menu
word Largeur; // Largeur du bouton
word Hauteur; // Hauteur du bouton
byte Enfonce; // Le bouton est enfoncé
byte Enfonce; // Le bouton est enfoncÚ
byte Forme; // Forme du bouton
// Information sur les clicks de la souris:
fonction_action Gauche; // Action déclenchée par un click gauche sur le bouton
fonction_action Droite; // Action déclenchée par un click droit sur le bouton
word Raccourci_gauche; // Raccourci clavier équivalent … un click gauche sur le bouton
word Raccourci_droite; // Raccourci clavier équivalent … un click droit sur le bouton
fonction_action Gauche; // Action dÚclenchÚe par un click gauche sur le bouton
fonction_action Droite; // Action dÚclenchÚe par un click droit sur le bouton
word Raccourci_gauche; // Raccourci clavier Úquivalent à un click gauche sur le bouton
word Raccourci_droite; // Raccourci clavier Úquivalent à un click droit sur le bouton
// Informations sur le désenclenchement du bouton géré par le moteur:
fonction_action Desenclencher; // Action appelée lors du désenclenchement du bouton
// Informations sur le dÚsenclenchement du bouton gÚrÚ par le moteur:
fonction_action Desenclencher; // Action appelÚe lors du dÚsenclenchement du bouton
byte Famille; // Ensemble de boutons auquel celui-ci appartient
} Bouton[NB_BOUTONS];
// Informations sur les différents modes de dessin
// Informations sur les diffÚrents modes de dessin
GLOBAL fonction_effet Fonction_effet;
GLOBAL byte * FX_Feedback_Ecran;
GLOBAL byte Exclude_color[256]; // Couleurs exclure pour Meilleure_couleur
GLOBAL byte Exclude_color[256]; // Couleurs à exclure pour Meilleure_couleur
// Mode smear:
GLOBAL byte Smear_Mode; // Le mode smear est enclenché
GLOBAL byte Smear_Debut; // On vient juste de commencer une opération en Smear
GLOBAL byte Smear_Mode; // Le mode smear est enclenchÚ
GLOBAL byte Smear_Debut; // On vient juste de commencer une opÚration en Smear
GLOBAL byte * Smear_Brosse; // Sprite de la brosse de Smear
GLOBAL word Smear_Brosse_Largeur; // Largeur de la brosse de Smear
GLOBAL word Smear_Brosse_Hauteur; // Hauteur de la brosse de Smear
@ -367,59 +368,59 @@ GLOBAL short Smear_Min_X,Smear_Max_X,Smear_Min_Y,Smear_Max_Y; // Bornes de la Br
// Mode shade:
GLOBAL struct T_Shade Shade_Liste[8]; // Listes de shade
GLOBAL byte Shade_Actuel; // Numéro du shade en cours
GLOBAL byte Shade_Actuel; // NumÚro du shade en cours
GLOBAL byte * Shade_Table; // Table de conversion de shade en cours
GLOBAL byte Shade_Table_gauche[256]; // Table de conversion de shade pour un clic gauche
GLOBAL byte Shade_Table_droite[256]; // Table de conversion de shade pour un clic droit
GLOBAL byte Shade_Mode; // Le mode shade est enclenché
GLOBAL byte Shade_Mode; // Le mode shade est enclenchÚ
GLOBAL byte Quick_shade_Mode; // Le mode quick-shade est enclenché
GLOBAL byte Quick_shade_Mode; // Le mode quick-shade est enclenchÚ
GLOBAL byte Quick_shade_Step; // Pas du mode quick-shade
GLOBAL byte Quick_shade_Loop; // Normal / Loop / No sat.
// Mode stencil:
GLOBAL byte Stencil_Mode; // Le mode stencil est enclenché
GLOBAL byte Stencil[256]; // Tableau des couleurs protégées
GLOBAL byte Stencil_Mode; // Le mode stencil est enclenchÚ
GLOBAL byte Stencil[256]; // Tableau des couleurs protÚgÚes
// Mode grille:
GLOBAL byte Snap_Mode; // Le mode grille est enclenché
GLOBAL byte Snap_Mode; // Le mode grille est enclenchÚ
GLOBAL short Snap_Largeur; // Largeur entre 2 points de la grille
GLOBAL short Snap_Hauteur; // Hauteur entre 2 points de la grille
GLOBAL short Snap_Decalage_X; // Position en X du point le + gauche
GLOBAL short Snap_Decalage_X; // Position en X du point le + à gauche
GLOBAL short Snap_Decalage_Y; // Position en Y du point le + en haut
// Mode trame:
GLOBAL byte Trame_Mode; // Le mode Trame est enclenché
GLOBAL byte Trame_Mode; // Le mode Trame est enclenchÚ
GLOBAL byte Trame[16][16]; // Sprite de la trame
GLOBAL word TRAME_PREDEFINIE[12][16]; // Trames préséfinies (compactées sur 16*16 bits)
GLOBAL word TRAME_PREDEFINIE[12][16]; // Trames prÚsÚfinies (compactÚes sur 16*16 bits)
GLOBAL short Trame_Largeur; // Largeur de la trame
GLOBAL short Trame_Hauteur; // Hauteur de la trame
// Mode colorize:
GLOBAL byte Colorize_Mode; // Le mode Colorize est enclenché
GLOBAL byte Colorize_Opacite; // Intensité du Colorize
GLOBAL byte Colorize_Mode; // Le mode Colorize est enclenchÚ
GLOBAL byte Colorize_Opacite; // IntensitÚ du Colorize
GLOBAL byte Colorize_Mode_en_cours; // Le type de Colorize en cours (0-2)
GLOBAL word Table_de_multiplication_par_Facteur_A[64];
GLOBAL word Table_de_multiplication_par_Facteur_B[64];
// Mode smooth:
GLOBAL byte Smooth_Mode; // Le mode Smooth est enclenché
GLOBAL byte Smooth_Mode; // Le mode Smooth est enclenchÚ
GLOBAL byte Smooth_Matrice[3][3]; // La matrice du Smooth actuel
// Mode Tiling:
GLOBAL byte Tiling_Mode; // Le mode Tiling est enclenché
GLOBAL short Tiling_Decalage_X; // Décalage du tiling en X
GLOBAL short Tiling_Decalage_Y; // Décalage du tiling en Y
GLOBAL byte Tiling_Mode; // Le mode Tiling est enclenchÚ
GLOBAL short Tiling_Decalage_X; // DÚcalage du tiling en X
GLOBAL short Tiling_Decalage_Y; // DÚcalage du tiling en Y
// Mode Mask
GLOBAL byte Mask_Mode; // Le mode Masque est enclenché
GLOBAL byte Mask_Mode; // Le mode Masque est enclenchÚ
GLOBAL byte Mask[256]; // Tableau des couleurs constituant le masque
// Mode loupe:
@ -439,7 +440,7 @@ GLOBAL word TABLE_ZOOM[NB_FACTEURS_DE_ZOOM][512];
extern word FACTEUR_ZOOM[NB_FACTEURS_DE_ZOOM];
#endif
// Données sur les ellipses et les cercles:
// DonnÚes sur les ellipses et les cercles:
GLOBAL dword Table_des_carres[1025];
GLOBAL long Ellipse_Curseur_X;
@ -452,36 +453,36 @@ GLOBAL long Cercle_Curseur_X;
GLOBAL long Cercle_Curseur_Y;
GLOBAL long Cercle_Limite;
// Données sur les dégradés:
// DonnÚes sur les dÚgradÚs:
GLOBAL short Degrade_Borne_Inferieure; // Plus petite couleur englobée par le dégradé
GLOBAL short Degrade_Borne_Superieure; // Plus grande couleur englobée par le dégradé
GLOBAL int Degrade_Inverse; // Booléen "Le dégradé est en réalité inversé"
GLOBAL short Degrade_Borne_Inferieure; // Plus petite couleur englobÚe par le dÚgradÚ
GLOBAL short Degrade_Borne_Superieure; // Plus grande couleur englobÚe par le dÚgradÚ
GLOBAL int Degrade_Inverse; // BoolÚen "Le dÚgradÚ est en rÚalitÚ inversÚ"
GLOBAL long Degrade_Intervalle_bornes; // = Abs(Degrade_Borne_Inferieure-Degrade_Borne_Superieure)+1
GLOBAL long Degrade_Intervalle_total; // Valeur maximum des indices passés … la fonction de dégradé (!!! >0 !!!)
GLOBAL long Degrade_Melange_aleatoire; // Facteur de mélange (1-256+) du dégradé
GLOBAL fonction_degrade Traiter_degrade; // Fonction de traitement du dégradé, varie selon la méthode choisie par l'utilisateur.
GLOBAL long Degrade_Intervalle_total; // Valeur maximum des indices passÚs à la fonction de dÚgradÚ (!!! >0 !!!)
GLOBAL long Degrade_Melange_aleatoire; // Facteur de mÚlange (1-256+) du dÚgradÚ
GLOBAL fonction_degrade Traiter_degrade; // Fonction de traitement du dÚgradÚ, varie selon la mÚthode choisie par l'utilisateur.
GLOBAL fonction_afficheur Traiter_pixel_de_degrade; // Redirection de l'affichage
GLOBAL struct T_Degrade_Tableau Degrade_Tableau[16]; // Données de tous les dégradés
GLOBAL int Degrade_Courant; // Indice du tableau correspondant au dégradé courant
GLOBAL struct T_Degrade_Tableau Degrade_Tableau[16]; // DonnÚes de tous les dÚgradÚs
GLOBAL int Degrade_Courant; // Indice du tableau correspondant au dÚgradÚ courant
// Données sur le Spray:
// DonnÚes sur le Spray:
GLOBAL byte Spray_Mode; // Mode Mono(1) ou Multicolore(0)
GLOBAL short Spray_Size; // DiamŠtre du spray en pixels
GLOBAL byte Spray_Delay; // Délai en VBLs entre 2 "pschiitt"
GLOBAL byte Spray_Mono_flow; // Nombre de pixels qui sortent en mˆme temps en mono
GLOBAL short Spray_Size; // Diamètre du spray en pixels
GLOBAL byte Spray_Delay; // DÚlai en VBLs entre 2 "pschiitt"
GLOBAL byte Spray_Mono_flow; // Nombre de pixels qui sortent en même temps en mono
GLOBAL byte Spray_Multi_flow[256]; // Idem pour chaque couleur
// Données diverses sur le programme:
// DonnÚes diverses sur le programme:
GLOBAL byte Sortir_du_programme;
GLOBAL char Repertoire_du_programme[256]; // Répertoire dans lequel se trouve le programme
GLOBAL char Repertoire_initial[256]; // Répertoire … partir duquel … été lancé le programme
GLOBAL char Repertoire_du_programme[256]; // RÚpertoire dans lequel se trouve le programme
GLOBAL char Repertoire_initial[256]; // RÚpertoire à partir duquel à ÚtÚ lancÚ le programme
GLOBAL byte Fore_color;
GLOBAL byte Back_color;
GLOBAL byte Mode_de_dessin_en_cours;
@ -489,7 +490,7 @@ GLOBAL byte Courbe_en_cours;
GLOBAL byte Ligne_en_cours;
GLOBAL byte Couleur_debut_palette;
GLOBAL byte Un_fichier_a_ete_passe_en_parametre;
GLOBAL byte Une_resolution_a_ete_passee_en_parametre; // utilisée uniquement si la variable précédente est … 1
GLOBAL byte Une_resolution_a_ete_passee_en_parametre; // utilisÚe uniquement si la variable prÚcÚdente est à 1
// Variables concernant l'OBJ DIVERS
@ -512,13 +513,13 @@ GLOBAL word MODE_X_Largeur_de_ligne;
GLOBAL dword MODE_X_Valeur_initiale_de_esi;
GLOBAL dword MODE_X_Valeur_initiale_de_edi;
// Partie concernant le VESA:
GLOBAL byte Granularite; // Facteur de gestion de la granularité de la carte
GLOBAL byte Granularite; // Facteur de gestion de la granularitÚ de la carte
GLOBAL byte VESA_Erreur;
GLOBAL byte * VESA_WinFuncPtr; // Handler software de changement de banque
GLOBAL word * VESA_Liste_des_modes;
GLOBAL dword VESA_Decalage_synchro;
GLOBAL word VESA_Largeur_ecran_en_dword;
GLOBAL byte VESA_Banque_en_cours; // Variable normalement locale VIDEO.ASM
GLOBAL byte VESA_Banque_en_cours; // Variable normalement locale à VIDEO.ASM
GLOBAL byte VESA_Derniere_banque_Fenetre_A_utilisee;
GLOBAL byte VESA_Derniere_banque_Fenetre_B_utilisee;
GLOBAL fonction_action VESA_Change_banque_lecture;
@ -529,7 +530,7 @@ GLOBAL byte VESA_Version_Decimale;
GLOBAL char VESA_Constructeur[TAILLE_NOM_CONSTRUCTEUR+1];
GLOBAL word VESA_Taille_memoire;
// Les différents sprites:
// Les diffÚrents sprites:
GLOBAL byte BLOCK_MENU[HAUTEUR_MENU][LARGEUR_MENU];
GLOBAL byte SPRITE_MENU[NB_SPRITES_MENU][HAUTEUR_SPRITE_MENU][LARGEUR_SPRITE_MENU];
@ -542,19 +543,19 @@ GLOBAL byte Fonte_fun [256*8*8];
GLOBAL byte Fonte_help [315][6][8];
GLOBAL byte * Fonte;
// Les données de l'aide:
// Les donnÚes de l'aide:
GLOBAL struct Section_d_aide Table_d_aide[NB_SECTIONS_AIDE];
GLOBAL byte Section_d_aide_en_cours; // Indice de la table d'aide en cours de consultation
GLOBAL word Position_d_aide_en_cours; // Numéro de la ligne d'aide en cours de consultation
GLOBAL word Position_d_aide_en_cours; // NumÚro de la ligne d'aide en cours de consultation
// Données sur les opérations
// DonnÚes sur les opÚrations
GLOBAL word Operation_avant_interruption; // Nø de l'opération en cours avant l'utilisation d'une interruption
GLOBAL word Operation_en_cours; // Nø de l'opération en cours
GLOBAL word Operation_Pile[TAILLE_PILE_OPERATIONS]; // Pile simplifiée
GLOBAL word Operation_avant_interruption; // N° de l'opÚration en cours avant l'utilisation d'une interruption
GLOBAL word Operation_en_cours; // N° de l'opÚration en cours
GLOBAL word Operation_Pile[TAILLE_PILE_OPERATIONS]; // Pile simplifiÚe
GLOBAL byte Operation_Taille_pile; // Taille effective de la pile (0=vide)
GLOBAL byte Operation_dans_loupe; // Indique si l'opération a commencé dans la partie Zoomée ou non
GLOBAL byte Operation_dans_loupe; // Indique si l'opÚration a commencÚ dans la partie ZoomÚe ou non
GLOBAL short Pipette_Couleur;
GLOBAL short Pipette_X;
@ -564,12 +565,12 @@ GLOBAL short Pipette_Y;
#ifdef VARIABLES_GLOBALES
byte CURSEUR_D_OPERATION[NB_OPERATIONS]=
{
FORME_CURSEUR_CIBLE , // Dessin la main continu
FORME_CURSEUR_CIBLE , // Dessin la main discontinu
FORME_CURSEUR_CIBLE , // Dessin la main point par point
FORME_CURSEUR_CIBLE , // Dessin à la main continu
FORME_CURSEUR_CIBLE , // Dessin à la main discontinu
FORME_CURSEUR_CIBLE , // Dessin à la main point par point
FORME_CURSEUR_CIBLE , // Lignes
FORME_CURSEUR_CIBLE , // Lignes reliées
FORME_CURSEUR_CIBLE , // Lignes centrées
FORME_CURSEUR_CIBLE , // Lignes reliÚes
FORME_CURSEUR_CIBLE , // Lignes centrÚes
FORME_CURSEUR_CIBLE_XOR , // Rectangle vide
FORME_CURSEUR_CIBLE_XOR , // Rectangle plein
FORME_CURSEUR_CIBLE , // Cercles vides
@ -580,18 +581,18 @@ GLOBAL short Pipette_Y;
FORME_CURSEUR_CIBLE , // Remplacer
FORME_CURSEUR_CIBLE_XOR , // Prise de brosse rectangulaire
FORME_CURSEUR_CIBLE , // Prise d'une brosse multiforme
FORME_CURSEUR_CIBLE_PIPETTE , // Récupération d'une couleur
FORME_CURSEUR_RECTANGLE_XOR , // Positionnement de la fenˆtre de loupe
FORME_CURSEUR_CIBLE , // Courbe 3 points
FORME_CURSEUR_CIBLE , // Courbe 4 points
FORME_CURSEUR_CIBLE_PIPETTE , // RÚcupÚration d'une couleur
FORME_CURSEUR_RECTANGLE_XOR , // Positionnement de la fenêtre de loupe
FORME_CURSEUR_CIBLE , // Courbe à 3 points
FORME_CURSEUR_CIBLE , // Courbe à 4 points
FORME_CURSEUR_CIBLE , // Spray
FORME_CURSEUR_CIBLE , // Polygone
FORME_CURSEUR_CIBLE , // Polyforme
FORME_CURSEUR_CIBLE , // Polyfill
FORME_CURSEUR_CIBLE , // Polyforme rempli
FORME_CURSEUR_MULTIDIRECTIONNEL, // Scroll
FORME_CURSEUR_CIBLE , // Cercles dégradés
FORME_CURSEUR_CIBLE , // Ellipses dégradées
FORME_CURSEUR_CIBLE , // Cercles dÚgradÚs
FORME_CURSEUR_CIBLE , // Ellipses dÚgradÚes
FORME_CURSEUR_ROTATE_XOR , // Faire tourner brosse
FORME_CURSEUR_CIBLE_XOR , // Etirer brosse
FORME_CURSEUR_CIBLE // Deformer brosse
@ -601,12 +602,12 @@ GLOBAL short Pipette_Y;
#endif
// Procédures … appeler: Opération,Mouse_K,Etat de la pile
// ProcÚdures à appeler: OpÚration,Mouse_K,Etat de la pile
GLOBAL struct
{
byte Effacer_curseur; // Booléen "il faut effacer le curseur pour l'opéra."
fonction_action Action; // Action appelée
byte Effacer_curseur; // BoolÚen "il faut effacer le curseur pour l'opÚra."
fonction_action Action; // Action appelÚe
} Operation[NB_OPERATIONS][3][TAILLE_PILE_OPERATIONS];
@ -620,11 +621,11 @@ GLOBAL byte SPRITE_DRIVE[NB_SPRITES_DRIVES][HAUTEUR_SPRITE_DRIVE][LARGEUR_SPRITE
// -- Section des informations sur les formats de fichiers ------------------
// Comptage du nb d'éléments dans la liste:
// Comptage du nb d'ÚlÚments dans la liste:
GLOBAL short Liste_Nb_elements;
GLOBAL short Liste_Nb_fichiers;
GLOBAL short Liste_Nb_repertoires;
// Tˆte de la liste chaŒnée:
// Tête de la liste chaînÚe:
GLOBAL struct Element_de_liste_de_fileselect * Liste_du_fileselect;
// ------------------- Inititialisation des formats connus -------------------
@ -650,7 +651,7 @@ void Rien_du_tout(void);
"PAL" // PAL
};
// Fonction … appeler pour vérifier la signature du fichier
// Fonction à appeler pour vÚrifier la signature du fichier
fonction_action Format_Test[NB_FORMATS_LOAD]=
{
Test_PKM, // PKM
@ -667,7 +668,7 @@ void Rien_du_tout(void);
Test_PAL // PAL
};
// Fonction appeler pour charger l'image
// Fonction à appeler pour charger l'image
fonction_action Format_Load[NB_FORMATS_LOAD]=
{
Load_PKM, // PKM
@ -684,7 +685,7 @@ void Rien_du_tout(void);
Load_PAL // PAL
};
// Fonction appeler pour sauvegarder l'image
// Fonction à appeler pour sauvegarder l'image
fonction_action Format_Save[NB_FORMATS_SAVE]=
{
Save_PKM, // PKM
@ -701,7 +702,7 @@ void Rien_du_tout(void);
Save_PAL // PAL
};
// indique si l'on doit considérer que l'image n'est plus modifiée
// indique si l'on doit considÚrer que l'image n'est plus modifiÚe
byte Format_Backup_done[NB_FORMATS_CONNUS]=
{
1, // PKM
@ -743,9 +744,9 @@ void Rien_du_tout(void);
extern byte Format_Commentaire[NB_FORMATS_CONNUS];
#endif
GLOBAL signed char Erreur_fichier; // 0: opération I/O OK
// 1: Erreur dŠs le début de l'opération
// 2: Erreur durant l'opération => données modifiées
GLOBAL signed char Erreur_fichier; // 0: opÚration I/O OK
// 1: Erreur dès le dÚbut de l'opÚration
// 2: Erreur durant l'opÚration => donnÚes modifiÚes
//-1: Interruption du chargement d'une preview
GLOBAL int Ligne_INI;
@ -754,7 +755,7 @@ GLOBAL fonction_afficheur Pixel_de_chargement;
GLOBAL fonction_lecteur Lit_pixel_de_sauvegarde;
/********************
* Spécifique à SDL *
* SpÚcifique Ó SDL *
********************/
GLOBAL SDL_Surface * Ecran_SDL;
#endif

12
graph.c
View File

@ -230,6 +230,7 @@ void Afficher_palette_du_menu_en_evitant_la_fenetre(byte * Table)
}
}
}
SDL_UpdateRect(Ecran_SDL,(LARGEUR_MENU+1)*Menu_Facteur_X,Menu_Ordonnee_avant_fenetre,Largeur,Hauteur);
}
@ -880,7 +881,8 @@ void Initialiser_mode_video(int Numero)
Lit_pixel= Lit_Pixel_SDL;
Clear_screen= Effacer_Tout_l_Ecran_SDL;
Display_screen= Afficher_partie_de_l_ecran_SDL;
Block= Block_SDL;
Block = Block_SDL;
Block_Fast = Block_SDL_Fast;
Pixel_Preview_Normal= Pixel_Preview_Normal_SDL;
Pixel_Preview_Loupe=Pixel_Preview_Loupe_SDL;
Ligne_horizontale_XOR=Ligne_horizontale_XOR_SDL;
@ -999,14 +1001,14 @@ void Afficher_pixel(word X,word Y,byte Couleur)
void Pixel_dans_barre_d_outil(word X,word Y,byte Couleur)
{
Block(X*Menu_Facteur_X,(Y*Menu_Facteur_Y)+Menu_Ordonnee,Menu_Facteur_X,Menu_Facteur_Y,Couleur);
Block_Fast(X*Menu_Facteur_X,(Y*Menu_Facteur_Y)+Menu_Ordonnee,Menu_Facteur_X,Menu_Facteur_Y,Couleur);
}
// Affichage d'un pixel dans la fenêtre (la fenêtre doŒt être visible)
void Pixel_dans_fenetre(word X,word Y,byte Couleur)
{
Block((X*Menu_Facteur_X)+Fenetre_Pos_X,(Y*Menu_Facteur_Y)+Fenetre_Pos_Y,Menu_Facteur_X,Menu_Facteur_Y,Couleur);
Block_Fast((X*Menu_Facteur_X)+Fenetre_Pos_X,(Y*Menu_Facteur_Y)+Fenetre_Pos_Y,Menu_Facteur_X,Menu_Facteur_Y,Couleur);
}
@ -1264,7 +1266,6 @@ void Afficher_menu(void)
for (Pos_Y=0;Pos_Y<HAUTEUR_MENU;Pos_Y++)
for (Pos_X=0;Pos_X<LARGEUR_MENU;Pos_X++)
Pixel_dans_menu(Pos_X,Pos_Y,BLOCK_MENU[Pos_Y][Pos_X]);
// Affichage de la bande grise sous la palette
Block(LARGEUR_MENU*Menu_Facteur_X,Menu_Ordonnee_Texte-Menu_Facteur_Y,Largeur_ecran-(LARGEUR_MENU*Menu_Facteur_X),9*Menu_Facteur_Y,CM_Clair);
@ -1293,6 +1294,7 @@ void Afficher_menu(void)
}
Print_nom_fichier();
}
SDL_UpdateRect(Ecran_SDL,0,Menu_Ordonnee,LARGEUR_MENU*Menu_Facteur_X,HAUTEUR_MENU*Menu_Facteur_Y);
}
}
@ -2826,6 +2828,7 @@ void Afficher_sprite_dans_menu(int Numero_bouton,int Numero_sprite)
Pixel_dans_menu(Pos_menu_X,Pos_menu_Y,Couleur);
BLOCK_MENU[Pos_menu_Y][Pos_menu_X]=Couleur;
}
SDL_UpdateRect(Ecran_SDL,0,Menu_Ordonnee*Menu_Facteur_Y,Pos_X*Menu_Facteur_X,Pos_Y*Menu_Facteur_Y);
}
// -- Redessiner la forme du pinceau dans le menu --
@ -2885,6 +2888,7 @@ void Afficher_pinceau_dans_menu(void)
BLOCK_MENU[Pos_menu_Y][Pos_menu_X]=Couleur;
}
}
SDL_UpdateRect(Ecran_SDL,0,0,LARGEUR_SPRITE_MENU*Menu_Facteur_X,HAUTEUR_SPRITE_MENU*Menu_Facteur_Y);
}
// -- Dessiner un pinceau prédéfini dans la fenêtre --

3688
moteur.c

File diff suppressed because it is too large Load Diff

View File

@ -6,13 +6,7 @@ void Pixel_SDL (word X,word Y,byte Couleur)
/* Affiche un pixel de la Couleur aux coords X;Y à l'écran */
{
*(((Uint8 *)Ecran_SDL->pixels) + Y * Ecran_SDL->pitch + X)=Couleur;
// SDL_UpdateRect(Ecran_SDL,X,Y,0,0);
}
static inline void Pixel_SDL_Fast(word X, word Y,byte Couleur)
/* Idem mais on ne rafraichit pas (plus rapide, mais ça ne s'affiche pas tout de suite) */
{
*(((byte *)Ecran_SDL->pixels) + Y * Ecran_SDL->pitch +X)=Couleur;
//SDL_UpdateRect(Ecran_SDL,X,Y,0,0);
}
byte Lit_Pixel_SDL (word X,word Y)
@ -28,11 +22,26 @@ void Effacer_Tout_l_Ecran_SDL (byte Couleur)
}
void Afficher_partie_de_l_ecran_SDL (word Largeur,word Hauteur,word Largeur_image)
/* Afficher une partie de l'image telle quelle sur l'écran */
{
puts("Afficher_partie_de_l_ecran_SDL non implémenté!\n");
byte* Dest=Ecran; //On va se mettre en 0,0 dans l'écran (EDI)
byte* Src=Principal_Decalage_Y*Largeur_image+Principal_Decalage_X+Principal_Ecran; //Coords de départ ds la source (ESI)
int dx;
for(dx=Hauteur;dx!=0;dx--)
// Pour chaque ligne
{
// On fait une copie de la ligne
memcpy(Dest,Src,Largeur);
// On passe à la ligne suivante
Src+=Largeur_image;
Dest+=Largeur_ecran;
}
SDL_UpdateRect(Ecran_SDL,0,0,Largeur,Hauteur);
}
void Block_SDL (word Debut_X,word Debut_Y,word Largeur,word Hauteur,byte Couleur)
void Block_SDL (word Debut_X,word Debut_Y,word Largeur,word Hauteur,byte Couleur)
/* On affiche un rectangle de la couleur donnée */
{
SDL_Rect rectangle;
@ -44,9 +53,22 @@ void Block_SDL (word Debut_X,word Debut_Y,word Largeur,word Haute
SDL_UpdateRect(Ecran_SDL,Debut_X,Debut_Y,Largeur,Hauteur);
}
void Pixel_Preview_Normal_SDL (word X,word Y,byte Couleur)
void Block_SDL_Fast (word Debut_X,word Debut_Y,word Largeur,word Hauteur,byte Couleur)
/* On affiche un rectangle de la couleur donnée */
{
puts("Pixel_Preview_Normal_SDL non implémenté!\n");
SDL_Rect rectangle;
rectangle.x=Debut_X;
rectangle.y=Debut_Y;
rectangle.w=Largeur;
rectangle.h=Hauteur;
SDL_FillRect(Ecran_SDL,&rectangle,Couleur);
}
void Pixel_Preview_Normal_SDL (word X,word Y,byte Couleur)
/* 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_VESA_LFB. */
{
Pixel_SDL(X-Principal_Decalage_X,Y-Principal_Decalage_Y,Couleur);
}
void Pixel_Preview_Loupe_SDL (word X,word Y,byte Couleur)
@ -72,21 +94,48 @@ void Display_brush_Color_SDL (word Pos_X,word Pos_Y,word Decalage_X,word Decala
void Display_brush_Mono_SDL (word Pos_X,word Pos_Y,word Decalage_X,word Decalage_Y,word Largeur,word Hauteur,byte Couleur_de_transparence,byte Couleur,word Largeur_brosse)
/* On affiche la brosse en monochrome */
{
int i,j;
for(i=0;i<Hauteur;i++)
byte* Dest=Pos_Y*Largeur_ecran+Pos_X+Ecran; //EDI=adr destination à l'écran
byte* Src=Largeur_brosse*Decalage_Y+Decalage_X+Brosse; //ESI=adr ds la brosse
int dx,cx;
for(dx=Hauteur;dx!=0;dx--)
//Pour chaque ligne
{
for(cx=Largeur;cx!=0;cx--)
//Pour chaque pixel
{
for(j=0;j<Largeur;j++)
{
if (*(Brosse+Decalage_X+Brosse_Largeur*Decalage_Y)==Couleur_de_transparence)
Pixel_SDL_Fast(Pos_X+j,Pos_Y+i,Couleur);
}
if (*Src!=Couleur_de_transparence)
*Dest=Couleur;
// On passe au pixel suivant
Src++;
Dest++;
}
SDL_UpdateRect(Ecran_SDL,Pos_X,Pos_Y,Largeur,Hauteur);
// On passe à la ligne suivante
Src+=Largeur_brosse-Largeur;
Dest+=Largeur_ecran-Largeur;
}
SDL_UpdateRect(Ecran_SDL,Pos_X,Pos_Y,Largeur,Hauteur);
}
void Clear_brush_SDL (word Pos_X,word Pos_Y,word Decalage_X,word Decalage_Y,word Largeur,word Hauteur,byte Couleur_de_transparence,word Largeur_image)
{
puts("Clear_brush_SDL non implémenté!\n");
byte* Dest=Ecran+Pos_X+Pos_Y*Largeur_ecran; //On va se mettre en 0,0 dans l'écran (EDI)
byte* Src=(Pos_Y+Principal_Decalage_Y)*Largeur_image+Pos_X+Principal_Decalage_X+Principal_Ecran; //Coords de départ ds la source (ESI)
int dx;
for(dx=Hauteur;dx!=0;dx--)
// Pour chaque ligne
{
// On fait une copie de la ligne
memcpy(Dest,Src,Largeur);
// On passe à la ligne suivante
Src+=Largeur_image;
Dest+=Largeur_ecran;
}
SDL_UpdateRect(Ecran_SDL,Pos_X,Pos_Y,Largeur,Hauteur);
}
void Remap_screen_SDL (word Pos_X,word Pos_Y,word Largeur,word Hauteur,byte * Table_de_conversion)
@ -95,12 +144,12 @@ void Remap_screen_SDL (word Pos_X,word Pos_Y,word Largeur,word Hauteur,b
}
void Afficher_une_ligne_ecran_SDL (word Pos_X,word Pos_Y,word Largeur,byte * Ligne)
/* On affiche toute une lignei de pixels. Utilisé pour les textes. */
/* On affiche toute une ligne de pixels. Utilisé pour les textes. */
{
int i;
for(i=0;i<Largeur;i++)
{
Pixel_SDL_Fast(Pos_X+i,Pos_Y,*(Ligne+i));
Pixel_SDL(Pos_X+i,Pos_Y,*(Ligne+i));
}
SDL_UpdateRect(Ecran_SDL,Pos_X,Pos_Y,Largeur,1);
}
@ -133,5 +182,6 @@ void Clear_brush_zoom_SDL (word Pos_X,word Pos_Y,word Decalage_X,word Dec
void Set_Mode_SDL()
/* On règle larésolution de l'écran */
{
Ecran_SDL=SDL_SetVideoMode(Largeur_ecran,Hauteur_ecran,8,SDL_SWSURFACE);
Ecran_SDL=SDL_SetVideoMode(Largeur_ecran,Hauteur_ecran,8,SDL_HWSURFACE|SDL_FULLSCREEN);
Ecran=Ecran_SDL->pixels;
}

View File

@ -1,5 +1,5 @@
#ifndef SDLSCREEN_H_INCLUDED
#define SDLSCREEN_H_INCLUDED
#ifndef SDLSCREEN_H_INCLUDED
#define SDLSCREEN_H_INCLUDED
#include <SDL/SDL.h>
#include "struct.h"
@ -8,6 +8,7 @@
byte Lit_Pixel_SDL (word X,word Y);
void Effacer_Tout_l_Ecran_SDL (byte Couleur);
void Block_SDL (word Debut_X,word Debut_Y,word Largeur,word Hauteur,byte Couleur);
void Block_SDL_Fast (word Debut_X,word Debut_Y,word Largeur,word Hauteur,byte Couleur);
void Pixel_Preview_Normal_SDL (word X,word Y,byte Couleur);
void Pixel_Preview_Loupe_SDL (word X,word Y,byte Couleur);
void Ligne_horizontale_XOR_SDL(word Pos_X,word Pos_Y,word Largeur);
@ -23,11 +24,9 @@
void Display_brush_Color_zoom_SDL(word Pos_X,word Pos_Y,word Decalage_X,word Decalage_Y,word Largeur,word Pos_Y_Fin,byte Couleur_de_transparence,word Largeur_brosse,byte * Buffer);
void Display_brush_Mono_zoom_SDL (word Pos_X,word Pos_Y,word Decalage_X,word Decalage_Y,word Largeur,word Pos_Y_Fin,byte Couleur_de_transparence,byte Couleur,word Largeur_brosse,byte * Buffer);
void Clear_brush_zoom_SDL (word Pos_X,word Pos_Y,word Decalage_X,word Decalage_Y,word Largeur,word Pos_Y_Fin,byte Couleur_de_transparence,word Largeur_image,byte * Buffer);
void Set_Mode_SDL();
void Set_Mode_SDL();
SDL_Rect ** Liste_Modes_Videos_SDL;
byte* Ecran;
SDL_Event* Evenement_SDL;
#endif // SDLSCREEN_H_INCLUDED
#endif // SDLSCREEN_H_INCLUDED

2136
shade.c

File diff suppressed because it is too large Load Diff