Fix the clipping of mouse cursor.
Fix joystick buttons not causing action if no mouse movement. git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@585 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
		
							parent
							
								
									5a80cdae44
								
							
						
					
					
						commit
						599e835e28
					
				
							
								
								
									
										10
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								Makefile
									
									
									
									
									
								
							@ -37,7 +37,7 @@ ifdef COMSPEC
 | 
			
		||||
  CP = cp
 | 
			
		||||
  BIN = grafx2.exe
 | 
			
		||||
  CFGBIN = gfxcfg.exe
 | 
			
		||||
  COPT = -W -Wall -Wdeclaration-after-statement -O -g -ggdb `sdl-config --cflags` $(TTFCOPT)
 | 
			
		||||
  COPT = -W -Wall -Wdeclaration-after-statement -O -g -ggdb `sdl-config --cflags` $(TTFCOPT) $(JOYCOPT)
 | 
			
		||||
  LOPT = `sdl-config --libs` -lSDL_image $(TTFLOPT) -lpng
 | 
			
		||||
  CC = gcc
 | 
			
		||||
  OBJDIR = obj/win32
 | 
			
		||||
@ -209,6 +209,14 @@ else
 | 
			
		||||
  TTFLABEL = 
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
#To disable Joystick emulation of cursor, make NOTTF=1 (for input.o)
 | 
			
		||||
#This can be necessary to test keyboard cursor code, because an existing
 | 
			
		||||
#joystick will keep reporting a contradicting position.
 | 
			
		||||
ifeq ($(NOJOY),1)
 | 
			
		||||
  JOYCOPT = -DNO_JOYCURSOR
 | 
			
		||||
else
 | 
			
		||||
  JOYCOPT =
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
.PHONY : all debug release clean depend zip version force install uninstall
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										116
									
								
								input.c
									
									
									
									
									
								
							
							
						
						
									
										116
									
								
								input.c
									
									
									
									
									
								
							@ -27,6 +27,7 @@
 | 
			
		||||
#include "sdlscreen.h"
 | 
			
		||||
#include "windows.h"
 | 
			
		||||
#include "erreurs.h"
 | 
			
		||||
#include "divers.h"
 | 
			
		||||
 | 
			
		||||
void Handle_Window_Resize(SDL_ResizeEvent event);
 | 
			
		||||
void Handle_Window_Exit(SDL_QuitEvent event);
 | 
			
		||||
@ -147,7 +148,7 @@ int Handle_Mouse_Move(SDL_MouseMotionEvent event)
 | 
			
		||||
    return Move_cursor_with_constraints();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Handle_Mouse_Click(SDL_MouseButtonEvent event)
 | 
			
		||||
int Handle_Mouse_Click(SDL_MouseButtonEvent event)
 | 
			
		||||
{
 | 
			
		||||
    switch(event.button)
 | 
			
		||||
    {
 | 
			
		||||
@ -164,12 +165,12 @@ void Handle_Mouse_Click(SDL_MouseButtonEvent event)
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            DEBUG("Unknown mouse button!",0);
 | 
			
		||||
            return;
 | 
			
		||||
            return 0;
 | 
			
		||||
    }
 | 
			
		||||
    Move_cursor_with_constraints();
 | 
			
		||||
    return Move_cursor_with_constraints();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Handle_Mouse_Release(SDL_MouseButtonEvent event)
 | 
			
		||||
int Handle_Mouse_Release(SDL_MouseButtonEvent event)
 | 
			
		||||
{
 | 
			
		||||
    switch(event.button)
 | 
			
		||||
    {
 | 
			
		||||
@ -185,7 +186,7 @@ void Handle_Mouse_Release(SDL_MouseButtonEvent event)
 | 
			
		||||
            INPUT_Nouveau_Mouse_K &= ~2;
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
    Move_cursor_with_constraints();
 | 
			
		||||
    return Move_cursor_with_constraints();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Keyboard management
 | 
			
		||||
@ -219,14 +220,12 @@ int Handle_Key_Press(SDL_KeyboardEvent event)
 | 
			
		||||
    else if(Touche == Config_Touche[SPECIAL_CLICK_LEFT])
 | 
			
		||||
    {
 | 
			
		||||
        INPUT_Nouveau_Mouse_K=1;
 | 
			
		||||
        Move_cursor_with_constraints();
 | 
			
		||||
        return 1;
 | 
			
		||||
        return Move_cursor_with_constraints();
 | 
			
		||||
    }
 | 
			
		||||
    else if(Touche == Config_Touche[SPECIAL_CLICK_RIGHT])
 | 
			
		||||
    {
 | 
			
		||||
        INPUT_Nouveau_Mouse_K=2;
 | 
			
		||||
        Move_cursor_with_constraints();
 | 
			
		||||
        return 1;
 | 
			
		||||
        return Move_cursor_with_constraints();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (Operation_Taille_pile!=0 && Touche != 0)
 | 
			
		||||
@ -260,11 +259,11 @@ int Handle_Key_Press(SDL_KeyboardEvent event)
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Handle_Key_Release(SDL_KeyboardEvent event)
 | 
			
		||||
int Handle_Key_Release(SDL_KeyboardEvent event)
 | 
			
		||||
{
 | 
			
		||||
    int Modifieur;
 | 
			
		||||
    int ToucheR = Conversion_Touche(event.keysym) & 0x0FFF;
 | 
			
		||||
 | 
			
		||||
  
 | 
			
		||||
    switch(event.keysym.sym)
 | 
			
		||||
    {
 | 
			
		||||
      case SDLK_RSHIFT:
 | 
			
		||||
@ -283,7 +282,7 @@ void Handle_Key_Release(SDL_KeyboardEvent event)
 | 
			
		||||
      default:
 | 
			
		||||
        Modifieur=0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  
 | 
			
		||||
    if(ToucheR == (Config_Touche[SPECIAL_MOUSE_UP]&0x0FFF) || (Config_Touche[SPECIAL_MOUSE_UP]&Modifieur))
 | 
			
		||||
    {
 | 
			
		||||
      Directional_up=0;
 | 
			
		||||
@ -303,23 +302,24 @@ void Handle_Key_Release(SDL_KeyboardEvent event)
 | 
			
		||||
    if(ToucheR == (Config_Touche[SPECIAL_CLICK_LEFT]&0x0FFF) || (Config_Touche[SPECIAL_CLICK_LEFT]&Modifieur))
 | 
			
		||||
    {
 | 
			
		||||
        INPUT_Nouveau_Mouse_K &= ~1;
 | 
			
		||||
        Move_cursor_with_constraints();
 | 
			
		||||
        return Move_cursor_with_constraints();
 | 
			
		||||
    }
 | 
			
		||||
    if(ToucheR == (Config_Touche[SPECIAL_CLICK_RIGHT]&0x0FFF) || (Config_Touche[SPECIAL_CLICK_RIGHT]&Modifieur))
 | 
			
		||||
    {
 | 
			
		||||
        INPUT_Nouveau_Mouse_K &= ~2;
 | 
			
		||||
        Move_cursor_with_constraints();
 | 
			
		||||
        return Move_cursor_with_constraints();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  
 | 
			
		||||
    // 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.
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Joystick management
 | 
			
		||||
 | 
			
		||||
void Handle_Joystick_Press(SDL_JoyButtonEvent event)
 | 
			
		||||
int Handle_Joystick_Press(SDL_JoyButtonEvent event)
 | 
			
		||||
{
 | 
			
		||||
  if (event.which==0) // joystick number 0
 | 
			
		||||
  {
 | 
			
		||||
@ -371,9 +371,10 @@ void Handle_Joystick_Press(SDL_JoyButtonEvent event)
 | 
			
		||||
    }
 | 
			
		||||
    #endif
 | 
			
		||||
  }
 | 
			
		||||
  return Move_cursor_with_constraints();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Handle_Joystick_Release(SDL_JoyButtonEvent event)
 | 
			
		||||
int Handle_Joystick_Release(SDL_JoyButtonEvent event)
 | 
			
		||||
{
 | 
			
		||||
  if (event.which==0) // joystick number 0
 | 
			
		||||
  {
 | 
			
		||||
@ -423,6 +424,7 @@ void Handle_Joystick_Release(SDL_JoyButtonEvent event)
 | 
			
		||||
    }
 | 
			
		||||
    #endif
 | 
			
		||||
  }
 | 
			
		||||
  return Move_cursor_with_constraints();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Handle_Joystick_Movement(SDL_JoyAxisEvent event)
 | 
			
		||||
@ -454,6 +456,40 @@ void Handle_Joystick_Movement(SDL_JoyAxisEvent event)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Attempts to move the mouse cursor by the given deltas (may be more than 1 pixel at a time)
 | 
			
		||||
int Cursor_displace(short Delta_X, short Delta_Y)
 | 
			
		||||
{
 | 
			
		||||
  short X=INPUT_Nouveau_Mouse_X;
 | 
			
		||||
  short Y=INPUT_Nouveau_Mouse_Y;
 | 
			
		||||
  
 | 
			
		||||
  if(Loupe_Mode && INPUT_Nouveau_Mouse_Y < Menu_Ordonnee && INPUT_Nouveau_Mouse_X > Principal_Split)
 | 
			
		||||
  {
 | 
			
		||||
    // Cursor in zoomed area
 | 
			
		||||
    
 | 
			
		||||
    if (Delta_X<0)
 | 
			
		||||
      INPUT_Nouveau_Mouse_X = Max(Principal_Split, X-Loupe_Facteur);
 | 
			
		||||
    else if (Delta_X>0)
 | 
			
		||||
      INPUT_Nouveau_Mouse_X = Min(Largeur_ecran-1, X+Loupe_Facteur);
 | 
			
		||||
    if (Delta_Y<0)
 | 
			
		||||
      INPUT_Nouveau_Mouse_Y = Max(0, Y-Loupe_Facteur);
 | 
			
		||||
    else if (Delta_Y>0)
 | 
			
		||||
      INPUT_Nouveau_Mouse_Y = Min(Hauteur_ecran-1, Y+Loupe_Facteur);
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    if (Delta_X<0)
 | 
			
		||||
      INPUT_Nouveau_Mouse_X = Max(0, X+Delta_X);
 | 
			
		||||
    else if (Delta_X>0)
 | 
			
		||||
      INPUT_Nouveau_Mouse_X = Min(Largeur_ecran-1, X+Delta_X);
 | 
			
		||||
    if (Delta_Y<0)
 | 
			
		||||
      INPUT_Nouveau_Mouse_Y = Max(0, Y+Delta_Y);
 | 
			
		||||
    else if (Delta_Y>0)
 | 
			
		||||
      INPUT_Nouveau_Mouse_Y = Min(Hauteur_ecran-1, Y+Delta_Y);
 | 
			
		||||
  }
 | 
			
		||||
  return Move_cursor_with_constraints();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Main input handling function
 | 
			
		||||
 | 
			
		||||
int Get_input(void)
 | 
			
		||||
@ -539,6 +575,7 @@ int Get_input(void)
 | 
			
		||||
      
 | 
			
		||||
      if (Now>Directional_last_move+Directional_delay)
 | 
			
		||||
      {
 | 
			
		||||
        // Speed parameters, acceleration etc. are here
 | 
			
		||||
        if (Directional_delay==-1)
 | 
			
		||||
        {
 | 
			
		||||
          Directional_delay=150;
 | 
			
		||||
@ -556,62 +593,25 @@ int Get_input(void)
 | 
			
		||||
        if ((Directional_up||Directional_up_left||Directional_up_right) &&
 | 
			
		||||
           !(Directional_down_right||Directional_down||Directional_down_left))
 | 
			
		||||
        {
 | 
			
		||||
          //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-=Directional_step/16;
 | 
			
		||||
            Move_cursor_with_constraints();
 | 
			
		||||
          }
 | 
			
		||||
          Cursor_displace(0, -Directional_step/16);
 | 
			
		||||
        }
 | 
			
		||||
        // Directional controller RIGHT
 | 
			
		||||
        if ((Directional_up_right||Directional_right||Directional_down_right) &&
 | 
			
		||||
           !(Directional_down_left||Directional_left||Directional_up_left))
 | 
			
		||||
        {
 | 
			
		||||
          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+=Directional_step/16;
 | 
			
		||||
            Move_cursor_with_constraints();
 | 
			
		||||
          }
 | 
			
		||||
          Cursor_displace(Directional_step/16,0);
 | 
			
		||||
        }    
 | 
			
		||||
        // Directional controller DOWN
 | 
			
		||||
        if ((Directional_down_right||Directional_down||Directional_down_left) &&
 | 
			
		||||
           !(Directional_up_left||Directional_up||Directional_up_right))
 | 
			
		||||
        {
 | 
			
		||||
          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+=Directional_step/16;
 | 
			
		||||
            Move_cursor_with_constraints();
 | 
			
		||||
          }
 | 
			
		||||
          Cursor_displace(0, Directional_step/16);
 | 
			
		||||
        }
 | 
			
		||||
        // Directional controller LEFT
 | 
			
		||||
        if ((Directional_down_left||Directional_left||Directional_up_left) &&
 | 
			
		||||
           !(Directional_up_right||Directional_right||Directional_down_right))
 | 
			
		||||
        {
 | 
			
		||||
          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-=Directional_step/16;
 | 
			
		||||
            Move_cursor_with_constraints();
 | 
			
		||||
          }
 | 
			
		||||
          Cursor_displace(-Directional_step/16,0);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user