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
else
# Linux specific
# Linux and FreeBSD specific (default rules)
DELCOMMAND = rm -rf
MKDIR = mkdir -p
RMDIR = rmdir
@ -183,6 +183,7 @@ else
COPT = -W -Wall -Wdeclaration-after-statement -pedantic -std=c99 -c -g `sdl-config --cflags` $(TTFCOPT)
LOPT = `sdl-config --libs` -lSDL_image $(TTFLOPT)
CC = gcc
#CC = nccgen -ncgcc -ncld -ncfabs #ncc makes callgraphs
OBJDIR = obj/unix
X11LOPT = -lX11
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)
Position_d_aide_en_cours--;
Scroller_aide();
Touche=0;
break;
case SDLK_DOWN : // Bas
if (Position_d_aide_en_cours<Nb_lignes-16)
Position_d_aide_en_cours++;
Scroller_aide();
Touche=0;
break;
case SDLK_PAGEUP : // PageUp
if (Position_d_aide_en_cours>15)
@ -335,6 +337,7 @@ void Fenetre_aide(int Section, const char *Sous_section)
else
Position_d_aide_en_cours=0;
Scroller_aide();
Touche=0;
break;
case SDLK_PAGEDOWN : // PageDown
if (Position_d_aide_en_cours<Nb_lignes-31)
@ -342,20 +345,24 @@ void Fenetre_aide(int Section, const char *Sous_section)
else
Position_d_aide_en_cours=Nb_lignes-16;
Scroller_aide();
Touche=0;
break;
case SDLK_HOME : // Home
Position_d_aide_en_cours=0;
Scroller_aide();
Touche=0;
break;
case SDLK_END : // End
Position_d_aide_en_cours=Nb_lignes-16;
Scroller_aide();
Touche=0;
break;
}
}
while ((Bouton_clicke!=1) && (Touche!=SDLK_RETURN));
if(Touche==SDLK_RETURN) Touche=0;
Fermer_fenetre();
Desenclencher_bouton(BOUTON_AIDE);
Afficher_curseur();
@ -469,6 +476,8 @@ void Bouton_Stats(void)
}
while ( (Bouton_clicke!=1) && (Touche!=SDLK_RETURN) );
if(Touche==SDLK_RETURN)Touche=0;
Fermer_fenetre();
Desenclencher_bouton(BOUTON_AIDE);
Afficher_curseur();

View File

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

32
const.h
View File

@ -294,22 +294,22 @@ enum NUMEROS_DE_BOUTONS
enum ACTIONS_SPECIALES
{
SPECIAL_MOUSE_UP, // |
SPECIAL_MOUSE_DOWN, // |
SPECIAL_MOUSE_LEFT, // |
SPECIAL_MOUSE_RIGHT, // |
SPECIAL_CLICK_LEFT, // | Il faut garder
SPECIAL_CLICK_RIGHT, // | ces constantes
SPECIAL_NEXT_FORECOLOR, // | au début de la
SPECIAL_PREVIOUS_FORECOLOR, // |_ liste car elles
SPECIAL_NEXT_BACKCOLOR, // | sont réutilisées
SPECIAL_PREVIOUS_BACKCOLOR, // | avec leurs valeurs
SPECIAL_RETRECIR_PINCEAU, // | brutes en ASM dans
SPECIAL_GROSSIR_PINCEAU, // | Get_input !!!
SPECIAL_NEXT_USER_FORECOLOR, // |
SPECIAL_PREVIOUS_USER_FORECOLOR, // |
SPECIAL_NEXT_USER_BACKCOLOR, // |
SPECIAL_PREVIOUS_USER_BACKCOLOR, // |
SPECIAL_MOUSE_UP,
SPECIAL_MOUSE_DOWN,
SPECIAL_MOUSE_LEFT,
SPECIAL_MOUSE_RIGHT,
SPECIAL_CLICK_LEFT,
SPECIAL_CLICK_RIGHT,
SPECIAL_NEXT_FORECOLOR,
SPECIAL_PREVIOUS_FORECOLOR,
SPECIAL_NEXT_BACKCOLOR,
SPECIAL_PREVIOUS_BACKCOLOR,
SPECIAL_RETRECIR_PINCEAU,
SPECIAL_GROSSIR_PINCEAU,
SPECIAL_NEXT_USER_FORECOLOR,
SPECIAL_PREVIOUS_USER_FORECOLOR,
SPECIAL_NEXT_USER_BACKCOLOR,
SPECIAL_PREVIOUS_USER_BACKCOLOR,
SPECIAL_SCROLL_UP,
SPECIAL_SCROLL_DOWN,
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_Y = event->motion.y/Pixel_height;
if(Move_cursor_with_constraints()) return 0;
return 1;
return Move_cursor_with_constraints();
}
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_ANSI = Conversion_ANSI(event->key.keysym);
// Instead of all this mess, send back a mouse event !
if(Touche == Config_Touche[0])
if(Touche == Config_Touche[SPECIAL_MOUSE_UP])
{
//[Touche] = Emulation de MOUSE UP
//si on est déjà en haut on peut plus bouger
if(INPUT_Nouveau_Mouse_Y!=0)
{
@ -205,9 +201,8 @@ int Handle_Key_Press(SDL_Event* event)
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(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;
}
}
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(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;
}
}
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(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;
}
}
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;
Move_cursor_with_constraints();
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;
Move_cursor_with_constraints();
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
//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)
{
//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.
//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(
(Touche != Config_Touche[6]) &&
(Touche != Config_Touche[7]) &&
(Touche != Config_Touche[8]) &&
(Touche != Config_Touche[9]) &&
(Touche != Config_Touche[10]) &&
(Touche != Config_Touche[11]) &&
(Touche != Config_Touche[12]) &&
(Touche != Config_Touche[13]) &&
(Touche != Config_Touche[14]) &&
(Touche != Config_Touche[15])
)
{
Touche=0;
}
if(
(Touche != Config_Touche[SPECIAL_NEXT_FORECOLOR]) &&
(Touche != Config_Touche[SPECIAL_PREVIOUS_FORECOLOR]) &&
(Touche != Config_Touche[SPECIAL_NEXT_BACKCOLOR]) &&
(Touche != Config_Touche[SPECIAL_PREVIOUS_BACKCOLOR]) &&
(Touche != Config_Touche[SPECIAL_RETRECIR_PINCEAU]) &&
(Touche != Config_Touche[SPECIAL_GROSSIR_PINCEAU]) &&
(Touche != Config_Touche[SPECIAL_NEXT_USER_FORECOLOR]) &&
(Touche != Config_Touche[SPECIAL_PREVIOUS_USER_FORECOLOR]) &&
(Touche != Config_Touche[SPECIAL_NEXT_USER_BACKCOLOR]) &&
(Touche != Config_Touche[SPECIAL_PREVIOUS_USER_BACKCOLOR])
)
{
Touche=0;
}
else Touche = 0;
}
else Touche = 0;
}
return 0;
}
@ -306,21 +293,20 @@ void Handle_Key_Release(SDL_Event* event)
{
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[4])
if(ToucheR == Config_Touche[SPECIAL_CLICK_LEFT])
{
INPUT_Nouveau_Mouse_K=0;
INPUT_Nouveau_Mouse_K &= ~1;
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=0;
INPUT_Nouveau_Mouse_K &= ~2;
Move_cursor_with_constraints();
}
Touche = 0;
Touche_ANSI=0;
// Other keys don't need to be released : they are handled as "events" and procesed only once.
// 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;
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.
// This mostly allows us to merge mouse events for people with an high
// resolution mouse
while( !User_Feedback_Required && SDL_PollEvent(&event))
while( (!User_Feedback_Required) && SDL_PollEvent(&event))
{
switch(event.type)
{
@ -361,7 +349,7 @@ int Get_input(void)
break;
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;
case SDL_MOUSEBUTTONDOWN:
@ -393,7 +381,7 @@ int Get_input(void)
break;
default:
DEBUG("Unhandled SDL event !",0);
DEBUG("Unhandled SDL event number : ",event.type);
break;
}
}

5
main.c
View File

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

View File

@ -901,6 +901,7 @@ int Menu_Shade(void)
Afficher_couleur_selectionnee(Premiere_couleur,Derniere_couleur);
Afficher_curseur();
}
Touche=0;
break;
case SDLK_UP : // Select Haut
@ -948,6 +949,7 @@ int Menu_Shade(void)
Afficher_couleur_case_selectionnee(Select_Debut,Select_Debut);
Afficher_curseur();
}
Touche=0;
break;
case SDLK_BACKQUOTE : // Récupération d'une couleur derrière le menu
@ -970,10 +972,14 @@ int Menu_Shade(void)
Afficher_curseur();
}
Touche=0;
break;
default:
if (Touche==Bouton[BOUTON_AIDE].Raccourci_gauche)
{
Touche=0;
Fenetre_aide(BOUTON_EFFETS, "SHADE");
}
}
}
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;
}
while (Bouton_clicke<=0);
Touche=0;
Fermer_fenetre();
Afficher_curseur();
@ -728,6 +729,7 @@ void Warning_message(char * Message)
do
Bouton_clicke=Fenetre_Bouton_clicke();
while ((Bouton_clicke<=0) && (Touche!=SDLK_ESCAPE) && (Touche!=SDLK_o));
Touche=0;
Fermer_fenetre();
Afficher_curseur();