diff --git a/Makefile b/Makefile index b8145183..d4d5197a 100644 --- a/Makefile +++ b/Makefile @@ -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 diff --git a/aide.c b/aide.c index abc1cc8a..1314be3c 100644 --- a/aide.c +++ b/aide.c @@ -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_cours15) @@ -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_cours0) 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_liste0) @@ -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()) { diff --git a/const.h b/const.h index cae6da56..653029a1 100644 --- a/const.h +++ b/const.h @@ -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, diff --git a/gfx2.cfg b/gfx2.cfg index 468e39c0..ff34fe74 100644 Binary files a/gfx2.cfg and b/gfx2.cfg differ diff --git a/input.c b/input.c index dda6ab03..fee1c55a 100644 --- a/input.c +++ b/input.c @@ -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 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 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; } } diff --git a/main.c b/main.c index a8e4181c..5ee72429 100644 --- a/main.c +++ b/main.c @@ -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]; diff --git a/moteur.c b/moteur.c index 8e4e856c..9f438c47 100644 --- a/moteur.c +++ b/moteur.c @@ -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; diff --git a/palette.c b/palette.c index 7d5abda4..62567a11 100644 --- a/palette.c +++ b/palette.c @@ -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); diff --git a/shade.c b/shade.c index ae5dca98..f3eb3851 100644 --- a/shade.c +++ b/shade.c @@ -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)); diff --git a/windows.c b/windows.c index a68d8f37..f4ff3c6d 100644 --- a/windows.c +++ b/windows.c @@ -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();