// Copyright (C) 2010, Guy Barrand. All rights reserved. // See the file tools.license for terms. #ifndef tools_Qt_glarea #define tools_Qt_glarea #include "../sg/GL_viewer" #include #include #include namespace tools { namespace Qt { class glarea : public QGLWidget { typedef QGLWidget parent; public: virtual void initialieGL() {} virtual void resizeGL(int a_w,int a_h){ //::printf("debug : resize : %d %d\n",a_w,a_h); #if QT_VERSION < 0x050000 #else m_width = a_w; m_height = a_h; #endif } //virtual void paintGL(); virtual void paintGL() { #if QT_VERSION < 0x050000 //::printf("debug : tools::Qt::glarea::paintGL %d %d\n",width(),height()); m_viewer.set_size(width(),height()); #else //::printf("debug : tools::Qt::glarea::paintGL %d %d\n",m_width,m_height); m_viewer.set_size(m_width,m_height); #endif m_viewer.render(); } virtual void keyPressEvent(QKeyEvent* a_event) { if(!m_interactor) return; tools::sg::key_down_event event(convert(a_event->key())); m_interactor->key_press(event); } virtual void keyReleaseEvent(QKeyEvent* a_event) { if(!m_interactor) return; tools::sg::key_up_event event(convert(a_event->key())); m_interactor->key_release(event); } virtual void mousePressEvent(QMouseEvent* a_event) { if(!m_interactor) return; tools::sg::mouse_down_event event(a_event->x(),a_event->y()); m_interactor->mouse_press(event); } virtual void mouseReleaseEvent(QMouseEvent* a_event) { if(!m_interactor) return; tools::sg::mouse_up_event event(a_event->x(),a_event->y()); m_interactor->mouse_release(event); } virtual void mouseMoveEvent(QMouseEvent* a_event) { if(!m_interactor) return; tools::sg::mouse_move_event event(a_event->x(),a_event->y(),0,0,false); m_interactor->mouse_move(event); } //virtual void mouseDoubleClickEvent(QMouseEvent* a_event) { // if(!m_interactor) return; // tools::sg::mouse_double_click_event event(a_event->x(),a_event->y()); // m_interactor->mouse_double_click(event); //} virtual void wheelEvent(QWheelEvent* a_event) { if(!m_interactor) return; tools::sg::wheel_rotate_event event(a_event->angleDelta().y()); m_interactor->wheel_rotate(event); } public: glarea(QWidget* a_parent,tools::sg::GL_viewer& a_viewer):parent(a_parent),m_viewer(a_viewer),m_interactor(0){} virtual ~glarea(){} public: void set_device_interactor(tools::sg::device_interactor* a_interactor) {m_interactor = a_interactor;} //we do not have ownership. protected: tools::key_code convert(/*Qt::Key*/int a_key) {return a_key;} protected: tools::sg::GL_viewer& m_viewer; #if QT_VERSION < 0x050000 #else protected: int m_width; int m_height; #endif tools::sg::device_interactor* m_interactor; }; }} #endif