Equalizer 1.0

event.h

00001 
00002 /* Copyright (c) 2006-2011, Stefan Eilemann <eile@equalizergraphics.com> 
00003  *                    2011, Cedric Stalder <cedric.stalder@gmail.com> 
00004  *
00005  * This library is free software; you can redistribute it and/or modify it under
00006  * the terms of the GNU Lesser General Public License version 2.1 as published
00007  * by the Free Software Foundation.
00008  *  
00009  * This library is distributed in the hope that it will be useful, but WITHOUT
00010  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
00011  * FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
00012  * details.
00013  * 
00014  * You should have received a copy of the GNU Lesser General Public License
00015  * along with this library; if not, write to the Free Software Foundation, Inc.,
00016  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
00017 */
00018 
00019 #ifndef EQ_EVENT_H
00020 #define EQ_EVENT_H
00021 
00022 #include <eq/types.h>
00023 #include <eq/statistic.h>     // member
00024 #include <eq/fabric/renderContext.h> // member
00025 
00026 #include <eq/api.h>
00027 
00028 namespace eq
00029 {
00036     enum KeyCode
00037     {
00038         KC_ESCAPE = 256,
00039         KC_BACKSPACE,
00040         KC_RETURN,
00041         KC_TAB,
00042         KC_HOME,
00043         KC_LEFT,
00044         KC_UP,
00045         KC_RIGHT,
00046         KC_DOWN,
00047         KC_PAGE_UP,
00048         KC_PAGE_DOWN,
00049         KC_END,
00050         KC_F1,
00051         KC_F2,
00052         KC_F3,
00053         KC_F4,
00054         KC_F5,
00055         KC_F6,
00056         KC_F7,
00057         KC_F8,
00058         KC_F9,
00059         KC_F10,
00060         KC_F11,
00061         KC_F12,
00062         KC_F13,
00063         KC_F14,
00064         KC_F15,
00065         KC_F16,
00066         KC_F17,
00067         KC_F18,
00068         KC_F19,
00069         KC_F20,
00070         KC_F21,
00071         KC_F22,
00072         KC_F23,
00073         KC_F24,
00074         KC_SHIFT_L,
00075         KC_SHIFT_R,
00076         KC_CONTROL_L,
00077         KC_CONTROL_R,
00078         KC_ALT_L,
00079         KC_ALT_R,
00080         KC_VOID = 0xFFFFFF /* == XK_VoidSymbol */
00081     };
00082 
00088     enum PointerButton
00089     {
00090         PTR_BUTTON_NONE = EQ_BIT_NONE,
00091         PTR_BUTTON1     = EQ_BIT1,
00092         PTR_BUTTON2     = EQ_BIT2,
00093         PTR_BUTTON3     = EQ_BIT3,
00094         PTR_BUTTON4     = EQ_BIT4,
00095         PTR_BUTTON5     = EQ_BIT5,
00096         PTR_BUTTON6     = EQ_BIT6,
00097         PTR_BUTTON7     = EQ_BIT7
00098     };
00099 
00104     struct ResizeEvent
00105     {
00106         int32_t x; 
00107         int32_t y; 
00108         int32_t w; 
00109         int32_t h; 
00110         float dw;  
00111         float dh;  
00112     };
00113 
00115     struct PointerEvent
00116     {
00117         int32_t x;             
00118         int32_t y;             
00119         int32_t dx;            
00120         int32_t dy;            
00121         uint32_t buttons;      
00122         uint32_t button;       
00123         int32_t xAxis;         
00124         int32_t yAxis;         
00125     };
00126 
00128     struct KeyEvent
00129     {
00130         uint32_t key; 
00131         // TODO modifier state
00132     };
00133 
00138     struct MagellanEvent
00139     {
00140         uint32_t button;       
00141         uint32_t buttons;      
00142         int16_t xAxis;         
00143         int16_t yAxis;         
00144         int16_t zAxis;         
00145         int16_t xRotation;     
00146         int16_t yRotation;     
00147         int16_t zRotation;     
00148     };
00149 
00150 #   define EQ_USER_EVENT_SIZE 128
00151 
00157     struct UserEvent
00158     {
00159         char data[ EQ_USER_EVENT_SIZE ]; 
00160     };
00161 
00171     struct Event
00172     {
00174         EQ_API Event();
00175 
00177         enum Type // Also update string table in event.cpp
00178         {
00179             WINDOW_EXPOSE = 0,    
00180             WINDOW_RESIZE,        
00181             WINDOW_CLOSE,         
00182             WINDOW_HIDE,          
00183             WINDOW_SHOW,          
00184             WINDOW_SCREENSAVER,   
00185 #ifdef EQ_USE_DEPRECATED
00186             POINTER_MOTION,       
00187 
00188             POINTER_BUTTON_PRESS,
00190             POINTER_BUTTON_RELEASE,
00191             POINTER_WHEEL,        
00192 
00193             CHANNEL_POINTER_MOTION = POINTER_MOTION, 
00195             CHANNEL_POINTER_BUTTON_PRESS = POINTER_BUTTON_PRESS,
00197             CHANNEL_POINTER_BUTTON_RELEASE = POINTER_BUTTON_RELEASE,
00199             WINDOW_POINTER_WHEEL = POINTER_WHEEL, 
00200 #else
00201 
00202             CHANNEL_POINTER_MOTION, 
00204             CHANNEL_POINTER_BUTTON_PRESS,
00206             CHANNEL_POINTER_BUTTON_RELEASE,
00208             WINDOW_POINTER_WHEEL, 
00209 #endif
00210 
00211             WINDOW_POINTER_MOTION,  
00213             WINDOW_POINTER_BUTTON_PRESS,
00215             WINDOW_POINTER_BUTTON_RELEASE,
00216 
00217             KEY_PRESS,            
00218             KEY_RELEASE,          
00219             CHANNEL_RESIZE,       
00220             STATISTIC,            
00221             VIEW_RESIZE,          
00222             EXIT,                 
00223             MAGELLAN_AXIS,        
00224             MAGELLAN_BUTTON,      
00225             UNKNOWN,              
00226 
00227             USER = UNKNOWN + 5, // some buffer for binary-compatible patches
00228             ALL // must be last
00229         };
00230 
00231         
00232         uint32_t type;           
00233 
00234         // keep before 'uint128_t originator' for alignment
00235         uint32_t serial;       
00236 
00238         uint128_t originator;
00239 
00241         union
00242         {
00243             ResizeEvent   resize;             
00244             ResizeEvent   show;               
00245             ResizeEvent   hide;               
00246             
00247             PointerEvent  pointer;            
00248             PointerEvent  pointerMotion;      
00249             PointerEvent  pointerButtonPress; 
00250             PointerEvent  pointerButtonRelease; 
00251             PointerEvent  pointerWheel;       
00252 
00253             KeyEvent      key;                
00254             KeyEvent      keyPress;           
00255             KeyEvent      keyRelease;         
00256 
00257             Statistic     statistic;          
00258             MagellanEvent magellan;           
00259 
00260             UserEvent     user;               
00261         };
00262      
00264         RenderContext context;
00265     };
00266 
00268     EQ_API std::ostream& operator << ( std::ostream&, const Event& );
00270     EQ_API std::ostream& operator << ( std::ostream&, const Event::Type& );
00272     EQ_API std::ostream& operator << ( std::ostream&, const ResizeEvent& );
00274     EQ_API std::ostream& operator << ( std::ostream&, const PointerEvent& );
00276     EQ_API std::ostream& operator << ( std::ostream&, const KeyEvent& );
00278     EQ_API std::ostream& operator << ( std::ostream&, const MagellanEvent& );
00279 }
00280 
00281 #endif // EQ_EVENT_H
00282 
Generated on Sun May 8 2011 19:11:05 for Equalizer 1.0 by  doxygen 1.7.3