00001
00002
00003
00004 #include "eventHandler.h"
00005
00006 #ifdef GLX
00007 # include "glXEventHandler.h"
00008 #endif
00009
00010 #include "pipe.h"
00011 #include "window.h"
00012
00013 #include <eq/base/lock.h>
00014 #include <eq/base/debug.h>
00015
00016 using namespace eq::base;
00017 using namespace std;
00018
00019 namespace eq
00020 {
00021 EventHandler* EventHandler::registerPipe( Pipe* pipe )
00022 {
00023 switch( pipe->getWindowSystem( ))
00024 {
00025 case WINDOW_SYSTEM_GLX:
00026 #ifdef GLX
00027 return new GLXEventHandler( pipe );
00028 #endif
00029 break;
00030
00031 case WINDOW_SYSTEM_AGL:
00032 case WINDOW_SYSTEM_WGL:
00033
00034 break;
00035
00036 default:
00037 EQERROR << "event handling not implemented for window system "
00038 << pipe->getWindowSystem() << endl;
00039 break;
00040 }
00041 return 0;
00042 }
00043
00044 void EventHandler::_computePointerDelta( const Window* window, Event &event )
00045 {
00046 if( _lastEventWindow != window )
00047 {
00048 event.pointer.dx = 0;
00049 event.pointer.dy = 0;
00050 _lastPointerEvent = event;
00051 _lastEventWindow = window;
00052 return;
00053 }
00054
00055 switch( event.type )
00056 {
00057 case Event::POINTER_BUTTON_PRESS:
00058 case Event::POINTER_BUTTON_RELEASE:
00059 if( _lastPointerEvent.type == Event::POINTER_MOTION )
00060 {
00061 event.pointer.dx = _lastPointerEvent.pointer.dx;
00062 event.pointer.dy = _lastPointerEvent.pointer.dy;
00063 break;
00064 }
00065
00066
00067 default:
00068 event.pointer.dx = event.pointer.x - _lastPointerEvent.pointer.x;
00069 event.pointer.dy = event.pointer.y - _lastPointerEvent.pointer.y;
00070 }
00071 _lastPointerEvent = event;
00072 }
00073
00074 void EventHandler::_getRenderContext( const Window* window, Event& event )
00075 {
00076 const int32_t x = event.pointer.x;
00077 const int32_t y = event.pointer.y;
00078
00079 const RenderContext* context = window->getRenderContext( x, y );
00080 if( context )
00081 event.context = *context;
00082 else
00083 EQINFO << "No rendering context for pointer event at " << x << ", "
00084 << y << endl;
00085 }
00086
00087 }