Windows restore their background. Fixes/speeds-up some refreshes, and prepares for pop-up windows
git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@237 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
parent
e91ef156b1
commit
8a1e44ed30
2
global.h
2
global.h
@ -327,7 +327,7 @@ 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 byte Fenetre;
|
||||||
|
|
||||||
GLOBAL word Fenetre_Pos_X; // Position du bord gauche de la fenêtre dans l'écran
|
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_Pos_Y; // Position du bord haut de la fenêtre dans l'écran
|
||||||
|
|||||||
6
graph.c
6
graph.c
@ -1373,7 +1373,7 @@ void Afficher_menu(void)
|
|||||||
// Affichage des couleurs de travail
|
// Affichage des couleurs de travail
|
||||||
Afficher_foreback();
|
Afficher_foreback();
|
||||||
|
|
||||||
if (!Une_fenetre_est_ouverte)
|
if (!Fenetre)
|
||||||
{
|
{
|
||||||
if ((Mouse_Y<Menu_Ordonnee) &&
|
if ((Mouse_Y<Menu_Ordonnee) &&
|
||||||
( (!Loupe_Mode) || (Mouse_X<Principal_Split) || (Mouse_X>=Principal_X_Zoom) ))
|
( (!Loupe_Mode) || (Mouse_X<Principal_Split) || (Mouse_X>=Principal_X_Zoom) ))
|
||||||
@ -2380,7 +2380,7 @@ void Afficher_curseur(void)
|
|||||||
|
|
||||||
if ( ( (Mouse_Y<Menu_Ordonnee)
|
if ( ( (Mouse_Y<Menu_Ordonnee)
|
||||||
&& ( (!Loupe_Mode) || (Mouse_X<Principal_Split) || (Mouse_X>=Principal_X_Zoom) ) )
|
&& ( (!Loupe_Mode) || (Mouse_X<Principal_Split) || (Mouse_X>=Principal_X_Zoom) ) )
|
||||||
|| (Une_fenetre_est_ouverte) || (Forme_curseur==FORME_CURSEUR_SABLIER) )
|
|| (Fenetre) || (Forme_curseur==FORME_CURSEUR_SABLIER) )
|
||||||
Forme=Forme_curseur;
|
Forme=Forme_curseur;
|
||||||
else
|
else
|
||||||
Forme=FORME_CURSEUR_FLECHE;
|
Forme=FORME_CURSEUR_FLECHE;
|
||||||
@ -2678,7 +2678,7 @@ void Effacer_curseur(void)
|
|||||||
if ( ( (Mouse_Y<Menu_Ordonnee)
|
if ( ( (Mouse_Y<Menu_Ordonnee)
|
||||||
&& ( (!Loupe_Mode) || (Mouse_X<Principal_Split)
|
&& ( (!Loupe_Mode) || (Mouse_X<Principal_Split)
|
||||||
|| (Mouse_X>=Principal_X_Zoom) ) )
|
|| (Mouse_X>=Principal_X_Zoom) ) )
|
||||||
|| (Une_fenetre_est_ouverte) || (Forme_curseur==FORME_CURSEUR_SABLIER) )
|
|| (Fenetre) || (Forme_curseur==FORME_CURSEUR_SABLIER) )
|
||||||
Forme=Forme_curseur;
|
Forme=Forme_curseur;
|
||||||
else
|
else
|
||||||
Forme=FORME_CURSEUR_FLECHE;
|
Forme=FORME_CURSEUR_FLECHE;
|
||||||
|
|||||||
2
main.c
2
main.c
@ -419,7 +419,7 @@ void Initialisation_du_programme(int argc,char * argv[])
|
|||||||
// Initialisation des opérations
|
// Initialisation des opérations
|
||||||
Initialisation_des_operations();
|
Initialisation_des_operations();
|
||||||
|
|
||||||
Une_fenetre_est_ouverte=0;
|
Fenetre=0;
|
||||||
|
|
||||||
// Charger les sprites et la palette
|
// Charger les sprites et la palette
|
||||||
Charger_DAT();
|
Charger_DAT();
|
||||||
|
|||||||
94
moteur.c
94
moteur.c
@ -50,6 +50,8 @@ byte Smooth_Mode_avant_annulation;
|
|||||||
byte Tiling_Mode_avant_annulation;
|
byte Tiling_Mode_avant_annulation;
|
||||||
fonction_effet Fonction_effet_avant_annulation;
|
fonction_effet Fonction_effet_avant_annulation;
|
||||||
|
|
||||||
|
byte * Fond_fenetre[8];
|
||||||
|
|
||||||
void Annuler_les_effets(void)
|
void Annuler_les_effets(void)
|
||||||
{
|
{
|
||||||
Shade_Mode_avant_annulation=Shade_Mode;
|
Shade_Mode_avant_annulation=Shade_Mode;
|
||||||
@ -133,6 +135,22 @@ char * TITRE_BOUTON[NB_BOUTONS]=
|
|||||||
"Color #" ,
|
"Color #" ,
|
||||||
"Hide tool bar "
|
"Hide tool bar "
|
||||||
};
|
};
|
||||||
|
// Sauvegarde un bloc (généralement l'arrière-plan d'une fenêtre)
|
||||||
|
void Sauve_fond(byte **Buffer, int Pos_X, int Pos_Y, int Largeur, int Hauteur)
|
||||||
|
{
|
||||||
|
int Indice;
|
||||||
|
*Buffer=(byte *) malloc(Largeur*Menu_Facteur_X*Hauteur*Menu_Facteur_Y);
|
||||||
|
for (Indice=0; Indice<(Hauteur*Menu_Facteur_Y); Indice++)
|
||||||
|
Lire_ligne(Pos_X,Pos_Y+Indice,Largeur*Menu_Facteur_X,(*Buffer)+((int)Indice*Largeur*Menu_Facteur_X));
|
||||||
|
}
|
||||||
|
// Restaure de ce que la fenêtre cachait
|
||||||
|
void Restaure_fond(byte *Buffer, int Pos_X, int Pos_Y, int Largeur, int Hauteur)
|
||||||
|
{
|
||||||
|
int Indice;
|
||||||
|
for (Indice=0; Indice<Hauteur*Menu_Facteur_Y; Indice++)
|
||||||
|
Afficher_ligne(Pos_X,Pos_Y+Indice,Largeur*Menu_Facteur_X,Buffer+((int)Indice*Largeur*Menu_Facteur_Y));
|
||||||
|
free(Buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -390,7 +408,7 @@ void Deplacer_Split(void)
|
|||||||
|
|
||||||
// Afficher la barre en XOR
|
// Afficher la barre en XOR
|
||||||
Effacer_curseur();
|
Effacer_curseur();
|
||||||
Une_fenetre_est_ouverte=1;
|
Fenetre=1;
|
||||||
Forme_curseur=FORME_CURSEUR_HORIZONTAL;
|
Forme_curseur=FORME_CURSEUR_HORIZONTAL;
|
||||||
Ligne_verticale_XOR(Principal_Split,0,Menu_Ordonnee);
|
Ligne_verticale_XOR(Principal_Split,0,Menu_Ordonnee);
|
||||||
Ligne_verticale_XOR(Principal_X_Zoom-1,0,Menu_Ordonnee);
|
Ligne_verticale_XOR(Principal_X_Zoom-1,0,Menu_Ordonnee);
|
||||||
@ -430,7 +448,7 @@ void Deplacer_Split(void)
|
|||||||
Effacer_curseur();
|
Effacer_curseur();
|
||||||
Ligne_verticale_XOR(Principal_Split,0,Menu_Ordonnee);
|
Ligne_verticale_XOR(Principal_Split,0,Menu_Ordonnee);
|
||||||
Ligne_verticale_XOR(Principal_X_Zoom-1,0,Menu_Ordonnee);
|
Ligne_verticale_XOR(Principal_X_Zoom-1,0,Menu_Ordonnee);
|
||||||
Une_fenetre_est_ouverte=0;
|
Fenetre=0;
|
||||||
Forme_curseur=Ancienne_forme_curseur;
|
Forme_curseur=Ancienne_forme_curseur;
|
||||||
Calculer_donnees_loupe();
|
Calculer_donnees_loupe();
|
||||||
Recadrer_ecran_par_rapport_au_zoom();
|
Recadrer_ecran_par_rapport_au_zoom();
|
||||||
@ -980,7 +998,7 @@ void Ouvrir_fenetre(word Largeur,word Hauteur, char * Titre)
|
|||||||
|
|
||||||
Effacer_curseur();
|
Effacer_curseur();
|
||||||
|
|
||||||
Une_fenetre_est_ouverte=1;
|
Fenetre++;
|
||||||
|
|
||||||
Fenetre_Largeur=Largeur;
|
Fenetre_Largeur=Largeur;
|
||||||
Fenetre_Hauteur=Hauteur;
|
Fenetre_Hauteur=Hauteur;
|
||||||
@ -990,6 +1008,9 @@ void Ouvrir_fenetre(word Largeur,word Hauteur, char * Titre)
|
|||||||
|
|
||||||
Fenetre_Pos_Y=(Hauteur_ecran-(Hauteur*Menu_Facteur_Y))>>1;
|
Fenetre_Pos_Y=(Hauteur_ecran-(Hauteur*Menu_Facteur_Y))>>1;
|
||||||
|
|
||||||
|
// Sauvegarde de ce que la fenêtre remplace
|
||||||
|
Sauve_fond(&(Fond_fenetre[Fenetre-1]), Fenetre_Pos_X, Fenetre_Pos_Y, Largeur, Hauteur);
|
||||||
|
|
||||||
// Fenêtre grise
|
// Fenêtre grise
|
||||||
Block(Fenetre_Pos_X+(Menu_Facteur_X<<1),Fenetre_Pos_Y+(Menu_Facteur_Y<<1),(Largeur-4)*Menu_Facteur_X,(Hauteur-4)*Menu_Facteur_Y,CM_Clair);
|
Block(Fenetre_Pos_X+(Menu_Facteur_X<<1),Fenetre_Pos_Y+(Menu_Facteur_Y<<1),(Largeur-4)*Menu_Facteur_X,(Hauteur-4)*Menu_Facteur_Y,CM_Clair);
|
||||||
|
|
||||||
@ -1065,7 +1086,7 @@ void Fermer_fenetre(void)
|
|||||||
Fenetre_Liste_boutons_special=Temp4;
|
Fenetre_Liste_boutons_special=Temp4;
|
||||||
}
|
}
|
||||||
|
|
||||||
Une_fenetre_est_ouverte=0;
|
Fenetre--;
|
||||||
Curseur_dans_menu_precedent=0; // il faut rafficher le libellé dans la barre
|
Curseur_dans_menu_precedent=0; // il faut rafficher le libellé dans la barre
|
||||||
// d'outils si le curseur est sur une icône.
|
// d'outils si le curseur est sur une icône.
|
||||||
|
|
||||||
@ -1075,8 +1096,12 @@ void Fermer_fenetre(void)
|
|||||||
Menu_visible=Menu_visible_avant_fenetre;
|
Menu_visible=Menu_visible_avant_fenetre;
|
||||||
Forme_curseur=Forme_curseur_avant_fenetre;
|
Forme_curseur=Forme_curseur_avant_fenetre;
|
||||||
|
|
||||||
Afficher_ecran();
|
// Restore de ce que la fenêtre cachait
|
||||||
Afficher_menu();
|
Restaure_fond(Fond_fenetre[Fenetre], Fenetre_Pos_X, Fenetre_Pos_Y, Fenetre_Largeur, Fenetre_Hauteur);
|
||||||
|
SDL_UpdateRect(Ecran_SDL,Fenetre_Pos_X,Fenetre_Pos_Y,Fenetre_Largeur*Menu_Facteur_X,Fenetre_Hauteur*Menu_Facteur_Y);
|
||||||
|
|
||||||
|
//Afficher_ecran();
|
||||||
|
//Afficher_menu();
|
||||||
|
|
||||||
Touche=0;
|
Touche=0;
|
||||||
Mouse_K=0;
|
Mouse_K=0;
|
||||||
@ -1596,17 +1621,12 @@ void Deplacer_fenetre(short Dx, short Dy)
|
|||||||
short Ancien_Y;
|
short Ancien_Y;
|
||||||
short Largeur=Fenetre_Largeur*Menu_Facteur_X;
|
short Largeur=Fenetre_Largeur*Menu_Facteur_X;
|
||||||
short Hauteur=Fenetre_Hauteur*Menu_Facteur_Y;
|
short Hauteur=Fenetre_Hauteur*Menu_Facteur_Y;
|
||||||
short Indice;
|
|
||||||
short A;
|
short A;
|
||||||
byte B;
|
byte B;
|
||||||
byte * Buffer;
|
byte *Buffer=NULL;
|
||||||
|
|
||||||
|
|
||||||
if ((Buffer=(byte *) malloc(Largeur*Hauteur)))
|
|
||||||
{
|
|
||||||
Effacer_curseur();
|
Effacer_curseur();
|
||||||
for (Indice=0; Indice<Hauteur; Indice++)
|
|
||||||
Lire_ligne(Nouveau_X,Nouveau_Y+Indice,Largeur,Buffer+((int)Indice*Largeur));
|
|
||||||
Ligne_horizontale_XOR(Nouveau_X,Nouveau_Y,Largeur);
|
Ligne_horizontale_XOR(Nouveau_X,Nouveau_Y,Largeur);
|
||||||
Ligne_verticale_XOR(Nouveau_X,Nouveau_Y+1,Hauteur-2);
|
Ligne_verticale_XOR(Nouveau_X,Nouveau_Y+1,Hauteur-2);
|
||||||
Ligne_verticale_XOR(Nouveau_X+Largeur-1,Nouveau_Y+1,Hauteur-2);
|
Ligne_verticale_XOR(Nouveau_X+Largeur-1,Nouveau_Y+1,Hauteur-2);
|
||||||
@ -1652,6 +1672,11 @@ void Deplacer_fenetre(short Dx, short Dy)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Effacer_curseur();
|
Effacer_curseur();
|
||||||
|
Ligne_horizontale_XOR(Nouveau_X,Nouveau_Y,Largeur);
|
||||||
|
Ligne_verticale_XOR(Nouveau_X,Nouveau_Y+1,Hauteur-2);
|
||||||
|
Ligne_verticale_XOR(Nouveau_X+Largeur-1,Nouveau_Y+1,Hauteur-2);
|
||||||
|
Ligne_horizontale_XOR(Nouveau_X,Nouveau_Y+Hauteur-1,Largeur);
|
||||||
|
|
||||||
if ((Nouveau_X!=Fenetre_Pos_X)
|
if ((Nouveau_X!=Fenetre_Pos_X)
|
||||||
|| (Nouveau_Y!=Fenetre_Pos_Y))
|
|| (Nouveau_Y!=Fenetre_Pos_Y))
|
||||||
{
|
{
|
||||||
@ -1659,34 +1684,37 @@ void Deplacer_fenetre(short Dx, short Dy)
|
|||||||
Menu_Ordonnee=Menu_Ordonnee_avant_fenetre;
|
Menu_Ordonnee=Menu_Ordonnee_avant_fenetre;
|
||||||
B=Menu_visible;
|
B=Menu_visible;
|
||||||
Menu_visible=Menu_visible_avant_fenetre;
|
Menu_visible=Menu_visible_avant_fenetre;
|
||||||
Afficher_ecran();
|
//Afficher_ecran();
|
||||||
Afficher_menu();
|
//Afficher_menu();
|
||||||
Menu_Ordonnee=A;
|
Menu_Ordonnee=A;
|
||||||
Menu_visible=B;
|
Menu_visible=B;
|
||||||
for (Indice=0; Indice<Hauteur; Indice++)
|
|
||||||
Afficher_ligne(Nouveau_X,Nouveau_Y+Indice,Largeur,Buffer+((int)Indice*Largeur));
|
// Sauvegarde du contenu actuel de la fenêtre
|
||||||
SDL_UpdateRect(Ecran_SDL,Nouveau_X,Nouveau_Y,Largeur,Hauteur);
|
Sauve_fond(&Buffer, Fenetre_Pos_X, Fenetre_Pos_Y, Fenetre_Largeur, Fenetre_Hauteur);
|
||||||
|
|
||||||
|
// Restore de ce que la fenêtre cachait
|
||||||
|
Restaure_fond(Fond_fenetre[Fenetre-1], Fenetre_Pos_X, Fenetre_Pos_Y, Fenetre_Largeur, Fenetre_Hauteur);
|
||||||
|
|
||||||
|
// Sauvegarde de ce que la fenêtre remplace
|
||||||
|
Sauve_fond(&(Fond_fenetre[Fenetre-1]), Nouveau_X, Nouveau_Y, Fenetre_Largeur, Fenetre_Hauteur);
|
||||||
|
|
||||||
|
// Raffichage de la fenêtre
|
||||||
|
Restaure_fond(Buffer, Nouveau_X, Nouveau_Y, Fenetre_Largeur, Fenetre_Hauteur);
|
||||||
|
|
||||||
|
// Mise à jour du rectangle englobant
|
||||||
|
SDL_UpdateRect(Ecran_SDL,
|
||||||
|
(Nouveau_X>Fenetre_Pos_X)?Fenetre_Pos_X:Nouveau_X,
|
||||||
|
(Nouveau_Y>Fenetre_Pos_Y)?Fenetre_Pos_Y:Nouveau_Y,
|
||||||
|
((Nouveau_X>Fenetre_Pos_X)?(Nouveau_X-Fenetre_Pos_X):(Fenetre_Pos_X-Nouveau_X)) + Fenetre_Largeur*Menu_Facteur_X,
|
||||||
|
((Nouveau_Y>Fenetre_Pos_Y)?(Nouveau_Y-Fenetre_Pos_Y):(Fenetre_Pos_Y-Nouveau_Y)) + Fenetre_Hauteur*Menu_Facteur_Y);
|
||||||
|
|
||||||
Fenetre_Pos_X=Nouveau_X;
|
Fenetre_Pos_X=Nouveau_X;
|
||||||
Fenetre_Pos_Y=Nouveau_Y;
|
Fenetre_Pos_Y=Nouveau_Y;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Ligne_horizontale_XOR(Nouveau_X,Nouveau_Y,Largeur);
|
|
||||||
Ligne_verticale_XOR(Nouveau_X,Nouveau_Y+1,Hauteur-2);
|
|
||||||
Ligne_verticale_XOR(Nouveau_X+Largeur-1,Nouveau_Y+1,Hauteur-2);
|
|
||||||
Ligne_horizontale_XOR(Nouveau_X,Nouveau_Y+Hauteur-1,Largeur);
|
|
||||||
}
|
}
|
||||||
Forme_curseur=FORME_CURSEUR_FLECHE;
|
Forme_curseur=FORME_CURSEUR_FLECHE;
|
||||||
Afficher_curseur();
|
Afficher_curseur();
|
||||||
|
|
||||||
free(Buffer);
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Erreur(0);
|
|
||||||
Attendre_fin_de_click();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user