examples/eVolve/config.cpp

00001 
00002 /* Copyright (c) 2006-2008, Stefan Eilemann <eile@equalizergraphics.com> 
00003  *
00004  * This library is free software; you can redistribute it and/or modify it under
00005  * the terms of the GNU Lesser General Public License version 2.1 as published
00006  * by the Free Software Foundation.
00007  *  
00008  * This library is distributed in the hope that it will be useful, but WITHOUT
00009  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
00010  * FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
00011  * details.
00012  * 
00013  * You should have received a copy of the GNU Lesser General Public License
00014  * along with this library; if not, write to the Free Software Foundation, Inc.,
00015  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
00016  */
00017 
00018 #include "config.h"
00019 
00020 using namespace std;
00021 
00022 namespace eVolve
00023 {
00024 
00025 Config::Config( eq::base::RefPtr< eq::Server > parent )
00026         : eq::Config( parent )
00027         , _spinX( 5 )
00028         , _spinY( 5 )
00029 {
00030 }
00031 
00032 Config::~Config()
00033 {
00034 }
00035 
00036 bool Config::init()
00037 {
00038     // init distributed objects
00039     _frameData.data.ortho = _initData.getOrtho();
00040     registerObject( &_frameData );
00041     _initData.setFrameDataID( _frameData.getID( ));
00042 
00043     registerObject( &_initData );
00044 
00045     // init config
00046     if( !eq::Config::init( _initData.getID( )))
00047         return false;
00048 
00049     return true;
00050 }
00051 
00052 bool Config::exit()
00053 {
00054     const bool ret = eq::Config::exit();
00055 
00056     _initData.setFrameDataID( EQ_ID_INVALID );
00057     deregisterObject( &_initData );
00058     deregisterObject( &_frameData );
00059 
00060     return ret;
00061 }
00062 
00063 uint32_t Config::startFrame()
00064 {
00065     // update database
00066     _frameData.data.rotation.pre_rotate_x( -0.001f * _spinX );
00067     _frameData.data.rotation.pre_rotate_y( -0.001f * _spinY );
00068     const uint32_t version = _frameData.commit();
00069 
00070     return eq::Config::startFrame( version );
00071 }
00072 
00073 bool Config::handleEvent( const eq::ConfigEvent* event )
00074 {
00075     switch( event->data.type )
00076     {
00077         case eq::Event::KEY_PRESS:
00078             switch( event->data.keyPress.key )
00079             {
00080                 case 'r':
00081                 case 'R':
00082                 case ' ':
00083                     _spinX = 0;
00084                     _spinY = 0;
00085                     _frameData.reset();
00086                     return true;
00087 
00088                 case 'o':
00089                 case 'O':
00090                     _frameData.data.ortho = !_frameData.data.ortho;
00091                     return true;
00092 
00093                 case 's':
00094                 case 'S':
00095                     _frameData.data.statistics = !_frameData.data.statistics;
00096                     return true;
00097 
00098                 default:
00099                     break;
00100             }
00101             break;
00102 
00103         case eq::Event::POINTER_BUTTON_RELEASE:
00104             if( event->data.pointerButtonRelease.buttons == eq::PTR_BUTTON_NONE
00105                 && event->data.pointerButtonRelease.button  == eq::PTR_BUTTON1 )
00106             {
00107                 _spinX = event->data.pointerButtonRelease.dx;
00108                 _spinY = event->data.pointerButtonRelease.dy;
00109             }
00110             return true;
00111 
00112         case eq::Event::POINTER_MOTION:
00113             if( event->data.pointerMotion.buttons == eq::PTR_BUTTON_NONE )
00114                 return true;
00115 
00116             if( event->data.pointerMotion.buttons == eq::PTR_BUTTON1 )
00117             {
00118                 _spinX = 0;
00119                 _spinY = 0;
00120 
00121                 _frameData.data.rotation.pre_rotate_x( 
00122                     -0.005f * event->data.pointerMotion.dx );
00123                 _frameData.data.rotation.pre_rotate_y(
00124                     -0.005f * event->data.pointerMotion.dy );
00125             }
00126             else if( event->data.pointerMotion.buttons == eq::PTR_BUTTON2 ||
00127                      event->data.pointerMotion.buttons == ( eq::PTR_BUTTON1 |
00128                                                        eq::PTR_BUTTON3 ))
00129             {
00130                 _frameData.data.translation.z() +=
00131                     .005f * event->data.pointerMotion.dy;
00132             }
00133             else if( event->data.pointerMotion.buttons == eq::PTR_BUTTON3 )
00134             {
00135                 _frameData.data.translation.x() += 
00136                     .0005f * event->data.pointerMotion.dx;
00137                 _frameData.data.translation.y() -= 
00138                     .0005f * event->data.pointerMotion.dy;
00139             }
00140             return true;
00141 
00142         default:
00143             break;
00144     }
00145     return eq::Config::handleEvent( event );
00146 }
00147 }
Generated on Mon Aug 10 18:58:32 2009 for Equalizer 0.9 by  doxygen 1.5.8