Problem with key rotation and WinCE on PocketPC

Hello,
in my opinion, the key rotation on PocketPC isn’t handled correctly.
The “rotatekey” function works only when SDL_ORIENTATION_LEFT is selected, but it makes a rotation to right of the controls with all my PocketPCs.
I suggest the following patch.

Sincerely,

Carlo Bramini.

diff -urN 0/SDL_dibevents.c 1/SDL_dibevents.c
— 0/SDL_dibevents.c 2006-05-18 13:44:22 +0000
+++ 1/SDL_dibevents.c 2007-02-16 12:18:58 +0000
@@ -61,21 +61,44 @@

#ifdef _WIN32_WCE

+typedef struct {

  • DWORD vk_key_in;
  • DWORD vk_key_out;
    +} vk_list_t;+
    +static const vk_list_t vk_list_left[] = {
  • { VK_UP, VK_LEFT },
  • { VK_RIGHT, VK_UP },
  • { VK_DOWN, VK_RIGHT },
  • { VK_LEFT, VK_DOWN },
    +};

+static const vk_list_t vk_list_right[] = {

  • { VK_UP, VK_RIGHT },
  • { VK_RIGHT, VK_DOWN },
  • { VK_DOWN, VK_LEFT },
  • { VK_LEFT, VK_UP },
    +};

WPARAM rotateKey(WPARAM key,SDL_ScreenOrientation direction)
{

  • if (direction != SDL_ORIENTATION_LEFT)
  • const vk_list_t *vk_list;
  • const vk_list_t *vk_endz;
  • if (direction == SDL_ORIENTATION_LEFT) {
  •   vk_list = vk_list_left;
    
  •   vk_endz = vk_list + sizeof(vk_list_left)/sizeof(vk_list_t);
    
  • } else
  • if (direction == SDL_ORIENTATION_RIGHT) {
  •   vk_list = vk_list_right;
    
  •   vk_endz = vk_list + sizeof(vk_list_right)/sizeof(vk_list_t);
    
  • } else
    return key;
  • switch (key) {
  •   case 0x26: /* up */
    
  •   	return 0x27;
    
  •   case 0x27: /* right */
    
  •   	return 0x28;
    
  •   case 0x28: /* down */
    
  •   	return 0x25;
    
  •   case 0x25: /* left */
    
  •   	return 0x26;
    
  • }
  • do {

  •   if (vk_list->vk_key_in == key)
    
  •   	return vk_list->vk_key_out;
    
  • } while (++vk_list != vk_endz);

    return key;
    }


Passa a Infostrada. ADSL e Telefono senza limiti e senza canone Telecom