00001 /* 00002 ----------------------------------------------------------------------------- 00003 This source file is part of OGRE 00004 (Object-oriented Graphics Rendering Engine) 00005 For the latest info, see http://www.ogre3d.org/ 00006 00007 Copyright © 2000-2002 The OGRE Team 00008 Also see acknowledgements in Readme.html 00009 00010 This program is free software; you can redistribute it and/or modify it under 00011 the terms of the GNU Lesser General Public License as published by the Free Software 00012 Foundation; either version 2 of the License, or (at your option) any later 00013 version. 00014 00015 This program is distributed in the hope that it will be useful, but WITHOUT 00016 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 00017 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. 00018 00019 You should have received a copy of the GNU Lesser General Public License along with 00020 this program; if not, write to the Free Software Foundation, Inc., 59 Temple 00021 Place - Suite 330, Boston, MA 02111-1307, USA, or go to 00022 http://www.gnu.org/copyleft/lesser.txt. 00023 ----------------------------------------------------------------------------- 00024 */ 00025 #include "OgreStableHeaders.h" 00026 00027 #include "OgreEventProcessor.h" 00028 #include "OgreOverlayManager.h" 00029 #include "OgreEventQueue.h" 00030 #include "OgreRoot.h" 00031 #include "OgreMouseEvent.h" 00032 #include "OgreKeyEvent.h" 00033 #include "OgreActionEvent.h" 00034 #include "OgreInput.h" 00035 #include "OgreCursor.h" 00036 00037 00038 namespace Ogre { 00039 //----------------------------------------------------------------------- 00040 template<> EventProcessor* Singleton<EventProcessor>::ms_Singleton = 0; 00041 EventProcessor* EventProcessor::getSingletonPtr(void) 00042 { 00043 return ms_Singleton; 00044 } 00045 EventProcessor& EventProcessor::getSingleton(void) 00046 { 00047 assert( ms_Singleton ); return ( *ms_Singleton ); 00048 } 00049 //----------------------------------------------------------------------- 00050 //----------------------------------------------------------------------------- 00051 EventProcessor::EventProcessor() : 00052 MouseTarget(), 00053 MouseMotionTarget() 00054 { 00055 mEventQueue = 0; 00056 mInputDevice = 0; 00057 mRegisteredAsFrameListener = false; 00058 } 00059 00060 //----------------------------------------------------------------------------- 00061 EventProcessor::~EventProcessor() 00062 { 00063 00064 cleanup(); 00065 } 00066 00067 //----------------------------------------------------------------------------- 00068 void EventProcessor::cleanup() 00069 { 00070 if (mEventQueue) 00071 delete mEventQueue; 00072 00073 for(DispatcherList::iterator i = mDispatcherList.begin(); i != mDispatcherList.end(); ++i ) 00074 { 00075 delete *i; 00076 } 00077 mDispatcherList.clear(); 00078 00079 PlatformManager::getSingleton().destroyInputReader(mInputDevice); 00080 00081 } 00082 00083 //----------------------------------------------------------------------------- 00084 void EventProcessor::stopProcessingEvents() 00085 { 00086 00087 mEventQueue->activateEventQueue(false); 00088 00089 if(mRegisteredAsFrameListener) 00090 { 00091 Root::getSingleton().removeFrameListener(this); 00092 mRegisteredAsFrameListener = false; 00093 } 00094 00095 } 00096 00097 //----------------------------------------------------------------------------- 00098 void EventProcessor::initialise(RenderWindow* ren) 00099 { 00100 cleanup(); 00101 00102 00103 mEventQueue = new EventQueue(); 00104 00105 mInputDevice = PlatformManager::getSingleton().createInputReader(); 00106 mInputDevice->useBufferedInput(mEventQueue); 00107 mInputDevice->initialise(ren,true, true, false); 00108 00109 } 00110 //----------------------------------------------------------------------------- 00111 00112 void EventProcessor::addTargetManager(TargetManager* targetManager) 00113 { 00114 EventDispatcher* pDispatcher = new EventDispatcher(targetManager); 00115 mDispatcherList.push_back(pDispatcher); 00116 } 00117 00118 //----------------------------------------------------------------------------- 00119 void EventProcessor::addEventTarget(EventTarget* eventTarget) 00120 { 00121 mEventTargetList.push_back(eventTarget); 00122 } 00123 00124 00125 //----------------------------------------------------------------------------- 00126 void EventProcessor::startProcessingEvents(bool registerListener) 00127 { 00128 if(registerListener) 00129 { 00130 Root::getSingleton().addFrameListener(this); 00131 mRegisteredAsFrameListener = true; 00132 } 00133 00134 mEventQueue->activateEventQueue(true); 00135 } 00136 00137 00138 //----------------------------------------------------------------------------- 00139 bool EventProcessor::frameStarted(const FrameEvent& evt) 00140 { 00141 mInputDevice->capture(); 00142 00143 while (mEventQueue->getSize() > 0) 00144 { 00145 InputEvent* e = mEventQueue->pop(); 00146 processEvent(e); 00147 delete e; 00148 } 00149 00150 return true; 00151 } 00152 00153 //----------------------------------------------------------------------------- 00154 void EventProcessor::processEvent(InputEvent* e) 00155 { 00156 // try the event dispatcher list 00157 for (DispatcherList::iterator i = mDispatcherList.begin(); i != mDispatcherList.end(); ++i ) 00158 { 00159 (*i)->dispatchEvent(e); 00160 } 00161 00162 // try the event target list 00163 if (!e->isConsumed()) 00164 { 00165 EventTargetList::iterator i, iEnd; 00166 00167 iEnd = mEventTargetList.end(); 00168 for (i = mEventTargetList.begin(); i != iEnd; ++i ) 00169 { 00170 (*i)->processEvent(e); 00171 } 00172 } 00173 00174 if (!e->isConsumed()) 00175 { 00176 switch(e->getID()) 00177 { 00178 case MouseEvent::ME_MOUSE_PRESSED: 00179 case MouseEvent::ME_MOUSE_RELEASED: 00180 case MouseEvent::ME_MOUSE_CLICKED: 00181 case MouseEvent::ME_MOUSE_ENTERED: 00182 case MouseEvent::ME_MOUSE_EXITED: 00183 case MouseEvent::ME_MOUSE_DRAGENTERED: 00184 case MouseEvent::ME_MOUSE_DRAGEXITED: 00185 case MouseEvent::ME_MOUSE_DRAGDROPPED: 00186 processMouseEvent(static_cast<MouseEvent*>(e)); 00187 break; 00188 case MouseEvent::ME_MOUSE_MOVED: 00189 case MouseEvent::ME_MOUSE_DRAGGED: 00190 case MouseEvent::ME_MOUSE_DRAGMOVED: 00191 processMouseMotionEvent(static_cast<MouseEvent*>(e)); 00192 break; 00193 case KeyEvent::KE_KEY_PRESSED: 00194 case KeyEvent::KE_KEY_RELEASED: 00195 case KeyEvent::KE_KEY_CLICKED: 00196 processKeyEvent(static_cast<KeyEvent*>(e)); 00197 break; 00198 } 00199 } 00200 } 00201 00202 //----------------------------------------------------------------------------- 00203 void EventProcessor::addCursorMoveListener(MouseMotionListener* c) 00204 { 00205 mInputDevice->addCursorMoveListener(c); 00206 } 00207 //----------------------------------------------------------------------------- 00208 void EventProcessor::removeCursorMoveListener(MouseMotionListener* c) 00209 { 00210 mInputDevice->removeCursorMoveListener(c); 00211 } 00212 00213 //----------------------------------------------------------------------------- 00214 Real EventProcessor::getLeft() const 00215 { 00216 return 0; 00217 } 00218 00219 //----------------------------------------------------------------------------- 00220 Real EventProcessor::getTop() const 00221 { 00222 return 0; 00223 } 00224 00225 //----------------------------------------------------------------------------- 00226 PositionTarget* EventProcessor::getPositionTargetParent() const 00227 { 00228 return NULL; 00229 } 00230 //----------------------------------------------------------------------------- 00231 00232 } 00233
Copyright © 2002-2003 by The OGRE Team
Last modified Sun Nov 28 19:48:23 2004