Mercurial > sdl-ios-xcode
annotate src/video/windib/SDL_dibevents.c @ 4393:9afe12fb4c41 SDL-1.2
Fixed bug #901
Tim Angus 2009-12-11 11:45:46 PST
Disable mouse event generation when state is not SDL_APPMOUSEFOCUS
If a Windows SDL application is minimised by using alt-tab, SDL_APPMOUSEFOCUS
is lost as part of the minimisation. Unfortunately, the directx driver doesn't
pay any attention to this state when generating mouse button events, so
clicking on the Desktop can cause mouse clicks in the SDL application, while
it's still minimised. The attached patch fixes this. It looks much more
complicated than it actually is due to indentation; here it is ignoring
whitespace:
tma@abraxas:~/sources/SDL-1.2-svn$ svn diff -x -b
Index: src/video/windx5/SDL_dx5events.c
===================================================================
--- src/video/windx5/SDL_dx5events.c (revision 5376)
+++ src/video/windx5/SDL_dx5events.c (working copy)
@@ -374,10 +374,9 @@
if ( !(SDL_GetAppState() & SDL_APPMOUSEFOCUS) ) {
mouse_lost = 1;
ClipCursor(NULL);
- }
-
+ } else {
/* If the mouse was lost, regain some sense of mouse state */
- if ( mouse_lost && (SDL_GetAppState() & SDL_APPMOUSEFOCUS) ) {
+ if ( mouse_lost ) {
POINT mouse_pos;
Uint8 old_state;
Uint8 new_state;
@@ -548,6 +547,7 @@
if ( xrel || yrel ) {
post_mouse_motion(1, xrel, yrel);
}
+ }
}
/* The main Win32 event handler */
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 14 Dec 2009 22:41:31 +0000 |
parents | 6800e2560310 |
children |
rev | line source |
---|---|
0 | 1 /* |
2 SDL - Simple DirectMedia Layer | |
4159 | 3 Copyright (C) 1997-2009 Sam Lantinga |
0 | 4 |
5 This library is free software; you can redistribute it and/or | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1303
diff
changeset
|
6 modify it under the terms of the GNU Lesser General Public |
0 | 7 License as published by the Free Software Foundation; either |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1303
diff
changeset
|
8 version 2.1 of the License, or (at your option) any later version. |
0 | 9 |
10 This library is distributed in the hope that it will be useful, | |
11 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1303
diff
changeset
|
13 Lesser General Public License for more details. |
0 | 14 |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1303
diff
changeset
|
15 You should have received a copy of the GNU Lesser General Public |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1303
diff
changeset
|
16 License along with this library; if not, write to the Free Software |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1303
diff
changeset
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
0 | 18 |
19 Sam Lantinga | |
252
e8157fcb3114
Updated the source with the correct e-mail address
Sam Lantinga <slouken@libsdl.org>
parents:
145
diff
changeset
|
20 slouken@libsdl.org |
0 | 21 */ |
1402
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1379
diff
changeset
|
22 #include "SDL_config.h" |
0 | 23 |
1433
bb6839704ed6
SDL_windows.h is no longer necessary
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
24 #define WIN32_LEAN_AND_MEAN |
bb6839704ed6
SDL_windows.h is no longer necessary
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
25 #include <windows.h> |
0 | 26 |
1358
c71e05b4dc2e
More header massaging... works great on Windows. ;-)
Sam Lantinga <slouken@libsdl.org>
parents:
1338
diff
changeset
|
27 #include "SDL_main.h" |
0 | 28 #include "SDL_events.h" |
29 #include "SDL_syswm.h" | |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
30 #include "../../events/SDL_sysevents.h" |
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
31 #include "../../events/SDL_events_c.h" |
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
32 #include "../wincommon/SDL_lowvideo.h" |
4162
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
33 #include "SDL_gapidibvideo.h" |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
34 #include "SDL_vkeys.h" |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
35 |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
36 #ifdef SDL_VIDEO_DRIVER_GAPI |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
37 #include "../gapi/SDL_gapivideo.h" |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
38 #endif |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
39 |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
40 #ifdef SDL_VIDEO_DRIVER_WINDIB |
0 | 41 #include "SDL_dibvideo.h" |
4162
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
42 #endif |
0 | 43 |
44 #ifndef WM_APP | |
45 #define WM_APP 0x8000 | |
46 #endif | |
47 | |
48 #ifdef _WIN32_WCE | |
49 #define NO_GETKEYBOARDSTATE | |
50 #endif | |
51 | |
52 /* The translation table from a Microsoft VK keysym to a SDL keysym */ | |
53 static SDLKey VK_keymap[SDLK_LAST]; | |
1472
4aac8563c296
Fixed more Win64 portability issues
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
54 static SDL_keysym *TranslateKey(WPARAM vkey, UINT scancode, SDL_keysym *keysym, int pressed); |
4162
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
55 static SDLKey Arrows_keymap[4]; |
0 | 56 |
57 /* Masks for processing the windows KEYDOWN and KEYUP messages */ | |
58 #define REPEATED_KEYMASK (1<<30) | |
59 #define EXTENDED_KEYMASK (1<<24) | |
60 | |
145
29a638dc26db
Applied David MacCormack's patch to fix SDL_WINDOWID on Windows,
Sam Lantinga <slouken@libsdl.org>
parents:
140
diff
changeset
|
61 /* DJM: If the user setup the window for us, we want to save his window proc, |
29a638dc26db
Applied David MacCormack's patch to fix SDL_WINDOWID on Windows,
Sam Lantinga <slouken@libsdl.org>
parents:
140
diff
changeset
|
62 and give him a chance to handle some messages. */ |
1303
52b5afd7ecee
Date: Tue, 05 Jul 2005 21:43:26 +1000
Sam Lantinga <slouken@libsdl.org>
parents:
1288
diff
changeset
|
63 #ifdef STRICT |
52b5afd7ecee
Date: Tue, 05 Jul 2005 21:43:26 +1000
Sam Lantinga <slouken@libsdl.org>
parents:
1288
diff
changeset
|
64 #define WNDPROCTYPE WNDPROC |
52b5afd7ecee
Date: Tue, 05 Jul 2005 21:43:26 +1000
Sam Lantinga <slouken@libsdl.org>
parents:
1288
diff
changeset
|
65 #else |
52b5afd7ecee
Date: Tue, 05 Jul 2005 21:43:26 +1000
Sam Lantinga <slouken@libsdl.org>
parents:
1288
diff
changeset
|
66 #define WNDPROCTYPE FARPROC |
52b5afd7ecee
Date: Tue, 05 Jul 2005 21:43:26 +1000
Sam Lantinga <slouken@libsdl.org>
parents:
1288
diff
changeset
|
67 #endif |
52b5afd7ecee
Date: Tue, 05 Jul 2005 21:43:26 +1000
Sam Lantinga <slouken@libsdl.org>
parents:
1288
diff
changeset
|
68 static WNDPROCTYPE userWindowProc = NULL; |
145
29a638dc26db
Applied David MacCormack's patch to fix SDL_WINDOWID on Windows,
Sam Lantinga <slouken@libsdl.org>
parents:
140
diff
changeset
|
69 |
1251
86d0d01290ea
Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents:
1152
diff
changeset
|
70 |
4162
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
71 #ifdef SDL_VIDEO_DRIVER_GAPI |
1251
86d0d01290ea
Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents:
1152
diff
changeset
|
72 |
4162
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
73 WPARAM rotateKey(WPARAM key,int direction) |
1251
86d0d01290ea
Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents:
1152
diff
changeset
|
74 { |
4162
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
75 if(direction ==0 ) return key; |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
76 |
1251
86d0d01290ea
Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents:
1152
diff
changeset
|
77 switch (key) { |
86d0d01290ea
Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents:
1152
diff
changeset
|
78 case 0x26: /* up */ |
4162
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
79 return Arrows_keymap[(2 + direction) % 4]; |
1251
86d0d01290ea
Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents:
1152
diff
changeset
|
80 case 0x27: /* right */ |
4162
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
81 return Arrows_keymap[(1 + direction) % 4]; |
1251
86d0d01290ea
Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents:
1152
diff
changeset
|
82 case 0x28: /* down */ |
4162
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
83 return Arrows_keymap[direction % 4]; |
1251
86d0d01290ea
Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents:
1152
diff
changeset
|
84 case 0x25: /* left */ |
4162
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
85 return Arrows_keymap[(3 + direction) % 4]; |
1251
86d0d01290ea
Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents:
1152
diff
changeset
|
86 } |
86d0d01290ea
Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents:
1152
diff
changeset
|
87 |
86d0d01290ea
Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents:
1152
diff
changeset
|
88 return key; |
86d0d01290ea
Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents:
1152
diff
changeset
|
89 } |
86d0d01290ea
Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents:
1152
diff
changeset
|
90 |
4286 | 91 static void GapiTransform(GapiInfo *gapiInfo, LONG *x, LONG *y) |
92 { | |
4238 | 93 if(gapiInfo->hiresFix) |
94 { | |
95 *x *= 2; | |
96 *y *= 2; | |
97 } | |
98 | |
4286 | 99 // 0 3 0 |
100 if((!gapiInfo->userOrientation && gapiInfo->systemOrientation && !gapiInfo->gapiOrientation) || | |
101 // 3 0 3 | |
102 (gapiInfo->userOrientation && !gapiInfo->systemOrientation && gapiInfo->gapiOrientation) || | |
103 // 3 0 0 | |
104 (gapiInfo->userOrientation && !gapiInfo->systemOrientation && !gapiInfo->gapiOrientation)) | |
4220 | 105 { |
4286 | 106 Sint16 temp = *x; |
107 *x = SDL_VideoSurface->w - *y; | |
108 *y = temp; | |
4179
d7294b7c732d
Date: Fri, 24 Apr 2009 17:47:07 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
4170
diff
changeset
|
109 } |
4220 | 110 else |
4286 | 111 // 0 0 0 |
112 if((!gapiInfo->userOrientation && !gapiInfo->systemOrientation && !gapiInfo->gapiOrientation) || | |
113 // 0 0 3 | |
114 (!gapiInfo->userOrientation && !gapiInfo->systemOrientation && gapiInfo->gapiOrientation)) | |
4220 | 115 { |
4286 | 116 // without changes |
117 // *x = *x; | |
118 // *y = *y; | |
119 } | |
120 // default | |
121 else | |
122 { | |
123 // without changes | |
124 // *x = *x; | |
125 // *y = *y; | |
4179
d7294b7c732d
Date: Fri, 24 Apr 2009 17:47:07 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
4170
diff
changeset
|
126 } |
d7294b7c732d
Date: Fri, 24 Apr 2009 17:47:07 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
4170
diff
changeset
|
127 } |
1251
86d0d01290ea
Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents:
1152
diff
changeset
|
128 #endif |
86d0d01290ea
Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents:
1152
diff
changeset
|
129 |
86d0d01290ea
Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents:
1152
diff
changeset
|
130 |
0 | 131 /* The main Win32 event handler */ |
1456
84de7511f79f
Fixed a bunch of 64-bit compatibility problems
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
132 LRESULT DIB_HandleMessage(_THIS, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) |
0 | 133 { |
134 extern int posted; | |
135 | |
136 switch (msg) { | |
137 case WM_SYSKEYDOWN: | |
138 case WM_KEYDOWN: { | |
139 SDL_keysym keysym; | |
140 | |
4162
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
141 #ifdef SDL_VIDEO_DRIVER_GAPI |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
142 if(this->hidden->gapiInfo) |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
143 { |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
144 // Drop GAPI artefacts |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
145 if (wParam == 0x84 || wParam == 0x5B) |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
146 return 0; |
1251
86d0d01290ea
Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents:
1152
diff
changeset
|
147 |
4162
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
148 wParam = rotateKey(wParam, this->hidden->gapiInfo->coordinateTransform); |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
149 } |
1251
86d0d01290ea
Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents:
1152
diff
changeset
|
150 #endif |
0 | 151 /* Ignore repeated keys */ |
152 if ( lParam&REPEATED_KEYMASK ) { | |
153 return(0); | |
154 } | |
155 switch (wParam) { | |
156 case VK_CONTROL: | |
157 if ( lParam&EXTENDED_KEYMASK ) | |
158 wParam = VK_RCONTROL; | |
159 else | |
160 wParam = VK_LCONTROL; | |
161 break; | |
162 case VK_SHIFT: | |
163 /* EXTENDED trick doesn't work here */ | |
1282
217f5d5a49e5
Date: Sat, 15 Jan 2005 02:01:51 +0000 (UTC)
Sam Lantinga <slouken@libsdl.org>
parents:
1280
diff
changeset
|
164 { |
217f5d5a49e5
Date: Sat, 15 Jan 2005 02:01:51 +0000 (UTC)
Sam Lantinga <slouken@libsdl.org>
parents:
1280
diff
changeset
|
165 Uint8 *state = SDL_GetKeyState(NULL); |
217f5d5a49e5
Date: Sat, 15 Jan 2005 02:01:51 +0000 (UTC)
Sam Lantinga <slouken@libsdl.org>
parents:
1280
diff
changeset
|
166 if (state[SDLK_LSHIFT] == SDL_RELEASED && (GetKeyState(VK_LSHIFT) & 0x8000)) { |
558
2312d983e1fe
Fixed left/right shift detection on Windows (thanks Mike!)
Sam Lantinga <slouken@libsdl.org>
parents:
523
diff
changeset
|
167 wParam = VK_LSHIFT; |
1282
217f5d5a49e5
Date: Sat, 15 Jan 2005 02:01:51 +0000 (UTC)
Sam Lantinga <slouken@libsdl.org>
parents:
1280
diff
changeset
|
168 } else if (state[SDLK_RSHIFT] == SDL_RELEASED && (GetKeyState(VK_RSHIFT) & 0x8000)) { |
558
2312d983e1fe
Fixed left/right shift detection on Windows (thanks Mike!)
Sam Lantinga <slouken@libsdl.org>
parents:
523
diff
changeset
|
169 wParam = VK_RSHIFT; |
2312d983e1fe
Fixed left/right shift detection on Windows (thanks Mike!)
Sam Lantinga <slouken@libsdl.org>
parents:
523
diff
changeset
|
170 } else { |
1852
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
171 /* Win9x */ |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
172 int sc = HIWORD(lParam) & 0xFF; |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
173 |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
174 if (sc == 0x2A) |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
175 wParam = VK_LSHIFT; |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
176 else |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
177 if (sc == 0x36) |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
178 wParam = VK_RSHIFT; |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
179 else |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
180 wParam = VK_LSHIFT; |
1282
217f5d5a49e5
Date: Sat, 15 Jan 2005 02:01:51 +0000 (UTC)
Sam Lantinga <slouken@libsdl.org>
parents:
1280
diff
changeset
|
181 } |
558
2312d983e1fe
Fixed left/right shift detection on Windows (thanks Mike!)
Sam Lantinga <slouken@libsdl.org>
parents:
523
diff
changeset
|
182 } |
0 | 183 break; |
184 case VK_MENU: | |
185 if ( lParam&EXTENDED_KEYMASK ) | |
186 wParam = VK_RMENU; | |
187 else | |
188 wParam = VK_LMENU; | |
189 break; | |
190 } | |
112
9ef74357a5fb
Incorporated slightly modified version of Rainer's WinCE patch
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
191 #ifdef NO_GETKEYBOARDSTATE |
9ef74357a5fb
Incorporated slightly modified version of Rainer's WinCE patch
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
192 /* this is the workaround for the missing ToAscii() and ToUnicode() in CE (not necessary at KEYUP!) */ |
9ef74357a5fb
Incorporated slightly modified version of Rainer's WinCE patch
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
193 if ( SDL_TranslateUNICODE ) { |
140
3c35d8f160bd
Fixed compiling on Windows CE
Sam Lantinga <slouken@libsdl.org>
parents:
112
diff
changeset
|
194 MSG m; |
112
9ef74357a5fb
Incorporated slightly modified version of Rainer's WinCE patch
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
195 |
140
3c35d8f160bd
Fixed compiling on Windows CE
Sam Lantinga <slouken@libsdl.org>
parents:
112
diff
changeset
|
196 m.hwnd = hwnd; |
3c35d8f160bd
Fixed compiling on Windows CE
Sam Lantinga <slouken@libsdl.org>
parents:
112
diff
changeset
|
197 m.message = msg; |
3c35d8f160bd
Fixed compiling on Windows CE
Sam Lantinga <slouken@libsdl.org>
parents:
112
diff
changeset
|
198 m.wParam = wParam; |
3c35d8f160bd
Fixed compiling on Windows CE
Sam Lantinga <slouken@libsdl.org>
parents:
112
diff
changeset
|
199 m.lParam = lParam; |
3c35d8f160bd
Fixed compiling on Windows CE
Sam Lantinga <slouken@libsdl.org>
parents:
112
diff
changeset
|
200 m.time = 0; |
4384
6800e2560310
Fixed bugs #882 and 865, re-opening bug #634
Sam Lantinga <slouken@libsdl.org>
parents:
4350
diff
changeset
|
201 if ( TranslateMessage(&m) && PeekMessage(&m, hwnd, 0, WM_USER, PM_NOREMOVE) && (m.message == WM_CHAR) ) { |
112
9ef74357a5fb
Incorporated slightly modified version of Rainer's WinCE patch
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
202 GetMessage(&m, hwnd, 0, WM_USER); |
9ef74357a5fb
Incorporated slightly modified version of Rainer's WinCE patch
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
203 wParam = m.wParam; |
9ef74357a5fb
Incorporated slightly modified version of Rainer's WinCE patch
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
204 } |
9ef74357a5fb
Incorporated slightly modified version of Rainer's WinCE patch
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
205 } |
9ef74357a5fb
Incorporated slightly modified version of Rainer's WinCE patch
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
206 #endif /* NO_GETKEYBOARDSTATE */ |
0 | 207 posted = SDL_PrivateKeyboard(SDL_PRESSED, |
208 TranslateKey(wParam,HIWORD(lParam),&keysym,1)); | |
209 } | |
210 return(0); | |
211 | |
212 case WM_SYSKEYUP: | |
213 case WM_KEYUP: { | |
214 SDL_keysym keysym; | |
215 | |
4162
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
216 #ifdef SDL_VIDEO_DRIVER_GAPI |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
217 if(this->hidden->gapiInfo) |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
218 { |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
219 // Drop GAPI artifacts |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
220 if (wParam == 0x84 || wParam == 0x5B) |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
221 return 0; |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
222 |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
223 wParam = rotateKey(wParam, this->hidden->gapiInfo->coordinateTransform); |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
224 } |
1251
86d0d01290ea
Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents:
1152
diff
changeset
|
225 #endif |
86d0d01290ea
Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents:
1152
diff
changeset
|
226 |
0 | 227 switch (wParam) { |
228 case VK_CONTROL: | |
229 if ( lParam&EXTENDED_KEYMASK ) | |
230 wParam = VK_RCONTROL; | |
231 else | |
232 wParam = VK_LCONTROL; | |
233 break; | |
234 case VK_SHIFT: | |
235 /* EXTENDED trick doesn't work here */ | |
1282
217f5d5a49e5
Date: Sat, 15 Jan 2005 02:01:51 +0000 (UTC)
Sam Lantinga <slouken@libsdl.org>
parents:
1280
diff
changeset
|
236 { |
217f5d5a49e5
Date: Sat, 15 Jan 2005 02:01:51 +0000 (UTC)
Sam Lantinga <slouken@libsdl.org>
parents:
1280
diff
changeset
|
237 Uint8 *state = SDL_GetKeyState(NULL); |
217f5d5a49e5
Date: Sat, 15 Jan 2005 02:01:51 +0000 (UTC)
Sam Lantinga <slouken@libsdl.org>
parents:
1280
diff
changeset
|
238 if (state[SDLK_LSHIFT] == SDL_PRESSED && !(GetKeyState(VK_LSHIFT) & 0x8000)) { |
572
4c740ee76027
Mike Nordell _really_ fixed Win32 windib shift state handling this time. :)
Sam Lantinga <slouken@libsdl.org>
parents:
558
diff
changeset
|
239 wParam = VK_LSHIFT; |
1282
217f5d5a49e5
Date: Sat, 15 Jan 2005 02:01:51 +0000 (UTC)
Sam Lantinga <slouken@libsdl.org>
parents:
1280
diff
changeset
|
240 } else if (state[SDLK_RSHIFT] == SDL_PRESSED && !(GetKeyState(VK_RSHIFT) & 0x8000)) { |
572
4c740ee76027
Mike Nordell _really_ fixed Win32 windib shift state handling this time. :)
Sam Lantinga <slouken@libsdl.org>
parents:
558
diff
changeset
|
241 wParam = VK_RSHIFT; |
4c740ee76027
Mike Nordell _really_ fixed Win32 windib shift state handling this time. :)
Sam Lantinga <slouken@libsdl.org>
parents:
558
diff
changeset
|
242 } else { |
1852
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
243 /* Win9x */ |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
244 int sc = HIWORD(lParam) & 0xFF; |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
245 |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
246 if (sc == 0x2A) |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
247 wParam = VK_LSHIFT; |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
248 else |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
249 if (sc == 0x36) |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
250 wParam = VK_RSHIFT; |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
251 else |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
252 wParam = VK_LSHIFT; |
1282
217f5d5a49e5
Date: Sat, 15 Jan 2005 02:01:51 +0000 (UTC)
Sam Lantinga <slouken@libsdl.org>
parents:
1280
diff
changeset
|
253 } |
572
4c740ee76027
Mike Nordell _really_ fixed Win32 windib shift state handling this time. :)
Sam Lantinga <slouken@libsdl.org>
parents:
558
diff
changeset
|
254 } |
0 | 255 break; |
256 case VK_MENU: | |
257 if ( lParam&EXTENDED_KEYMASK ) | |
258 wParam = VK_RMENU; | |
259 else | |
260 wParam = VK_LMENU; | |
261 break; | |
262 } | |
1526 | 263 /* Windows only reports keyup for print screen */ |
264 if ( wParam == VK_SNAPSHOT && SDL_GetKeyState(NULL)[SDLK_PRINT] == SDL_RELEASED ) { | |
265 posted = SDL_PrivateKeyboard(SDL_PRESSED, | |
266 TranslateKey(wParam,HIWORD(lParam),&keysym,1)); | |
267 } | |
0 | 268 posted = SDL_PrivateKeyboard(SDL_RELEASED, |
269 TranslateKey(wParam,HIWORD(lParam),&keysym,0)); | |
270 } | |
271 return(0); | |
726
5429a06aa816
SDL12: Disable screensaver in windib driver.
Ryan C. Gordon <icculus@icculus.org>
parents:
721
diff
changeset
|
272 #if defined(SC_SCREENSAVE) && defined(SC_MONITORPOWER) |
5429a06aa816
SDL12: Disable screensaver in windib driver.
Ryan C. Gordon <icculus@icculus.org>
parents:
721
diff
changeset
|
273 case WM_SYSCOMMAND: { |
3981
b0d021cf41b6
windib target can now control screensaver with SDL_VIDEO_ALLOW_SCREENSAVER.
Ryan C. Gordon <icculus@icculus.org>
parents:
3868
diff
changeset
|
274 const DWORD val = (DWORD) (wParam & 0xFFF0); |
b0d021cf41b6
windib target can now control screensaver with SDL_VIDEO_ALLOW_SCREENSAVER.
Ryan C. Gordon <icculus@icculus.org>
parents:
3868
diff
changeset
|
275 if ((val == SC_SCREENSAVE) || (val == SC_MONITORPOWER)) { |
4162
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
276 if (this->hidden->dibInfo && !allow_screensaver) { |
3981
b0d021cf41b6
windib target can now control screensaver with SDL_VIDEO_ALLOW_SCREENSAVER.
Ryan C. Gordon <icculus@icculus.org>
parents:
3868
diff
changeset
|
277 /* Note that this doesn't stop anything on Vista |
b0d021cf41b6
windib target can now control screensaver with SDL_VIDEO_ALLOW_SCREENSAVER.
Ryan C. Gordon <icculus@icculus.org>
parents:
3868
diff
changeset
|
278 if the screensaver has a password. */ |
726
5429a06aa816
SDL12: Disable screensaver in windib driver.
Ryan C. Gordon <icculus@icculus.org>
parents:
721
diff
changeset
|
279 return(0); |
3981
b0d021cf41b6
windib target can now control screensaver with SDL_VIDEO_ALLOW_SCREENSAVER.
Ryan C. Gordon <icculus@icculus.org>
parents:
3868
diff
changeset
|
280 } |
b0d021cf41b6
windib target can now control screensaver with SDL_VIDEO_ALLOW_SCREENSAVER.
Ryan C. Gordon <icculus@icculus.org>
parents:
3868
diff
changeset
|
281 } |
726
5429a06aa816
SDL12: Disable screensaver in windib driver.
Ryan C. Gordon <icculus@icculus.org>
parents:
721
diff
changeset
|
282 } |
5429a06aa816
SDL12: Disable screensaver in windib driver.
Ryan C. Gordon <icculus@icculus.org>
parents:
721
diff
changeset
|
283 /* Fall through to default processing */ |
5429a06aa816
SDL12: Disable screensaver in windib driver.
Ryan C. Gordon <icculus@icculus.org>
parents:
721
diff
changeset
|
284 #endif /* SC_SCREENSAVE && SC_MONITORPOWER */ |
5429a06aa816
SDL12: Disable screensaver in windib driver.
Ryan C. Gordon <icculus@icculus.org>
parents:
721
diff
changeset
|
285 |
0 | 286 default: { |
287 /* Only post the event if we're watching for it */ | |
288 if ( SDL_ProcessEvents[SDL_SYSWMEVENT] == SDL_ENABLE ) { | |
289 SDL_SysWMmsg wmmsg; | |
290 | |
291 SDL_VERSION(&wmmsg.version); | |
292 wmmsg.hwnd = hwnd; | |
293 wmmsg.msg = msg; | |
294 wmmsg.wParam = wParam; | |
295 wmmsg.lParam = lParam; | |
296 posted = SDL_PrivateSysWMEvent(&wmmsg); | |
145
29a638dc26db
Applied David MacCormack's patch to fix SDL_WINDOWID on Windows,
Sam Lantinga <slouken@libsdl.org>
parents:
140
diff
changeset
|
297 |
29a638dc26db
Applied David MacCormack's patch to fix SDL_WINDOWID on Windows,
Sam Lantinga <slouken@libsdl.org>
parents:
140
diff
changeset
|
298 /* DJM: If the user isn't watching for private |
29a638dc26db
Applied David MacCormack's patch to fix SDL_WINDOWID on Windows,
Sam Lantinga <slouken@libsdl.org>
parents:
140
diff
changeset
|
299 messages in her SDL event loop, then pass it |
29a638dc26db
Applied David MacCormack's patch to fix SDL_WINDOWID on Windows,
Sam Lantinga <slouken@libsdl.org>
parents:
140
diff
changeset
|
300 along to any win32 specific window proc. |
29a638dc26db
Applied David MacCormack's patch to fix SDL_WINDOWID on Windows,
Sam Lantinga <slouken@libsdl.org>
parents:
140
diff
changeset
|
301 */ |
29a638dc26db
Applied David MacCormack's patch to fix SDL_WINDOWID on Windows,
Sam Lantinga <slouken@libsdl.org>
parents:
140
diff
changeset
|
302 } else if (userWindowProc) { |
721
ab0656314eef
Date: Thu, 18 Sep 2003 14:24:35 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
572
diff
changeset
|
303 return CallWindowProc(userWindowProc, hwnd, msg, wParam, lParam); |
0 | 304 } |
305 } | |
306 break; | |
307 } | |
308 return(DefWindowProc(hwnd, msg, wParam, lParam)); | |
309 } | |
310 | |
4220 | 311 #ifdef _WIN32_WCE |
312 static BOOL GetLastStylusPos(POINT* ptLast) | |
313 { | |
314 BOOL bResult = FALSE; | |
315 UINT nRet; | |
316 GetMouseMovePoints(ptLast, 1, &nRet); | |
317 if ( nRet == 1 ) { | |
318 ptLast->x /= 4; | |
319 ptLast->y /= 4; | |
320 bResult = TRUE; | |
321 } | |
322 return bResult; | |
323 } | |
324 #endif | |
325 | |
4179
d7294b7c732d
Date: Fri, 24 Apr 2009 17:47:07 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
4170
diff
changeset
|
326 static void DIB_GenerateMouseMotionEvent(_THIS) |
4167 | 327 { |
328 extern int mouse_relative; | |
329 extern int posted; | |
330 | |
331 POINT mouse; | |
4232
29605c881b29
Fixed compile error on Win32
Sam Lantinga <slouken@libsdl.org>
parents:
4220
diff
changeset
|
332 #ifdef _WIN32_WCE |
29605c881b29
Fixed compile error on Win32
Sam Lantinga <slouken@libsdl.org>
parents:
4220
diff
changeset
|
333 if ( !GetCursorPos(&mouse) && !GetLastStylusPos(&mouse) ) return; |
29605c881b29
Fixed compile error on Win32
Sam Lantinga <slouken@libsdl.org>
parents:
4220
diff
changeset
|
334 #else |
29605c881b29
Fixed compile error on Win32
Sam Lantinga <slouken@libsdl.org>
parents:
4220
diff
changeset
|
335 if ( !GetCursorPos(&mouse) ) return; |
29605c881b29
Fixed compile error on Win32
Sam Lantinga <slouken@libsdl.org>
parents:
4220
diff
changeset
|
336 #endif |
4167 | 337 |
338 if ( mouse_relative ) { | |
339 POINT center; | |
340 center.x = (SDL_VideoSurface->w/2); | |
341 center.y = (SDL_VideoSurface->h/2); | |
342 ClientToScreen(SDL_Window, ¢er); | |
343 | |
4270
6b7f9089105e
Fixed VC2005 compiler warnings
Sam Lantinga <slouken@libsdl.org>
parents:
4238
diff
changeset
|
344 mouse.x -= center.x; |
6b7f9089105e
Fixed VC2005 compiler warnings
Sam Lantinga <slouken@libsdl.org>
parents:
4238
diff
changeset
|
345 mouse.y -= center.y; |
4167 | 346 if ( mouse.x || mouse.y ) { |
347 SetCursorPos(center.x, center.y); | |
4270
6b7f9089105e
Fixed VC2005 compiler warnings
Sam Lantinga <slouken@libsdl.org>
parents:
4238
diff
changeset
|
348 posted = SDL_PrivateMouseMotion(0, 1, (Sint16)mouse.x, (Sint16)mouse.y); |
4167 | 349 } |
4350 | 350 } else { |
4167 | 351 ScreenToClient(SDL_Window, &mouse); |
4179
d7294b7c732d
Date: Fri, 24 Apr 2009 17:47:07 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
4170
diff
changeset
|
352 #ifdef SDL_VIDEO_DRIVER_GAPI |
d7294b7c732d
Date: Fri, 24 Apr 2009 17:47:07 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
4170
diff
changeset
|
353 if (SDL_VideoSurface && this->hidden->gapiInfo) |
4220 | 354 GapiTransform(this->hidden->gapiInfo, &mouse.x, &mouse.y); |
4167 | 355 #endif |
4270
6b7f9089105e
Fixed VC2005 compiler warnings
Sam Lantinga <slouken@libsdl.org>
parents:
4238
diff
changeset
|
356 posted = SDL_PrivateMouseMotion(0, 0, (Sint16)mouse.x, (Sint16)mouse.y); |
4167 | 357 } |
358 } | |
359 | |
0 | 360 void DIB_PumpEvents(_THIS) |
361 { | |
362 MSG msg; | |
363 | |
523
c210010f50f4
Fixed windows event handling for ActiveX controls (thanks Huib-Jan!)
Sam Lantinga <slouken@libsdl.org>
parents:
515
diff
changeset
|
364 while ( PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) ) { |
c210010f50f4
Fixed windows event handling for ActiveX controls (thanks Huib-Jan!)
Sam Lantinga <slouken@libsdl.org>
parents:
515
diff
changeset
|
365 if ( GetMessage(&msg, NULL, 0, 0) > 0 ) { |
0 | 366 DispatchMessage(&msg); |
367 } | |
368 } | |
4167 | 369 |
4350 | 370 if ( SDL_GetAppState() & SDL_APPMOUSEFOCUS ) { |
4179
d7294b7c732d
Date: Fri, 24 Apr 2009 17:47:07 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
4170
diff
changeset
|
371 DIB_GenerateMouseMotionEvent( this ); |
4167 | 372 } |
0 | 373 } |
374 | |
1852
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
375 static HKL hLayoutUS = NULL; |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
376 |
0 | 377 void DIB_InitOSKeymap(_THIS) |
378 { | |
1852
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
379 int i; |
3868 | 380 #ifndef _WIN32_WCE |
381 char current_layout[KL_NAMELENGTH]; | |
1852
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
382 |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
383 GetKeyboardLayoutName(current_layout); |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
384 //printf("Initial Keyboard Layout Name: '%s'\n", current_layout); |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
385 |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
386 hLayoutUS = LoadKeyboardLayout("00000409", KLF_NOTELLSHELL); |
3868 | 387 |
1852
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
388 if (!hLayoutUS) { |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
389 //printf("Failed to load US keyboard layout. Using current.\n"); |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
390 hLayoutUS = GetKeyboardLayout(0); |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
391 } |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
392 LoadKeyboardLayout(current_layout, KLF_ACTIVATE); |
3868 | 393 #else |
394 #if _WIN32_WCE >=420 | |
395 TCHAR current_layout[KL_NAMELENGTH]; | |
0 | 396 |
3868 | 397 GetKeyboardLayoutName(current_layout); |
398 //printf("Initial Keyboard Layout Name: '%s'\n", current_layout); | |
399 | |
400 hLayoutUS = LoadKeyboardLayout(L"00000409", 0); | |
401 | |
402 if (!hLayoutUS) { | |
403 //printf("Failed to load US keyboard layout. Using current.\n"); | |
404 hLayoutUS = GetKeyboardLayout(0); | |
405 } | |
406 LoadKeyboardLayout(current_layout, 0); | |
407 #endif // _WIN32_WCE >=420 | |
408 #endif | |
0 | 409 /* Map the VK keysyms */ |
1379
c0a74f199ecf
Use only safe string functions
Sam Lantinga <slouken@libsdl.org>
parents:
1361
diff
changeset
|
410 for ( i=0; i<SDL_arraysize(VK_keymap); ++i ) |
0 | 411 VK_keymap[i] = SDLK_UNKNOWN; |
412 | |
413 VK_keymap[VK_BACK] = SDLK_BACKSPACE; | |
414 VK_keymap[VK_TAB] = SDLK_TAB; | |
415 VK_keymap[VK_CLEAR] = SDLK_CLEAR; | |
416 VK_keymap[VK_RETURN] = SDLK_RETURN; | |
417 VK_keymap[VK_PAUSE] = SDLK_PAUSE; | |
418 VK_keymap[VK_ESCAPE] = SDLK_ESCAPE; | |
419 VK_keymap[VK_SPACE] = SDLK_SPACE; | |
420 VK_keymap[VK_APOSTROPHE] = SDLK_QUOTE; | |
421 VK_keymap[VK_COMMA] = SDLK_COMMA; | |
422 VK_keymap[VK_MINUS] = SDLK_MINUS; | |
423 VK_keymap[VK_PERIOD] = SDLK_PERIOD; | |
424 VK_keymap[VK_SLASH] = SDLK_SLASH; | |
425 VK_keymap[VK_0] = SDLK_0; | |
426 VK_keymap[VK_1] = SDLK_1; | |
427 VK_keymap[VK_2] = SDLK_2; | |
428 VK_keymap[VK_3] = SDLK_3; | |
429 VK_keymap[VK_4] = SDLK_4; | |
430 VK_keymap[VK_5] = SDLK_5; | |
431 VK_keymap[VK_6] = SDLK_6; | |
432 VK_keymap[VK_7] = SDLK_7; | |
433 VK_keymap[VK_8] = SDLK_8; | |
434 VK_keymap[VK_9] = SDLK_9; | |
435 VK_keymap[VK_SEMICOLON] = SDLK_SEMICOLON; | |
436 VK_keymap[VK_EQUALS] = SDLK_EQUALS; | |
437 VK_keymap[VK_LBRACKET] = SDLK_LEFTBRACKET; | |
438 VK_keymap[VK_BACKSLASH] = SDLK_BACKSLASH; | |
1253
7c7ddaf195bf
Implemented ToUnicode() support on Windows 95/98/ME/NT/2000/XP
Sam Lantinga <slouken@libsdl.org>
parents:
1251
diff
changeset
|
439 VK_keymap[VK_OEM_102] = SDLK_LESS; |
0 | 440 VK_keymap[VK_RBRACKET] = SDLK_RIGHTBRACKET; |
441 VK_keymap[VK_GRAVE] = SDLK_BACKQUOTE; | |
327
13fc64213765
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
442 VK_keymap[VK_BACKTICK] = SDLK_BACKQUOTE; |
0 | 443 VK_keymap[VK_A] = SDLK_a; |
444 VK_keymap[VK_B] = SDLK_b; | |
445 VK_keymap[VK_C] = SDLK_c; | |
446 VK_keymap[VK_D] = SDLK_d; | |
447 VK_keymap[VK_E] = SDLK_e; | |
448 VK_keymap[VK_F] = SDLK_f; | |
449 VK_keymap[VK_G] = SDLK_g; | |
450 VK_keymap[VK_H] = SDLK_h; | |
451 VK_keymap[VK_I] = SDLK_i; | |
452 VK_keymap[VK_J] = SDLK_j; | |
453 VK_keymap[VK_K] = SDLK_k; | |
454 VK_keymap[VK_L] = SDLK_l; | |
455 VK_keymap[VK_M] = SDLK_m; | |
456 VK_keymap[VK_N] = SDLK_n; | |
457 VK_keymap[VK_O] = SDLK_o; | |
458 VK_keymap[VK_P] = SDLK_p; | |
459 VK_keymap[VK_Q] = SDLK_q; | |
460 VK_keymap[VK_R] = SDLK_r; | |
461 VK_keymap[VK_S] = SDLK_s; | |
462 VK_keymap[VK_T] = SDLK_t; | |
463 VK_keymap[VK_U] = SDLK_u; | |
464 VK_keymap[VK_V] = SDLK_v; | |
465 VK_keymap[VK_W] = SDLK_w; | |
466 VK_keymap[VK_X] = SDLK_x; | |
467 VK_keymap[VK_Y] = SDLK_y; | |
468 VK_keymap[VK_Z] = SDLK_z; | |
469 VK_keymap[VK_DELETE] = SDLK_DELETE; | |
470 | |
471 VK_keymap[VK_NUMPAD0] = SDLK_KP0; | |
472 VK_keymap[VK_NUMPAD1] = SDLK_KP1; | |
473 VK_keymap[VK_NUMPAD2] = SDLK_KP2; | |
474 VK_keymap[VK_NUMPAD3] = SDLK_KP3; | |
475 VK_keymap[VK_NUMPAD4] = SDLK_KP4; | |
476 VK_keymap[VK_NUMPAD5] = SDLK_KP5; | |
477 VK_keymap[VK_NUMPAD6] = SDLK_KP6; | |
478 VK_keymap[VK_NUMPAD7] = SDLK_KP7; | |
479 VK_keymap[VK_NUMPAD8] = SDLK_KP8; | |
480 VK_keymap[VK_NUMPAD9] = SDLK_KP9; | |
481 VK_keymap[VK_DECIMAL] = SDLK_KP_PERIOD; | |
482 VK_keymap[VK_DIVIDE] = SDLK_KP_DIVIDE; | |
483 VK_keymap[VK_MULTIPLY] = SDLK_KP_MULTIPLY; | |
484 VK_keymap[VK_SUBTRACT] = SDLK_KP_MINUS; | |
485 VK_keymap[VK_ADD] = SDLK_KP_PLUS; | |
486 | |
487 VK_keymap[VK_UP] = SDLK_UP; | |
488 VK_keymap[VK_DOWN] = SDLK_DOWN; | |
489 VK_keymap[VK_RIGHT] = SDLK_RIGHT; | |
490 VK_keymap[VK_LEFT] = SDLK_LEFT; | |
491 VK_keymap[VK_INSERT] = SDLK_INSERT; | |
492 VK_keymap[VK_HOME] = SDLK_HOME; | |
493 VK_keymap[VK_END] = SDLK_END; | |
494 VK_keymap[VK_PRIOR] = SDLK_PAGEUP; | |
495 VK_keymap[VK_NEXT] = SDLK_PAGEDOWN; | |
496 | |
497 VK_keymap[VK_F1] = SDLK_F1; | |
498 VK_keymap[VK_F2] = SDLK_F2; | |
499 VK_keymap[VK_F3] = SDLK_F3; | |
500 VK_keymap[VK_F4] = SDLK_F4; | |
501 VK_keymap[VK_F5] = SDLK_F5; | |
502 VK_keymap[VK_F6] = SDLK_F6; | |
503 VK_keymap[VK_F7] = SDLK_F7; | |
504 VK_keymap[VK_F8] = SDLK_F8; | |
505 VK_keymap[VK_F9] = SDLK_F9; | |
506 VK_keymap[VK_F10] = SDLK_F10; | |
507 VK_keymap[VK_F11] = SDLK_F11; | |
508 VK_keymap[VK_F12] = SDLK_F12; | |
509 VK_keymap[VK_F13] = SDLK_F13; | |
510 VK_keymap[VK_F14] = SDLK_F14; | |
511 VK_keymap[VK_F15] = SDLK_F15; | |
512 | |
513 VK_keymap[VK_NUMLOCK] = SDLK_NUMLOCK; | |
514 VK_keymap[VK_CAPITAL] = SDLK_CAPSLOCK; | |
515 VK_keymap[VK_SCROLL] = SDLK_SCROLLOCK; | |
516 VK_keymap[VK_RSHIFT] = SDLK_RSHIFT; | |
517 VK_keymap[VK_LSHIFT] = SDLK_LSHIFT; | |
518 VK_keymap[VK_RCONTROL] = SDLK_RCTRL; | |
519 VK_keymap[VK_LCONTROL] = SDLK_LCTRL; | |
520 VK_keymap[VK_RMENU] = SDLK_RALT; | |
521 VK_keymap[VK_LMENU] = SDLK_LALT; | |
522 VK_keymap[VK_RWIN] = SDLK_RSUPER; | |
523 VK_keymap[VK_LWIN] = SDLK_LSUPER; | |
524 | |
525 VK_keymap[VK_HELP] = SDLK_HELP; | |
526 #ifdef VK_PRINT | |
527 VK_keymap[VK_PRINT] = SDLK_PRINT; | |
528 #endif | |
529 VK_keymap[VK_SNAPSHOT] = SDLK_PRINT; | |
530 VK_keymap[VK_CANCEL] = SDLK_BREAK; | |
531 VK_keymap[VK_APPS] = SDLK_MENU; | |
4162
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
532 |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
533 Arrows_keymap[3] = 0x25; |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
534 Arrows_keymap[2] = 0x26; |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
535 Arrows_keymap[1] = 0x27; |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
536 Arrows_keymap[0] = 0x28; |
0 | 537 } |
538 | |
1852
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
539 #define EXTKEYPAD(keypad) ((scancode & 0x100)?(mvke):(keypad)) |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
540 |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
541 static int SDL_MapVirtualKey(int scancode, int vkey) |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
542 { |
3868 | 543 #ifndef _WIN32_WCE |
1852
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
544 int mvke = MapVirtualKeyEx(scancode & 0xFF, 1, hLayoutUS); |
3868 | 545 #else |
546 int mvke = MapVirtualKey(scancode & 0xFF, 1); | |
547 #endif | |
1852
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
548 |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
549 switch(vkey) { |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
550 /* These are always correct */ |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
551 case VK_DIVIDE: |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
552 case VK_MULTIPLY: |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
553 case VK_SUBTRACT: |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
554 case VK_ADD: |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
555 case VK_LWIN: |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
556 case VK_RWIN: |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
557 case VK_APPS: |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
558 /* These are already handled */ |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
559 case VK_LCONTROL: |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
560 case VK_RCONTROL: |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
561 case VK_LSHIFT: |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
562 case VK_RSHIFT: |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
563 case VK_LMENU: |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
564 case VK_RMENU: |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
565 case VK_SNAPSHOT: |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
566 case VK_PAUSE: |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
567 return vkey; |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
568 } |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
569 switch(mvke) { |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
570 /* Distinguish between keypad and extended keys */ |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
571 case VK_INSERT: return EXTKEYPAD(VK_NUMPAD0); |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
572 case VK_DELETE: return EXTKEYPAD(VK_DECIMAL); |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
573 case VK_END: return EXTKEYPAD(VK_NUMPAD1); |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
574 case VK_DOWN: return EXTKEYPAD(VK_NUMPAD2); |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
575 case VK_NEXT: return EXTKEYPAD(VK_NUMPAD3); |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
576 case VK_LEFT: return EXTKEYPAD(VK_NUMPAD4); |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
577 case VK_CLEAR: return EXTKEYPAD(VK_NUMPAD5); |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
578 case VK_RIGHT: return EXTKEYPAD(VK_NUMPAD6); |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
579 case VK_HOME: return EXTKEYPAD(VK_NUMPAD7); |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
580 case VK_UP: return EXTKEYPAD(VK_NUMPAD8); |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
581 case VK_PRIOR: return EXTKEYPAD(VK_NUMPAD9); |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
582 } |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
583 return mvke?mvke:vkey; |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
584 } |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
585 |
1472
4aac8563c296
Fixed more Win64 portability issues
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
586 static SDL_keysym *TranslateKey(WPARAM vkey, UINT scancode, SDL_keysym *keysym, int pressed) |
0 | 587 { |
588 /* Set the keysym information */ | |
589 keysym->scancode = (unsigned char) scancode; | |
590 keysym->mod = KMOD_NONE; | |
591 keysym->unicode = 0; | |
4162
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
592 |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
593 if ((vkey == VK_RETURN) && (scancode & 0x100)) { |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
594 /* No VK_ code for the keypad enter key */ |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
595 keysym->sym = SDLK_KP_ENTER; |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
596 } |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
597 else { |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
598 keysym->sym = VK_keymap[SDL_MapVirtualKey(scancode, vkey)]; |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
599 } |
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
600 |
1253
7c7ddaf195bf
Implemented ToUnicode() support on Windows 95/98/ME/NT/2000/XP
Sam Lantinga <slouken@libsdl.org>
parents:
1251
diff
changeset
|
601 if ( pressed && SDL_TranslateUNICODE ) { |
0 | 602 #ifdef NO_GETKEYBOARDSTATE |
603 /* Uh oh, better hope the vkey is close enough.. */ | |
4162
3b7fc3416601
GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
4159
diff
changeset
|
604 if((keysym->sym == vkey) || (vkey > 0x7f)) |
0 | 605 keysym->unicode = vkey; |
606 #else | |
1253
7c7ddaf195bf
Implemented ToUnicode() support on Windows 95/98/ME/NT/2000/XP
Sam Lantinga <slouken@libsdl.org>
parents:
1251
diff
changeset
|
607 BYTE keystate[256]; |
7c7ddaf195bf
Implemented ToUnicode() support on Windows 95/98/ME/NT/2000/XP
Sam Lantinga <slouken@libsdl.org>
parents:
1251
diff
changeset
|
608 Uint16 wchars[2]; |
0 | 609 |
610 GetKeyboardState(keystate); | |
4170 | 611 /* Numlock isn't taken into account in ToUnicode, |
612 * so we handle it as a special case here */ | |
613 if ((keystate[VK_NUMLOCK] & 1) && vkey >= VK_NUMPAD0 && vkey <= VK_NUMPAD9) | |
614 { | |
615 keysym->unicode = vkey - VK_NUMPAD0 + '0'; | |
616 } | |
617 else if (SDL_ToUnicode((UINT)vkey, scancode, keystate, wchars, sizeof(wchars)/sizeof(wchars[0]), 0) > 0) | |
1253
7c7ddaf195bf
Implemented ToUnicode() support on Windows 95/98/ME/NT/2000/XP
Sam Lantinga <slouken@libsdl.org>
parents:
1251
diff
changeset
|
618 { |
7c7ddaf195bf
Implemented ToUnicode() support on Windows 95/98/ME/NT/2000/XP
Sam Lantinga <slouken@libsdl.org>
parents:
1251
diff
changeset
|
619 keysym->unicode = wchars[0]; |
0 | 620 } |
621 #endif /* NO_GETKEYBOARDSTATE */ | |
622 } | |
1852
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
623 |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
624 #if 0 |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
625 { |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
626 HKL hLayoutCurrent = GetKeyboardLayout(0); |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
627 int sc = scancode & 0xFF; |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
628 |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
629 printf("SYM:%d, VK:0x%02X, SC:0x%04X, US:(1:0x%02X, 3:0x%02X), " |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
630 "Current:(1:0x%02X, 3:0x%02X)\n", |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
631 keysym->sym, vkey, scancode, |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
632 MapVirtualKeyEx(sc, 1, hLayoutUS), |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
633 MapVirtualKeyEx(sc, 3, hLayoutUS), |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
634 MapVirtualKeyEx(sc, 1, hLayoutCurrent), |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
635 MapVirtualKeyEx(sc, 3, hLayoutCurrent) |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
636 ); |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
637 } |
eb2d5480ae95
Try to keep SDL keysyms sane regardless of keyboard layout in windib target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1526
diff
changeset
|
638 #endif |
0 | 639 return(keysym); |
640 } | |
641 | |
642 int DIB_CreateWindow(_THIS) | |
643 { | |
4219 | 644 char *windowid; |
1152
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1048
diff
changeset
|
645 |
1288
ea3888b472bf
Cleaned up the app registration stuff a bit
Sam Lantinga <slouken@libsdl.org>
parents:
1282
diff
changeset
|
646 SDL_RegisterApp(NULL, 0, 0); |
1280
f61f045343d3
Re-query the SDL_WINDOWID each time we initialize the video
Sam Lantinga <slouken@libsdl.org>
parents:
1264
diff
changeset
|
647 |
4219 | 648 windowid = SDL_getenv("SDL_WINDOWID"); |
1280
f61f045343d3
Re-query the SDL_WINDOWID each time we initialize the video
Sam Lantinga <slouken@libsdl.org>
parents:
1264
diff
changeset
|
649 SDL_windowid = (windowid != NULL); |
0 | 650 if ( SDL_windowid ) { |
1152
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1048
diff
changeset
|
651 #if defined(_WIN32_WCE) && (_WIN32_WCE < 300) |
1280
f61f045343d3
Re-query the SDL_WINDOWID each time we initialize the video
Sam Lantinga <slouken@libsdl.org>
parents:
1264
diff
changeset
|
652 /* wince 2.1 does not have strtol */ |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
653 wchar_t *windowid_t = SDL_malloc((SDL_strlen(windowid) + 1) * sizeof(wchar_t)); |
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
654 MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, windowid, -1, windowid_t, SDL_strlen(windowid) + 1); |
1280
f61f045343d3
Re-query the SDL_WINDOWID each time we initialize the video
Sam Lantinga <slouken@libsdl.org>
parents:
1264
diff
changeset
|
655 SDL_Window = (HWND)wcstol(windowid_t, NULL, 0); |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
656 SDL_free(windowid_t); |
1152
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1048
diff
changeset
|
657 #else |
1456
84de7511f79f
Fixed a bunch of 64-bit compatibility problems
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
658 SDL_Window = (HWND)SDL_strtoull(windowid, NULL, 0); |
1152
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1048
diff
changeset
|
659 #endif |
974
b8427b5151ed
Restore the user specified window proc after shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
833
diff
changeset
|
660 if ( SDL_Window == NULL ) { |
b8427b5151ed
Restore the user specified window proc after shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
833
diff
changeset
|
661 SDL_SetError("Couldn't get user specified window"); |
b8427b5151ed
Restore the user specified window proc after shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
833
diff
changeset
|
662 return(-1); |
b8427b5151ed
Restore the user specified window proc after shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
833
diff
changeset
|
663 } |
b8427b5151ed
Restore the user specified window proc after shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
833
diff
changeset
|
664 |
b8427b5151ed
Restore the user specified window proc after shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
833
diff
changeset
|
665 /* DJM: we want all event's for the user specified |
b8427b5151ed
Restore the user specified window proc after shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
833
diff
changeset
|
666 window to be handled by SDL. |
b8427b5151ed
Restore the user specified window proc after shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
833
diff
changeset
|
667 */ |
1472
4aac8563c296
Fixed more Win64 portability issues
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
668 userWindowProc = (WNDPROCTYPE)GetWindowLongPtr(SDL_Window, GWLP_WNDPROC); |
4aac8563c296
Fixed more Win64 portability issues
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
669 SetWindowLongPtr(SDL_Window, GWLP_WNDPROC, (LONG_PTR)WinMessage); |
0 | 670 } else { |
671 SDL_Window = CreateWindow(SDL_Appname, SDL_Appname, | |
672 (WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX), | |
833
31fa08b36380
Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
673 CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, NULL, NULL, SDL_Instance, NULL); |
0 | 674 if ( SDL_Window == NULL ) { |
675 SDL_SetError("Couldn't create window"); | |
676 return(-1); | |
677 } | |
678 ShowWindow(SDL_Window, SW_HIDE); | |
679 } | |
1523 | 680 |
681 /* JC 14 Mar 2006 | |
682 Flush the message loop or this can cause big problems later | |
683 Especially if the user decides to use dialog boxes or assert()! | |
684 */ | |
685 WIN_FlushMessageQueue(); | |
686 | |
0 | 687 return(0); |
688 } | |
689 | |
690 void DIB_DestroyWindow(_THIS) | |
691 { | |
974
b8427b5151ed
Restore the user specified window proc after shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
833
diff
changeset
|
692 if ( SDL_windowid ) { |
1472
4aac8563c296
Fixed more Win64 portability issues
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
693 SetWindowLongPtr(SDL_Window, GWLP_WNDPROC, (LONG_PTR)userWindowProc); |
974
b8427b5151ed
Restore the user specified window proc after shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
833
diff
changeset
|
694 } else { |
0 | 695 DestroyWindow(SDL_Window); |
696 } | |
1288
ea3888b472bf
Cleaned up the app registration stuff a bit
Sam Lantinga <slouken@libsdl.org>
parents:
1282
diff
changeset
|
697 SDL_UnregisterApp(); |
1523 | 698 |
699 /* JC 14 Mar 2006 | |
700 Flush the message loop or this can cause big problems later | |
701 Especially if the user decides to use dialog boxes or assert()! | |
702 */ | |
703 WIN_FlushMessageQueue(); | |
0 | 704 } |