Support Unicode Keyboard Input
This commit is contained in:
		
							parent
							
								
									689aebf264
								
							
						
					
					
						commit
						144d10b682
					
				@ -97,6 +97,8 @@ GFX2_GLOBAL dword Key;
 | 
			
		||||
/// This is mostly used when the user enters text (filename, etc).
 | 
			
		||||
GFX2_GLOBAL dword Key_ANSI;
 | 
			
		||||
 | 
			
		||||
GFX2_GLOBAL dword Key_UNICODE;
 | 
			
		||||
 | 
			
		||||
// Keyboard modifiers
 | 
			
		||||
// (Name conflict with windows.h)
 | 
			
		||||
#ifdef MOD_SHIFT
 | 
			
		||||
 | 
			
		||||
@ -383,6 +383,9 @@ int Handle_key_press(SDL_KeyboardEvent event)
 | 
			
		||||
  
 | 
			
		||||
    Key = Keysym_to_keycode(event.keysym);
 | 
			
		||||
    Key_ANSI = Keysym_to_ANSI(event.keysym);
 | 
			
		||||
    Key_UNICODE = event.keysym.unicode;
 | 
			
		||||
    if (Key_UNICODE == 0)
 | 
			
		||||
      Key_UNICODE = Key_ANSI;
 | 
			
		||||
    switch(event.keysym.sym)
 | 
			
		||||
    {
 | 
			
		||||
      case SDLK_RSHIFT:
 | 
			
		||||
@ -847,6 +850,7 @@ int Get_input(int sleep_time)
 | 
			
		||||
    // some user input.
 | 
			
		||||
    Flush_update();
 | 
			
		||||
    Key_ANSI = 0;
 | 
			
		||||
    Key_UNICODE = 0;
 | 
			
		||||
    Key = 0;
 | 
			
		||||
    Mouse_moved=0;
 | 
			
		||||
    Input_new_mouse_X = Mouse_X;
 | 
			
		||||
 | 
			
		||||
@ -30,8 +30,8 @@
 | 
			
		||||
/// This is the keyboard/mouse/joystick input polling function.
 | 
			
		||||
/// Returns 1 if a significant changed occurred, such as a mouse button pressed
 | 
			
		||||
/// or depressed, or a new keypress was in the keyboard buffer.
 | 
			
		||||
/// The latest input variables are held in ::Key, ::Key_ANSI, ::Mouse_X, ::Mouse_Y, ::Mouse_K.
 | 
			
		||||
/// Note that ::Key and ::Key_ANSI are not persistent, they will be reset to 0
 | 
			
		||||
/// The latest input variables are held in ::Key, ::Key_ANSI, ::Key_UNICODE, ::Mouse_X, ::Mouse_Y, ::Mouse_K.
 | 
			
		||||
/// Note that ::Key, ::Key_ANSI and ::Key_UNICODE are not persistent, they will be reset to 0
 | 
			
		||||
/// on subsequent calls to ::Get_input().
 | 
			
		||||
int  Get_input(int sleep_time);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -633,7 +633,7 @@ word Keysym_to_ANSI(SDL_keysym keysym)
 | 
			
		||||
  // This part was removed from the MacOSX port, but I put it back for others
 | 
			
		||||
  // as on Linux and Windows, it's what allows editing a text line with the keys
 | 
			
		||||
  // SDLK_LEFT, SDLK_RIGHT, SDLK_HOME, SDLK_END etc.
 | 
			
		||||
  #if !(defined(__macosx__) || defined(__FreeBSD__))
 | 
			
		||||
  #if !defined(__macosx__)
 | 
			
		||||
  if ( keysym.unicode == 0)
 | 
			
		||||
  {
 | 
			
		||||
 | 
			
		||||
@ -722,6 +722,8 @@ word Keysym_to_ANSI(SDL_keysym keysym)
 | 
			
		||||
      return 'º'; // º
 | 
			
		||||
    case 0xC600: 
 | 
			
		||||
      return 'ã'; // ã
 | 
			
		||||
    case 0x20AC:
 | 
			
		||||
      return '\x80';  // Euro sign is 20AC in unicode, 80 in CP1252
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  // Key entre 127 et 255
 | 
			
		||||
 | 
			
		||||
@ -172,7 +172,7 @@ int Valid_character(word c, int input_type)
 | 
			
		||||
#endif
 | 
			
		||||
      int position;
 | 
			
		||||
 | 
			
		||||
      if (c < ' ' || c > 255)
 | 
			
		||||
      if (c < ' ')
 | 
			
		||||
        return 0;
 | 
			
		||||
 | 
			
		||||
      for (position=0; position<(long)sizeof(forbidden_char); position++)
 | 
			
		||||
@ -649,7 +649,7 @@ byte Readline_ex_unicode(word x_pos,word y_pos,char * str,word * str_unicode,byt
 | 
			
		||||
      do
 | 
			
		||||
      {
 | 
			
		||||
        Get_input(20);
 | 
			
		||||
        input_key=Key_ANSI;
 | 
			
		||||
        input_key = (str_unicode == NULL) ? Key_ANSI : Key_UNICODE;
 | 
			
		||||
        if (Mouse_K)
 | 
			
		||||
          input_key=SDLK_RETURN;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user