diff --git a/boutons.c b/boutons.c index 42bcc792..ff53aaa9 100644 --- a/boutons.c +++ b/boutons.c @@ -1206,6 +1206,7 @@ void Afficher_liste_modes(short Debut_liste, short Position_curseur) short Pos_Y; byte Couleur_texte,Couleur_fond; char Chaine[29]; + char *Ratio; for (Mode_courant=Debut_liste,Indice=0; Indice<12; Indice++,Mode_courant++) { @@ -1230,38 +1231,21 @@ void Afficher_liste_modes(short Debut_liste, short Position_curseur) } Num2str(Mode_video[Mode_courant].Largeur,Chaine,4); Num2str(Mode_video[Mode_courant].Hauteur,Chaine+4,4); - switch (Mode_video[Mode_courant].Mode) - { - case MODE_SDL : - memcpy(Chaine+8," SDL ",10); - break; - - } if(Mode_video[Mode_courant].Fullscreen == 1) - memcpy(Chaine+13,"Full",4); + memcpy(Chaine+8," Fullscreen ",15); else - memcpy(Chaine+13,"Win ",4); + memcpy(Chaine+8," Window ",15); - if (Mode_video[Mode_courant].Refresh>0) - { - Num2str(Mode_video[Mode_courant].Refresh,Chaine+18,2); - Chaine[20]=' '; - } + if (Mode_video[Mode_courant].Largeur*3 == Mode_video[Mode_courant].Hauteur*4) + Ratio=" 4/3 "; + else if (Mode_video[Mode_courant].Largeur*9 == Mode_video[Mode_courant].Hauteur*16) + Ratio="16/9 "; + else if (Mode_video[Mode_courant].Largeur*10 == Mode_video[Mode_courant].Hauteur*16) + Ratio="16/10 "; else - { - if (Mode_video[Mode_courant].Refresh==-1) - memcpy(Chaine+18," ",3); - else - { - Num2str(-Mode_video[Mode_courant].Refresh,Chaine+18,2); - Chaine[20]='i'; - } - } - memcpy(Chaine+21," ",2); - memcpy(Chaine+23,Mode_video[Mode_courant].Ratio,4); - Chaine[27]=' '; - Chaine[28]=0; + Ratio=" "; + strcat(Chaine,Ratio); Print_dans_fenetre(39,Pos_Y,Chaine,Couleur_texte,Couleur_fond); } @@ -1308,8 +1292,7 @@ void Bouton_Resol(void) Print_dans_fenetre(108, 37,"Height:" ,CM_Fonce,CM_Clair); Print_dans_fenetre( 16, 60,"OK" ,CM_Fonce,CM_Clair); Print_dans_fenetre( 55, 60,"X Y" ,CM_Fonce,CM_Clair); - Print_dans_fenetre(104, 60,"Mode Full" ,CM_Fonce,CM_Clair); - Print_dans_fenetre(183, 60,"Hz" ,CM_Fonce,CM_Clair); + Print_dans_fenetre(120, 60,"Win / Full" ,CM_Fonce,CM_Clair); Print_dans_fenetre(219, 60,"Ratio" ,CM_Fonce,CM_Clair); Print_dans_fenetre( 30,170,"\03" ,CM_Fonce,CM_Clair); Print_dans_fenetre( 62,170,"OK" ,CM_Fonce,CM_Clair); @@ -1330,14 +1313,14 @@ void Bouton_Resol(void) if (Mode_choisi>=6) { - if (Mode_choisi<2*NB_MODES_VIDEO-6) + if (Mode_choisi> 1; + Mouse_Y = Hauteur_ecran >> 1; + Set_mouse_position(); + Desenclencher_bouton(BOUTON_RESOL); Afficher_curseur(); @@ -1556,7 +1549,8 @@ void Bouton_Safety_resol(void) Effacer_curseur(); Desenclencher_bouton(BOUTON_LOUPE); - Initialiser_mode_video(MODE_320_200); + Initialiser_mode_video(640, 400, 0); + Resolution_actuelle=0; Afficher_menu(); Afficher_ecran(); @@ -2857,6 +2851,10 @@ int Meilleur_mode_video(void) short Temp_X,Temp_Y; int Mode; + // Si mode fenêtre, on reste dans ce mode. + if (Resolution_actuelle == 0) + return 0; + // On commence par borner les dimensions, ou du moins les rendre cohérentes if ((Ecran_original_X<=0) || (Config.Set_resolution_according_to==2)) Ecran_original_X=Principal_Largeur_image; @@ -2882,9 +2880,9 @@ int Meilleur_mode_video(void) Meilleure_hauteur=0; - for (Mode=MODE_320_200; Mode<=MODE_1024_768; Mode++) + for (Mode=0; Mode<=NB_MODES_VIDEO; Mode++) { - if (Mode_video[Mode].Etat<2) + if (Mode_video[Mode].Fullscreen && Mode_video[Mode].Etat<2) { Temp_X=Mode_video[Mode].Largeur; Temp_Y=Mode_video[Mode].Hauteur; @@ -3091,7 +3089,10 @@ void Load_picture(byte Image) Nouveau_mode=Meilleur_mode_video(); if ((Config.Auto_set_res) && (Nouveau_mode!=Resolution_actuelle)) { - Initialiser_mode_video(Nouveau_mode); + Initialiser_mode_video( + Mode_video[Nouveau_mode].Largeur, + Mode_video[Nouveau_mode].Hauteur, + Mode_video[Nouveau_mode].Fullscreen); Afficher_menu(); } else @@ -3177,7 +3178,10 @@ void Bouton_Reload(void) if ( ((Config.Auto_set_res) && (Nouveau_mode!=Resolution_actuelle)) && (!Une_resolution_a_ete_passee_en_parametre) ) { - Initialiser_mode_video(Nouveau_mode); + Initialiser_mode_video( + Mode_video[Nouveau_mode].Largeur, + Mode_video[Nouveau_mode].Hauteur, + Mode_video[Nouveau_mode].Fullscreen); Afficher_menu(); } else diff --git a/const.h b/const.h index 952dc110..b8fafb07 100644 --- a/const.h +++ b/const.h @@ -15,7 +15,7 @@ #define BETA2 0 // | #define ALPHA_BETA "ß" // Type de la version "Þ" ou "ß" #define DAT_DEBUT_INI_PAR_DEFAUT 0xF385 // Dans gfx2.dat, début du fichier gfx2.ini standard -#define NB_MODES_VIDEO 60 // Nombre de modes vidéo +#define NB_MODES_VIDEO 61 // Nombre de modes vidéo #define NB_BOUTONS 38 // Nombre de boutons à gérer #define NB_TOUCHES 134 // Nombre de combinaisons de touches #define NB_TOUCHES_SPECIALES 72 // Nombre de touches spéciales @@ -120,72 +120,6 @@ enum TYPES_DE_MODES_VIDEO MODE_XVESA // que les 2 plus grandes valeurs soient ces 2 modes!*/ }; - // Les différents modes vidéos (avec leur nø d'ordre) - -enum MODES_VIDEO -{ - MODE_320_200, // !!! MODE 0 !!! - MODE_320_224, - MODE_320_240, - MODE_320_256, - MODE_320_270, - MODE_320_282, - MODE_320_300, - MODE_320_360, - MODE_320_400, - MODE_320_448, - MODE_320_480, - MODE_320_512, - MODE_320_540, - MODE_320_564, - MODE_320_600, - MODE_360_200, // 15 - MODE_360_224, - MODE_360_240, - MODE_360_256, - MODE_360_270, - MODE_360_282, - MODE_360_300, - MODE_360_360, - MODE_360_400, - MODE_360_448, - MODE_360_480, - MODE_360_512, - MODE_360_540, - MODE_360_564, - MODE_360_600, - MODE_400_200, // 30 - MODE_400_224, - MODE_400_240, - MODE_400_256, - MODE_400_270, - MODE_400_282, - MODE_400_300, - MODE_400_360, - MODE_400_400, - MODE_400_448, - MODE_400_480, - MODE_400_512, - MODE_400_540, - MODE_400_564, - MODE_400_600, - MODE_640_224, // 45 - MODE_640_240, - MODE_640_256, - MODE_640_270, - MODE_640_300, - MODE_640_350, - MODE_640_400, - MODE_640_448, - MODE_640_480, - MODE_640_512, - MODE_640_540, - MODE_640_564, - MODE_640_600, - MODE_800_600, - MODE_1024_768 // 59 -}; - // Les différentes catégories de bouton: enum FAMILLES_DE_BOUTONS diff --git a/divers.c b/divers.c index a0078117..ab6d45e3 100644 --- a/divers.c +++ b/divers.c @@ -10,6 +10,7 @@ #include "moteur.h" #include "divers.h" #include "clavier.h" +#include "sdlscreen.h" // Gestion du mode texte de départ (pour pouvoir y retourner en cas de problème byte Recuperer_nb_lignes(void) @@ -69,7 +70,12 @@ void Attendre_fin_de_click(void) //On attend que l'utilisateur relache la souris. Tous les autres évènements //sont ignorés - while(SDL_PollEvent(&event) && event.type == SDL_MOUSEBUTTONUP); + while(SDL_PollEvent(&event)) + { + Gere_Evenement_SDL(&event); + if (event.type == SDL_MOUSEBUTTONUP) + break; + } //On indique à la gestion des E/S que le bouton est laché et on rend la main Mouse_K=0; @@ -119,6 +125,7 @@ void Get_input(void) if( SDL_PollEvent(&event)) /* Il y a un évènement en attente */ { + Gere_Evenement_SDL(&event); switch( event.type) { case SDL_MOUSEMOTION: @@ -869,6 +876,8 @@ word Get_key(void) { return Conversion_ANSI(event.key.keysym); } + else + Gere_Evenement_SDL(&event); } } diff --git a/divers.h b/divers.h index a987fc06..8bffd21a 100644 --- a/divers.h +++ b/divers.h @@ -59,7 +59,7 @@ byte Disk_map(byte Numero_de_lecteur); // Renseigne sur la lettre logique d'un lecteur // (utile pour tester si un lecteur de disquette est A: ou B: aux yeux du DOS) // -// Entrée: Octet = nø du lecteur (1=A, 2=B ...) +// Entrée: Octet = n° du lecteur (1=A, 2=B ...) // // Sortie: Octet = 0FFh : Pas de lecteur (???) // sinon: numéro représenatan la lettre logique du lecteur diff --git a/gfx2.cfg b/gfx2.cfg index 3099d78d..185b7a75 100644 Binary files a/gfx2.cfg and b/gfx2.cfg differ diff --git a/gfx2.ini b/gfx2.ini index 96fb7238..20c09284 100644 --- a/gfx2.ini +++ b/gfx2.ini @@ -286,4 +286,4 @@ ; Number of the default video mode | Numéro du mode vidéo par défaut au ; at startup (see the list by typing| démarrage (voir la liste en tapant ; "gfx2 /?" at the DOS prompt). | "gfx2 /?" sur la ligne de commande). - Default_video_mode = 53 ; (default 0) + Default_video_mode = 0 ; (default 0) diff --git a/global.h b/global.h index 11bacf80..e9bb5374 100644 --- a/global.h +++ b/global.h @@ -68,15 +68,10 @@ struct S_Mode_video short Largeur; short Hauteur; byte Mode; - word Facteur_X; - word Facteur_Y; - char Ratio[5]; - signed char Refresh; // <0 => entrelacé word Fullscreen; - void * Pointeur; byte Etat; // 0:Cool 1:OK ; 2:Bof ; 3:Naze ; si on rajoute +128 => incompatible }; -GLOBAL struct S_Mode_video Mode_video[2*NB_MODES_VIDEO]; +GLOBAL struct S_Mode_video Mode_video[NB_MODES_VIDEO]; GLOBAL struct @@ -115,6 +110,7 @@ GLOBAL Uint8* Etat_Du_Clavier; // Scancode de la touche en cours et etat des to #define MOD_SHIFT 0x1000 #define MOD_CTRL 0x2000 #define MOD_ALT 0x4000 +GLOBAL byte Quit_demande; // !=0 lorsque l'utilisateur demande la fermeture de fenêtre. GLOBAL byte Mouse_Facteur_de_correction_X; GLOBAL byte Mouse_Facteur_de_correction_Y; @@ -182,6 +178,8 @@ GLOBAL fonction_display_brush_Color_zoom Clear_brush_zoom; // Données sur les dimensions de l'écran +GLOBAL int Resize_Largeur; // \__ Positionnées lorsque l'utilisateur tire +GLOBAL int Resize_Hauteur; // / un bord de la fenêtre. 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. @@ -559,8 +557,8 @@ GLOBAL word Position_d_aide_en_cours; // Num // 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_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 diff --git a/graph.c b/graph.c index 7bc77022..679ce6c5 100644 --- a/graph.c +++ b/graph.c @@ -908,35 +908,46 @@ char * Libelle_mode(int Mode) void * Mode_X_Ptr; // Pointeur sur la table à utiliser pour le changement de // mode vidéo X -void Initialiser_mode_video(int Numero) +void Initialiser_mode_video(int Largeur, int Hauteur, int Fullscreen) { int Sensibilite_X; int Sensibilite_Y; + int Indice; + + // Valeurs raisonnables: minimum 320x200 + if (Largeur < 320) + Largeur = 320; + if (Hauteur < 200) + Hauteur = 200; + // La largeur doit être un multiple de 4 + Largeur = (Largeur + 3 ) & 0xFFFFFFFC; - if (Resolution_actuelle != Numero) + if (Largeur_ecran!=Largeur || + Hauteur_ecran!=Hauteur || + Mode_video[Resolution_actuelle].Fullscreen != Fullscreen) { - Largeur_ecran = Mode_video[Numero].Largeur; - Hauteur_ecran = Mode_video[Numero].Hauteur; - Plein_ecran = Mode_video[Numero].Fullscreen; + // Taille des menus + int Facteur; + if (Largeur/320 > Hauteur/200) + Facteur=Hauteur/200; + else + Facteur=Largeur/320; + + Largeur_ecran = Largeur; + Hauteur_ecran = Hauteur; + Plein_ecran = Fullscreen; switch (Config.Ratio) { case 1: // adapter tout - Menu_Facteur_X=Mode_video[Numero].Facteur_X; - Menu_Facteur_Y=Mode_video[Numero].Facteur_Y; + Menu_Facteur_X=Facteur; + Menu_Facteur_Y=Facteur; break; case 2: // adapter légèrement - Menu_Facteur_X=Mode_video[Numero].Facteur_X-1; + Menu_Facteur_X=Facteur-1; if (Menu_Facteur_X<1) Menu_Facteur_X=1; - Menu_Facteur_Y=Mode_video[Numero].Facteur_Y-1; + Menu_Facteur_Y=Facteur-1; if (Menu_Facteur_Y<1) Menu_Facteur_Y=1; - if ( (Mode_video[Numero].Facteur_XMode_video[Numero].Facteur_Y) - && (Menu_Facteur_X==Menu_Facteur_Y) ) - Menu_Facteur_X++; break; default: // ne pas adapter Menu_Facteur_X=1; @@ -948,7 +959,7 @@ void Initialiser_mode_video(int Numero) Buffer_de_ligne_horizontale=(byte *)malloc((Largeur_ecran>Principal_Largeur_image)?Largeur_ecran:Principal_Largeur_image); - switch (Mode_video[Numero].Mode) + switch (MODE_SDL) { case MODE_SDL: Pixel = Pixel_SDL; @@ -977,7 +988,19 @@ void Initialiser_mode_video(int Numero) Set_palette(Principal_Palette); - Resolution_actuelle = Numero; + if (!Fullscreen) + Resolution_actuelle=0; + else + for (Indice=1; Indice> 3; Menu_Ordonnee = Hauteur_ecran; @@ -986,13 +1009,8 @@ void Initialiser_mode_video(int Numero) Menu_Ordonnee_Texte = Hauteur_ecran-(Menu_Facteur_Y<<3); Bouton[BOUTON_CHOIX_COL].Largeur=(Menu_Taille_couleur<<3)-1; - Clip_mouse(); - Mouse_X = Largeur_ecran >> 1; - Mouse_Y = Hauteur_ecran >> 1; - Set_mouse_position(); - - Sensibilite_X = Config.Indice_Sensibilite_souris_X / Mode_video[Numero].Facteur_X; - Sensibilite_Y = Config.Indice_Sensibilite_souris_Y / Mode_video[Numero].Facteur_Y; + Sensibilite_X = Config.Indice_Sensibilite_souris_X; + Sensibilite_Y = Config.Indice_Sensibilite_souris_Y; Sensibilite_X>>=Mouse_Facteur_de_correction_X; Sensibilite_Y>>=Mouse_Facteur_de_correction_Y; Sensibilite_souris(Sensibilite_X?Sensibilite_X:1,Sensibilite_Y?Sensibilite_Y:1); @@ -1010,6 +1028,9 @@ void Initialiser_mode_video(int Numero) Calculer_donnees_loupe(); Calculer_limites(); Calculer_coordonnees_pinceau(); + + Resize_Largeur=0; + Resize_Hauteur=0; } @@ -3737,7 +3758,7 @@ void Fill(short * Limite_atteinte_Haut , short * Limite_atteinte_Bas, for (Ligne=Limite_courante_Haut;Ligne<=Limite_courante_Bas;Ligne++) { Ligne_modifiee=0; - // On va traiter le cas de la ligne nø Ligne. + // On va traiter le cas de la ligne n° Ligne. // On commence le traitement à la gauche de l'écran Debut_X=Limite_Gauche; @@ -3817,7 +3838,7 @@ void Fill(short * Limite_atteinte_Haut , short * Limite_atteinte_Bas, for (Ligne=Limite_courante_Bas;Ligne>=Limite_courante_Haut;Ligne--) { Ligne_modifiee=0; - // On va traiter le cas de la ligne nø Ligne. + // On va traiter le cas de la ligne n° Ligne. // On commence le traitement à la gauche de l'écran Debut_X=Limite_Gauche; diff --git a/graph.h b/graph.h index d6302284..1e141b01 100644 --- a/graph.h +++ b/graph.h @@ -28,7 +28,7 @@ void Calculer_coordonnees_pinceau(void); char* Libelle_mode(int Mode); -void Initialiser_mode_video(int Numero); +void Initialiser_mode_video(int Largeur, int Hauteur, int Fullscreen); void Pixel_dans_barre_d_outil(word X,word Y,byte Couleur); void Pixel_dans_fenetre(word X,word Y,byte Couleur); void Encadrer_couleur_menu(byte Couleur); diff --git a/init.c b/init.c index dbee176b..a0cb8398 100644 --- a/init.c +++ b/init.c @@ -1308,34 +1308,12 @@ void Initialisation_des_operations(void) void Definir_mode_video(int Numero, short Largeur, short Hauteur, byte Mode, - word Facteur_X, word Facteur_Y, - char * Ratio, - unsigned char Refresh, - word Plein_Ecran, - void * Pointeur) + word Plein_Ecran) { Mode_video[Numero].Largeur = Largeur; Mode_video[Numero].Hauteur = Hauteur; Mode_video[Numero].Mode = Mode; - Mode_video[Numero].Facteur_X = Facteur_X; - Mode_video[Numero].Facteur_Y = Facteur_Y; - strcpy(Mode_video[Numero].Ratio,Ratio); - Mode_video[Numero].Refresh = Refresh; - Mode_video[Numero].Fullscreen = 0; - Mode_video[Numero].Pointeur = Pointeur; - - // On passe aux modes plein écran - Numero += NB_MODES_VIDEO; - - Mode_video[Numero].Largeur = Largeur; - Mode_video[Numero].Hauteur = Hauteur; - Mode_video[Numero].Mode = Mode; - Mode_video[Numero].Facteur_X = Facteur_X; - Mode_video[Numero].Facteur_Y = Facteur_Y; - strcpy(Mode_video[Numero].Ratio,Ratio); - Mode_video[Numero].Refresh = Refresh; - Mode_video[Numero].Fullscreen = 1; - Mode_video[Numero].Pointeur = Pointeur; + Mode_video[Numero].Fullscreen = Plein_Ecran; } @@ -1343,71 +1321,89 @@ void Definir_mode_video(int Numero, void Definition_des_modes_video(void) { // Numero LargHaut Mode FXFY Ratio Ref WinOnly Pointeur - Definir_mode_video( MODE_320_200, 320,200,MODE_SDL ,1,1,"0.85", 71,0 ,NULL); - Definir_mode_video( MODE_320_224, 320,224,MODE_SDL ,1,1,"1.20", 51,0 ,NULL); - Definir_mode_video( MODE_320_240, 320,240,MODE_SDL ,1,1,"1.00", 60,0 ,NULL); - Definir_mode_video( MODE_320_256, 320,256,MODE_SDL ,1,1,"1.10", 58,0 ,NULL); - Definir_mode_video( MODE_320_270, 320,270,MODE_SDL ,1,1,"1.15", 64,0 ,NULL); - Definir_mode_video( MODE_320_282, 320,282,MODE_SDL ,1,1,"1.20", 52,0 ,NULL); - Definir_mode_video( MODE_320_300, 320,300,MODE_SDL ,1,1,"1.20",-49,0 ,NULL); - Definir_mode_video( MODE_320_360, 320,360,MODE_SDL ,1,1,"1.65", 71,0 ,NULL); - Definir_mode_video( MODE_320_400, 320,400,MODE_SDL ,1,2,"1.70", 71,0 ,NULL); - Definir_mode_video( MODE_320_448, 320,448,MODE_SDL ,1,2,"2.20", 51,0 ,NULL); - Definir_mode_video( MODE_320_480, 320,480,MODE_SDL ,1,2,"2.00", 60,0 ,NULL); - Definir_mode_video( MODE_320_512, 320,512,MODE_SDL ,1,2,"2.20", 58,0 ,NULL); - Definir_mode_video( MODE_320_540, 320,540,MODE_SDL ,1,2,"2.25", 64,0 ,NULL); - Definir_mode_video( MODE_320_564, 320,564,MODE_SDL ,1,2,"2.40", 59,0 ,NULL); - Definir_mode_video( MODE_320_600, 320,600,MODE_SDL ,1,2,"2.80", 51,0 ,NULL); + SDL_Rect** Modes; + int Indice=0; + Definir_mode_video( Indice++, 640,480,MODE_SDL, 0); + Definir_mode_video( Indice++, 320,200,MODE_SDL, 1); + Definir_mode_video( Indice++, 320,224,MODE_SDL, 1); + Definir_mode_video( Indice++, 320,240,MODE_SDL, 1); + Definir_mode_video( Indice++, 320,256,MODE_SDL, 1); + Definir_mode_video( Indice++, 320,270,MODE_SDL, 1); + Definir_mode_video( Indice++, 320,282,MODE_SDL, 1); + Definir_mode_video( Indice++, 320,300,MODE_SDL, 1); + Definir_mode_video( Indice++, 320,360,MODE_SDL, 1); + Definir_mode_video( Indice++, 320,400,MODE_SDL, 1); + Definir_mode_video( Indice++, 320,448,MODE_SDL, 1); + Definir_mode_video( Indice++, 320,480,MODE_SDL, 1); + Definir_mode_video( Indice++, 320,512,MODE_SDL, 1); + Definir_mode_video( Indice++, 320,540,MODE_SDL, 1); + Definir_mode_video( Indice++, 320,564,MODE_SDL, 1); + Definir_mode_video( Indice++, 320,600,MODE_SDL, 1); + Definir_mode_video( Indice++, 360,200,MODE_SDL, 1); + Definir_mode_video( Indice++, 360,224,MODE_SDL, 1); + Definir_mode_video( Indice++, 360,240,MODE_SDL, 1); + Definir_mode_video( Indice++, 360,256,MODE_SDL, 1); + Definir_mode_video( Indice++, 360,270,MODE_SDL, 1); + Definir_mode_video( Indice++, 360,282,MODE_SDL, 1); + Definir_mode_video( Indice++, 360,300,MODE_SDL, 1); + Definir_mode_video( Indice++, 360,360,MODE_SDL, 1); + Definir_mode_video( Indice++, 360,400,MODE_SDL, 1); + Definir_mode_video( Indice++, 360,448,MODE_SDL, 1); + Definir_mode_video( Indice++, 360,480,MODE_SDL, 1); + Definir_mode_video( Indice++, 360,512,MODE_SDL, 1); + Definir_mode_video( Indice++, 360,540,MODE_SDL, 1); + Definir_mode_video( Indice++, 360,564,MODE_SDL, 1); + Definir_mode_video( Indice++, 360,600,MODE_SDL, 1); + Definir_mode_video( Indice++, 400,200,MODE_SDL, 1); + Definir_mode_video( Indice++, 400,224,MODE_SDL, 1); + Definir_mode_video( Indice++, 400,240,MODE_SDL, 1); + Definir_mode_video( Indice++, 400,256,MODE_SDL, 1); + Definir_mode_video( Indice++, 400,270,MODE_SDL, 1); + Definir_mode_video( Indice++, 400,282,MODE_SDL, 1); + Definir_mode_video( Indice++, 400,300,MODE_SDL, 1); + Definir_mode_video( Indice++, 400,360,MODE_SDL, 1); + Definir_mode_video( Indice++, 400,400,MODE_SDL, 1); + Definir_mode_video( Indice++, 400,448,MODE_SDL, 1); + Definir_mode_video( Indice++, 400,480,MODE_SDL, 1); + Definir_mode_video( Indice++, 400,512,MODE_SDL, 1); + Definir_mode_video( Indice++, 400,540,MODE_SDL, 1); + Definir_mode_video( Indice++, 400,564,MODE_SDL, 1); + Definir_mode_video( Indice++, 400,600,MODE_SDL, 1); + Definir_mode_video( Indice++, 640,224,MODE_SDL, 1); + Definir_mode_video( Indice++, 640,240,MODE_SDL, 1); + Definir_mode_video( Indice++, 640,256,MODE_SDL, 1); + Definir_mode_video( Indice++, 640,270,MODE_SDL, 1); + //Definir_mode_video( Indice++, 640,282,MODE_SDL, 1); + Definir_mode_video( Indice++, 640,300,MODE_SDL, 1); + Definir_mode_video( Indice++, 640,350,MODE_SDL, 1); + //Definir_mode_video( Indice++, 640,360,MODE_SDL, 1); + Definir_mode_video( Indice++, 640,400,MODE_SDL, 1); + Definir_mode_video( Indice++, 640,448,MODE_SDL, 1); + Definir_mode_video( Indice++, 640,480,MODE_SDL, 1); + Definir_mode_video( Indice++, 640,512,MODE_SDL, 1); + Definir_mode_video( Indice++, 640,540,MODE_SDL, 1); + Definir_mode_video( Indice++, 640,564,MODE_SDL, 1); + Definir_mode_video( Indice++, 640,600,MODE_SDL, 1); + Definir_mode_video( Indice++, 800,600,MODE_SDL, 1); + Definir_mode_video(Indice++,1024,768,MODE_SDL, 1); - Definir_mode_video( MODE_360_200, 360,200,MODE_SDL ,1,1,"0.80", 72,0 ,NULL); - Definir_mode_video( MODE_360_224, 360,224,MODE_SDL ,1,1,"1.10", 51,0 ,NULL); - Definir_mode_video( MODE_360_240, 360,240,MODE_SDL ,1,1,"0.90", 61,0 ,NULL); - Definir_mode_video( MODE_360_256, 360,256,MODE_SDL ,1,1,"1.00", 57,0 ,NULL); - Definir_mode_video( MODE_360_270, 360,270,MODE_SDL ,1,1,"0.95", 57,0 ,NULL); - Definir_mode_video( MODE_360_282, 360,282,MODE_SDL ,1,1,"1.10", 52,0 ,NULL); - Definir_mode_video( MODE_360_300, 360,300,MODE_SDL ,1,1,"1.10",-49,0 ,NULL); - Definir_mode_video( MODE_360_360, 360,360,MODE_SDL ,1,1,"1.50", 72,0 ,NULL); - Definir_mode_video( MODE_360_400, 360,400,MODE_SDL ,1,2,"1.60", 72,0 ,NULL); - Definir_mode_video( MODE_360_448, 360,448,MODE_SDL ,1,2,"2.20", 51,0 ,NULL); - Definir_mode_video( MODE_360_480, 360,480,MODE_SDL ,1,2,"1.80", 61,0 ,NULL); - Definir_mode_video( MODE_360_512, 360,512,MODE_SDL ,1,2,"2.00", 57,0 ,NULL); - Definir_mode_video( MODE_360_540, 360,540,MODE_SDL ,1,2,"1.85", 57,0 ,NULL); - Definir_mode_video( MODE_360_564, 360,564,MODE_SDL ,1,2,"2.20", 60,0 ,NULL); - Definir_mode_video( MODE_360_600, 360,600,MODE_SDL ,1,2,"2.40", 45,0 ,NULL); + Modes = SDL_ListModes(NULL, SDL_FULLSCREEN); + if ((Modes != (SDL_Rect**)0) && (Modes!=(SDL_Rect**)-1)) + { + for (Indice=0; Modes[Indice]; Indice++) + { + int Indice2; + for (Indice2=0; Indice2 < NB_MODES_VIDEO; Indice2++) + if (Modes[Indice]->w == Mode_video[Indice2].Largeur && + Modes[Indice]->h == Mode_video[Indice2].Hauteur) + { + Mode_video[Indice2].Etat = 1; + break; + } + } + return; + } - Definir_mode_video( MODE_400_200, 400,200,MODE_SDL ,1,1,"0.75", 68,0 ,NULL); - Definir_mode_video( MODE_400_224, 400,224,MODE_SDL ,1,1,"1.00", 49,0 ,NULL); - Definir_mode_video( MODE_400_240, 400,240,MODE_SDL ,1,1,"0.85", 58,0 ,NULL); - Definir_mode_video( MODE_400_256, 400,256,MODE_SDL ,1,1,"0.90", 55,0 ,NULL); - Definir_mode_video( MODE_400_270, 400,270,MODE_SDL ,1,1,"0.90", 54,0 ,NULL); - Definir_mode_video( MODE_400_282, 400,282,MODE_SDL ,1,1,"1.00", 50,0 ,NULL); - Definir_mode_video( MODE_400_300, 400,300,MODE_SDL ,1,1,"1.00",-46,0 ,NULL); - Definir_mode_video( MODE_400_360, 400,360,MODE_SDL ,1,1,"1.40", 68,0 ,NULL); - Definir_mode_video( MODE_400_400, 400,400,MODE_SDL ,1,2,"1.50", 67,0 ,NULL); - Definir_mode_video( MODE_400_448, 400,448,MODE_SDL ,1,2,"1.95", 49,0 ,NULL); - Definir_mode_video( MODE_400_480, 400,480,MODE_SDL ,1,2,"1.70", 58,0 ,NULL); - Definir_mode_video( MODE_400_512, 400,512,MODE_SDL ,1,2,"1.80", 55,0 ,NULL); - Definir_mode_video( MODE_400_540, 400,540,MODE_SDL ,1,2,"1.90", 54,0 ,NULL); - Definir_mode_video( MODE_400_564, 400,564,MODE_SDL ,1,2,"2.00", 57,0 ,NULL); - Definir_mode_video( MODE_400_600, 400,600,MODE_SDL ,1,2,"2.20", 43,0 ,NULL); - - Definir_mode_video( MODE_640_224, 640,224,MODE_SDL ,2,1,"0.60", -1,0 ,NULL); - Definir_mode_video( MODE_640_240, 640,240,MODE_SDL ,2,1,"0.50", -1,0 ,NULL); - Definir_mode_video( MODE_640_256, 640,256,MODE_SDL ,2,1,"0.55", -1,0 ,NULL); - Definir_mode_video( MODE_640_270, 640,270,MODE_SDL ,2,1,"0.60", -1,0 ,NULL); - //Definir_mode_video( MODE_640_282, 640,282,MODE_SDL ,2,1,"?.??", -1,0 ,NULL); - Definir_mode_video( MODE_640_300, 640,300,MODE_SDL ,2,1,"0.60", -1,0 ,NULL); - Definir_mode_video( MODE_640_350, 640,350,MODE_SDL ,2,1,"0.75", -1,0 ,NULL); - //Definir_mode_video( MODE_640_360, 640,360,MODE_SDL ,2,1,"?.??", -1,0 ,NULL); - Definir_mode_video( MODE_640_400, 640,400,MODE_SDL ,2,2,"0.85", -1,0 ,NULL); - Definir_mode_video( MODE_640_448, 640,448,MODE_SDL ,2,2,"1.20", -1,0 ,NULL); - Definir_mode_video( MODE_640_480, 640,480,MODE_SDL ,2,2,"1.00", -1,0 ,NULL); - Definir_mode_video( MODE_640_512, 640,512,MODE_SDL ,2,2,"1.10", -1,0 ,NULL); - Definir_mode_video( MODE_640_540, 640,540,MODE_SDL ,2,2,"1.15", -1,0 ,NULL); - Definir_mode_video( MODE_640_564, 640,564,MODE_SDL ,2,2,"1.25", -1,0 ,NULL); - Definir_mode_video( MODE_640_600, 640,600,MODE_SDL ,2,2,"1.45", -1,0 ,NULL); - Definir_mode_video( MODE_800_600, 800,600,MODE_SDL ,2,2,"1.00", -1,0 ,NULL); - Definir_mode_video(MODE_1024_768,1024,768,MODE_SDL ,3,3,"1.00", -1,0 ,NULL); } //--------------------------------------------------------------------------- @@ -1493,8 +1489,8 @@ word Ordonnancement[NB_TOUCHES]= 0x200+BOUTON_BROSSE, // 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 @@ -1631,8 +1627,8 @@ byte Numero_option[NB_TOUCHES]= 69, // Restore brush 70, // Flip X 71, // Flip Y - 72, // 90ø brush rotation - 73, // 180ø brush rotation + 72, // 90° brush rotation + 73, // 180° brush rotation 74, // Stretch brush 75, // Distort brush 76, // Outline brush @@ -1789,8 +1785,6 @@ int Charger_CFG(int Tout_charger) } break; case CHUNK_MODES_VIDEO: // Modes vidéo - if ((Chunk.Taille/sizeof(CFG_Mode_video))!=NB_MODES_VIDEO) - goto Erreur_lecture_config; for (Indice=1; Indice<=NB_MODES_VIDEO; Indice++) { if (!read_byte(Handle, &CFG_Mode_video.Etat) || diff --git a/loadsave.c b/loadsave.c index 455a9f18..2c1fcf96 100644 --- a/loadsave.c +++ b/loadsave.c @@ -4601,7 +4601,7 @@ void PI1_8b_to_16p(byte * Src,byte * Dst) 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 + // Pour décoder le pixel n°i, il faut traiter les 4 words sur leur bit // correspondant à celui du masque Dst[i]=((w0 & masque)?0x01:0x00) | @@ -4624,7 +4624,7 @@ void PI1_16p_to_8b(byte * Src,byte * Dst) 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 + // Pour coder le pixel n°i, il faut modifier les 4 words sur leur bit // correspondant à celui du masque w0|=(Src[i] & 0x01)?masque:0x00; diff --git a/main.c b/main.c index 99e16dd3..9aa1f311 100644 --- a/main.c +++ b/main.c @@ -261,11 +261,12 @@ void Analyse_de_la_ligne_de_commande(int argc,char * argv[]) Afficher_syntaxe(); exit(0); } - +/* Resolution_actuelle=Str2num(argv[Option2]); // Mode désiré par l'utilisateur if ( (Resolution_actuelleMODE_1024_768) ) Erreur(ERREUR_NUMERO_MODE); Une_resolution_a_ete_passee_en_parametre=Un_fichier_a_ete_passe_en_parametre; +*/ } break; @@ -385,6 +386,7 @@ void Initialisation_du_programme(int argc,char * argv[]) // On initialise les données sur l'état du programme: // Donnée sur la sortie du programme: + Quit_demande=0; Sortir_du_programme=0; // Données sur l'état du menu: Pixel_dans_menu=Pixel_dans_barre_d_outil; @@ -548,7 +550,10 @@ void Initialisation_du_programme(int argc,char * argv[]) Buffer_de_ligne_horizontale=NULL; Resolution_actuelle=-1; // On n'était pas dans un mode graphique - Initialiser_mode_video(Mode_dans_lequel_on_demarre); + Initialiser_mode_video( + Mode_video[Mode_dans_lequel_on_demarre].Largeur, + Mode_video[Mode_dans_lequel_on_demarre].Hauteur, + Mode_video[Mode_dans_lequel_on_demarre].Fullscreen); Principal_Largeur_image=Largeur_ecran; Principal_Hauteur_image=Hauteur_ecran; diff --git a/moteur.c b/moteur.c index d4801c14..8819e577 100644 --- a/moteur.c +++ b/moteur.c @@ -441,8 +441,27 @@ void Gestion_principale(void) { Get_input(); + // Redimensionnement demandé + if (Resize_Largeur || Resize_Hauteur) + { + Effacer_curseur(); + Initialiser_mode_video(Resize_Largeur, Resize_Hauteur, 0); + Mode_video[0].Largeur = Largeur_ecran; + Mode_video[0].Hauteur = Hauteur_ecran; + // Remise à zero des variables indiquant le Redimensionnement demandé + Afficher_menu(); + Afficher_ecran(); + Afficher_curseur(); + } + + // Evenement de fermeture + if (Quit_demande) + { + Quit_demande=0; + Bouton_Quit(); + } + // Gestion des touches - if (Touche) { for (Indice_Touche=0;(Indice_ToucheB=(8/3) * C->P - *X3=Round((BX+X4)/2.0); // ú _/úú P3 P2=milieu de [P1,B] + CY=(float)(Y1+Y4)/2.0; // · \·· P2 -_\|/ : courbe + // · \ ·*· * : point important + BX=CX+((8.0/3.0)*(Pinceau_X-CX));// · | ·· · : pointillÚ + BY=CY+((8.0/3.0)*(Pinceau_Y-CY));// · |P ·· B + // C *·····*·········* P=Pos. du pinceau + *X2=Round((BX+X1)/2.0); // · | ·· C=milieu de [P1,P4] + *Y2=Round((BY+Y1)/2.0); // · | ·· B=point tel que + // · / ·*· C->B=(8/3) * C->P + *X3=Round((BX+X4)/2.0); // · _/·· P3 P2=milieu de [P1,B] *Y3=Round((BY+Y4)/2.0); // P4*-- P3=milieu de [P4,B] } @@ -3320,7 +3320,7 @@ void Tourner_brosse_12_0(void) Operation_PUSH(1); // Etat précédent if ((Config.Coords_rel) && (Menu_visible)) - Print_dans_menu("Angle: 0ø ",0); + Print_dans_menu("Angle: 0° ",0); } else { diff --git a/palette.c b/palette.c index 145c0fac..85ea4d99 100644 --- a/palette.c +++ b/palette.c @@ -829,7 +829,7 @@ void Bouton_Palette(void) Fore_color=Premiere_couleur=Derniere_couleur=Debut_block=Fin_block=Couleur_temporaire; Tagger_intervalle_palette(Debut_block,Fin_block); - // Affichage du nø de la couleur sélectionnée + // Affichage du n° de la couleur sélectionnée Block(Fenetre_Pos_X+(Menu_Facteur_X*261),Fenetre_Pos_Y+(Menu_Facteur_Y*58),Menu_Facteur_X*32,Menu_Facteur_Y*7,CM_Clair); Num2str(Fore_color,Chaine,3); Print_dans_fenetre(237,58,Chaine,CM_Noir,CM_Clair); @@ -856,7 +856,7 @@ void Bouton_Palette(void) Debut_block=Premiere_couleur; Fin_block=Couleur_temporaire; - // Affichage du nø de la couleur sélectionnée + // Affichage du n° de la couleur sélectionnée Num2str(Debut_block,Chaine ,3); Num2str(Fin_block ,Chaine+4,3); Chaine[3]=26; // Flèche vers la droite @@ -873,7 +873,7 @@ void Bouton_Palette(void) Debut_block=Couleur_temporaire; Fin_block=Premiere_couleur; - // Affichage du nø de la couleur sélectionnée + // Affichage du n° de la couleur sélectionnée Num2str(Debut_block,Chaine ,3); Num2str(Fin_block ,Chaine+4,3); Chaine[3]=26; // Flèche vers la droite @@ -890,7 +890,7 @@ void Bouton_Palette(void) Debut_block=Fin_block=Premiere_couleur; Block(Fenetre_Pos_X+(Menu_Facteur_X*176),Fenetre_Pos_Y+(Menu_Facteur_Y*172),Menu_Facteur_X*84,Menu_Facteur_Y*7,CM_Clair); - // Affichage du nø de la couleur sélectionnée + // Affichage du n° de la couleur sélectionnée Block(Fenetre_Pos_X+(Menu_Facteur_X*261),Fenetre_Pos_Y+(Menu_Facteur_Y*58),Menu_Facteur_X*32,Menu_Facteur_Y*7,CM_Clair); Num2str(Fore_color,Chaine,3); Print_dans_fenetre(237,58,Chaine,CM_Noir,CM_Clair); @@ -1082,7 +1082,7 @@ void Bouton_Palette(void) // On déplace le bloc vers les modifs: Derniere_couleur=Fin_block=Couleur_temporaire+Premiere_couleur-1; Fore_color=Premiere_couleur=Debut_block=Couleur_temporaire; - // On raffiche le nø des bornes du bloc: + // On raffiche le n° des bornes du bloc: if (Debut_block!=Fin_block) { // Cas d'un bloc multi-couleur @@ -1124,7 +1124,7 @@ void Bouton_Palette(void) // On déplace le bloc vers les modifs: Derniere_couleur=Fin_block=((Couleur_temporaire+Fin_block-Debut_block<=255)?(Couleur_temporaire+Fin_block-Debut_block):255); Fore_color=Premiere_couleur=Debut_block=Couleur_temporaire; - // On raffiche le nø des bornes du bloc: + // On raffiche le n° des bornes du bloc: if (Debut_block!=Fin_block) { // Cas d'un bloc multi-couleur @@ -1606,7 +1606,7 @@ void Bouton_Palette(void) Palette_Reafficher_jauges(Jauge_rouge,Jauge_verte,Jauge_bleue,Palette_de_travail,Debut_block,Fin_block); Effacer_curseur(); Tagger_intervalle_palette(Debut_block,Fin_block); - // Affichage du nø de la couleur sélectionnée + // Affichage du n° de la couleur sélectionnée Num2str(Fore_color,Chaine,3); Print_dans_fenetre(237,58,Chaine,CM_Noir,CM_Clair); // Affichage dans le block de visu de la couleur en cours @@ -1626,7 +1626,7 @@ void Bouton_Palette(void) Palette_Reafficher_jauges(Jauge_rouge,Jauge_verte,Jauge_bleue,Palette_de_travail,Debut_block,Fin_block); Effacer_curseur(); Tagger_intervalle_palette(Debut_block,Fin_block); - // Affichage du nø de la couleur sélectionnée + // Affichage du n° de la couleur sélectionnée Num2str(Fore_color,Chaine,3); Print_dans_fenetre(237,58,Chaine,CM_Noir,CM_Clair); // Affichage dans le block de visu de la couleur en cours @@ -1695,7 +1695,7 @@ void Bouton_Palette(void) Fore_color=Premiere_couleur=Derniere_couleur=Debut_block=Fin_block=Couleur; Tagger_intervalle_palette(Debut_block,Fin_block); - // Affichage du nø de la couleur sélectionnée + // Affichage du n° de la couleur sélectionnée Block(Fenetre_Pos_X+(Menu_Facteur_X*261),Fenetre_Pos_Y+(Menu_Facteur_Y*58),Menu_Facteur_X*32,Menu_Facteur_Y*7,CM_Clair); Num2str(Fore_color,Chaine,3); Print_dans_fenetre(237,58,Chaine,CM_Noir,CM_Clair); diff --git a/readini.c b/readini.c index f7239367..d47fa746 100644 --- a/readini.c +++ b/readini.c @@ -606,7 +606,7 @@ int Charger_INI(struct S_Config * Conf) if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Default_video_mode",1,Valeurs))) goto Erreur_Retour; - if ((Valeurs[0]MODE_1024_768)) + if ((Valeurs[0]<0) || (Valeurs[0]>NB_MODES_VIDEO)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Resolution_par_defaut=Valeurs[0]; diff --git a/sdlscreen.c b/sdlscreen.c index 81667b43..5004eaed 100644 --- a/sdlscreen.c +++ b/sdlscreen.c @@ -436,12 +436,37 @@ void Clear_brush_zoom_SDL (word Pos_X,word Pos_Y,word Decalage_X,word Dec void Set_Mode_SDL() /* On règle la résolution de l'écran */ { - Ecran_SDL=SDL_SetVideoMode(Largeur_ecran,Hauteur_ecran,8,SDL_FULLSCREEN*Plein_ecran); + Ecran_SDL=SDL_SetVideoMode(Largeur_ecran,Hauteur_ecran,8,SDL_FULLSCREEN*Plein_ecran|SDL_RESIZABLE); if(Ecran_SDL != NULL) - Ecran=Ecran_SDL->pixels; + { + // Vérification du mode obtenu (ce n'est pas toujours celui demandé) + if (Ecran_SDL->w != Largeur_ecran || Ecran_SDL->h != Hauteur_ecran) + { + DEBUG("Erreur mode video obtenu différent de celui demandé !!",0); + Largeur_ecran = Ecran_SDL->w; + Hauteur_ecran = Ecran_SDL->h; + } + Ecran=Ecran_SDL->pixels; + } else DEBUG("Erreur changement de mode video !!",0); SDL_ShowCursor(0); // Cache le curseur SDL, on le gère en soft } +// Fonction qui filtre les evenements génériques. +void Gere_Evenement_SDL(SDL_Event * event) +{ + // Redimensionnement fenetre + if (event->type == SDL_VIDEORESIZE ) + { + Resize_Largeur = event->resize.w; + Resize_Hauteur = event->resize.h; + } + // Fermeture + if (event->type == SDL_QUIT ) + { + Quit_demande=1; + } +} + diff --git a/sdlscreen.h b/sdlscreen.h index 1d237256..b7587188 100644 --- a/sdlscreen.h +++ b/sdlscreen.h @@ -25,6 +25,7 @@ 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 Gere_Evenement_SDL(SDL_Event * event); SDL_Rect ** Liste_Modes_Videos_SDL; byte* Ecran;