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
This commit is contained in:
Adrien Destugues 2009-01-26 11:07:36 +00:00
parent 8cd2e476f5
commit c018c13352
10 changed files with 264 additions and 708 deletions

View File

@ -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)

View File

@ -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 \

446
divers.c
View File

@ -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<Loupe_Facteur?0:INPUT_Nouveau_Mouse_Y-Loupe_Facteur;
else
INPUT_Nouveau_Mouse_Y--;
ok=1;
}
}
else if(Touche == Config_Touche[1])
{
//[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)
{
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<Largeur_ecran-1)
{
if(Loupe_Mode && INPUT_Nouveau_Mouse_Y < Menu_Ordonnee && 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<Loupe_Facteur?0:INPUT_Nouveau_Mouse_Y-Loupe_Facteur;
else
INPUT_Nouveau_Mouse_Y--;
ok=1;
}
}
if(SDL_JoystickGetButton(joystick,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<Loupe_Facteur?0:INPUT_Nouveau_Mouse_Y-Loupe_Facteur;
else
INPUT_Nouveau_Mouse_Y--;
ok=1;
}
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,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<Hauteur_ecran-1)
{
if(Loupe_Mode && INPUT_Nouveau_Mouse_Y < Menu_Ordonnee && INPUT_Nouveau_Mouse_X > 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<Hauteur_ecran-1)
{
if(Loupe_Mode && INPUT_Nouveau_Mouse_Y < Menu_Ordonnee && INPUT_Nouveau_Mouse_X > 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<Hauteur_ecran-1)
{
if(Loupe_Mode && INPUT_Nouveau_Mouse_Y < Menu_Ordonnee && INPUT_Nouveau_Mouse_X > 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<Largeur_ecran-1)
{
if(Loupe_Mode && INPUT_Nouveau_Mouse_Y < Menu_Ordonnee && 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<Largeur_ecran-1)
{
if(Loupe_Mode && INPUT_Nouveau_Mouse_Y < Menu_Ordonnee && 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<Largeur_ecran-1)
{
if(Loupe_Mode && INPUT_Nouveau_Mouse_Y < Menu_Ordonnee && 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<Loupe_Facteur?0:INPUT_Nouveau_Mouse_Y-Loupe_Facteur;
else
INPUT_Nouveau_Mouse_Y--;
ok=1;
}
}
if(ok)
{
SDL_WarpMouse(
INPUT_Nouveau_Mouse_X*Pixel_width,
INPUT_Nouveau_Mouse_Y*Pixel_height
);
SDL_Delay(10/Menu_Facteur_X); // Histoire que ça bouge pas trop vite ...
}
else{
Flush_update();
return 0; // Il ne s'est rien passé
}
}
//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)
{
bl++;
INPUT_Nouveau_Mouse_X=Principal_Split-1;
}
}
else
{
if(INPUT_Nouveau_Mouse_X<Principal_X_Zoom)
{
bl++;
INPUT_Nouveau_Mouse_X=Principal_X_Zoom;
}
}
}
if (bl)
{
SDL_WarpMouse(
INPUT_Nouveau_Mouse_X*Pixel_width,
INPUT_Nouveau_Mouse_Y*Pixel_height
);
}
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)
{
//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;
}
}
else Touche = 0;
}
}
if (
(INPUT_Nouveau_Mouse_X != Mouse_X) ||
(INPUT_Nouveau_Mouse_Y != Mouse_Y) ||
(INPUT_Nouveau_Mouse_K != Mouse_K)
)
{
Forcer_affichage_curseur=0;
Effacer_curseur(); // On efface le curseur AVANT de le déplacer...
Mouse_X=INPUT_Nouveau_Mouse_X;
Mouse_Y=INPUT_Nouveau_Mouse_Y;
Mouse_K=INPUT_Nouveau_Mouse_K;
Calculer_coordonnees_pinceau();
Afficher_curseur();
}
// Vidage de toute mise à jour de l'affichage à l'écran qui serait encore en attente.
// (c'est fait ici car on est sur que cette fonction est apellée partout ou on a besoin d'interragir avec l'utilisateur)
Flush_update();
return 1; // Il y a des choses à faire
}
void Initialiser_chrono(dword Delai)
// Démarrer le chrono
{

View File

@ -25,7 +25,6 @@ void Permuter_dans_l_image_les_couleurs(byte Couleur_1,byte Couleur_2);
void Remap_general_LOWLEVEL(byte * Table_conv,byte * Buffer,short Largeur,short Hauteur,short Largeur_buffer);
void Scroll_picture(short Decalage_X,short Decalage_Y);
void Set_mouse_video_mode_number(void);
int Get_input(void);
void Set_mouse_position(void);
void Attendre_fin_de_click(void);
void Sensibilite_souris(word X,word Y);

82
input.c
View File

@ -19,52 +19,65 @@
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <SDL.h>
#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,11 +113,11 @@ 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])
@ -117,7 +130,7 @@ void Handle_Key_Press(&event)
INPUT_Nouveau_Mouse_Y=INPUT_Nouveau_Mouse_Y<Loupe_Facteur?0:INPUT_Nouveau_Mouse_Y-Loupe_Facteur;
else
INPUT_Nouveau_Mouse_Y--;
ok=1;
return 1;
}
}
else if(Touche == Config_Touche[1])
@ -133,7 +146,7 @@ void Handle_Key_Press(&event)
}
else
INPUT_Nouveau_Mouse_Y++;
ok=1;
return 1;
}
}
else if(Touche == Config_Touche[2])
@ -145,7 +158,7 @@ void Handle_Key_Press(&event)
INPUT_Nouveau_Mouse_X-=Loupe_Facteur;
else
INPUT_Nouveau_Mouse_X--;
ok=1;
return 1;
}
}
else if(Touche == Config_Touche[3])
@ -162,35 +175,27 @@ void Handle_Key_Press(&event)
}
else
INPUT_Nouveau_Mouse_X++;
ok=1;
return 1;
}
}
else if(Touche == Config_Touche[4])
{
//[Touche] = Emulation de MOUSE CLICK LEFT
INPUT_Nouveau_Mouse_K=1;
ok=1;
return 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
);
}
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])
@ -207,12 +212,12 @@ void Handle_Key_Release(&event)
// 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)
{
}
@ -220,6 +225,7 @@ void Handle_Joystick_Release(&event)
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
// Process as much events as possible without redrawing the screen.
// This mostly allows us to merge mouse events for people with an high
@ -249,7 +255,14 @@ int Get_input(void)
break;
case SDL_KEYDOWN:
Handle_Key_Press(&event);
// 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:
@ -361,4 +374,5 @@ int Get_input(void)
// (c'est fait ici car on est sur que cette fonction est apellée partout ou on a besoin d'interragir avec l'utilisateur)
Flush_update();
return 0;
}

View File

@ -19,6 +19,6 @@
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
void Handle_Window_event(SDL_Event * event);
void Gere_Evenement_SDL(SDL_Event * event);
int Get_input(void);

View File

@ -38,6 +38,7 @@
#include "sdlscreen.h"
#include "windows.h"
#include "brush.h"
#include "input.h"
// we need this as global
short Old_MX = -1;

View File

@ -66,22 +66,6 @@ void Set_Mode_SDL(int *Largeur, int *Hauteur, int Fullscreen)
SDL_ShowCursor(0); // Cache le curseur SDL, on le gère en soft
}
// Fonction qui filtre les evenements génériques.
void Gere_Evenement_SDL(SDL_Event * event)
{
// Redimensionnement fenetre
if (event->type == 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;

View File

@ -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;

View File

@ -20,6 +20,7 @@
*/
#include <string.h>
#include <stdlib.h>
#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)
{