00001 /* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*- 00002 00003 this file is part of rcssserver3D 00004 Fri May 9 2003 00005 Copyright (C) 2002,2003 Koblenz University 00006 Copyright (C) 2003 RoboCup Soccer Server 3D Maintenance Group 00007 $Id: mousesdl.cpp,v 1.5 2004/04/23 20:24:31 fruit Exp $ 00008 00009 This program is free software; you can redistribute it and/or modify 00010 it under the terms of the GNU General Public License as published by 00011 the Free Software Foundation; version 2 of the License. 00012 00013 This program is distributed in the hope that it will be useful, 00014 but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00016 GNU General Public License for more details. 00017 00018 You should have received a copy of the GNU General Public License 00019 along with this program; if not, write to the Free Software 00020 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00021 */ 00022 #include "mousesdl.h" 00023 #include <zeitgeist/logserver/logserver.h> 00024 00025 using namespace kerosin; 00026 00027 MouseSDL::MouseSDL() 00028 { 00029 } 00030 00031 MouseSDL::~MouseSDL() 00032 { 00033 } 00034 00035 bool 00036 MouseSDL::Init(kerosin::InputSystem* inputSystem) 00037 { 00038 return InputDevice::Init(inputSystem); 00039 } 00040 00041 int 00042 MouseSDL::EventFilter(const SDL_Event* event) 00043 { 00044 // we only want mouse events 00045 switch (event->type) 00046 { 00047 case SDL_MOUSEBUTTONDOWN: 00048 case SDL_MOUSEBUTTONUP: 00049 { 00050 InputServer::Input input(InputServer::eButton); 00051 00052 switch (event->button.button) 00053 { 00054 case SDL_BUTTON_LEFT: 00055 input.code = 00056 mInputSystem->GetInputServer()->IC_MOUSE_LEFT; 00057 break; 00058 00059 case SDL_BUTTON_RIGHT: 00060 input.code = 00061 mInputSystem->GetInputServer()->IC_MOUSE_RIGHT; 00062 break; 00063 00064 case SDL_BUTTON_MIDDLE: 00065 input.code = 00066 mInputSystem->GetInputServer()->IC_MOUSE_MIDDLE; 00067 break; 00068 00069 default: 00070 return 1; 00071 } 00072 00073 input.data.l = (event->type == SDL_MOUSEBUTTONDOWN); 00074 mInputSystem->AddInputInternal(input); 00075 return 0; 00076 } 00077 break; 00078 00079 case SDL_MOUSEMOTION: 00080 { 00081 InputServer::Input input 00082 ( 00083 InputServer::eAxis, 00084 mInputSystem->GetInputServer()->IC_AXISX 00085 ); 00086 input.data.l = event->motion.xrel; 00087 mInputSystem->AddInputInternal(input); 00088 00089 input.code = mInputSystem->GetInputServer()->IC_AXISY; 00090 input.data.l = event->motion.yrel; 00091 mInputSystem->AddInputInternal(input); 00092 return 0; 00093 } 00094 break; 00095 } 00096 00097 return 1; 00098 }