Implemented window sizing (and re-sizing) by draggin window edges.

Unfinished, more work needed in:
* command-line arguments (grafx2 myimage.pcx -width 640 -height 480)
* querying SDL for best modes
* detecting bad modes and recovering (though shift+return restores to window)
* saving settings in gfx2.ini.
Also, now the window's close button triggers Quit. Both events (quit, resize)
are only taken into account when all menus are closed.


git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@188 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
Yves Rizoud
2008-10-03 01:06:42 +00:00
parent 7bf71cd7b0
commit 7ba9a726dc
18 changed files with 284 additions and 274 deletions

View File

@@ -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<NB_MODES_VIDEO-6)
{
Debut_liste=Mode_choisi-5;
Position_curseur=5;
}
else
{
Debut_liste=2*NB_MODES_VIDEO-12;
Debut_liste=NB_MODES_VIDEO-12;
Position_curseur=Mode_choisi-Debut_liste;
}
}
@@ -1347,7 +1330,7 @@ void Bouton_Resol(void)
Position_curseur=Mode_choisi;
}
Fenetre_Definir_bouton_scroller(271,69,97,2*NB_MODES_VIDEO,12,Debut_liste); // 6
Fenetre_Definir_bouton_scroller(271,69,97,NB_MODES_VIDEO,12,Debut_liste); // 6
// Les 12 petits boutons indiquant l'état des modes
for (Temp=0; Temp<12; Temp++)
@@ -1450,7 +1433,7 @@ void Bouton_Resol(void)
default: // Boutons de tag des états des modes
Temp=Debut_liste+Bouton_clicke-7;
if (Temp) // On n'a pas le droit de cocher le mode 0 (320x200)
if (Temp) // On n'a pas le droit de cocher le mode fenêtré
{
Temp2=(Mode_video[Temp].Etat & 0x80)?128:0;
@@ -1480,7 +1463,7 @@ void Bouton_Resol(void)
if (Position_curseur<11)
Position_curseur++;
else
if (Debut_liste<2*NB_MODES_VIDEO-12)
if (Debut_liste<NB_MODES_VIDEO-12)
Debut_liste++;
Scroller_la_liste_des_modes(Debut_liste,Position_curseur,&Mode_choisi);
break;
@@ -1501,10 +1484,10 @@ void Bouton_Resol(void)
Position_curseur=11;
else
{
if (Debut_liste<2*NB_MODES_VIDEO-23)
if (Debut_liste<NB_MODES_VIDEO-23)
Debut_liste+=11;
else
Debut_liste=2*NB_MODES_VIDEO-12;
Debut_liste=NB_MODES_VIDEO-12;
}
Scroller_la_liste_des_modes(Debut_liste,Position_curseur,&Mode_choisi);
break;
@@ -1514,7 +1497,7 @@ void Bouton_Resol(void)
Scroller_la_liste_des_modes(Debut_liste,Position_curseur,&Mode_choisi);
break;
case SDLK_END : // End
Debut_liste=2*NB_MODES_VIDEO-12;
Debut_liste=NB_MODES_VIDEO-12;
Position_curseur=11;
Scroller_la_liste_des_modes(Debut_liste,Position_curseur,&Mode_choisi);
break;
@@ -1535,16 +1518,26 @@ void Bouton_Resol(void)
Redimentionner_image(Largeur_choisie,Hauteur_choisie);
if (Mode_video[Mode_choisi].Etat<=2)
Initialiser_mode_video(Mode_choisi);
Initialiser_mode_video(
Mode_video[Mode_choisi].Largeur,
Mode_video[Mode_choisi].Hauteur,
Mode_video[Mode_choisi].Fullscreen);
else
{
Erreur(0); // On signale à l'utilisateur que c'est un mode invalide
Initialiser_mode_video(Resolution_actuelle);
Initialiser_mode_video(
Mode_video[Resolution_actuelle].Largeur,
Mode_video[Resolution_actuelle].Hauteur,
Mode_video[Resolution_actuelle].Fullscreen);
}
Afficher_menu();
Afficher_ecran();
}
Mouse_X = Largeur_ecran >> 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