From c018c13352eab72e006f41806f860b55847c7bf9 Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Mon, 26 Jan 2009 11:07:36 +0000 Subject: [PATCH] First "working" version of new get_input... buggy, but i'm working on it git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@556 416bcca6-2ee7-4201-b75f-2eb2f807beb1 --- Makefile | 2 +- Makefile.dep | 11 +- divers.c | 450 +----------------------------------------------- divers.h | 1 - input.c | 478 ++++++++++++++++++++++++++------------------------- input.h | 2 +- moteur.c | 1 + sdlscreen.c | 24 +-- sdlscreen.h | 1 - shade.c | 2 + 10 files changed, 264 insertions(+), 708 deletions(-) diff --git a/Makefile b/Makefile index eb8cce32..d4d03371 100644 --- a/Makefile +++ b/Makefile @@ -211,7 +211,7 @@ endif .PHONY : all debug release clean depend zip version force install uninstall -OBJ = $(OBJDIR)/main.o $(OBJDIR)/init.o $(OBJDIR)/graph.o $(OBJDIR)/sdlscreen.o $(OBJDIR)/divers.o $(OBJDIR)/special.o $(OBJDIR)/boutons.o $(OBJDIR)/palette.o $(OBJDIR)/aide.o $(OBJDIR)/operatio.o $(OBJDIR)/pages.o $(OBJDIR)/loadsave.o $(OBJDIR)/readline.o $(OBJDIR)/moteur.o $(OBJDIR)/files.o $(OBJDIR)/op_c.o $(OBJDIR)/readini.o $(OBJDIR)/saveini.o $(OBJDIR)/shade.o $(OBJDIR)/clavier.o $(OBJDIR)/io.o $(OBJDIR)/version.o $(OBJDIR)/texte.o $(OBJDIR)/SFont.o $(OBJDIR)/setup.o $(OBJDIR)/pxsimple.o $(OBJDIR)/pxtall.o $(OBJDIR)/pxwide.o $(OBJDIR)/windows.o $(OBJDIR)/brush.o $(OBJDIR)/realpath.o $(OBJDIR)/mountlist.o +OBJ = $(OBJDIR)/main.o $(OBJDIR)/init.o $(OBJDIR)/graph.o $(OBJDIR)/sdlscreen.o $(OBJDIR)/divers.o $(OBJDIR)/special.o $(OBJDIR)/boutons.o $(OBJDIR)/palette.o $(OBJDIR)/aide.o $(OBJDIR)/operatio.o $(OBJDIR)/pages.o $(OBJDIR)/loadsave.o $(OBJDIR)/readline.o $(OBJDIR)/moteur.o $(OBJDIR)/files.o $(OBJDIR)/op_c.o $(OBJDIR)/readini.o $(OBJDIR)/saveini.o $(OBJDIR)/shade.o $(OBJDIR)/clavier.o $(OBJDIR)/io.o $(OBJDIR)/version.o $(OBJDIR)/texte.o $(OBJDIR)/SFont.o $(OBJDIR)/setup.o $(OBJDIR)/pxsimple.o $(OBJDIR)/pxtall.o $(OBJDIR)/pxwide.o $(OBJDIR)/windows.o $(OBJDIR)/brush.o $(OBJDIR)/realpath.o $(OBJDIR)/mountlist.o $(OBJDIR)/input.o CFGOBJ = $(OBJDIR)/gfxcfg.o $(OBJDIR)/SFont.o $(OBJDIR)/clavier.o $(OBJDIR)/io.o $(OBJDIR)/setup.o all : $(BIN) $(CFGBIN) diff --git a/Makefile.dep b/Makefile.dep index ae1f57c3..e9b3028c 100644 --- a/Makefile.dep +++ b/Makefile.dep @@ -1,4 +1,3 @@ -$(OBJDIR)/SFont.o: SFont.c SFont.h $(OBJDIR)/aide.o: aide.c const.h struct.h global.h loadsave.h divers.h graph.h \ moteur.h tables_aide.h aide.h sdlscreen.h texte.h clavier.h windows.h $(OBJDIR)/boutons.o: boutons.c const.h struct.h global.h loadsave.h divers.h \ @@ -10,7 +9,7 @@ $(OBJDIR)/brush.o: brush.c global.h struct.h const.h loadsave.h graph.h divers.h $(OBJDIR)/clavier.o: clavier.c global.h struct.h const.h loadsave.h $(OBJDIR)/divers.o: divers.c struct.h const.h sdlscreen.h global.h loadsave.h \ graph.h erreurs.h boutons.h moteur.h divers.h clavier.h windows.h \ - palette.h + palette.h input.h $(OBJDIR)/files.o: files.c const.h struct.h global.h loadsave.h graph.h divers.h \ erreurs.h io.h windows.h $(OBJDIR)/gfxcfg.o: gfxcfg.c SFont.h struct.h const.h clavier.h io.h hotkeys.h \ @@ -21,6 +20,7 @@ $(OBJDIR)/graph.o: graph.c global.h struct.h const.h loadsave.h moteur.h boutons $(OBJDIR)/init.o: init.c const.h struct.h global.h loadsave.h graph.h boutons.h \ palette.h aide.h operatio.h divers.h erreurs.h clavier.h io.h hotkeys.h \ files.h setup.h windows.h mountlist.h +$(OBJDIR)/input.o: input.c $(OBJDIR)/io.o: io.c struct.h const.h io.h $(OBJDIR)/loadsave.o: loadsave.c const.h struct.h global.h loadsave.h graph.h \ divers.h pages.h op_c.h boutons.h erreurs.h io.h sdlscreen.h windows.h @@ -29,8 +29,8 @@ $(OBJDIR)/main.o: main.c const.h struct.h global.h loadsave.h graph.h divers.h \ readini.h saveini.h io.h texte.h setup.h windows.h brush.h palette.h $(OBJDIR)/moteur.o: moteur.c const.h struct.h global.h loadsave.h graph.h divers.h \ special.h boutons.h operatio.h shade.h erreurs.h sdlscreen.h windows.h \ - brush.h -$(OBJDIR)/mountlist.o: mountlist.c + brush.h input.h +$(OBJDIR)/mountlist.o: mountlist.c mountlist.h $(OBJDIR)/op_c.o: op_c.c op_c.h struct.h const.h erreurs.h graph.h $(OBJDIR)/operatio.o: operatio.c const.h struct.h global.h loadsave.h divers.h \ moteur.h graph.h operatio.h boutons.h pages.h erreurs.h sdlscreen.h \ @@ -56,8 +56,9 @@ $(OBJDIR)/saveini.o: saveini.c const.h global.h struct.h loadsave.h readini.h io $(OBJDIR)/sdlscreen.o: sdlscreen.c global.h struct.h const.h loadsave.h sdlscreen.h \ erreurs.h graph.h divers.h $(OBJDIR)/setup.o: setup.c struct.h const.h io.h files.h +$(OBJDIR)/SFont.o: SFont.c SFont.h $(OBJDIR)/shade.o: shade.c global.h struct.h const.h loadsave.h graph.h moteur.h \ - divers.h readline.h aide.h sdlscreen.h windows.h + divers.h readline.h aide.h sdlscreen.h windows.h input.h $(OBJDIR)/special.o: special.c const.h struct.h global.h loadsave.h graph.h \ moteur.h windows.h $(OBJDIR)/texte.o: texte.c SFont.h struct.h const.h global.h loadsave.h sdlscreen.h \ diff --git a/divers.c b/divers.c index ddfa13dd..d1d14f40 100644 --- a/divers.c +++ b/divers.c @@ -36,6 +36,7 @@ #include "sdlscreen.h" #include "windows.h" #include "palette.h" +#include "input.h" word Palette_Compter_nb_couleurs_utilisees(dword* Tableau) { @@ -149,451 +150,6 @@ void Sensibilite_souris(__attribute__((unused)) word X,__attribute__((unused)) w } -int Get_input(void) -//Gestion des évènements: mouvement de la souris, clic sur les boutons, et utilisation du clavier. -{ - SDL_Event event; - byte ok; - - Touche=0; - ok = 0; - - if( SDL_PollEvent(&event)) /* Il y a un évènement en attente */ - { - Gere_Evenement_SDL(&event); - switch( event.type) - { - case SDL_MOUSEMOTION: - //Mouvement de la souris - INPUT_Nouveau_Mouse_X = event.motion.x/Pixel_width; - INPUT_Nouveau_Mouse_Y = event.motion.y/Pixel_height; - - // Il peut arriver (à cause de la division ci dessus) que les nouvelles coordonnees soient égales aux anciennes... - // Dans ce cas on ne traite pas l'évènement. - if (INPUT_Nouveau_Mouse_X == Mouse_X && INPUT_Nouveau_Mouse_Y == Mouse_Y) return 0; - break; - - case SDL_MOUSEBUTTONDOWN: - //Clic sur un des boutons de la souris - switch(event.button.button) - { - case SDL_BUTTON_LEFT: - INPUT_Nouveau_Mouse_K = 1; - break; - - case SDL_BUTTON_MIDDLE: // Pour SDL, 2 = clic milieu. Pour nous c'est le clic droit - case SDL_BUTTON_RIGHT: // Clic droit SDL, clic droit pour nous aussi ( pour le moment en tout cas) - INPUT_Nouveau_Mouse_K = 2; - } - break; - - case SDL_MOUSEBUTTONUP: - //Bouton souris relaché - INPUT_Nouveau_Mouse_K=0; - break; - - case SDL_KEYUP: - { - // Il faut remettre à 0 les touches qui simulent un clic sinon c'est comme - int ToucheR = Conversion_Touche(event.key.keysym); - - if(ToucheR == Config_Touche[4]) - { - INPUT_Nouveau_Mouse_K=0; - ok=1; - } - else if(ToucheR == Config_Touche[5]) - { - //[Touche] = Emulation de MOUSE CLICK RIGHT - INPUT_Nouveau_Mouse_K=0; - ok=1; - } - break; - } - - case SDL_KEYDOWN: - { - //Appui sur une touche du clavier - Touche = Conversion_Touche(event.key.keysym); - Touche_ANSI = Conversion_ANSI(event.key.keysym); - - //Cas particulier: déplacement du curseur avec haut bas gauche droite - //On doit interpréter ça comme un mvt de la souris - - if(Touche == Config_Touche[0]) - { - //[Touche] = Emulation de MOUSE UP - //si on est déjà en haut on peut plus bouger - if(INPUT_Nouveau_Mouse_Y!=0) - { - if(Loupe_Mode && INPUT_Nouveau_Mouse_Y < Menu_Ordonnee && INPUT_Nouveau_Mouse_X > Principal_Split) - INPUT_Nouveau_Mouse_Y=INPUT_Nouveau_Mouse_Y Principal_Split) - { - INPUT_Nouveau_Mouse_Y+=Loupe_Facteur; - if (INPUT_Nouveau_Mouse_Y>=Hauteur_ecran) - INPUT_Nouveau_Mouse_Y=Hauteur_ecran-1; - } - else - INPUT_Nouveau_Mouse_Y++; - ok=1; - } - } - else if(Touche == Config_Touche[2]) - { - //[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) - INPUT_Nouveau_Mouse_X-=Loupe_Facteur; - else - INPUT_Nouveau_Mouse_X--; - ok=1; - } - } - else if(Touche == Config_Touche[3]) - { - //[Touche] = Emulation de MOUSE RIGHT - - if(INPUT_Nouveau_Mouse_X Principal_Split) - { - INPUT_Nouveau_Mouse_X+=Loupe_Facteur; - if (INPUT_Nouveau_Mouse_X>=Largeur_ecran) - INPUT_Nouveau_Mouse_X=Largeur_ecran-1; - } - else - INPUT_Nouveau_Mouse_X++; - ok=1; - } - } - else if(Touche == Config_Touche[4]) - { - //[Touche] = Emulation de MOUSE CLICK LEFT - INPUT_Nouveau_Mouse_K=1; - ok=1; - } - else if(Touche == Config_Touche[5]) - { - //[Touche] = Emulation de MOUSE CLICK RIGHT - INPUT_Nouveau_Mouse_K=2; - ok=1; - } - - if(ok) - { - SDL_WarpMouse( - INPUT_Nouveau_Mouse_X*Pixel_width, - INPUT_Nouveau_Mouse_Y*Pixel_height - ); - } - } - break; - - // Joystick handling - // Mostly useful for the gp2x - // FIXME : should be made configurable with gfxcfg. - case SDL_JOYBUTTONUP: - if(event.jbutton.button==13 || event.jbutton.button==14) - INPUT_Nouveau_Mouse_K=0; - - break; - - case SDL_JOYBUTTONDOWN: - switch(event.jbutton.button) - { - - case 13: - INPUT_Nouveau_Mouse_K = 1; - break; - - case 14: - INPUT_Nouveau_Mouse_K = 2; - break; - } - break; - } - } - else - { - // No SDL event, now we have to look at the joystick ones - if(SDL_JoystickGetButton(joystick,0)) - { - if(INPUT_Nouveau_Mouse_Y!=0) - { - if(Loupe_Mode && INPUT_Nouveau_Mouse_Y < Menu_Ordonnee && INPUT_Nouveau_Mouse_X > Principal_Split) - INPUT_Nouveau_Mouse_Y=INPUT_Nouveau_Mouse_Y Principal_Split) - INPUT_Nouveau_Mouse_Y=INPUT_Nouveau_Mouse_Y Principal_Split) - INPUT_Nouveau_Mouse_X-=Loupe_Facteur; - else - INPUT_Nouveau_Mouse_X--; - ok=1; - } - } - - if(SDL_JoystickGetButton(joystick,2)) - { - if(INPUT_Nouveau_Mouse_X!=0) - { - if(Loupe_Mode && INPUT_Nouveau_Mouse_Y < Menu_Ordonnee && INPUT_Nouveau_Mouse_X > Principal_Split) - INPUT_Nouveau_Mouse_X-=Loupe_Facteur; - else - INPUT_Nouveau_Mouse_X--; - ok=1; - } - } - - if(SDL_JoystickGetButton(joystick,3)) - { - if(INPUT_Nouveau_Mouse_X!=0) - { - if(Loupe_Mode && INPUT_Nouveau_Mouse_Y < Menu_Ordonnee && INPUT_Nouveau_Mouse_X > Principal_Split) - INPUT_Nouveau_Mouse_X-=Loupe_Facteur; - else - INPUT_Nouveau_Mouse_X--; - ok=1; - } - - if(INPUT_Nouveau_Mouse_Y Principal_Split) - { - INPUT_Nouveau_Mouse_Y+=Loupe_Facteur; - if (INPUT_Nouveau_Mouse_Y>=Hauteur_ecran) - INPUT_Nouveau_Mouse_Y=Hauteur_ecran-1; - } - else - INPUT_Nouveau_Mouse_Y++; - ok=1; - } - } - - if(SDL_JoystickGetButton(joystick,4)) - { - if(INPUT_Nouveau_Mouse_Y Principal_Split) - { - INPUT_Nouveau_Mouse_Y+=Loupe_Facteur; - if (INPUT_Nouveau_Mouse_Y>=Hauteur_ecran) - INPUT_Nouveau_Mouse_Y=Hauteur_ecran-1; - } - else - INPUT_Nouveau_Mouse_Y++; - ok=1; - } - } - - if(SDL_JoystickGetButton(joystick,5)) - { - if(INPUT_Nouveau_Mouse_Y Principal_Split) - { - INPUT_Nouveau_Mouse_Y+=Loupe_Facteur; - if (INPUT_Nouveau_Mouse_Y>=Hauteur_ecran) - INPUT_Nouveau_Mouse_Y=Hauteur_ecran-1; - } - else - INPUT_Nouveau_Mouse_Y++; - ok=1; - } - - if(INPUT_Nouveau_Mouse_X Principal_Split) - { - INPUT_Nouveau_Mouse_X+=Loupe_Facteur; - if (INPUT_Nouveau_Mouse_X>=Largeur_ecran) - INPUT_Nouveau_Mouse_X=Largeur_ecran-1; - } - else - INPUT_Nouveau_Mouse_X++; - ok=1; - } - } - - if(SDL_JoystickGetButton(joystick,6)) - { - if(INPUT_Nouveau_Mouse_X Principal_Split) - { - INPUT_Nouveau_Mouse_X+=Loupe_Facteur; - if (INPUT_Nouveau_Mouse_X>=Largeur_ecran) - INPUT_Nouveau_Mouse_X=Largeur_ecran-1; - } - else - INPUT_Nouveau_Mouse_X++; - ok=1; - } - } - - if(SDL_JoystickGetButton(joystick,7)) - { - if(INPUT_Nouveau_Mouse_X Principal_Split) - { - INPUT_Nouveau_Mouse_X+=Loupe_Facteur; - if (INPUT_Nouveau_Mouse_X>=Largeur_ecran) - INPUT_Nouveau_Mouse_X=Largeur_ecran-1; - } - else - INPUT_Nouveau_Mouse_X++; - ok=1; - } - - if(INPUT_Nouveau_Mouse_Y!=0) - { - if(Loupe_Mode && INPUT_Nouveau_Mouse_Y < Menu_Ordonnee && INPUT_Nouveau_Mouse_X > Principal_Split) - INPUT_Nouveau_Mouse_Y=INPUT_Nouveau_Mouse_Y=Principal_Split) - { - bl++; - INPUT_Nouveau_Mouse_X=Principal_Split-1; - } - } - else - { - if(INPUT_Nouveau_Mouse_X + +#include "global.h" +#include "clavier.h" +#include "graph.h" +#include "sdlscreen.h" +#include "windows.h" + +void Handle_Window_Resize(SDL_Event* event); +void Handle_Window_Exit(SDL_Event* event); + // Fonction qui filtre les evenements génériques. void Gere_Evenement_SDL(SDL_Event * event) { // Redimensionnement fenetre if (event->type == SDL_VIDEORESIZE ) { - Handle_Window_Resize(&event); + Handle_Window_Resize(event); } // Fermeture if (event->type == SDL_QUIT ) { - Handle_Window_Exit(&event); + Handle_Window_Exit(event); } } // WM events management -void Handle_Window_Resize(&event) +void Handle_Window_Resize(SDL_Event* event) { Resize_Largeur = event->resize.w; Resize_Hauteur = event->resize.h; } -void Handle_Window_Exit(&event) +void Handle_Window_Exit(SDL_Event* event) { Quit_demande = 1; } // Mouse events management -void Handle_Mouse_Move(&event) +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; + INPUT_Nouveau_Mouse_X = event->motion.x/Pixel_width; + INPUT_Nouveau_Mouse_Y = event->motion.y/Pixel_height; // Il peut arriver (à cause de la division ci dessus) que les nouvelles // coordonnees soient égales aux anciennes... // Dans ce cas on ne traite pas l'évènement. if (INPUT_Nouveau_Mouse_X == Mouse_X && INPUT_Nouveau_Mouse_Y == Mouse_Y) return 0; + + return 1; } -void Handle_Mouse_Click(&event) +void Handle_Mouse_Click(SDL_Event* event) { - switch(event.button.button) + switch(event->button.button) { case SDL_BUTTON_LEFT: INPUT_Nouveau_Mouse_K |= 1; @@ -80,9 +93,9 @@ void Handle_Mouse_Click(&event) } } -void Handle_Mouse_Release(&event) +void Handle_Mouse_Release(SDL_Event* event) { - switch(event.button.button) + switch(event->button.button) { case SDL_BUTTON_LEFT: INPUT_Nouveau_Mouse_K &= ~1; @@ -100,265 +113,266 @@ void Handle_Mouse_Release(&event) // Keyboard management -void Handle_Key_Press(&event) +int Handle_Key_Press(SDL_Event* event) { //Appui sur une touche du clavier - Touche = Conversion_Touche(event.key.keysym); - Touche_ANSI = Conversion_ANSI(event.key.keysym); + 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]) { - //[Touche] = Emulation de MOUSE UP - //si on est déjà en haut on peut plus bouger - if(INPUT_Nouveau_Mouse_Y!=0) - { - if(Loupe_Mode && INPUT_Nouveau_Mouse_Y < Menu_Ordonnee && INPUT_Nouveau_Mouse_X > Principal_Split) - INPUT_Nouveau_Mouse_Y=INPUT_Nouveau_Mouse_Y Principal_Split) - { - INPUT_Nouveau_Mouse_Y+=Loupe_Facteur; - if (INPUT_Nouveau_Mouse_Y>=Hauteur_ecran) - INPUT_Nouveau_Mouse_Y=Hauteur_ecran-1; - } - else - INPUT_Nouveau_Mouse_Y++; - ok=1; - } - } - else if(Touche == Config_Touche[2]) - { - //[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) - INPUT_Nouveau_Mouse_X-=Loupe_Facteur; - else - INPUT_Nouveau_Mouse_X--; - ok=1; - } - } - else if(Touche == Config_Touche[3]) - { - //[Touche] = Emulation de MOUSE RIGHT - - if(INPUT_Nouveau_Mouse_X Principal_Split) - { - INPUT_Nouveau_Mouse_X+=Loupe_Facteur; - if (INPUT_Nouveau_Mouse_X>=Largeur_ecran) - INPUT_Nouveau_Mouse_X=Largeur_ecran-1; - } - else - INPUT_Nouveau_Mouse_X++; - ok=1; - } - } - else if(Touche == Config_Touche[4]) - { - //[Touche] = Emulation de MOUSE CLICK LEFT - INPUT_Nouveau_Mouse_K=1; - ok=1; - } - else if(Touche == Config_Touche[5]) - { - //[Touche] = Emulation de MOUSE CLICK RIGHT - INPUT_Nouveau_Mouse_K=2; - ok=1; - } - - if(ok) - { - SDL_WarpMouse( - INPUT_Nouveau_Mouse_X*Pixel_width, - INPUT_Nouveau_Mouse_Y*Pixel_height - ); - } + //[Touche] = Emulation de MOUSE UP + //si on est déjà en haut on peut plus bouger + if(INPUT_Nouveau_Mouse_Y!=0) + { + if(Loupe_Mode && INPUT_Nouveau_Mouse_Y < Menu_Ordonnee && INPUT_Nouveau_Mouse_X > Principal_Split) + INPUT_Nouveau_Mouse_Y=INPUT_Nouveau_Mouse_Y Principal_Split) + { + INPUT_Nouveau_Mouse_Y+=Loupe_Facteur; + if (INPUT_Nouveau_Mouse_Y>=Hauteur_ecran) + INPUT_Nouveau_Mouse_Y=Hauteur_ecran-1; + } + else + INPUT_Nouveau_Mouse_Y++; + return 1; + } + } + else if(Touche == Config_Touche[2]) + { + //[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) + INPUT_Nouveau_Mouse_X-=Loupe_Facteur; + else + INPUT_Nouveau_Mouse_X--; + return 1; + } + } + else if(Touche == Config_Touche[3]) + { + //[Touche] = Emulation de MOUSE RIGHT + + if(INPUT_Nouveau_Mouse_X Principal_Split) + { + INPUT_Nouveau_Mouse_X+=Loupe_Facteur; + if (INPUT_Nouveau_Mouse_X>=Largeur_ecran) + INPUT_Nouveau_Mouse_X=Largeur_ecran-1; + } + else + INPUT_Nouveau_Mouse_X++; + return 1; + } + } + else if(Touche == Config_Touche[4]) + { + //[Touche] = Emulation de MOUSE CLICK LEFT + INPUT_Nouveau_Mouse_K=1; + return 1; + } + else if(Touche == Config_Touche[5]) + { + //[Touche] = Emulation de MOUSE CLICK RIGHT + INPUT_Nouveau_Mouse_K=2; + return 1; + } + return 0; } -void Handle_Key_Release(&event) +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[4]) - { - INPUT_Nouveau_Mouse_K=0; - } - else if(ToucheR == Config_Touche[5]) - { - //[Touche] = Emulation de MOUSE CLICK RIGHT - INPUT_Nouveau_Mouse_K=0; - } + // Send back a mouse event instead. Or extract the code and put it in common. + if(ToucheR == Config_Touche[4]) + { + INPUT_Nouveau_Mouse_K=0; + } + else if(ToucheR == Config_Touche[5]) + { + //[Touche] = Emulation de MOUSE CLICK RIGHT + INPUT_Nouveau_Mouse_K=0; + } } // Joystick management -void Handle_Joystick_Press(&event) +void Handle_Joystick_Press(SDL_Event* event) { } -void Handle_Joystick_Release(&event) +void Handle_Joystick_Release(SDL_Event* event) { } 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 - // 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)) - { - switch(event.type) + // 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)) { - case SDL_VIDEORESIZE: - Handle_Window_Resize(&event); - break; - - case SDL_QUIT: - Handle_Window_Exit(&event); - break; - - case SDL_MOUSEMOTION: - Handle_Mouse_Move(&event); - break; - - case SDL_MOUSEBUTTONDOWN: - Handle_Mouse_Click(&event); - break; - - case SDL_MOUSEBUTTONUP: - Handle_Mouse_Release(&event); - break; - - case SDL_KEYDOWN: - Handle_Key_Press(&event); - break; - - case SDL_KEYUP: - Handle_Key_Release(&event); - break; - - case SDL_JOYBUTTONUP: - Handle_Joystick_Press(&event); - break; - - case SDL_JOYBUTTONDOWN: - Handle_Joystick_Release(&event); - break; - } - } - - // Everything below should disapear - - //Gestion "avancée" du curseur: interdire la descente du curseur dans le - //menu lorsqu'on est en train de travailler dans l'image - - if(Operation_Taille_pile!=0) - { - byte bl=0;//BL va indiquer si on doit corriger la position du curseur - - //Si le curseur ne se trouve plus dans l'image - if(Menu_Ordonnee<=INPUT_Nouveau_Mouse_Y) - { - //On bloque le curseur en fin d'image - bl++; - INPUT_Nouveau_Mouse_Y=Menu_Ordonnee-1; //La ligne !!au-dessus!! du menu - } - - if(Loupe_Mode) - { - if(Operation_dans_loupe==0) - { - if(INPUT_Nouveau_Mouse_X>=Principal_Split) + switch(event.type) { - bl++; - INPUT_Nouveau_Mouse_X=Principal_Split-1; + case SDL_VIDEORESIZE: + Handle_Window_Resize(&event); + break; + + case SDL_QUIT: + Handle_Window_Exit(&event); + break; + + case SDL_MOUSEMOTION: + Handle_Mouse_Move(&event); + break; + + case SDL_MOUSEBUTTONDOWN: + Handle_Mouse_Click(&event); + break; + + case SDL_MOUSEBUTTONUP: + Handle_Mouse_Release(&event); + break; + + case SDL_KEYDOWN: + // PAS BEAU + if(Handle_Key_Press(&event)) + { + SDL_WarpMouse( + INPUT_Nouveau_Mouse_X*Pixel_width, + INPUT_Nouveau_Mouse_Y*Pixel_height + ); + } + break; + + case SDL_KEYUP: + Handle_Key_Release(&event); + break; + + case SDL_JOYBUTTONUP: + Handle_Joystick_Press(&event); + break; + + case SDL_JOYBUTTONDOWN: + Handle_Joystick_Release(&event); + break; } - } - else - { - if(INPUT_Nouveau_Mouse_X=Principal_Split) + { + bl++; + INPUT_Nouveau_Mouse_X=Principal_Split-1; + } + } + else + { + if(INPUT_Nouveau_Mouse_Xtype == SDL_VIDEORESIZE ) - { - Resize_Largeur = event->resize.w; - Resize_Hauteur = event->resize.h; - } - // Fermeture - if (event->type == SDL_QUIT ) - { - Quit_demande=1; - } -} - #if (METHODE_UPDATE == METHODE_UPDATE_PAR_CUMUL) short Min_X=0; short Min_Y=0; @@ -120,7 +104,7 @@ void Flush_update(void) Max_X=Max_Y=0; } #endif - + } void UpdateRect(short X, short Y, unsigned short Largeur, unsigned short Hauteur) @@ -128,7 +112,7 @@ void UpdateRect(short X, short Y, unsigned short Largeur, unsigned short Hauteur #if (METHODE_UPDATE == METHODE_UPDATE_MULTI_RECTANGLE) SDL_UpdateRect(Ecran_SDL, X*Pixel_width, Y*Pixel_height, Largeur*Pixel_width, Hauteur*Pixel_height); #endif - + #if (METHODE_UPDATE == METHODE_UPDATE_PAR_CUMUL) if (Largeur==0 || Hauteur==0) { @@ -147,7 +131,7 @@ void UpdateRect(short X, short Y, unsigned short Largeur, unsigned short Hauteur Max_Y=Y+Hauteur; } #endif - + #if (METHODE_UPDATE == METHODE_UPDATE_PLEINE_PAGE) Update_necessaire=1; #endif @@ -172,7 +156,7 @@ byte * Surface_en_bytefield(SDL_Surface *Source, byte * Destination) Reste=4-(Source->w&3); else Reste=0; - + if (Destination==NULL) Destination=(byte *)malloc(Source->w*Source->h); diff --git a/sdlscreen.h b/sdlscreen.h index 3e7a1429..20373759 100644 --- a/sdlscreen.h +++ b/sdlscreen.h @@ -26,7 +26,6 @@ #include "struct.h" void Set_Mode_SDL(int *,int *,int); - void Gere_Evenement_SDL(SDL_Event * event); SDL_Rect ** Liste_Modes_Videos_SDL; byte* Ecran; diff --git a/shade.c b/shade.c index 3b1b3ab5..ae5dca98 100644 --- a/shade.c +++ b/shade.c @@ -20,6 +20,7 @@ */ #include #include + #include "global.h" #include "graph.h" #include "moteur.h" @@ -28,6 +29,7 @@ #include "aide.h" #include "sdlscreen.h" #include "windows.h" +#include "input.h" void Bouton_Shade_Mode(void) {