00001
00002
00003
00004
00005 #include "event.h"
00006
00007 #include <eq/base/idPool.h>
00008
00009 using namespace std;
00010 using namespace eq::base;
00011
00012 #ifdef WIN32
00013 # define bzero( ptr, size ) memset( ptr, 0, size );
00014 #else
00015 # include <strings.h>
00016 #endif
00017
00018 namespace eq
00019 {
00020 namespace{
00022 static std::string _eventTypeNames[ Event::ALL ] =
00023 {
00024 "expose",
00025 "window resize",
00026 "window close",
00027 "window show",
00028 "window hide",
00029 "pointer motion",
00030 "pointer button press",
00031 "pointer button release",
00032 "key press",
00033 "key release",
00034 "channel resize",
00035 "statistic",
00036 "view resize",
00037 "unknown",
00038 "user-specific"
00039 };
00040
00042 static std::string _stateEventTypeNames[Statistic::TYPE_ALL] =
00043 {
00044 "NO EVENT ",
00045 "channel clear ",
00046 "channel draw ",
00047 "channel finishdraw",
00048 "channel assemble ",
00049 "channel readback ",
00050 "channel transmit ",
00051 "channel transmit 1",
00052 "channel wait frame",
00053 "window swap buffer",
00054 "config start frame",
00055 "config finishframe",
00056 "config wait finish"
00057 };
00058 }
00059
00060 Event::Event()
00061 : type( UNKNOWN )
00062 , originator( EQ_ID_INVALID )
00063 {
00064 bzero( &context, sizeof( RenderContext ));
00065 }
00066
00067 EQ_EXPORT std::ostream& operator << ( std::ostream& os, const Event& event )
00068 {
00069 os << disableFlush << event.type << ':' << event.originator << ' ';
00070 switch( event.type )
00071 {
00072 case Event::EXPOSE:
00073 case Event::WINDOW_CLOSE:
00074 break;
00075
00076 case Event::WINDOW_RESIZE:
00077 case Event::WINDOW_SHOW:
00078 case Event::WINDOW_HIDE:
00079 case Event::CHANNEL_RESIZE:
00080 case Event::VIEW_RESIZE:
00081 os << event.resize;
00082 break;
00083
00084 case Event::POINTER_MOTION:
00085 case Event::POINTER_BUTTON_PRESS:
00086 case Event::POINTER_BUTTON_RELEASE:
00087 os << event.pointer;
00088 break;
00089
00090 case Event::KEY_PRESS:
00091 case Event::KEY_RELEASE:
00092 os << event.key;
00093 break;
00094
00095 case Event::STATISTIC:
00096 os << event.statistic;
00097 default:
00098 break;
00099 }
00100
00101 os << enableFlush;
00102 return os;
00103 }
00104
00105 EQ_EXPORT std::ostream& operator << ( std::ostream& os, const Event::Type& type)
00106 {
00107 if( type >= Event::ALL )
00108 os << "unknown (" << static_cast<unsigned>( type ) << ')';
00109 else
00110 os << _eventTypeNames[ type ];
00111
00112 return os;
00113 }
00114
00115 std::ostream& operator << ( std::ostream& os, const ResizeEvent& event )
00116 {
00117 os << event.x << 'x' << event.y << '+' << event.w << '+' << event.h << ' ';
00118 return os;
00119 }
00120
00121 std::ostream& operator << ( std::ostream& os, const PointerEvent& event )
00122 {
00123 os << '[' << event.x << "], [" << event.y << "] d(" << event.dx << ", "
00124 << event.dy << ')' << " buttons ";
00125
00126 if( event.buttons == PTR_BUTTON_NONE ) os << "none";
00127 if( event.buttons & PTR_BUTTON1 ) os << "1";
00128 if( event.buttons & PTR_BUTTON2 ) os << "2";
00129 if( event.buttons & PTR_BUTTON3 ) os << "3";
00130 if( event.buttons & PTR_BUTTON4 ) os << "4";
00131 if( event.buttons & PTR_BUTTON5 ) os << "5";
00132
00133 os << " fired ";
00134 if( event.button == PTR_BUTTON_NONE ) os << "none";
00135 if( event.button & PTR_BUTTON1 ) os << "1";
00136 if( event.button & PTR_BUTTON2 ) os << "2";
00137 if( event.button & PTR_BUTTON3 ) os << "3";
00138 if( event.button & PTR_BUTTON4 ) os << "4";
00139 if( event.button & PTR_BUTTON5 ) os << "5";
00140
00141 os << ' ';
00142 return os;
00143 }
00144
00145 std::ostream& operator << ( std::ostream& os, const KeyEvent& event )
00146 {
00147 os << "key " << event.key << ' ' << endl;
00148 return os;
00149 }
00150
00151 std::ostream& operator << ( std::ostream& os, const Statistic& event )
00152 {
00153 os << _stateEventTypeNames[ event.type ] << ' ' << event.frameNumber << ' '
00154 << event.startTime << " - " << event.endTime;
00155 return os;
00156 }
00157 }