|
From: <axl...@us...> - 2009-12-21 20:08:34
|
Revision: 631
http://hgengine.svn.sourceforge.net/hgengine/?rev=631&view=rev
Author: axlecrusher
Date: 2009-12-21 20:08:27 +0000 (Mon, 21 Dec 2009)
Log Message:
-----------
windows keyboard input
Modified Paths:
--------------
Mercury2/src/Win32Window.cpp
Mercury2/src/Win32Window.h
Modified: Mercury2/src/Win32Window.cpp
===================================================================
--- Mercury2/src/Win32Window.cpp 2009-12-21 19:10:26 UTC (rev 630)
+++ Mercury2/src/Win32Window.cpp 2009-12-21 20:08:27 UTC (rev 631)
@@ -1,5 +1,6 @@
#include <Win32Window.h>
#include <GLHeaders.h>
+#include <MercuryInput.h>
LRESULT CALLBACK WindowCallback(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); //Window callback
Callback0R< MercuryWindow* > MercuryWindow::genWindowClbk(Win32Window::GenWin32Window); //Register window generation callback
@@ -197,9 +198,18 @@
case WM_QUIT:
return false;
case WM_KEYDOWN:
- printf( "%d\n", message.lParam>>16 );
+ {
+ if ( IsKeyRepeat(message.lParam) ) break;
+// printf( "%d\n", message.lParam>>16 );
+ KeyboardInput::ProcessKeyInput( ConvertScancode( message.lParam ), true, false);
+ }
break;
case WM_KEYUP:
+ {
+ if ( IsKeyRepeat(message.lParam) ) break;
+// printf( "%d\n", message.lParam>>16 );
+ KeyboardInput::ProcessKeyInput( ConvertScancode( message.lParam ), false, false);
+ }
break;
case WM_MOUSEMOVE:
break;
@@ -236,7 +246,119 @@
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
}
+bool Win32Window::IsKeyRepeat(uint32_t c)
+{
+// printf("count %d\n", (c&65535));
+ return (c&65535) > 1;
+}
+short Win32Window::ConvertScancode( uint32_t scanin )
+{
+// Specifies the scan code. The value depends on the OEM.
+ scanin = (scanin>>16)&511;
+ switch( scanin )
+ {
+ case 1: return 27; //esc
+ case 0: return '0';
+ case 41: return 97; //`
+ case 14: return 8; //backspace
+ case 87: return 292; //F11
+ case 88: return 293; //F12
+ case 12: return 45; //-
+ case 13: return 61; //=
+ case 43: return 92; //backslash
+ case 15: return 9; //tab
+ case 58: return 15; //Caps lock
+ case 42: return 160; //[lshift]
+ case 54: return 161; //[rshift]
+
+ case 30: return 'a';
+ case 48: return 'b';
+ case 46: return 'c';
+ case 32: return 'd';
+ case 18: return 'e';
+ case 33: return 'f';
+ case 34: return 'g';
+ case 35: return 'h';
+ case 23: return 'i';
+ case 36: return 'j';
+ case 37: return 'k';
+ case 38: return 'l';
+ case 50: return 'm';
+ case 49: return 'n';
+ case 24: return 'o';
+ case 25: return 'p';
+ case 16: return 'q';
+ case 19: return 'r';
+ case 31: return 's';
+ case 20: return 't';
+ case 22: return 'u';
+ case 47: return 'v';
+ case 17: return 'w';
+ case 45: return 'x';
+ case 21: return 'y';
+ case 44: return 'z';
+
+ case 39: return 59; //;
+ case 40: return 39; //'
+ case 51: return 44; //,
+ case 52: return 46; //.
+ case 53: return 47; // /
+
+ case 328: return 273; //arrow keys: up
+ case 331: return 276; //arrow keys: left
+ case 333: return 275; //arrow keys: right
+ case 336: return 274; //arrow keys: down
+//STOPPED HERE
+ case 29: return 162; //left ctrl
+ case 347: return 91; //left super (aka win)
+ case 64: return 164; //left alt
+ case 57: return 32; //space bar
+ case 108: return 165; //right alt
+ case 134: return 91; //right super (aka win)
+ case 349: return 93; //menu
+ case 285: return 268; //right control
+
+ case 107: return 316; //Print Screen
+ //case 78: scroll lock
+ case 127: return 19; //Pause
+ case 118: return 277; //Insert
+ case 110: return 278; //Home
+ case 112: return 280; //Page Up
+ case 119: return 127; //Delete
+ case 115: return 279; //End
+ case 117: return 181; //Page Down
+
+ //case 77: Num Lock (not mapped)
+ case 106: return 267; //Keypad /
+ case 63: return 268; //Keypad *
+ case 82: return 269; //Keypad -
+ case 79: return 263; //Keypad 7
+ case 80: return 264; //Keypad 8
+ case 81: return 265; //Keypad 9
+ case 86: return 270; //Keypad +
+ case 83: return 260; //Keypad 4
+ case 84: return 261; //Keypad 5
+ case 85: return 262; //Keypad 6
+// case 87: return 257; //Keypad 1
+// case 88: return 258; //Keypad 2
+ case 89: return 259; //Keypad 3
+// case 36: //Enter
+ case 104: return 13; //Keypad enter
+ case 90: return 260; //Keypad 0
+ case 91: return 266; //Keypad .
+
+ default:
+ // numbers
+ if( scanin >= 10 && scanin <= 18 )
+ return scanin + ( (short)'1' - 10 );
+ // f1 -- f10
+ if( scanin >= 67 && scanin <= 76 )
+ return scanin + ( 282 - 67 );
+ return scanin;
+ }
+}
+
LRESULT CALLBACK WindowCallback(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
Modified: Mercury2/src/Win32Window.h
===================================================================
--- Mercury2/src/Win32Window.h 2009-12-21 19:10:26 UTC (rev 630)
+++ Mercury2/src/Win32Window.h 2009-12-21 20:08:27 UTC (rev 631)
@@ -17,8 +17,11 @@
static MercuryWindow* GenWin32Window();
virtual void* GetProcAddress(const MString& x);
virtual void Clear();
+ static short ConvertScancode( uint32_t scanin );
private:
+ bool IsKeyRepeat(uint32_t c);
+
void GenWindow();
void GenWinClass();
void SetPixelType();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|