00001
00002 #ifdef RT_QT
00003
00004 #include "RendergroupQGLView.h"
00005
00006 namespace RenderTools {
00007
00008 RendergroupQGLView::RendergroupQGLView( void ):
00009 QGLWidget( QGLFormat( QGL::DoubleBuffer | QGL::DepthBuffer | QGL::Rgba | QGL::AlphaChannel | QGL::DirectRendering | QGL::SampleBuffers ), 0 ),
00010 RendergroupAbstractView(),
00011 m_timer( 0 ){
00012
00015 setFocusPolicy( Qt::ClickFocus );
00016 resize( m_width, m_height );
00017 }
00018
00019 PropertyPtr RendergroupQGLView::create( const XMLNodePtr & xml ){
00020 RendergroupQGLViewPtr p( new RendergroupQGLView() );
00021 p->setName( xml );
00022 p->createProperties();
00023 p->setProperties( xml, false );
00024 return( dynamic_pointer_cast< AbstractProperty, RendergroupQGLView >( p ) );
00025 }
00026
00027 void RendergroupQGLView::createProperties( void ){
00028 RendergroupAbstractView::createProperties();
00029
00030 }
00031
00032 const string RendergroupQGLView::getTypeName( bool ofComponent = false ) const {
00033 return( "RendergroupGLView" );
00034 }
00035
00036 RendergroupQGLView::~RendergroupQGLView( void ){
00037
00038 }
00039
00040 void RendergroupQGLView::onInitialize( void ){
00041 makeCurrent();
00042 AbstractApplication::setGLInitialized();
00043 }
00044
00045 void RendergroupQGLView::startTimer( unsigned int millis ){
00046 m_timerQt = QGLWidget::startTimer( millis );
00047 }
00048
00049 void RendergroupQGLView::stopTimer( void ){
00050 QGLWidget::killTimer( m_timerQt );
00051 }
00052
00053 void RendergroupQGLView::timerEvent( QTimerEvent *e ){
00054 makeCurrent();
00055 onViewControllerEvent( ViewControllerEvent( TIMER ) );
00056 }
00057
00058 void RendergroupQGLView::resizeGL( int width, int height ){
00059 makeCurrent();
00060 vector< float > values;
00061 values.push_back( width );
00062 values.push_back( height );
00063 onViewControllerEvent( ViewControllerEvent( RESIZE, this, values ) );
00064 }
00065
00066 void RendergroupQGLView::paintGL( void ){
00067 makeCurrent();
00068 }
00069
00070 void RendergroupQGLView::mousePressEvent( QMouseEvent * event ){
00071 QGLWidget::mousePressEvent( event );
00072
00073 makeCurrent();
00074 if( event->buttons() & Qt::LeftButton ){
00075 onMouseEvent( MouseEvent( MOUSE_DOWN, Vec2(), 0 ) );
00076 }
00077 if( event->buttons() & Qt::MidButton ){
00078 onMouseEvent( MouseEvent( MOUSE_DOWN, Vec2(), 1 ) );
00079 }
00080 if( event->buttons() & Qt::RightButton ){
00081 onMouseEvent( MouseEvent( MOUSE_DOWN, Vec2(), 2 ) );
00082 }
00083
00084 }
00085
00086 void RendergroupQGLView::mouseReleaseEvent( QMouseEvent *event ){
00087 QGLWidget::mouseReleaseEvent( event );
00088
00089 makeCurrent();
00090 if( event->buttons() & Qt::LeftButton ){
00091 onMouseEvent( MouseEvent( MOUSE_UP, Vec2(), 0 ) );
00092 }
00093 if( event->buttons() & Qt::MidButton ){
00094 onMouseEvent( MouseEvent( MOUSE_UP, Vec2(), 1 ) );
00095 }
00096 if( event->buttons() & Qt::RightButton ){
00097 onMouseEvent( MouseEvent( MOUSE_UP, Vec2(), 2 ) );
00098 }
00099
00100 }
00101
00102 void RendergroupQGLView::mouseMoveEvent( QMouseEvent *event ){
00103 m_mouseBefore = m_mouseNow;
00104 m_mouseNow[0] = event->pos().x();
00105 m_mouseNow[1] = event->pos().y();
00106 makeCurrent();
00107 onMouseMove();
00108 }
00109
00110 void RendergroupQGLView::keyPressEvent( QKeyEvent * event ){
00111 QGLWidget::keyPressEvent( event );
00112 onKeyPress( event->key() );
00113 }
00114
00115 void RendergroupQGLView::keyReleaseEvent( QKeyEvent * event ){
00116 QGLWidget::keyReleaseEvent( event );
00117 onKeyRelease( event->key() );
00118 }
00119
00120 };
00121
00122 #endif // RT_QT