61 #include <ACG/GL/acg_glew.hh>
63 #include "QtGLGraphicsScene.hh"
64 #include "QtMultiViewLayout.hh"
65 #include <QApplication>
67 #include <QPaintEngine>
68 #include <QGraphicsSceneMouseEvent>
74 QtGLGraphicsScene::QtGLGraphicsScene(std::vector< glViewer *> *_views,
85 void QtGLGraphicsScene::drawBackground(QPainter *_painter,
const QRectF &_rect)
88 #if QT_VERSION >= 0x040600
89 if (_painter->paintEngine()->type() != QPaintEngine::OpenGL && _painter->paintEngine()->type() != QPaintEngine::OpenGL2 ) {
90 std::cerr <<
"QtGLGraphicsScene: drawBackground needs a QGLWidget to be set as viewport on the graphics view\n";
94 if (_painter->paintEngine()->type() != QPaintEngine::OpenGL ) {
95 std::cerr <<
"QtGLGraphicsScene: drawBackground needs a QGLWidget to be set as viewport on the graphics view\n";
101 _painter->setBackground(QApplication::palette().window());
102 _painter->eraseRect(_rect);
105 #if QT_VERSION >= 0x040600
107 _painter->beginNativePainting();
110 static bool initialized =
false;
116 for (
unsigned int i = 0; i < views_->size (); i++)
118 views_->at(i)->initializeGL ();
121 cursorPainter_->initializeGL ();
126 if (cursorPainter_ && cursorPainter_->enabled())
130 glGetDoublev(GL_PROJECTION_MATRIX, mat);
132 glMatrixMode(GL_MODELVIEW);
135 glPushAttrib (GL_ALL_ATTRIB_BITS);
136 for (
unsigned int i = 0; i < views_->size (); i++)
138 if (views_->at(i)->isVisible())
139 views_->at(i)->updateCursorPosition(cursorPainter_->cursorPosition ());
143 glMatrixMode(GL_PROJECTION);
145 glMatrixMode(GL_MODELVIEW);
150 glClear(GL_DEPTH_BUFFER_BIT);
153 for (
unsigned int i = 0; i < views_->size (); i++)
155 if (views_->at(i)->isVisible())
156 views_->at(i)->paintGL();
159 #if QT_VERSION >= 0x040600
161 _painter->endNativePainting();
165 if (layout_->mode() != QtMultiViewLayout::SingleView)
171 _painter->setPen(pen);
172 _painter->drawLine(v->scenePos().x(), v->scenePos().y(),
174 v->scenePos().y() + v->size().height() - 1);
175 _painter->drawLine(v->scenePos().x() + v->size().width(), v->scenePos().y(),
176 v->scenePos().x() + v->size().width(),
177 v->scenePos().y() + v->size().height() - 1);
178 _painter->drawLine(v->scenePos().x(), v->scenePos().y() - 1,
179 v->scenePos().x() + v->size().width(),
180 v->scenePos().y() - 1);
181 _painter->drawLine(v->scenePos().x(),
182 v->scenePos().y() + v->size().height() - 1,
183 v->scenePos().x() + v->size().width(),
184 v->scenePos().y() + v->size().height() - 1);
190 glViewer* QtGLGraphicsScene::findView (
const QPointF &_p,
bool _setActive)
192 for (
unsigned int i = 0; i < views_->size (); i++)
194 if (views_->at(i)->contains(views_->at(i)->mapFromScene (_p)))
201 return views_->at(i);
209 void QtGLGraphicsScene::mouseMoveEvent(QGraphicsSceneMouseEvent* _e)
211 QGraphicsScene::mouseMoveEvent(_e);
212 if (_e->isAccepted())
215 glViewer *v = findView (_e->scenePos());
224 void QtGLGraphicsScene::setCursorPainter(
CursorPainter * _cursorPainter)
226 cursorPainter_ = _cursorPainter;
231 bool QtGLGraphicsScene::event(QEvent *_event)
233 if (cursorPainter_ && _event->type() == QEvent::Enter)
235 cursorPainter_->setMouseIn (
true);
237 else if (cursorPainter_ && _event->type() == QEvent::Leave)
239 cursorPainter_->setMouseIn (
false);
242 else if (cursorPainter_ && _event->type() == QEvent::GraphicsSceneMouseMove)
244 QGraphicsSceneMouseEvent *e =
static_cast<QGraphicsSceneMouseEvent*
>(_event);
245 cursorPainter_->updateCursorPosition (e->scenePos ());
249 return QGraphicsScene::event (_event);
void setActiveExaminer(const unsigned int _id)
Set the active id of the examiner which got the last mouse events.
unsigned int activeExaminer()
Get the id of the examiner which got the last mouse events.
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *_event)
handle mouse move events