Some fixes to get_input : allows to move windows.

Touche is now resetted to 0 only when a shortcut is processed. So you can let it at the key value for cursor moves, for example. But it does not work, i must have missed something :/


git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@577 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
Adrien Destugues 2009-01-31 11:33:18 +00:00
parent 0f4776d4a6
commit 6dd54a1686
11 changed files with 229 additions and 81 deletions

View File

@ -145,7 +145,7 @@ else
ZIP = zip ZIP = zip
else else
# Linux specific # Linux and FreeBSD specific (default rules)
DELCOMMAND = rm -rf DELCOMMAND = rm -rf
MKDIR = mkdir -p MKDIR = mkdir -p
RMDIR = rmdir RMDIR = rmdir
@ -183,6 +183,7 @@ else
COPT = -W -Wall -Wdeclaration-after-statement -pedantic -std=c99 -c -g `sdl-config --cflags` $(TTFCOPT) COPT = -W -Wall -Wdeclaration-after-statement -pedantic -std=c99 -c -g `sdl-config --cflags` $(TTFCOPT)
LOPT = `sdl-config --libs` -lSDL_image $(TTFLOPT) LOPT = `sdl-config --libs` -lSDL_image $(TTFLOPT)
CC = gcc CC = gcc
#CC = nccgen -ncgcc -ncld -ncfabs #ncc makes callgraphs
OBJDIR = obj/unix OBJDIR = obj/unix
X11LOPT = -lX11 X11LOPT = -lX11
endif endif

9
aide.c
View File

@ -323,11 +323,13 @@ void Fenetre_aide(int Section, const char *Sous_section)
if (Position_d_aide_en_cours>0) if (Position_d_aide_en_cours>0)
Position_d_aide_en_cours--; Position_d_aide_en_cours--;
Scroller_aide(); Scroller_aide();
Touche=0;
break; break;
case SDLK_DOWN : // Bas case SDLK_DOWN : // Bas
if (Position_d_aide_en_cours<Nb_lignes-16) if (Position_d_aide_en_cours<Nb_lignes-16)
Position_d_aide_en_cours++; Position_d_aide_en_cours++;
Scroller_aide(); Scroller_aide();
Touche=0;
break; break;
case SDLK_PAGEUP : // PageUp case SDLK_PAGEUP : // PageUp
if (Position_d_aide_en_cours>15) if (Position_d_aide_en_cours>15)
@ -335,6 +337,7 @@ void Fenetre_aide(int Section, const char *Sous_section)
else else
Position_d_aide_en_cours=0; Position_d_aide_en_cours=0;
Scroller_aide(); Scroller_aide();
Touche=0;
break; break;
case SDLK_PAGEDOWN : // PageDown case SDLK_PAGEDOWN : // PageDown
if (Position_d_aide_en_cours<Nb_lignes-31) if (Position_d_aide_en_cours<Nb_lignes-31)
@ -342,20 +345,24 @@ void Fenetre_aide(int Section, const char *Sous_section)
else else
Position_d_aide_en_cours=Nb_lignes-16; Position_d_aide_en_cours=Nb_lignes-16;
Scroller_aide(); Scroller_aide();
Touche=0;
break; break;
case SDLK_HOME : // Home case SDLK_HOME : // Home
Position_d_aide_en_cours=0; Position_d_aide_en_cours=0;
Scroller_aide(); Scroller_aide();
Touche=0;
break; break;
case SDLK_END : // End case SDLK_END : // End
Position_d_aide_en_cours=Nb_lignes-16; Position_d_aide_en_cours=Nb_lignes-16;
Scroller_aide(); Scroller_aide();
Touche=0;
break; break;
} }
} }
while ((Bouton_clicke!=1) && (Touche!=SDLK_RETURN)); while ((Bouton_clicke!=1) && (Touche!=SDLK_RETURN));
if(Touche==SDLK_RETURN) Touche=0;
Fermer_fenetre(); Fermer_fenetre();
Desenclencher_bouton(BOUTON_AIDE); Desenclencher_bouton(BOUTON_AIDE);
Afficher_curseur(); Afficher_curseur();
@ -469,6 +476,8 @@ void Bouton_Stats(void)
} }
while ( (Bouton_clicke!=1) && (Touche!=SDLK_RETURN) ); while ( (Bouton_clicke!=1) && (Touche!=SDLK_RETURN) );
if(Touche==SDLK_RETURN)Touche=0;
Fermer_fenetre(); Fermer_fenetre();
Desenclencher_bouton(BOUTON_AIDE); Desenclencher_bouton(BOUTON_AIDE);
Afficher_curseur(); Afficher_curseur();

View File

@ -112,6 +112,8 @@ void Message_Non_disponible(void)
Bouton_clicke=Fenetre_Bouton_clicke(); Bouton_clicke=Fenetre_Bouton_clicke();
while ((Bouton_clicke<=0) && (Touche!=SDLK_ESCAPE) && (Touche!=SDLK_o)); while ((Bouton_clicke<=0) && (Touche!=SDLK_ESCAPE) && (Touche!=SDLK_o));
if(Bouton_clicke<=0) Touche=0;
Fermer_fenetre(); Fermer_fenetre();
// Puisque cette fonction peut être appelée par plusieurs boutons et qu'on // Puisque cette fonction peut être appelée par plusieurs boutons et qu'on
@ -142,6 +144,7 @@ void Message_Memoire_insuffisante(void)
Bouton_clicke=Fenetre_Bouton_clicke(); Bouton_clicke=Fenetre_Bouton_clicke();
while ((Bouton_clicke<=0) && (Touche!=SDLK_ESCAPE) && (Touche!=SDLK_o)); while ((Bouton_clicke<=0) && (Touche!=SDLK_ESCAPE) && (Touche!=SDLK_o));
if(Bouton_clicke<=0) Touche=0;
Fermer_fenetre(); Fermer_fenetre();
Afficher_curseur(); Afficher_curseur();
} }
@ -184,6 +187,7 @@ void Bouton_Message_initial(void)
} }
while (Bouton_clicke==0 && Touche==0); while (Bouton_clicke==0 && Touche==0);
if(Bouton_clicke!=0) Touche=0;
Fermer_fenetre(); Fermer_fenetre();
Afficher_curseur(); Afficher_curseur();
@ -623,11 +627,13 @@ void Menu_Tag_couleurs(char * En_tete, byte * Table, byte * Mode, byte Cancel, c
Stencil_Actualiser_couleur(Couleur_taggee); Stencil_Actualiser_couleur(Couleur_taggee);
Afficher_curseur(); Afficher_curseur();
} }
Touche=0;
break; break;
default: default:
if (Touche==Bouton[BOUTON_AIDE].Raccourci_gauche) if (Touche==Bouton[BOUTON_AIDE].Raccourci_gauche)
{ {
Fenetre_aide(BOUTON_EFFETS, Section_aide); Fenetre_aide(BOUTON_EFFETS, Section_aide);
Touche=0;
break; break;
} }
} }
@ -1544,6 +1550,7 @@ void Bouton_Resol(void)
if (Debut_liste>0) if (Debut_liste>0)
Debut_liste--; Debut_liste--;
Scroller_la_liste_des_modes(Debut_liste,Position_curseur,&Mode_choisi); Scroller_la_liste_des_modes(Debut_liste,Position_curseur,&Mode_choisi);
Touche=0;
break; break;
case SDLK_DOWN : // Bas case SDLK_DOWN : // Bas
if (Position_curseur<11 && Position_curseur<(Nb_modes_video-1)) if (Position_curseur<11 && Position_curseur<(Nb_modes_video-1))
@ -1552,6 +1559,7 @@ void Bouton_Resol(void)
if (Debut_liste<Nb_modes_video-12) if (Debut_liste<Nb_modes_video-12)
Debut_liste++; Debut_liste++;
Scroller_la_liste_des_modes(Debut_liste,Position_curseur,&Mode_choisi); Scroller_la_liste_des_modes(Debut_liste,Position_curseur,&Mode_choisi);
Touche=0;
break; break;
case SDLK_PAGEUP : // PageUp case SDLK_PAGEUP : // PageUp
if (Position_curseur>0) if (Position_curseur>0)
@ -1564,6 +1572,7 @@ void Bouton_Resol(void)
Debut_liste=0; Debut_liste=0;
} }
Scroller_la_liste_des_modes(Debut_liste,Position_curseur,&Mode_choisi); Scroller_la_liste_des_modes(Debut_liste,Position_curseur,&Mode_choisi);
Touche=0;
break; break;
case SDLK_PAGEDOWN : // PageDown case SDLK_PAGEDOWN : // PageDown
if (Nb_modes_video<12) if (Nb_modes_video<12)
@ -1578,11 +1587,13 @@ void Bouton_Resol(void)
Debut_liste=Nb_modes_video-12; Debut_liste=Nb_modes_video-12;
} }
Scroller_la_liste_des_modes(Debut_liste,Position_curseur,&Mode_choisi); Scroller_la_liste_des_modes(Debut_liste,Position_curseur,&Mode_choisi);
Touche=0;
break; break;
case SDLK_HOME : // Home case SDLK_HOME : // Home
Debut_liste=0; Debut_liste=0;
Position_curseur=0; Position_curseur=0;
Scroller_la_liste_des_modes(Debut_liste,Position_curseur,&Mode_choisi); Scroller_la_liste_des_modes(Debut_liste,Position_curseur,&Mode_choisi);
Touche=0;
break; break;
case SDLK_END : // End case SDLK_END : // End
if (Nb_modes_video<12) if (Nb_modes_video<12)
@ -1593,11 +1604,13 @@ void Bouton_Resol(void)
Position_curseur=11; Position_curseur=11;
} }
Scroller_la_liste_des_modes(Debut_liste,Position_curseur,&Mode_choisi); Scroller_la_liste_des_modes(Debut_liste,Position_curseur,&Mode_choisi);
Touche=0;
break; break;
default: default:
if (Touche==Bouton[BOUTON_AIDE].Raccourci_gauche) if (Touche==Bouton[BOUTON_AIDE].Raccourci_gauche)
{ {
Fenetre_aide(BOUTON_RESOL, NULL); Fenetre_aide(BOUTON_RESOL, NULL);
Touche=0;
break; break;
} }
} }
@ -2058,11 +2071,13 @@ void Bouton_Degrades(void)
Afficher_curseur(); Afficher_curseur();
} }
Touche=0;
break; break;
default: default:
if (Touche==Bouton[BOUTON_GRADMENU].Raccourci_gauche) if (Touche==Bouton[BOUTON_GRADMENU].Raccourci_gauche)
{ {
Fenetre_aide(BOUTON_PINCEAUX, NULL); Fenetre_aide(BOUTON_PINCEAUX, NULL);
Touche=0;
break; break;
} }
} }
@ -2865,36 +2880,42 @@ byte Bouton_Load_ou_Save(byte Load, byte Image)
Effacer_curseur(); Effacer_curseur();
Select_Scroll_Down(&Principal_File_list_Position,&Principal_File_list_Decalage); Select_Scroll_Down(&Principal_File_list_Position,&Principal_File_list_Decalage);
On_vient_de_scroller_dans_le_fileselect(Scroller_de_fichiers); On_vient_de_scroller_dans_le_fileselect(Scroller_de_fichiers);
Touche=0;
break; break;
case SDLK_UP : // Haut case SDLK_UP : // Haut
*Fichier_recherche=0; *Fichier_recherche=0;
Effacer_curseur(); Effacer_curseur();
Select_Scroll_Up(&Principal_File_list_Position,&Principal_File_list_Decalage); Select_Scroll_Up(&Principal_File_list_Position,&Principal_File_list_Decalage);
On_vient_de_scroller_dans_le_fileselect(Scroller_de_fichiers); On_vient_de_scroller_dans_le_fileselect(Scroller_de_fichiers);
Touche=0;
break; break;
case SDLK_PAGEDOWN : // Page Down case SDLK_PAGEDOWN : // Page Down
*Fichier_recherche=0; *Fichier_recherche=0;
Effacer_curseur(); Effacer_curseur();
Select_Page_Down(&Principal_File_list_Position,&Principal_File_list_Decalage); Select_Page_Down(&Principal_File_list_Position,&Principal_File_list_Decalage);
On_vient_de_scroller_dans_le_fileselect(Scroller_de_fichiers); On_vient_de_scroller_dans_le_fileselect(Scroller_de_fichiers);
Touche=0;
break; break;
case SDLK_PAGEUP : // Page Up case SDLK_PAGEUP : // Page Up
*Fichier_recherche=0; *Fichier_recherche=0;
Effacer_curseur(); Effacer_curseur();
Select_Page_Up(&Principal_File_list_Position,&Principal_File_list_Decalage); Select_Page_Up(&Principal_File_list_Position,&Principal_File_list_Decalage);
On_vient_de_scroller_dans_le_fileselect(Scroller_de_fichiers); On_vient_de_scroller_dans_le_fileselect(Scroller_de_fichiers);
Touche=0;
break; break;
case SDLK_END : // End case SDLK_END : // End
*Fichier_recherche=0; *Fichier_recherche=0;
Effacer_curseur(); Effacer_curseur();
Select_End(&Principal_File_list_Position,&Principal_File_list_Decalage); Select_End(&Principal_File_list_Position,&Principal_File_list_Decalage);
On_vient_de_scroller_dans_le_fileselect(Scroller_de_fichiers); On_vient_de_scroller_dans_le_fileselect(Scroller_de_fichiers);
Touche=0;
break; break;
case SDLK_HOME : // Home case SDLK_HOME : // Home
*Fichier_recherche=0; *Fichier_recherche=0;
Effacer_curseur(); Effacer_curseur();
Select_Home(&Principal_File_list_Position,&Principal_File_list_Decalage); Select_Home(&Principal_File_list_Position,&Principal_File_list_Decalage);
On_vient_de_scroller_dans_le_fileselect(Scroller_de_fichiers); On_vient_de_scroller_dans_le_fileselect(Scroller_de_fichiers);
Touche=0;
break; break;
case SDLK_BACKSPACE : // Backspace case SDLK_BACKSPACE : // Backspace
*Fichier_recherche=0; *Fichier_recherche=0;
@ -2906,6 +2927,7 @@ byte Bouton_Load_ou_Save(byte Load, byte Image)
Type_selectionne=1; Type_selectionne=1;
On_a_clicke_sur_OK=1; On_a_clicke_sur_OK=1;
} }
Touche=0;
break; break;
default: // Autre => On se place sur le nom de fichier qui correspond default: // Autre => On se place sur le nom de fichier qui correspond
if (Bouton_clicke<=0) if (Bouton_clicke<=0)
@ -2933,6 +2955,7 @@ byte Bouton_Load_ou_Save(byte Load, byte Image)
} }
else else
*Fichier_recherche=0; *Fichier_recherche=0;
Touche=0;
} }
} }
else else
@ -4185,7 +4208,10 @@ void Bouton_Brush_FX(void)
{ {
Bouton_clicke=Fenetre_Bouton_clicke(); Bouton_clicke=Fenetre_Bouton_clicke();
if (Touche==Bouton[BOUTON_AIDE].Raccourci_gauche) if (Touche==Bouton[BOUTON_AIDE].Raccourci_gauche)
{
Touche=0;
Fenetre_aide(BOUTON_EFFETS_BROSSE, NULL); Fenetre_aide(BOUTON_EFFETS_BROSSE, NULL);
}
} }
while (Bouton_clicke<=0); while (Bouton_clicke<=0);
@ -5008,11 +5034,13 @@ void Bouton_Spray_Menu(void)
Afficher_curseur(); Afficher_curseur();
Stencil_Actualiser_couleur(Couleur_selectionnee); Stencil_Actualiser_couleur(Couleur_selectionnee);
} }
Touche=0;
break; break;
default: default:
if (Touche==Bouton[BOUTON_AIDE].Raccourci_gauche) if (Touche==Bouton[BOUTON_AIDE].Raccourci_gauche)
{ {
Fenetre_aide(BOUTON_SPRAY, NULL); Fenetre_aide(BOUTON_SPRAY, NULL);
Touche=0;
break; break;
} }
@ -5472,7 +5500,10 @@ void Bouton_Trame_Menu(void)
Mettre_a_jour_trame(Orig_X, Orig_Y); Mettre_a_jour_trame(Orig_X, Orig_Y);
} }
if (Touche==Bouton[BOUTON_AIDE].Raccourci_gauche) if (Touche==Bouton[BOUTON_AIDE].Raccourci_gauche)
{
Touche=0;
Fenetre_aide(BOUTON_EFFETS, "SIEVE"); Fenetre_aide(BOUTON_EFFETS, "SIEVE");
}
} }
while ( (Bouton_clicke!=2) && (Bouton_clicke!=3) ); while ( (Bouton_clicke!=2) && (Bouton_clicke!=3) );
@ -5628,9 +5659,13 @@ void Bouton_Effets(void)
Bouton_clicke=Fenetre_Bouton_clicke(); Bouton_clicke=Fenetre_Bouton_clicke();
if (Touche==SDLK_ESCAPE) if (Touche==SDLK_ESCAPE)
{
Bouton_clicke=11; Bouton_clicke=11;
Touche=0;
}
else if (Touche==Bouton[BOUTON_AIDE].Raccourci_gauche) else if (Touche==Bouton[BOUTON_AIDE].Raccourci_gauche)
{ {
Touche=0;
// Aide contextuelle // Aide contextuelle
switch(Fenetre_Numero_bouton_clicke()) switch(Fenetre_Numero_bouton_clicke())
{ {

32
const.h
View File

@ -294,22 +294,22 @@ enum NUMEROS_DE_BOUTONS
enum ACTIONS_SPECIALES enum ACTIONS_SPECIALES
{ {
SPECIAL_MOUSE_UP, // | SPECIAL_MOUSE_UP,
SPECIAL_MOUSE_DOWN, // | SPECIAL_MOUSE_DOWN,
SPECIAL_MOUSE_LEFT, // | SPECIAL_MOUSE_LEFT,
SPECIAL_MOUSE_RIGHT, // | SPECIAL_MOUSE_RIGHT,
SPECIAL_CLICK_LEFT, // | Il faut garder SPECIAL_CLICK_LEFT,
SPECIAL_CLICK_RIGHT, // | ces constantes SPECIAL_CLICK_RIGHT,
SPECIAL_NEXT_FORECOLOR, // | au début de la SPECIAL_NEXT_FORECOLOR,
SPECIAL_PREVIOUS_FORECOLOR, // |_ liste car elles SPECIAL_PREVIOUS_FORECOLOR,
SPECIAL_NEXT_BACKCOLOR, // | sont réutilisées SPECIAL_NEXT_BACKCOLOR,
SPECIAL_PREVIOUS_BACKCOLOR, // | avec leurs valeurs SPECIAL_PREVIOUS_BACKCOLOR,
SPECIAL_RETRECIR_PINCEAU, // | brutes en ASM dans SPECIAL_RETRECIR_PINCEAU,
SPECIAL_GROSSIR_PINCEAU, // | Get_input !!! SPECIAL_GROSSIR_PINCEAU,
SPECIAL_NEXT_USER_FORECOLOR, // | SPECIAL_NEXT_USER_FORECOLOR,
SPECIAL_PREVIOUS_USER_FORECOLOR, // | SPECIAL_PREVIOUS_USER_FORECOLOR,
SPECIAL_NEXT_USER_BACKCOLOR, // | SPECIAL_NEXT_USER_BACKCOLOR,
SPECIAL_PREVIOUS_USER_BACKCOLOR, // | SPECIAL_PREVIOUS_USER_BACKCOLOR,
SPECIAL_SCROLL_UP, SPECIAL_SCROLL_UP,
SPECIAL_SCROLL_DOWN, SPECIAL_SCROLL_DOWN,
SPECIAL_SCROLL_LEFT, SPECIAL_SCROLL_LEFT,

BIN
gfx2.cfg

Binary file not shown.

94
input.c
View File

@ -133,9 +133,7 @@ int Handle_Mouse_Move(SDL_Event* event)
INPUT_Nouveau_Mouse_X = event->motion.x/Pixel_width; INPUT_Nouveau_Mouse_X = event->motion.x/Pixel_width;
INPUT_Nouveau_Mouse_Y = event->motion.y/Pixel_height; INPUT_Nouveau_Mouse_Y = event->motion.y/Pixel_height;
if(Move_cursor_with_constraints()) return 0; return Move_cursor_with_constraints();
return 1;
} }
void Handle_Mouse_Click(SDL_Event* event) void Handle_Mouse_Click(SDL_Event* event)
@ -190,10 +188,8 @@ int Handle_Key_Press(SDL_Event* event)
Touche = Conversion_Touche(event->key.keysym); Touche = Conversion_Touche(event->key.keysym);
Touche_ANSI = Conversion_ANSI(event->key.keysym); Touche_ANSI = Conversion_ANSI(event->key.keysym);
// Instead of all this mess, send back a mouse event ! if(Touche == Config_Touche[SPECIAL_MOUSE_UP])
if(Touche == Config_Touche[0])
{ {
//[Touche] = Emulation de MOUSE UP
//si on est déjà en haut on peut plus bouger //si on est déjà en haut on peut plus bouger
if(INPUT_Nouveau_Mouse_Y!=0) if(INPUT_Nouveau_Mouse_Y!=0)
{ {
@ -205,9 +201,8 @@ int Handle_Key_Press(SDL_Event* event)
return 1; return 1;
} }
} }
else if(Touche == Config_Touche[1]) else if(Touche == Config_Touche[SPECIAL_MOUSE_DOWN])
{ {
//[Touche] = Emulation de MOUSE DOWN
if(INPUT_Nouveau_Mouse_Y<Hauteur_ecran-1) if(INPUT_Nouveau_Mouse_Y<Hauteur_ecran-1)
{ {
if(Loupe_Mode && INPUT_Nouveau_Mouse_Y < Menu_Ordonnee && INPUT_Nouveau_Mouse_X > Principal_Split) if(Loupe_Mode && INPUT_Nouveau_Mouse_Y < Menu_Ordonnee && INPUT_Nouveau_Mouse_X > Principal_Split)
@ -222,9 +217,8 @@ int Handle_Key_Press(SDL_Event* event)
return 1; return 1;
} }
} }
else if(Touche == Config_Touche[2]) else if(Touche == Config_Touche[SPECIAL_MOUSE_LEFT])
{ {
//[Touche] = Emulation de MOUSE LEFT
if(INPUT_Nouveau_Mouse_X!=0) if(INPUT_Nouveau_Mouse_X!=0)
{ {
if(Loupe_Mode && INPUT_Nouveau_Mouse_Y < Menu_Ordonnee && INPUT_Nouveau_Mouse_X > Principal_Split) if(Loupe_Mode && INPUT_Nouveau_Mouse_Y < Menu_Ordonnee && INPUT_Nouveau_Mouse_X > Principal_Split)
@ -235,10 +229,8 @@ int Handle_Key_Press(SDL_Event* event)
return 1; return 1;
} }
} }
else if(Touche == Config_Touche[3]) else if(Touche == Config_Touche[SPECIAL_MOUSE_RIGHT])
{ {
//[Touche] = Emulation de MOUSE RIGHT
if(INPUT_Nouveau_Mouse_X<Largeur_ecran-1) if(INPUT_Nouveau_Mouse_X<Largeur_ecran-1)
{ {
if(Loupe_Mode && INPUT_Nouveau_Mouse_Y < Menu_Ordonnee && INPUT_Nouveau_Mouse_X > Principal_Split) if(Loupe_Mode && INPUT_Nouveau_Mouse_Y < Menu_Ordonnee && INPUT_Nouveau_Mouse_X > Principal_Split)
@ -253,51 +245,46 @@ int Handle_Key_Press(SDL_Event* event)
return 1; return 1;
} }
} }
else if(Touche == Config_Touche[4]) else if(Touche == Config_Touche[SPECIAL_CLICK_LEFT])
{ {
//[Touche] = Emulation de MOUSE CLICK LEFT
INPUT_Nouveau_Mouse_K=1; INPUT_Nouveau_Mouse_K=1;
Move_cursor_with_constraints(); Move_cursor_with_constraints();
return 1; return 1;
} }
else if(Touche == Config_Touche[5]) else if(Touche == Config_Touche[SPECIAL_CLICK_RIGHT])
{ {
//[Touche] = Emulation de MOUSE CLICK RIGHT
INPUT_Nouveau_Mouse_K=2; INPUT_Nouveau_Mouse_K=2;
Move_cursor_with_constraints(); Move_cursor_with_constraints();
return 1; return 1;
} }
if(Operation_Taille_pile!=0) if (Operation_Taille_pile!=0 && Touche != 0)
{ {
if (Touche != 0) //Enfin, on inhibe les touches (sauf si c'est un changement de couleur
//ou de taille de pinceau lors d'une des operations suivantes:
//OPERATION_DESSIN_CONTINU, OPERATION_DESSIN_DISCONTINU, OPERATION_SPRAY)
if(Autoriser_changement_de_couleur_pendant_operation)
{ {
//Enfin, on inhibe les touches (sauf si c'est un changement de couleur //A ce stade là, on sait qu'on est dans une des 3 opérations
//ou de taille de pinceau lors d'une des operations suivantes: //supportant le changement de couleur ou de taille de pinceau.
//OPERATION_DESSIN_CONTINU, OPERATION_DESSIN_DISCONTINU, OPERATION_SPRAY)
if(Autoriser_changement_de_couleur_pendant_operation)
{
//A ce stade là, on sait qu'on est dans une des 3 opérations
//supportant le changement de couleur ou de taille de pinceau.
if( if(
(Touche != Config_Touche[6]) && (Touche != Config_Touche[SPECIAL_NEXT_FORECOLOR]) &&
(Touche != Config_Touche[7]) && (Touche != Config_Touche[SPECIAL_PREVIOUS_FORECOLOR]) &&
(Touche != Config_Touche[8]) && (Touche != Config_Touche[SPECIAL_NEXT_BACKCOLOR]) &&
(Touche != Config_Touche[9]) && (Touche != Config_Touche[SPECIAL_PREVIOUS_BACKCOLOR]) &&
(Touche != Config_Touche[10]) && (Touche != Config_Touche[SPECIAL_RETRECIR_PINCEAU]) &&
(Touche != Config_Touche[11]) && (Touche != Config_Touche[SPECIAL_GROSSIR_PINCEAU]) &&
(Touche != Config_Touche[12]) && (Touche != Config_Touche[SPECIAL_NEXT_USER_FORECOLOR]) &&
(Touche != Config_Touche[13]) && (Touche != Config_Touche[SPECIAL_PREVIOUS_USER_FORECOLOR]) &&
(Touche != Config_Touche[14]) && (Touche != Config_Touche[SPECIAL_NEXT_USER_BACKCOLOR]) &&
(Touche != Config_Touche[15]) (Touche != Config_Touche[SPECIAL_PREVIOUS_USER_BACKCOLOR])
) )
{ {
Touche=0; Touche=0;
}
} }
else Touche = 0;
} }
else Touche = 0;
} }
return 0; return 0;
} }
@ -306,21 +293,20 @@ void Handle_Key_Release(SDL_Event* event)
{ {
int ToucheR = Conversion_Touche(event->key.keysym); int ToucheR = Conversion_Touche(event->key.keysym);
// Send back a mouse event instead. Or extract the code and put it in common. if(ToucheR == Config_Touche[SPECIAL_CLICK_LEFT])
if(ToucheR == Config_Touche[4])
{ {
INPUT_Nouveau_Mouse_K=0; INPUT_Nouveau_Mouse_K &= ~1;
Move_cursor_with_constraints(); Move_cursor_with_constraints();
} }
else if(ToucheR == Config_Touche[5]) else if(ToucheR == Config_Touche[SPECIAL_CLICK_RIGHT])
{ {
//[Touche] = Emulation de MOUSE CLICK RIGHT INPUT_Nouveau_Mouse_K &= ~2;
INPUT_Nouveau_Mouse_K=0;
Move_cursor_with_constraints(); Move_cursor_with_constraints();
} }
Touche = 0; // Other keys don't need to be released : they are handled as "events" and procesed only once.
Touche_ANSI=0; // These clicks are apart because they need to be continuous (ie move while key pressed)
// We are relying on "hardware" keyrepeat to achieve that.
} }
@ -343,10 +329,12 @@ int Get_input(void)
SDL_Event event; SDL_Event event;
int User_Feedback_Required = 0; // Flag qui indique si on doit arrêter de traiter les évènements ou si on peut enchainer int User_Feedback_Required = 0; // Flag qui indique si on doit arrêter de traiter les évènements ou si on peut enchainer
/*Touche =*/ Touche_ANSI = 0;
// Process as much events as possible without redrawing the screen. // Process as much events as possible without redrawing the screen.
// This mostly allows us to merge mouse events for people with an high // This mostly allows us to merge mouse events for people with an high
// resolution mouse // resolution mouse
while( !User_Feedback_Required && SDL_PollEvent(&event)) while( (!User_Feedback_Required) && SDL_PollEvent(&event))
{ {
switch(event.type) switch(event.type)
{ {
@ -361,7 +349,7 @@ int Get_input(void)
break; break;
case SDL_MOUSEMOTION: case SDL_MOUSEMOTION:
Handle_Mouse_Move(&event); User_Feedback_Required = Handle_Mouse_Move(&event); // On ne sort que si la souris a vraiment bougé
break; break;
case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONDOWN:
@ -393,7 +381,7 @@ int Get_input(void)
break; break;
default: default:
DEBUG("Unhandled SDL event !",0); DEBUG("Unhandled SDL event number : ",event.type);
break; break;
} }
} }

5
main.c
View File

@ -372,7 +372,10 @@ void Initialisation_du_programme(int argc,char * argv[])
joystick = SDL_JoystickOpen(0); joystick = SDL_JoystickOpen(0);
SDL_EnableKeyRepeat(250, 32); SDL_EnableKeyRepeat(250, 32);
SDL_EnableUNICODE(SDL_ENABLE); SDL_EnableUNICODE(SDL_ENABLE);
SDL_WM_SetCaption("GrafX2 beta "POURCENTAGE_VERSION" - USE AT YOUR OWN RISK","GrafX2"); if(ALPHA_BETA[0]=='ß')
SDL_WM_SetCaption("GrafX2 beta "POURCENTAGE_VERSION""" - USE AT YOUR OWN RISK","GrafX2");
else
SDL_WM_SetCaption("GrafX2 v2.00 final","GrafX2");
{ {
// Routine pour définir l'icone. // Routine pour définir l'icone.
char Chemin_icone[TAILLE_CHEMIN_FICHIER]; char Chemin_icone[TAILLE_CHEMIN_FICHIER];

115
moteur.c
View File

@ -527,111 +527,134 @@ void Gestion_principale(void)
Scroller_loupe(0,-(Loupe_Hauteur>>2)); Scroller_loupe(0,-(Loupe_Hauteur>>2));
else else
Scroller_ecran(0,-(Hauteur_ecran>>3)); Scroller_ecran(0,-(Hauteur_ecran>>3));
Touche=0;
break; break;
case SPECIAL_SCROLL_DOWN : // Scroll down case SPECIAL_SCROLL_DOWN : // Scroll down
if (Loupe_Mode) if (Loupe_Mode)
Scroller_loupe(0,(Loupe_Hauteur>>2)); Scroller_loupe(0,(Loupe_Hauteur>>2));
else else
Scroller_ecran(0,(Hauteur_ecran>>3)); Scroller_ecran(0,(Hauteur_ecran>>3));
Touche=0;
break; break;
case SPECIAL_SCROLL_LEFT : // Scroll left case SPECIAL_SCROLL_LEFT : // Scroll left
if (Loupe_Mode) if (Loupe_Mode)
Scroller_loupe(-(Loupe_Largeur>>2),0); Scroller_loupe(-(Loupe_Largeur>>2),0);
else else
Scroller_ecran(-(Largeur_ecran>>3),0); Scroller_ecran(-(Largeur_ecran>>3),0);
Touche=0;
break; break;
case SPECIAL_SCROLL_RIGHT : // Scroll right case SPECIAL_SCROLL_RIGHT : // Scroll right
if (Loupe_Mode) if (Loupe_Mode)
Scroller_loupe((Loupe_Largeur>>2),0); Scroller_loupe((Loupe_Largeur>>2),0);
else else
Scroller_ecran((Largeur_ecran>>3),0); Scroller_ecran((Largeur_ecran>>3),0);
Touche=0;
break; break;
case SPECIAL_SCROLL_UP_FAST : // Scroll up faster case SPECIAL_SCROLL_UP_FAST : // Scroll up faster
if (Loupe_Mode) if (Loupe_Mode)
Scroller_loupe(0,-(Loupe_Hauteur>>1)); Scroller_loupe(0,-(Loupe_Hauteur>>1));
else else
Scroller_ecran(0,-(Hauteur_ecran>>2)); Scroller_ecran(0,-(Hauteur_ecran>>2));
Touche=0;
break; break;
case SPECIAL_SCROLL_DOWN_FAST : // Scroll down faster case SPECIAL_SCROLL_DOWN_FAST : // Scroll down faster
if (Loupe_Mode) if (Loupe_Mode)
Scroller_loupe(0,(Loupe_Hauteur>>1)); Scroller_loupe(0,(Loupe_Hauteur>>1));
else else
Scroller_ecran(0,(Hauteur_ecran>>2)); Scroller_ecran(0,(Hauteur_ecran>>2));
Touche=0;
break; break;
case SPECIAL_SCROLL_LEFT_FAST : // Scroll left faster case SPECIAL_SCROLL_LEFT_FAST : // Scroll left faster
if (Loupe_Mode) if (Loupe_Mode)
Scroller_loupe(-(Loupe_Largeur>>1),0); Scroller_loupe(-(Loupe_Largeur>>1),0);
else else
Scroller_ecran(-(Largeur_ecran>>2),0); Scroller_ecran(-(Largeur_ecran>>2),0);
Touche=0;
break; break;
case SPECIAL_SCROLL_RIGHT_FAST : // Scroll right faster case SPECIAL_SCROLL_RIGHT_FAST : // Scroll right faster
if (Loupe_Mode) if (Loupe_Mode)
Scroller_loupe((Loupe_Largeur>>1),0); Scroller_loupe((Loupe_Largeur>>1),0);
else else
Scroller_ecran((Largeur_ecran>>2),0); Scroller_ecran((Largeur_ecran>>2),0);
Touche=0;
break; break;
case SPECIAL_SCROLL_UP_SLOW : // Scroll up slower case SPECIAL_SCROLL_UP_SLOW : // Scroll up slower
if (Loupe_Mode) if (Loupe_Mode)
Scroller_loupe(0,-1); Scroller_loupe(0,-1);
else else
Scroller_ecran(0,-1); Scroller_ecran(0,-1);
Touche=0;
break; break;
case SPECIAL_SCROLL_DOWN_SLOW : // Scroll down slower case SPECIAL_SCROLL_DOWN_SLOW : // Scroll down slower
if (Loupe_Mode) if (Loupe_Mode)
Scroller_loupe(0,1); Scroller_loupe(0,1);
else else
Scroller_ecran(0,1); Scroller_ecran(0,1);
Touche=0;
break; break;
case SPECIAL_SCROLL_LEFT_SLOW : // Scroll left slower case SPECIAL_SCROLL_LEFT_SLOW : // Scroll left slower
if (Loupe_Mode) if (Loupe_Mode)
Scroller_loupe(-1,0); Scroller_loupe(-1,0);
else else
Scroller_ecran(-1,0); Scroller_ecran(-1,0);
Touche=0;
break; break;
case SPECIAL_SCROLL_RIGHT_SLOW : // Scroll right slower case SPECIAL_SCROLL_RIGHT_SLOW : // Scroll right slower
if (Loupe_Mode) if (Loupe_Mode)
Scroller_loupe(1,0); Scroller_loupe(1,0);
else else
Scroller_ecran(1,0); Scroller_ecran(1,0);
Touche=0;
break; break;
case SPECIAL_NEXT_FORECOLOR : // Next foreground color case SPECIAL_NEXT_FORECOLOR : // Next foreground color
Special_Next_forecolor(); Special_Next_forecolor();
Touche=0;
break; break;
case SPECIAL_PREVIOUS_FORECOLOR : // Previous foreground color case SPECIAL_PREVIOUS_FORECOLOR : // Previous foreground color
Special_Previous_forecolor(); Special_Previous_forecolor();
Touche=0;
break; break;
case SPECIAL_NEXT_BACKCOLOR : // Next background color case SPECIAL_NEXT_BACKCOLOR : // Next background color
Special_Next_backcolor(); Special_Next_backcolor();
Touche=0;
break; break;
case SPECIAL_PREVIOUS_BACKCOLOR : // Previous background color case SPECIAL_PREVIOUS_BACKCOLOR : // Previous background color
Special_Previous_backcolor(); Special_Previous_backcolor();
Touche=0;
break; break;
case SPECIAL_RETRECIR_PINCEAU: // Rétrécir le pinceau case SPECIAL_RETRECIR_PINCEAU: // Rétrécir le pinceau
Retrecir_pinceau(); Retrecir_pinceau();
Touche=0;
break; break;
case SPECIAL_GROSSIR_PINCEAU: // Grossir le pinceau case SPECIAL_GROSSIR_PINCEAU: // Grossir le pinceau
Grossir_pinceau(); Grossir_pinceau();
Touche=0;
break; break;
case SPECIAL_NEXT_USER_FORECOLOR : // Next user-defined foreground color case SPECIAL_NEXT_USER_FORECOLOR : // Next user-defined foreground color
Message_Non_disponible(); // !!! TEMPORAIRE !!! Message_Non_disponible(); // !!! TEMPORAIRE !!!
//Special_Next_user_forecolor(); //Special_Next_user_forecolor();
Touche=0;
break; break;
case SPECIAL_PREVIOUS_USER_FORECOLOR : // Previous user-defined foreground color case SPECIAL_PREVIOUS_USER_FORECOLOR : // Previous user-defined foreground color
Message_Non_disponible(); // !!! TEMPORAIRE !!! Message_Non_disponible(); // !!! TEMPORAIRE !!!
//Special_Previous_user_forecolor(); //Special_Previous_user_forecolor();
Touche=0;
break; break;
case SPECIAL_NEXT_USER_BACKCOLOR : // Next user-defined background color case SPECIAL_NEXT_USER_BACKCOLOR : // Next user-defined background color
Message_Non_disponible(); // !!! TEMPORAIRE !!! Message_Non_disponible(); // !!! TEMPORAIRE !!!
//Special_Next_user_backcolor(); //Special_Next_user_backcolor();
Touche=0;
break; break;
case SPECIAL_PREVIOUS_USER_BACKCOLOR : // Previous user-defined background color case SPECIAL_PREVIOUS_USER_BACKCOLOR : // Previous user-defined background color
Message_Non_disponible(); // !!! TEMPORAIRE !!! Message_Non_disponible(); // !!! TEMPORAIRE !!!
//Special_Previous_user_backcolor(); //Special_Previous_user_backcolor();
Touche=0;
break; break;
case SPECIAL_SHOW_HIDE_CURSOR : // Show / Hide cursor case SPECIAL_SHOW_HIDE_CURSOR : // Show / Hide cursor
Effacer_curseur(); Effacer_curseur();
Cacher_curseur=!Cacher_curseur; Cacher_curseur=!Cacher_curseur;
Afficher_curseur(); Afficher_curseur();
Touche=0;
break; break;
case SPECIAL_PINCEAU_POINT : // Paintbrush = "." case SPECIAL_PINCEAU_POINT : // Paintbrush = "."
Effacer_curseur(); Effacer_curseur();
@ -639,26 +662,32 @@ void Gestion_principale(void)
Modifier_pinceau(1,1); Modifier_pinceau(1,1);
Changer_la_forme_du_pinceau(FORME_PINCEAU_ROND); Changer_la_forme_du_pinceau(FORME_PINCEAU_ROND);
Afficher_curseur(); Afficher_curseur();
Touche=0;
break; break;
case SPECIAL_DESSIN_CONTINU : // Continuous freehand drawing case SPECIAL_DESSIN_CONTINU : // Continuous freehand drawing
Enclencher_bouton(BOUTON_DESSIN,A_GAUCHE); Enclencher_bouton(BOUTON_DESSIN,A_GAUCHE);
// ATTENTION CE TRUC EST MOCHE ET VA MERDER SI ON SE MET A UTILISER DES BOUTONS POPUPS
while (Operation_en_cours!=OPERATION_DESSIN_CONTINU) while (Operation_en_cours!=OPERATION_DESSIN_CONTINU)
Enclencher_bouton(BOUTON_DESSIN,A_DROITE); Enclencher_bouton(BOUTON_DESSIN,A_DROITE);
Touche=0;
break; break;
case SPECIAL_FLIP_X : // Flip X case SPECIAL_FLIP_X : // Flip X
Effacer_curseur(); Effacer_curseur();
Flip_X_LOWLEVEL(); Flip_X_LOWLEVEL();
Afficher_curseur(); Afficher_curseur();
Touche=0;
break; break;
case SPECIAL_FLIP_Y : // Flip Y case SPECIAL_FLIP_Y : // Flip Y
Effacer_curseur(); Effacer_curseur();
Flip_Y_LOWLEVEL(); Flip_Y_LOWLEVEL();
Afficher_curseur(); Afficher_curseur();
Touche=0;
break; break;
case SPECIAL_ROTATE_90 : // 90° brush rotation case SPECIAL_ROTATE_90 : // 90° brush rotation
Effacer_curseur(); Effacer_curseur();
Rotate_90_deg(); Rotate_90_deg();
Afficher_curseur(); Afficher_curseur();
Touche=0;
break; break;
case SPECIAL_ROTATE_180 : // 180° brush rotation case SPECIAL_ROTATE_180 : // 180° brush rotation
Effacer_curseur(); Effacer_curseur();
@ -673,142 +702,180 @@ void Gestion_principale(void)
Brosse_Decalage_X=(Brosse_Largeur>>1); Brosse_Decalage_X=(Brosse_Largeur>>1);
Brosse_Decalage_Y=(Brosse_Hauteur>>1); Brosse_Decalage_Y=(Brosse_Hauteur>>1);
Afficher_curseur(); Afficher_curseur();
Touche=0;
break; break;
case SPECIAL_STRETCH : // Stretch brush case SPECIAL_STRETCH : // Stretch brush
Effacer_curseur(); Effacer_curseur();
Demarrer_pile_operation(OPERATION_ETIRER_BROSSE); Demarrer_pile_operation(OPERATION_ETIRER_BROSSE);
Afficher_curseur(); Afficher_curseur();
Touche=0;
break; break;
case SPECIAL_DISTORT : // Distort brush case SPECIAL_DISTORT : // Distort brush
Message_Non_disponible(); // !!! TEMPORAIRE !!! Message_Non_disponible(); // !!! TEMPORAIRE !!!
Touche=0;
break; break;
case SPECIAL_ROTATE_ANY_ANGLE : // Rotate brush by any angle case SPECIAL_ROTATE_ANY_ANGLE : // Rotate brush by any angle
Effacer_curseur(); Effacer_curseur();
Demarrer_pile_operation(OPERATION_TOURNER_BROSSE); Demarrer_pile_operation(OPERATION_TOURNER_BROSSE);
Afficher_curseur(); Afficher_curseur();
Touche=0;
break; break;
case SPECIAL_OUTLINE : // Outline brush case SPECIAL_OUTLINE : // Outline brush
Effacer_curseur(); Effacer_curseur();
Outline_brush(); Outline_brush();
Afficher_curseur(); Afficher_curseur();
Touche=0;
break; break;
case SPECIAL_NIBBLE : // Nibble brush case SPECIAL_NIBBLE : // Nibble brush
Effacer_curseur(); Effacer_curseur();
Nibble_brush(); Nibble_brush();
Afficher_curseur(); Afficher_curseur();
Touche=0;
break; break;
case SPECIAL_GET_BRUSH_COLORS : // Get colors from brush case SPECIAL_GET_BRUSH_COLORS : // Get colors from brush
Get_colors_from_brush(); Get_colors_from_brush();
Touche=0;
break; break;
case SPECIAL_RECOLORIZE_BRUSH : // Recolorize brush case SPECIAL_RECOLORIZE_BRUSH : // Recolorize brush
Effacer_curseur(); Effacer_curseur();
Remap_brosse(); Remap_brosse();
Afficher_curseur(); Afficher_curseur();
Touche=0;
break; break;
case SPECIAL_LOAD_BRUSH : case SPECIAL_LOAD_BRUSH :
Load_picture(0); Load_picture(0);
Touche=0;
break; break;
case SPECIAL_SAVE_BRUSH : case SPECIAL_SAVE_BRUSH :
Save_picture(0); Save_picture(0);
Touche=0;
break; break;
case SPECIAL_ZOOM_IN : // Zoom in case SPECIAL_ZOOM_IN : // Zoom in
Zoom(+1); Zoom(+1);
Touche=0;
break; break;
case SPECIAL_ZOOM_OUT : // Zoom out case SPECIAL_ZOOM_OUT : // Zoom out
Zoom(-1); Zoom(-1);
Touche=0;
break; break;
case SPECIAL_CENTER_ATTACHMENT : // Center brush attachment case SPECIAL_CENTER_ATTACHMENT : // Center brush attachment
Effacer_curseur(); Effacer_curseur();
Brosse_Decalage_X=(Brosse_Largeur>>1); Brosse_Decalage_X=(Brosse_Largeur>>1);
Brosse_Decalage_Y=(Brosse_Hauteur>>1); Brosse_Decalage_Y=(Brosse_Hauteur>>1);
Afficher_curseur(); Afficher_curseur();
Touche=0;
break; break;
case SPECIAL_TOP_LEFT_ATTACHMENT : // Top-left brush attachment case SPECIAL_TOP_LEFT_ATTACHMENT : // Top-left brush attachment
Effacer_curseur(); Effacer_curseur();
Brosse_Decalage_X=0; Brosse_Decalage_X=0;
Brosse_Decalage_Y=0; Brosse_Decalage_Y=0;
Afficher_curseur(); Afficher_curseur();
Touche=0;
break; break;
case SPECIAL_TOP_RIGHT_ATTACHMENT : // Top-right brush attachment case SPECIAL_TOP_RIGHT_ATTACHMENT : // Top-right brush attachment
Effacer_curseur(); Effacer_curseur();
Brosse_Decalage_X=(Brosse_Largeur-1); Brosse_Decalage_X=(Brosse_Largeur-1);
Brosse_Decalage_Y=0; Brosse_Decalage_Y=0;
Afficher_curseur(); Afficher_curseur();
Touche=0;
break; break;
case SPECIAL_BOTTOM_LEFT_ATTACHMENT : // Bottom-left brush attachment case SPECIAL_BOTTOM_LEFT_ATTACHMENT : // Bottom-left brush attachment
Effacer_curseur(); Effacer_curseur();
Brosse_Decalage_X=0; Brosse_Decalage_X=0;
Brosse_Decalage_Y=(Brosse_Hauteur-1); Brosse_Decalage_Y=(Brosse_Hauteur-1);
Afficher_curseur(); Afficher_curseur();
Touche=0;
break; break;
case SPECIAL_BOTTOM_RIGHT_ATTACHMENT : // Bottom right brush attachment case SPECIAL_BOTTOM_RIGHT_ATTACHMENT : // Bottom right brush attachment
Effacer_curseur(); Effacer_curseur();
Brosse_Decalage_X=(Brosse_Largeur-1); Brosse_Decalage_X=(Brosse_Largeur-1);
Brosse_Decalage_Y=(Brosse_Hauteur-1); Brosse_Decalage_Y=(Brosse_Hauteur-1);
Afficher_curseur(); Afficher_curseur();
Touche=0;
break; break;
case SPECIAL_EXCLUDE_COLORS_MENU : // Exclude colors menu case SPECIAL_EXCLUDE_COLORS_MENU : // Exclude colors menu
Menu_Tag_couleurs("Tag colors to exclude",Exclude_color,&Temp,1, NULL); Menu_Tag_couleurs("Tag colors to exclude",Exclude_color,&Temp,1, NULL);
Touche=0;
break; break;
case SPECIAL_INVERT_SIEVE : case SPECIAL_INVERT_SIEVE :
Inverser_trame(); Inverser_trame();
Touche=0;
break; break;
case SPECIAL_SHADE_MODE : case SPECIAL_SHADE_MODE :
Bouton_Shade_Mode(); Bouton_Shade_Mode();
Touche=0;
break; break;
case SPECIAL_SHADE_MENU : case SPECIAL_SHADE_MENU :
Bouton_Shade_Menu(); Bouton_Shade_Menu();
Touche=0;
break; break;
case SPECIAL_QUICK_SHADE_MODE : case SPECIAL_QUICK_SHADE_MODE :
Bouton_Quick_shade_Mode(); Bouton_Quick_shade_Mode();
Touche=0;
break; break;
case SPECIAL_QUICK_SHADE_MENU : case SPECIAL_QUICK_SHADE_MENU :
Bouton_Quick_shade_Menu(); Bouton_Quick_shade_Menu();
Touche=0;
break; break;
case SPECIAL_STENCIL_MODE : case SPECIAL_STENCIL_MODE :
Bouton_Stencil_Mode(); Bouton_Stencil_Mode();
Touche=0;
break; break;
case SPECIAL_STENCIL_MENU : case SPECIAL_STENCIL_MENU :
Bouton_Menu_Stencil(); Bouton_Menu_Stencil();
Touche=0;
break; break;
case SPECIAL_MASK_MODE : case SPECIAL_MASK_MODE :
Bouton_Mask_Mode(); Bouton_Mask_Mode();
Touche=0;
break; break;
case SPECIAL_MASK_MENU : case SPECIAL_MASK_MENU :
Bouton_Mask_Menu(); Bouton_Mask_Menu();
Touche=0;
break; break;
case SPECIAL_GRID_MODE : case SPECIAL_GRID_MODE :
Bouton_Snap_Mode(); Bouton_Snap_Mode();
Touche=0;
break; break;
case SPECIAL_GRID_MENU : case SPECIAL_GRID_MENU :
Bouton_Menu_Grille(); Bouton_Menu_Grille();
Touche=0;
break; break;
case SPECIAL_SIEVE_MODE : case SPECIAL_SIEVE_MODE :
Bouton_Trame_Mode(); Bouton_Trame_Mode();
Touche=0;
break; break;
case SPECIAL_SIEVE_MENU : case SPECIAL_SIEVE_MENU :
Bouton_Trame_Menu(); Bouton_Trame_Menu();
Touche=0;
break; break;
case SPECIAL_COLORIZE_MODE : case SPECIAL_COLORIZE_MODE :
Bouton_Colorize_Mode(); Bouton_Colorize_Mode();
Touche=0;
break; break;
case SPECIAL_COLORIZE_MENU : case SPECIAL_COLORIZE_MENU :
Bouton_Colorize_Menu(); Bouton_Colorize_Menu();
Touche=0;
break; break;
case SPECIAL_SMOOTH_MODE : case SPECIAL_SMOOTH_MODE :
Bouton_Smooth_Mode(); Bouton_Smooth_Mode();
Touche=0;
break; break;
case SPECIAL_SMOOTH_MENU : case SPECIAL_SMOOTH_MENU :
Bouton_Smooth_Menu(); Bouton_Smooth_Menu();
Touche=0;
break; break;
case SPECIAL_SMEAR_MODE : case SPECIAL_SMEAR_MODE :
Bouton_Smear_Mode(); Bouton_Smear_Mode();
Touche=0;
break; break;
case SPECIAL_TILING_MODE : case SPECIAL_TILING_MODE :
Bouton_Tiling_Mode(); Bouton_Tiling_Mode();
Touche=0;
break; break;
case SPECIAL_TILING_MENU : case SPECIAL_TILING_MENU :
Bouton_Tiling_Menu(); Bouton_Tiling_Menu();
Touche=0;
break; break;
default : // Gestion des touches de raccourci de bouton: default : // Gestion des touches de raccourci de bouton:
// Pour chaque bouton // Pour chaque bouton
@ -834,6 +901,7 @@ void Gestion_principale(void)
{ {
Enclencher_bouton(Bouton_Touche,Bouton_Cote); Enclencher_bouton(Bouton_Touche,Bouton_Cote);
Indice_bouton_precedent=-1; Indice_bouton_precedent=-1;
Touche=0;
} }
} }
@ -1105,6 +1173,7 @@ void Fermer_fenetre(void)
{ {
// Restore de ce que la fenêtre cachait // Restore de ce que la fenêtre cachait
Restaure_fond(Fond_fenetre[Fenetre-1], Fenetre_Pos_X, Fenetre_Pos_Y, Fenetre_Largeur, Fenetre_Hauteur); Restaure_fond(Fond_fenetre[Fenetre-1], Fenetre_Pos_X, Fenetre_Pos_Y, Fenetre_Largeur, Fenetre_Hauteur);
Fond_fenetre[Fenetre-1]=NULL;
UpdateRect(Fenetre_Pos_X,Fenetre_Pos_Y,Fenetre_Largeur*Menu_Facteur_X,Fenetre_Hauteur*Menu_Facteur_Y); UpdateRect(Fenetre_Pos_X,Fenetre_Pos_Y,Fenetre_Largeur*Menu_Facteur_X,Fenetre_Hauteur*Menu_Facteur_Y);
Fenetre--; Fenetre--;
} }
@ -1540,6 +1609,7 @@ void Fermer_popup(void)
{ {
// Restore de ce que la fenêtre cachait // Restore de ce que la fenêtre cachait
Restaure_fond(Fond_fenetre[Fenetre-1], Fenetre_Pos_X, Fenetre_Pos_Y, Fenetre_Largeur, Fenetre_Hauteur); Restaure_fond(Fond_fenetre[Fenetre-1], Fenetre_Pos_X, Fenetre_Pos_Y, Fenetre_Largeur, Fenetre_Hauteur);
Fond_fenetre[Fenetre-1]=NULL;
UpdateRect(Fenetre_Pos_X,Fenetre_Pos_Y,Fenetre_Largeur*Menu_Facteur_X,Fenetre_Hauteur*Menu_Facteur_Y); UpdateRect(Fenetre_Pos_X,Fenetre_Pos_Y,Fenetre_Largeur*Menu_Facteur_X,Fenetre_Hauteur*Menu_Facteur_Y);
Fenetre--; Fenetre--;
} }
@ -1798,36 +1868,55 @@ void Deplacer_fenetre(short Dx, short Dy)
Ancien_X=Nouveau_X; Ancien_X=Nouveau_X;
Ancien_Y=Nouveau_Y; Ancien_Y=Nouveau_Y;
while(!Get_input())Wait_VBL(); while(!Get_input())
{
Wait_VBL();
}
Nouveau_X=Mouse_X-Dx; Nouveau_X=Mouse_X-Dx;
if (Nouveau_X<0) if (Nouveau_X<0)
{
Nouveau_X=0; Nouveau_X=0;
Dx = Mouse_X;
}
if (Nouveau_X>Largeur_ecran-Largeur) if (Nouveau_X>Largeur_ecran-Largeur)
{
Nouveau_X=Largeur_ecran-Largeur; Nouveau_X=Largeur_ecran-Largeur;
Dx = Mouse_X - Nouveau_X;
}
Nouveau_Y=Mouse_Y-Dy; Nouveau_Y=Mouse_Y-Dy;
if (Nouveau_Y<0)
Nouveau_Y=0;
if (Nouveau_Y>Hauteur_ecran-Hauteur)
Nouveau_Y=Hauteur_ecran-Hauteur;
if ((Nouveau_X!=Ancien_X) if (Nouveau_Y<0)
|| (Nouveau_Y!=Ancien_Y)) {
Nouveau_Y=0;
Dy = Mouse_Y;
}
if (Nouveau_Y>Hauteur_ecran-Hauteur)
{
Nouveau_Y=Hauteur_ecran-Hauteur;
Dy = Mouse_Y - Nouveau_Y;
}
if ((Nouveau_X!=Ancien_X) || (Nouveau_Y!=Ancien_Y))
{ {
Effacer_curseur(); Effacer_curseur();
Ligne_horizontale_XOR(Ancien_X,Ancien_Y,Largeur); Ligne_horizontale_XOR(Ancien_X,Ancien_Y,Largeur);
Ligne_verticale_XOR(Ancien_X,Ancien_Y+1,Hauteur-2); Ligne_verticale_XOR(Ancien_X,Ancien_Y+1,Hauteur-2);
Ligne_verticale_XOR(Ancien_X+Largeur-1,Ancien_Y+1,Hauteur-2); Ligne_verticale_XOR(Ancien_X+Largeur-1,Ancien_Y+1,Hauteur-2);
Ligne_horizontale_XOR(Ancien_X,Ancien_Y+Hauteur-1,Largeur); Ligne_horizontale_XOR(Ancien_X,Ancien_Y+Hauteur-1,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);
Ligne_horizontale_XOR(Nouveau_X,Nouveau_Y+Hauteur-1,Largeur); Ligne_horizontale_XOR(Nouveau_X,Nouveau_Y+Hauteur-1,Largeur);
Afficher_curseur(); Afficher_curseur();
UpdateRect(Ancien_X,Ancien_Y,Largeur,Hauteur);
UpdateRect(Nouveau_X,Nouveau_Y,Largeur,Hauteur);
} }
UpdateRect(Ancien_X,Ancien_Y,Largeur,Hauteur);
UpdateRect(Nouveau_X,Nouveau_Y,Largeur,Hauteur);
} }
Effacer_curseur(); Effacer_curseur();
@ -1853,12 +1942,14 @@ void Deplacer_fenetre(short Dx, short Dy)
// Restore de ce que la fenêtre cachait // Restore de ce que la fenêtre cachait
Restaure_fond(Fond_fenetre[Fenetre-1], Fenetre_Pos_X, Fenetre_Pos_Y, Fenetre_Largeur, Fenetre_Hauteur); Restaure_fond(Fond_fenetre[Fenetre-1], Fenetre_Pos_X, Fenetre_Pos_Y, Fenetre_Largeur, Fenetre_Hauteur);
Fond_fenetre[Fenetre-1] = NULL;
// Sauvegarde de ce que la fenêtre remplace // Sauvegarde de ce que la fenêtre remplace
Sauve_fond(&(Fond_fenetre[Fenetre-1]), Nouveau_X, Nouveau_Y, Fenetre_Largeur, Fenetre_Hauteur); Sauve_fond(&(Fond_fenetre[Fenetre-1]), Nouveau_X, Nouveau_Y, Fenetre_Largeur, Fenetre_Hauteur);
// Raffichage de la fenêtre // Raffichage de la fenêtre
Restaure_fond(Buffer, Nouveau_X, Nouveau_Y, Fenetre_Largeur, Fenetre_Hauteur); Restaure_fond(Buffer, Nouveau_X, Nouveau_Y, Fenetre_Largeur, Fenetre_Hauteur);
Buffer = NULL;
// Mise à jour du rectangle englobant // Mise à jour du rectangle englobant
UpdateRect( UpdateRect(
@ -2100,7 +2191,11 @@ short Fenetre_Bouton_clicke(void)
if (Touche) if (Touche)
{ {
Bouton=Fenetre_Numero_bouton_touche(); Bouton=Fenetre_Numero_bouton_touche();
if (Bouton) return Bouton; if (Bouton)
{
Touche=0;
return Bouton;
}
} }
return 0; return 0;

View File

@ -1896,6 +1896,7 @@ void Bouton_Palette(void)
UpdateRect(Fenetre_Pos_X+(Menu_Facteur_X*264),Fenetre_Pos_Y+(Menu_Facteur_Y*93),Menu_Facteur_X<<4,Menu_Facteur_Y*64); UpdateRect(Fenetre_Pos_X+(Menu_Facteur_X*264),Fenetre_Pos_Y+(Menu_Facteur_Y*93),Menu_Facteur_X<<4,Menu_Facteur_Y*64);
Afficher_curseur(); Afficher_curseur();
} }
Touche=0;
break; break;
case SDLK_RIGHTBRACKET : // Décaler Forecolor vers la droite case SDLK_RIGHTBRACKET : // Décaler Forecolor vers la droite
@ -1917,6 +1918,7 @@ void Bouton_Palette(void)
UpdateRect(Fenetre_Pos_X+(Menu_Facteur_X*264),Fenetre_Pos_Y+(Menu_Facteur_Y*93),Menu_Facteur_X<<4,Menu_Facteur_Y*64); UpdateRect(Fenetre_Pos_X+(Menu_Facteur_X*264),Fenetre_Pos_Y+(Menu_Facteur_Y*93),Menu_Facteur_X<<4,Menu_Facteur_Y*64);
Afficher_curseur(); Afficher_curseur();
} }
Touche=0;
break; break;
case (SDLK_LEFTBRACKET|MOD_SHIFT) : // Decaler Backcolor vers la gauche case (SDLK_LEFTBRACKET|MOD_SHIFT) : // Decaler Backcolor vers la gauche
@ -1932,6 +1934,7 @@ void Bouton_Palette(void)
Block(Fenetre_Pos_X+(Menu_Facteur_X*280),Fenetre_Pos_Y+(Menu_Facteur_Y* 93),Menu_Facteur_X<<2,Menu_Facteur_Y<<6,Back_color); Block(Fenetre_Pos_X+(Menu_Facteur_X*280),Fenetre_Pos_Y+(Menu_Facteur_Y* 93),Menu_Facteur_X<<2,Menu_Facteur_Y<<6,Back_color);
UpdateRect(Fenetre_Pos_X+(Menu_Facteur_X*260),Fenetre_Pos_Y+(Menu_Facteur_Y* 89),Menu_Facteur_X*32,Menu_Facteur_Y*72); UpdateRect(Fenetre_Pos_X+(Menu_Facteur_X*260),Fenetre_Pos_Y+(Menu_Facteur_Y* 89),Menu_Facteur_X*32,Menu_Facteur_Y*72);
Afficher_curseur(); Afficher_curseur();
Touche=0;
break; break;
case SDLK_BACKSPACE : // Remise des couleurs du menu à l'état normal en essayant case SDLK_BACKSPACE : // Remise des couleurs du menu à l'état normal en essayant
@ -1955,6 +1958,7 @@ void Bouton_Palette(void)
Palette_Reafficher_jauges(Jauge_rouge,Jauge_verte,Jauge_bleue,Palette_de_travail,Debut_block,Fin_block); Palette_Reafficher_jauges(Jauge_rouge,Jauge_verte,Jauge_bleue,Palette_de_travail,Debut_block,Fin_block);
Compter_nb_couleurs_utilisees(&Nb_couleurs_utilisees,Utilisation_couleur); Compter_nb_couleurs_utilisees(&Nb_couleurs_utilisees,Utilisation_couleur);
Il_faut_remapper=1; Il_faut_remapper=1;
Touche=0;
break; break;
case SDLK_BACKQUOTE : // Récupération d'une couleur derrière le menu case SDLK_BACKQUOTE : // Récupération d'une couleur derrière le menu
@ -1998,10 +2002,12 @@ void Bouton_Palette(void)
} }
Afficher_curseur(); Afficher_curseur();
} }
Touche=0;
break; break;
default: default:
if (Touche==Bouton[BOUTON_AIDE].Raccourci_gauche) if (Touche==Bouton[BOUTON_AIDE].Raccourci_gauche)
{ {
Touche=0;
Fenetre_aide(BOUTON_PALETTE, NULL); Fenetre_aide(BOUTON_PALETTE, NULL);
break; break;
} }
@ -2091,7 +2097,10 @@ void Bouton_Palette_secondaire(void)
{ {
Bouton_clicke=Fenetre_Bouton_clicke(); Bouton_clicke=Fenetre_Bouton_clicke();
if (Touche==Bouton[BOUTON_AIDE].Raccourci_gauche) if (Touche==Bouton[BOUTON_AIDE].Raccourci_gauche)
{
Touche=0;
Fenetre_aide(BOUTON_PALETTE, NULL); Fenetre_aide(BOUTON_PALETTE, NULL);
}
} }
while (Bouton_clicke<=0); while (Bouton_clicke<=0);

View File

@ -901,6 +901,7 @@ int Menu_Shade(void)
Afficher_couleur_selectionnee(Premiere_couleur,Derniere_couleur); Afficher_couleur_selectionnee(Premiere_couleur,Derniere_couleur);
Afficher_curseur(); Afficher_curseur();
} }
Touche=0;
break; break;
case SDLK_UP : // Select Haut case SDLK_UP : // Select Haut
@ -948,6 +949,7 @@ int Menu_Shade(void)
Afficher_couleur_case_selectionnee(Select_Debut,Select_Debut); Afficher_couleur_case_selectionnee(Select_Debut,Select_Debut);
Afficher_curseur(); Afficher_curseur();
} }
Touche=0;
break; break;
case SDLK_BACKQUOTE : // Récupération d'une couleur derrière le menu case SDLK_BACKQUOTE : // Récupération d'une couleur derrière le menu
@ -970,10 +972,14 @@ int Menu_Shade(void)
Afficher_curseur(); Afficher_curseur();
} }
Touche=0;
break; break;
default: default:
if (Touche==Bouton[BOUTON_AIDE].Raccourci_gauche) if (Touche==Bouton[BOUTON_AIDE].Raccourci_gauche)
{
Touche=0;
Fenetre_aide(BOUTON_EFFETS, "SHADE"); Fenetre_aide(BOUTON_EFFETS, "SHADE");
}
} }
} }
while ((Bouton_clicke!=4) && (Bouton_clicke!=5)); while ((Bouton_clicke!=4) && (Bouton_clicke!=5));

View File

@ -699,6 +699,7 @@ byte Demande_de_confirmation(char * Message)
if (Touche==SDLK_ESCAPE) Bouton_clicke=2; if (Touche==SDLK_ESCAPE) Bouton_clicke=2;
} }
while (Bouton_clicke<=0); while (Bouton_clicke<=0);
Touche=0;
Fermer_fenetre(); Fermer_fenetre();
Afficher_curseur(); Afficher_curseur();
@ -728,6 +729,7 @@ void Warning_message(char * Message)
do do
Bouton_clicke=Fenetre_Bouton_clicke(); Bouton_clicke=Fenetre_Bouton_clicke();
while ((Bouton_clicke<=0) && (Touche!=SDLK_ESCAPE) && (Touche!=SDLK_o)); while ((Bouton_clicke<=0) && (Touche!=SDLK_ESCAPE) && (Touche!=SDLK_o));
Touche=0;
Fermer_fenetre(); Fermer_fenetre();
Afficher_curseur(); Afficher_curseur();