lugre_input.cpp

Go to the documentation of this file.
00001 #include "lugre_prefix.h"
00002 #include "lugre_input.h"
00003 #include <string.h>
00004 
00005 #if LUGRE_PLATFORM == LUGRE_PLATFORM_APPLE
00006 #include <OIS/OIS.h>
00007 #else
00008 #include <OIS.h>
00009 #endif
00010 
00011 namespace Lugre {
00012     
00013 // key definition in accordance with win32 virtual keycodes
00014 
00015 bool    cInput::bKeys[256];
00016 bool    cInput::bButton[3];     // mousebuttons, 3 is middle
00017 int     cInput::iMouseWheel;
00018 int     cInput::iMouseWheel_pressed;
00019 int     cInput::iMouseWheel_all_since_last_step;
00020 int     cInput::iMouseWheel_pressed_since_last_step;
00021 int     cInput::iMouse[2];
00022 std::list<cInputListener*>  cInput::mListeners;
00023 
00024 void    InitKeyMapOIS   ();
00025 
00026 const char * cInput::szKeyNames[256] = {
00027     "",// 0x00
00028     "mouse1",
00029     "mouse2",
00030     "mouse3",
00031     "mouse4",
00032     "mouse5",
00033     "wheeldown",
00034     "wheelup",
00035     "backspace",
00036     "tab",
00037     "",// 0x0A
00038     "",
00039     "stopclear",
00040     "return",
00041     "np_enter",
00042     "",
00043 
00044 
00045     "lshift",// 0x10
00046     "lcontrol",
00047     "lalt",
00048     "pause",
00049     "capslock",
00050     "","","","","",
00051     "",// 0x1a
00052     "escape",
00053     "","","","",
00054 
00055 
00056     "space",// 0x20
00057     "pgup",
00058     "pgdn",
00059     "end",
00060     "home",
00061     "left",
00062     "up",
00063     "right",
00064     "down",
00065     "",
00066     "",// 0x2a
00067     "",
00068     "screen",
00069     "ins",
00070     "del",
00071     "",
00072 
00073 
00074     "0",// 0x30
00075     "1",
00076     "2",
00077     "3",
00078     "4",
00079     "5",
00080     "6",
00081     "7",
00082     "8",
00083     "9",
00084     "",// 0x3a
00085     "","","","","",
00086 
00087 
00088     "",// 0x40
00089     "a",
00090     "b",
00091     "c",
00092     "d",
00093     "e",
00094     "f",
00095     "g",
00096     "h",
00097     "i",
00098     "j",
00099     "k",// 0x4a
00100     "l",
00101     "m",
00102     "n",
00103     "o",
00104 
00105 
00106     "p",// 0x50
00107     "q",
00108     "r",
00109     "s",
00110     "t",
00111     "u",
00112     "v",
00113     "w",
00114     "x",
00115     "y",
00116     "z",// 0x5a
00117     "lwin",
00118     "rwin",
00119     "menu",
00120     "",
00121     "",
00122 
00123 
00124 
00125     "np0",// 0x60
00126     "np1",
00127     "np2",
00128     "np3",
00129     "np4",
00130     "np5",
00131     "np6",
00132     "np7",
00133     "np8",
00134     "np9",
00135     "npmult",// 0x6a
00136     "npadd",
00137     "",
00138     "npsub",
00139     "npkomma",
00140     "npdiv",
00141 
00142 
00143     "f1",// 0x70
00144     "f2",
00145     "f3",
00146     "f4",
00147     "f5",
00148     "f6",
00149     "f7",
00150     "f8",
00151     "f9",
00152     "f10",
00153     "f11",// 0x7a
00154     "f12",
00155     "f13",
00156     "f14",
00157     "f15",
00158     "",
00159 
00160 
00161     // 0x80
00162     "","","","","","","","","","","","","","","","",
00163 
00164     // 0x90
00165     "numlock","scroll",
00166     "","","","","","","","","","","","","","",
00167 
00168     // 0xA0
00169     "","rshift",
00170     "","rcontrol",
00171     "","ralt",
00172     "","","","","","","","","","",
00173 
00174     // 0xB0
00175     "","","","","","","","","","",
00176     "ue",
00177     "plus",
00178     "komma",
00179     "minus",
00180     "point",
00181     "grid",
00182 
00183     // 0xC0
00184     "oe","","","","","","","","","","","","","","","",
00185 
00186     // 0xD0
00187     "","","","","","","","","","","",
00188     "bslash",
00189     "console",
00190     "accent",
00191     "ae",
00192     "",
00193 
00194     // 0xE0
00195     "","","greater","","","","","","","","","","","","","",
00196 
00197     // 0xF0
00198     "","","","","","","","","","","","","","","",""
00199 };
00200 
00201 
00202 // ****** ****** ****** Keyboard and Mouse
00203 
00204 
00205 // constructor
00206 cInput::cInput  () { PROFILE /* sDbgType = "cInput"; printf("cInput::Construct %#8x\n",this); */ Reset(); InitKeyMapOIS(); }
00207 
00211 void            cInput::Reset   () { PROFILE
00212     memset(bKeys,0,sizeof(bool)*256);
00213     memset(bButton,0,sizeof(bool)*3);
00214     iMouse[0] = 0;
00215     iMouse[1] = 0;
00216     iMouseWheel = 0;
00217     iMouseWheel_pressed = 0;
00218     iMouseWheel_all_since_last_step = 0;
00219     iMouseWheel_pressed_since_last_step = 0;
00220 }
00221 
00223 void cInput::Step() { PROFILE
00224     // get mousepos
00225     iMouseWheel_all_since_last_step = 0;
00226     iMouseWheel_pressed_since_last_step = 0;
00227 }
00228 
00230 void cInput::FocusChange (const bool bGain) { PROFILE
00231     if (bGain) Reset();
00232 }
00233 
00234 
00240 unsigned char       cInput::KeyConvertWin   (const int iVKey,const bool bRight) { PROFILE
00241     if (bRight && iVKey == kkey_lshift)     return kkey_rshift;
00242     if (bRight && iVKey == kkey_lcontrol)   return kkey_rcontrol;
00243     if (bRight && iVKey == kkey_lalt)       return kkey_ralt;
00244     if (bRight && iVKey == kkey_return)     return kkey_np_enter;
00245     return iVKey;
00246 }
00247 
00248 
00249 
00250 std::map<unsigned int,unsigned char>    gKeyMapOIS;
00251 std::map<unsigned char,unsigned int>    gKeyMapOISInv;
00252 
00253 
00254 
00255 unsigned int    cInput::KeyConvertOISInv    (const char iKey) { PROFILE
00256     return gKeyMapOISInv[iKey];
00257 }
00258 
00259 unsigned char   cInput::KeyConvertOIS       (const int iKeyCode) { PROFILE
00260     if (iKeyCode > 0 && !gKeyMapOIS[iKeyCode]) printf("unknown OIS key %d\n",iKeyCode);
00261     return gKeyMapOIS[iKeyCode];
00262 }
00263 
00264 void    InitKeyMapOIS   () { PROFILE
00265     #define ADD_gKeyMapOIS(OISkeycode,robkeycode) gKeyMapOIS[OISkeycode] = robkeycode; gKeyMapOISInv[robkeycode] = OISkeycode;
00266     // see  virtual bool OIS::InputReader::isKeyDown    (       KeyCode      kc      )       const
00267 
00268     ADD_gKeyMapOIS(OIS::KC_ESCAPE           ,cInput::kkey_escape)
00269     ADD_gKeyMapOIS(OIS::KC_1                ,cInput::kkey_1)
00270     ADD_gKeyMapOIS(OIS::KC_2                ,cInput::kkey_2)
00271     ADD_gKeyMapOIS(OIS::KC_3                ,cInput::kkey_3)
00272     ADD_gKeyMapOIS(OIS::KC_4                ,cInput::kkey_4)
00273     ADD_gKeyMapOIS(OIS::KC_5                ,cInput::kkey_5)
00274     ADD_gKeyMapOIS(OIS::KC_6                ,cInput::kkey_6)
00275     ADD_gKeyMapOIS(OIS::KC_7                ,cInput::kkey_7)
00276     ADD_gKeyMapOIS(OIS::KC_8                ,cInput::kkey_8)
00277     ADD_gKeyMapOIS(OIS::KC_9                ,cInput::kkey_9)
00278     ADD_gKeyMapOIS(OIS::KC_0                ,cInput::kkey_0)
00279     ADD_gKeyMapOIS(OIS::KC_MINUS            ,cInput::kkey_minus)
00280     ADD_gKeyMapOIS(OIS::KC_BACK                 ,cInput::kkey_back)
00281     //ADD_gKeyMapOIS(OIS::KC_EQUALS             ,cInput::kkey_)
00282     ADD_gKeyMapOIS(OIS::KC_TAB              ,cInput::kkey_tab)
00283     ADD_gKeyMapOIS(OIS::KC_Q                ,cInput::kkey_q)
00284     ADD_gKeyMapOIS(OIS::KC_W                ,cInput::kkey_w)
00285     ADD_gKeyMapOIS(OIS::KC_E                ,cInput::kkey_e)
00286     ADD_gKeyMapOIS(OIS::KC_R                ,cInput::kkey_r)
00287     ADD_gKeyMapOIS(OIS::KC_T                ,cInput::kkey_t)
00288     ADD_gKeyMapOIS(OIS::KC_Y                ,cInput::kkey_y)
00289     ADD_gKeyMapOIS(OIS::KC_U                ,cInput::kkey_u)
00290     ADD_gKeyMapOIS(OIS::KC_I                ,cInput::kkey_i)
00291     ADD_gKeyMapOIS(OIS::KC_O                ,cInput::kkey_o)
00292     ADD_gKeyMapOIS(OIS::KC_P                ,cInput::kkey_p)
00293     //ADD_gKeyMapOIS(OIS::KC_LBRACKET           ,cInput::kkey_)
00294     //ADD_gKeyMapOIS(OIS::KC_RBRACKET           ,cInput::kkey_)
00295     ADD_gKeyMapOIS(OIS::KC_RETURN           ,cInput::kkey_return)
00296     ADD_gKeyMapOIS(OIS::KC_LCONTROL             ,cInput::kkey_lcontrol)
00297     ADD_gKeyMapOIS(OIS::KC_A                ,cInput::kkey_a)
00298     ADD_gKeyMapOIS(OIS::KC_S                ,cInput::kkey_s)
00299     ADD_gKeyMapOIS(OIS::KC_D                ,cInput::kkey_d)
00300     ADD_gKeyMapOIS(OIS::KC_F                ,cInput::kkey_f)
00301     ADD_gKeyMapOIS(OIS::KC_G                ,cInput::kkey_g)
00302     ADD_gKeyMapOIS(OIS::KC_H                ,cInput::kkey_h)
00303     ADD_gKeyMapOIS(OIS::KC_J                ,cInput::kkey_j)
00304     ADD_gKeyMapOIS(OIS::KC_K                ,cInput::kkey_k)
00305     ADD_gKeyMapOIS(OIS::KC_L                ,cInput::kkey_l)
00306     //ADD_gKeyMapOIS(OIS::KC_SEMICOLON      ,cInput::kkey_)
00307     //ADD_gKeyMapOIS(OIS::KC_APOSTROPHE         ,cInput::kkey_console)
00308     //ADD_gKeyMapOIS(OIS::KC_GRAVE          ,cInput::kkey_accent)
00309     ADD_gKeyMapOIS(OIS::KC_LSHIFT           ,cInput::kkey_lshift)
00310     //ADD_gKeyMapOIS(OIS::KC_BACKSLASH      ,cInput::kkey_bslash)
00311     ADD_gKeyMapOIS(OIS::KC_Z                ,cInput::kkey_z)
00312     ADD_gKeyMapOIS(OIS::KC_X                ,cInput::kkey_x)
00313     ADD_gKeyMapOIS(OIS::KC_C                ,cInput::kkey_c)
00314     ADD_gKeyMapOIS(OIS::KC_V                ,cInput::kkey_v)
00315     ADD_gKeyMapOIS(OIS::KC_B                ,cInput::kkey_b)
00316     ADD_gKeyMapOIS(OIS::KC_N                ,cInput::kkey_n)
00317     ADD_gKeyMapOIS(OIS::KC_M                ,cInput::kkey_m)
00318     ADD_gKeyMapOIS(OIS::KC_COMMA            ,cInput::kkey_komma)
00319     ADD_gKeyMapOIS(OIS::KC_PERIOD           ,cInput::kkey_point)
00320     //ADD_gKeyMapOIS(OIS::KC_SLASH          ,0) // sth like kkey_ue  kkey_ae kkey_oe ?
00321     ADD_gKeyMapOIS(OIS::KC_RSHIFT           ,cInput::kkey_rshift)
00322     ADD_gKeyMapOIS(OIS::KC_MULTIPLY             ,cInput::kkey_np_mult)
00323     ADD_gKeyMapOIS(OIS::KC_LMENU            ,cInput::kkey_lalt)
00324     ADD_gKeyMapOIS(OIS::KC_SPACE            ,cInput::kkey_space)
00325     ADD_gKeyMapOIS(OIS::KC_CAPITAL          ,cInput::kkey_capslock)
00326     ADD_gKeyMapOIS(OIS::KC_F1               ,cInput::kkey_f1)
00327     ADD_gKeyMapOIS(OIS::KC_F2               ,cInput::kkey_f2)
00328     ADD_gKeyMapOIS(OIS::KC_F3               ,cInput::kkey_f3)
00329     ADD_gKeyMapOIS(OIS::KC_F4               ,cInput::kkey_f4)
00330     ADD_gKeyMapOIS(OIS::KC_F5               ,cInput::kkey_f5)
00331     ADD_gKeyMapOIS(OIS::KC_F6               ,cInput::kkey_f6)
00332     ADD_gKeyMapOIS(OIS::KC_F7               ,cInput::kkey_f7)
00333     ADD_gKeyMapOIS(OIS::KC_F8               ,cInput::kkey_f8)
00334     ADD_gKeyMapOIS(OIS::KC_F9               ,cInput::kkey_f9)
00335     ADD_gKeyMapOIS(OIS::KC_F10              ,cInput::kkey_f10)
00336     ADD_gKeyMapOIS(OIS::KC_NUMLOCK          ,cInput::kkey_numlock)
00337     ADD_gKeyMapOIS(OIS::KC_SCROLL           ,cInput::kkey_scroll)
00338     ADD_gKeyMapOIS(OIS::KC_NUMPAD7          ,cInput::kkey_numpad7)
00339     ADD_gKeyMapOIS(OIS::KC_NUMPAD8          ,cInput::kkey_numpad8)
00340     ADD_gKeyMapOIS(OIS::KC_NUMPAD9          ,cInput::kkey_numpad9)
00341     ADD_gKeyMapOIS(OIS::KC_SUBTRACT             ,cInput::kkey_np_sub)
00342     ADD_gKeyMapOIS(OIS::KC_NUMPAD4          ,cInput::kkey_numpad4)
00343     ADD_gKeyMapOIS(OIS::KC_NUMPAD5          ,cInput::kkey_numpad5)
00344     ADD_gKeyMapOIS(OIS::KC_NUMPAD6          ,cInput::kkey_numpad6)
00345     ADD_gKeyMapOIS(OIS::KC_ADD              ,cInput::kkey_np_add)
00346     ADD_gKeyMapOIS(OIS::KC_NUMPAD1          ,cInput::kkey_numpad1)
00347     ADD_gKeyMapOIS(OIS::KC_NUMPAD2          ,cInput::kkey_numpad2)
00348     ADD_gKeyMapOIS(OIS::KC_NUMPAD3          ,cInput::kkey_numpad3)
00349     ADD_gKeyMapOIS(OIS::KC_NUMPAD0          ,cInput::kkey_numpad0)
00350     ADD_gKeyMapOIS(OIS::KC_DECIMAL          ,cInput::kkey_np_komma)  // double ? KC_NUMPADCOMMA
00351     ADD_gKeyMapOIS(OIS::KC_OEM_102          ,cInput::kkey_greater)
00352     ADD_gKeyMapOIS(OIS::KC_F11              ,cInput::kkey_f11)
00353     ADD_gKeyMapOIS(OIS::KC_F12              ,cInput::kkey_f12)
00354     ADD_gKeyMapOIS(OIS::KC_F13              ,cInput::kkey_f13)
00355     ADD_gKeyMapOIS(OIS::KC_F14              ,cInput::kkey_f14)
00356     ADD_gKeyMapOIS(OIS::KC_F15              ,cInput::kkey_f15)
00357     /*
00358     ADD_gKeyMapOIS(OIS::KC_KANA                 ,cInput::kkey_)
00359     ADD_gKeyMapOIS(OIS::KC_ABNT_C1          ,cInput::kkey_)
00360     ADD_gKeyMapOIS(OIS::KC_CONVERT          ,cInput::kkey_)
00361     ADD_gKeyMapOIS(OIS::KC_NOCONVERT        ,cInput::kkey_)
00362     ADD_gKeyMapOIS(OIS::KC_YEN              ,cInput::kkey_)
00363     ADD_gKeyMapOIS(OIS::KC_ABNT_C2          ,cInput::kkey_)
00364     ADD_gKeyMapOIS(OIS::KC_NUMPADEQUALS         ,cInput::kkey_)
00365     ADD_gKeyMapOIS(OIS::KC_PREVTRACK        ,cInput::kkey_)
00366     ADD_gKeyMapOIS(OIS::KC_AT               ,cInput::kkey_)
00367     ADD_gKeyMapOIS(OIS::KC_COLON            ,cInput::kkey_)
00368     ADD_gKeyMapOIS(OIS::KC_UNDERLINE        ,cInput::kkey_)
00369     ADD_gKeyMapOIS(OIS::KC_KANJI            ,cInput::kkey_)
00370     ADD_gKeyMapOIS(OIS::KC_STOP                 ,cInput::kkey_)
00371     ADD_gKeyMapOIS(OIS::KC_AX               ,cInput::kkey_)
00372     ADD_gKeyMapOIS(OIS::KC_UNLABELED        ,cInput::kkey_)
00373     ADD_gKeyMapOIS(OIS::KC_NEXTTRACK        ,cInput::kkey_)
00374     */
00375     ADD_gKeyMapOIS(OIS::KC_NUMPADENTER      ,cInput::kkey_np_enter)
00376     ADD_gKeyMapOIS(OIS::KC_RCONTROL             ,cInput::kkey_rcontrol)
00377     /*
00378     ADD_gKeyMapOIS(OIS::KC_MUTE                 ,cInput::kkey_)
00379     ADD_gKeyMapOIS(OIS::KC_CALCULATOR       ,cInput::kkey_)
00380     ADD_gKeyMapOIS(OIS::KC_PLAYPAUSE        ,cInput::kkey_)
00381     ADD_gKeyMapOIS(OIS::KC_MEDIASTOP        ,cInput::kkey_)
00382     ADD_gKeyMapOIS(OIS::KC_VOLUMEDOWN       ,cInput::kkey_)
00383     ADD_gKeyMapOIS(OIS::KC_VOLUMEUP             ,cInput::kkey_)
00384     ADD_gKeyMapOIS(OIS::KC_WEBHOME          ,cInput::kkey_)
00385         ADD_gKeyMapOIS(OIS::KC_NUMPADCOMMA      ,cInput::kkey_np_komma) // double ?  KC_DECIMAL
00386         ADD_gKeyMapOIS(OIS::KC_DIVIDE           ,cInput::kkey_)
00387     */
00388     ADD_gKeyMapOIS(OIS::KC_SYSRQ            ,cInput::kkey_screen)
00389     ADD_gKeyMapOIS(OIS::KC_RMENU            ,cInput::kkey_ralt)
00390     ADD_gKeyMapOIS(OIS::KC_PAUSE            ,cInput::kkey_pause)
00391     ADD_gKeyMapOIS(OIS::KC_HOME                 ,cInput::kkey_home)
00392     ADD_gKeyMapOIS(OIS::KC_UP               ,cInput::kkey_up)
00393     ADD_gKeyMapOIS(OIS::KC_PGUP                 ,cInput::kkey_prior)
00394     ADD_gKeyMapOIS(OIS::KC_LEFT                 ,cInput::kkey_left)
00395     ADD_gKeyMapOIS(OIS::KC_RIGHT            ,cInput::kkey_right)
00396     ADD_gKeyMapOIS(OIS::KC_END              ,cInput::kkey_end)
00397     ADD_gKeyMapOIS(OIS::KC_DOWN                 ,cInput::kkey_down)
00398     ADD_gKeyMapOIS(OIS::KC_PGDOWN           ,cInput::kkey_next)
00399     ADD_gKeyMapOIS(OIS::KC_INSERT           ,cInput::kkey_ins)
00400     ADD_gKeyMapOIS(OIS::KC_DELETE           ,cInput::kkey_del)
00401     ADD_gKeyMapOIS(OIS::KC_LWIN                 ,cInput::kkey_lwin)
00402     ADD_gKeyMapOIS(OIS::KC_RWIN                 ,cInput::kkey_rwin)
00403     ADD_gKeyMapOIS(OIS::KC_APPS                 ,cInput::kkey_menu)
00404     /*
00405     ADD_gKeyMapOIS(OIS::KC_POWER            ,cInput::kkey_)
00406     ADD_gKeyMapOIS(OIS::KC_SLEEP            ,cInput::kkey_)
00407     ADD_gKeyMapOIS(OIS::KC_WAKE                 ,cInput::kkey_)
00408     ADD_gKeyMapOIS(OIS::KC_WEBSEARCH        ,cInput::kkey_)
00409     ADD_gKeyMapOIS(OIS::KC_WEBFAVORITES         ,cInput::kkey_)
00410     ADD_gKeyMapOIS(OIS::KC_WEBREFRESH       ,cInput::kkey_)
00411     ADD_gKeyMapOIS(OIS::KC_WEBSTOP          ,cInput::kkey_)
00412     ADD_gKeyMapOIS(OIS::KC_WEBFORWARD       ,cInput::kkey_)
00413     ADD_gKeyMapOIS(OIS::KC_WEBBACK          ,cInput::kkey_)
00414     ADD_gKeyMapOIS(OIS::KC_MYCOMPUTER       ,cInput::kkey_)
00415     ADD_gKeyMapOIS(OIS::KC_MAIL                 ,cInput::kkey_)
00416     ADD_gKeyMapOIS(OIS::KC_MEDIASELECT      ,cInput::kkey_)
00417     */
00418     /*
00419     // see OIS.h
00420     // number pad
00421     kkey_np_div     = 0x6F,
00422     kkey_np_stopclear   = 0x0C, // STRANGE THING, numlock + np_5
00423 
00424     kkey_plus       = 0xBB,
00425     kkey_grid       = 0xBF,
00426     */
00427     //printf("cInput::KeyConvertOIS : unknown key %#02x\n",iKeyCode);
00428 }
00429 
00430 
00435 unsigned char       cInput::GetNamedKey     (const char* szName) { PROFILE
00436     int i;for (i=0;i<256;i++)
00437     if (*szKeyNames[i] != 0)
00438     if (mystricmp(szKeyNames[i],szName) == 0)
00439         return i;
00440     return 0;
00441 }
00442 
00444 const char*     cInput::GetKeyName          (const unsigned char iKey) { PROFILE
00445     return szKeyNames[iKey];
00446 }
00447 
00448 
00454 void    cInput::KeyDown         (const unsigned char iKey,const int iLetter) { PROFILE
00455     bool bIsRepetition = bKeys[iKey];
00456 
00457     // update records
00458     bKeys[iKey] = true;
00459     if (iKey == kkey_mouse1)    bButton[0] = true;
00460     if (iKey == kkey_mouse2)    bButton[1] = true;
00461     if (iKey == kkey_mouse3)    bButton[2] = true;
00462     if (iKey == kkey_wheelup)   {
00463         iMouseWheel++;
00464         iMouseWheel_all_since_last_step++;
00465         if (!bIsRepetition) {
00466             iMouseWheel_pressed++;
00467             iMouseWheel_pressed_since_last_step++;
00468         }
00469     }
00470     if (iKey == kkey_wheeldown) {
00471         iMouseWheel--;
00472         iMouseWheel_all_since_last_step--;
00473         if (!bIsRepetition) {
00474             iMouseWheel_pressed--;
00475             iMouseWheel_pressed_since_last_step--;
00476         }
00477     }
00478 
00479     for (std::list<cInputListener*>::iterator itor=mListeners.begin();itor!=mListeners.end();++itor) {
00480         if (bIsRepetition)
00481                 (*itor)->Notify_KeyRepeat(iKey,iLetter);
00482         else    (*itor)->Notify_KeyPress(iKey,iLetter);
00483     }
00484 }
00485 
00486 
00487 
00492 void    cInput::KeyUp           (const unsigned char iKey) { PROFILE
00493     // update records
00494     bKeys[iKey] = false;
00495     if (iKey == kkey_mouse1) bButton[0] = false;
00496     if (iKey == kkey_mouse2) bButton[1] = false;
00497     if (iKey == kkey_mouse3) bButton[2] = false;
00498 
00499     for (std::list<cInputListener*>::iterator itor=mListeners.begin();itor!=mListeners.end();++itor) {
00500         (*itor)->Notify_KeyRelease(iKey);
00501     }
00502 }
00503 
00504 };

Generated on Wed May 23 06:00:14 2012 for cpp by  doxygen 1.5.6