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:
parent
8cd2e476f5
commit
c018c13352
2
Makefile
2
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)
|
||||
|
||||
11
Makefile.dep
11
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 \
|
||||
|
||||
446
divers.c
446
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<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
|
||||
{
|
||||
|
||||
1
divers.h
1
divers.h
@ -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
82
input.c
@ -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;
|
||||
}
|
||||
|
||||
2
input.h
2
input.h
@ -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);
|
||||
|
||||
1
moteur.c
1
moteur.c
@ -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;
|
||||
|
||||
16
sdlscreen.c
16
sdlscreen.c
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user