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