Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-09 07:49:38

0001 #pragma once
0002 /**
0003 SGLFW_Keys.h : record of keyboard keys currently held down with modifiers bitfield summarization
0004 ================================================================================================== 
0005 
0006 **/
0007 
0008 #include "SGLM_Modifiers.h"
0009 
0010 struct SGLFW_Keys
0011 {
0012     enum { NUM_KEYS = 512 } ;
0013     bool down[NUM_KEYS] ; 
0014 
0015     SGLFW_Keys();  
0016     void key_pressed(unsigned key);
0017     void key_released(unsigned key);
0018     unsigned modifiers() const ; 
0019 };
0020 
0021 inline SGLFW_Keys::SGLFW_Keys()
0022 {
0023    for(int i=0 ; i < NUM_KEYS ; i++) down[i] = false ; 
0024 }
0025 inline void SGLFW_Keys::key_pressed(unsigned key)
0026 {
0027     if(key < NUM_KEYS) down[key] = true ; 
0028 }
0029 inline void SGLFW_Keys::key_released(unsigned key)
0030 { 
0031     if(key < NUM_KEYS) down[key] = false ; 
0032 }
0033 /**
0034 SGLFW_Keys::modifiers
0035 ----------------------
0036 
0037 Returns bitfield representing a restricted selection of "controller" keys 
0038 that are currently held down.
0039  
0040 NB these keys should be kept distinct from toggle keys.  
0041 
0042 **/
0043 inline unsigned SGLFW_Keys::modifiers() const 
0044 {
0045     unsigned modifiers = 0 ;
0046     if( down[GLFW_KEY_LEFT_SHIFT]   || down[GLFW_KEY_RIGHT_SHIFT] )    modifiers += SGLM_Modifiers::MOD_SHIFT ; 
0047     if( down[GLFW_KEY_LEFT_CONTROL] || down[GLFW_KEY_RIGHT_CONTROL] )  modifiers += SGLM_Modifiers::MOD_CONTROL ; 
0048     if( down[GLFW_KEY_LEFT_ALT]     || down[GLFW_KEY_RIGHT_ALT] )      modifiers += SGLM_Modifiers::MOD_ALT ; 
0049     if( down[GLFW_KEY_LEFT_SUPER]   || down[GLFW_KEY_RIGHT_SUPER] )    modifiers += SGLM_Modifiers::MOD_SUPER ; 
0050 
0051     if( down[GLFW_KEY_W] ) modifiers += SGLM_Modnav::MOD_W ; 
0052     if( down[GLFW_KEY_A] ) modifiers += SGLM_Modnav::MOD_A ; 
0053     if( down[GLFW_KEY_S] ) modifiers += SGLM_Modnav::MOD_S ; 
0054     if( down[GLFW_KEY_D] ) modifiers += SGLM_Modnav::MOD_D ; 
0055     if( down[GLFW_KEY_Q] ) modifiers += SGLM_Modnav::MOD_Q ; 
0056     if( down[GLFW_KEY_E] ) modifiers += SGLM_Modnav::MOD_E ; 
0057     if( down[GLFW_KEY_R] ) modifiers += SGLM_Modnav::MOD_R ; 
0058     if( down[GLFW_KEY_Y] ) modifiers += SGLM_Modnav::MOD_Y ; 
0059 
0060     return modifiers ; 
0061 }
0062 
0063