From cbfe3981c0a9e822e144aad2c5505654fe6aacad Mon Sep 17 00:00:00 2001 From: Tats Date: Fri, 31 Oct 2014 17:04:28 -0400 Subject: [PATCH] Started using QGraphicsView in canvases instead of QGLWidget. --- DestinationGLCanvas.cpp | 92 +++--- DestinationGLCanvas.h | 4 +- MapperGLCanvas.cpp | 600 +++++++++++++++++++++------------------- MapperGLCanvas.h | 62 +++-- SourceGLCanvas.cpp | 48 ++-- SourceGLCanvas.h | 4 +- 6 files changed, 420 insertions(+), 390 deletions(-) diff --git a/DestinationGLCanvas.cpp b/DestinationGLCanvas.cpp index 43b1e96..a9894e5 100644 --- a/DestinationGLCanvas.cpp +++ b/DestinationGLCanvas.cpp @@ -35,50 +35,50 @@ MShape* DestinationGLCanvas::getShapeFromMappingId(uid mappingId) return getMainWindow()->getMappingManager().getMappingById(mappingId)->getShape().get(); } -void DestinationGLCanvas::doDraw(QPainter* painter) -{ - glPushMatrix(); - - // Draw the mappings. - QVector mappings = getMainWindow()->getMappingManager().getVisibleMappings(); - for (QVector::const_iterator it = mappings.begin(); it != mappings.end(); ++it) - { - painter->save(); - getMainWindow()->getMapperByMappingId((*it)->getId())->draw(painter); - painter->restore(); - } - - // Draw the controls of current mapping. - if (displayControls() && - getMainWindow()->hasCurrentMapping() && - getCurrentShape() != NULL) - { - painter->save(); - const Mapper::ptr& mapper = getMainWindow()->getMapperByMappingId(getMainWindow()->getCurrentMappingId()); - if (hasActiveVertex()) { - QList selectedVertices; - selectedVertices.append(getActiveVertexIndex()); - mapper->drawControls(painter, &selectedVertices); - } - else - mapper->drawControls(painter); - painter->restore(); - } - - glPopMatrix(); - - // Display crosshair cursor. - if (_displayCrosshair) - { - const QPoint& cursorPosition = this->mapFromGlobal(QCursor::pos()); - const QRect& geo = geometry(); - if (geo.contains(cursorPosition)) - { - painter->setPen(MM::CONTROL_COLOR); - painter->drawLine(cursorPosition.x(), 0, cursorPosition.x(), geo.height()); - painter->drawLine(0, cursorPosition.y(), geo.width(), cursorPosition.y()); - } - } - -} +//void DestinationGLCanvas::doDraw(QPainter* painter) +//{ +// glPushMatrix(); +// +// // Draw the mappings. +// QVector mappings = getMainWindow()->getMappingManager().getVisibleMappings(); +// for (QVector::const_iterator it = mappings.begin(); it != mappings.end(); ++it) +// { +// painter->save(); +// getMainWindow()->getMapperByMappingId((*it)->getId())->draw(painter); +// painter->restore(); +// } +// +// // Draw the controls of current mapping. +// if (displayControls() && +// getMainWindow()->hasCurrentMapping() && +// getCurrentShape() != NULL) +// { +// painter->save(); +// const Mapper::ptr& mapper = getMainWindow()->getMapperByMappingId(getMainWindow()->getCurrentMappingId()); +// if (hasActiveVertex()) { +// QList selectedVertices; +// selectedVertices.append(getActiveVertexIndex()); +// mapper->drawControls(painter, &selectedVertices); +// } +// else +// mapper->drawControls(painter); +// painter->restore(); +// } +// +// glPopMatrix(); +// +// // Display crosshair cursor. +// if (_displayCrosshair) +// { +// const QPoint& cursorPosition = this->mapFromGlobal(QCursor::pos()); +// const QRect& geo = geometry(); +// if (geo.contains(cursorPosition)) +// { +// painter->setPen(MM::CONTROL_COLOR); +// painter->drawLine(cursorPosition.x(), 0, cursorPosition.x(), geo.height()); +// painter->drawLine(0, cursorPosition.y(), geo.width(), cursorPosition.y()); +// } +// } +// +//} diff --git a/DestinationGLCanvas.h b/DestinationGLCanvas.h index 4d99c09..8057480 100644 --- a/DestinationGLCanvas.h +++ b/DestinationGLCanvas.h @@ -32,7 +32,7 @@ class DestinationGLCanvas: public MapperGLCanvas public: DestinationGLCanvas(MainWindow* mainWindow, QWidget* parent = 0, const QGLWidget * shareWidget = 0); -// virtual ~DestinationGLCanvas(); + virtual ~DestinationGLCanvas() {} virtual MShape* getShapeFromMappingId(uid mappingId); @@ -41,7 +41,7 @@ public: } private: - virtual void doDraw(QPainter* painter); +// virtual void doDraw(QPainter* painter); bool _displayCrosshair; }; diff --git a/MapperGLCanvas.cpp b/MapperGLCanvas.cpp index b7ee0e3..dbef742 100644 --- a/MapperGLCanvas.cpp +++ b/MapperGLCanvas.cpp @@ -23,7 +23,7 @@ #include "MainWindow.h" MapperGLCanvas::MapperGLCanvas(MainWindow* mainWindow, QWidget* parent, const QGLWidget * shareWidget) - : QGLWidget(QGLFormat(QGL::SampleBuffers), parent, shareWidget), + : QGraphicsView(parent), _mainWindow(mainWindow), _mousePressedOnVertex(false), _activeVertex(NO_VERTEX), @@ -32,305 +32,327 @@ MapperGLCanvas::MapperGLCanvas(MainWindow* mainWindow, QWidget* parent, const QG _displayControls(true), _stickyVertices(true) { + setDragMode(QGraphicsView::RubberBandDrag); + setRenderHint(QPainter::Antialiasing, true); + setRenderHint(QPainter::TextAntialiasing, true); + + //setFrameStyle(Sunken | StyledPanel); + // TODO: check this + // setOptimizationFlags(QGraphicsView::DontSavePainterState); + //setViewportUpdateMode(QGraphicsView::FullViewportUpdate); + setTransformationAnchor(QGraphicsView::AnchorUnderMouse); + + resetTransform(); + // setAcceptDrops(true); + + // Render with OpenGL. + setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers), this, shareWidget)); + + // TODO: do we need to delete scene (or call new QGraphicsScene(this)?) +// _scene = new QGraphicsScene; + setScene(new QGraphicsScene); + + // Black background. + scene()->setBackgroundBrush(Qt::black); } -void MapperGLCanvas::initializeGL() -{ - //qDebug() << "initializeGL" << endl; - // Clear to black. - qglClearColor(Qt::black); - // Antialiasing options. - //QGLWidget::setFormat(QGLFormat(QGL::SampleBuffers)); -} +//void MapperGLCanvas::initializeGL() +//{ +// //qDebug() << "initializeGL" << endl; +// // Clear to black. +// qglClearColor(Qt::black); +// // Antialiasing options. +// //QGLWidget::setFormat(QGLFormat(QGL::SampleBuffers)); +//} +// +//void MapperGLCanvas::resizeGL(int width, int height) +//{ +// glViewport(0, 0, width, height); +// glMatrixMode (GL_PROJECTION); +// glLoadIdentity (); +// glOrtho ( +// 0.0f, (GLfloat) width, // left, right +// (GLfloat) height, 0.0f, // bottom, top +// -1.0, 1.0f); +// glMatrixMode (GL_MODELVIEW); +// //qDebug() << "done resizing" << endl; +//} +// +//void MapperGLCanvas::paintGL() +//{ +//} +// +//void MapperGLCanvas::draw(QPainter* painter) +//{ +// //qDebug() << "draw mappergl" << endl; +// enterDraw(painter); +// doDraw(painter); +// exitDraw(painter); +// // qDebug() << "done." << endl; +//} -void MapperGLCanvas::resizeGL(int width, int height) -{ - glViewport(0, 0, width, height); - glMatrixMode (GL_PROJECTION); - glLoadIdentity (); - glOrtho ( - 0.0f, (GLfloat) width, // left, right - (GLfloat) height, 0.0f, // bottom, top - -1.0, 1.0f); - glMatrixMode (GL_MODELVIEW); - //qDebug() << "done resizing" << endl; -} +//void MapperGLCanvas::enterDraw(QPainter* painter) +//{ +// painter->beginNativePainting(); +// +// // Clear to black. +// glClearColor(0.0, 0.0, 0.0, 1.0); +// +// // Clear buffer. +// glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); +// +// painter->endNativePainting(); +// +// // Antialiasing. +// painter->setRenderHint(QPainter::Antialiasing); +// //painter->setBackground(Qt::black); +// painter->setPen(Qt::NoPen); +// painter->setBrush(Qt::NoBrush); +//} +// +//void MapperGLCanvas::exitDraw(QPainter* painter) +//{ +// Q_UNUSED(painter); +//} -void MapperGLCanvas::paintGL() -{ -} - -void MapperGLCanvas::draw(QPainter* painter) -{ - //qDebug() << "draw mappergl" << endl; - enterDraw(painter); - doDraw(painter); - exitDraw(painter); - // qDebug() << "done." << endl; -} - -void MapperGLCanvas::enterDraw(QPainter* painter) -{ - painter->beginNativePainting(); - - // Clear to black. - glClearColor(0.0, 0.0, 0.0, 1.0); - - // Clear buffer. - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - painter->endNativePainting(); - - // Antialiasing. - painter->setRenderHint(QPainter::Antialiasing); - //painter->setBackground(Qt::black); - painter->setPen(Qt::NoPen); - painter->setBrush(Qt::NoBrush); -} - -void MapperGLCanvas::exitDraw(QPainter* painter) -{ - Q_UNUSED(painter); -} - -Shape* MapperGLCanvas::getCurrentShape() -{ - return getShapeFromMappingId(getMainWindow()->getCurrentMappingId()); -} - -void MapperGLCanvas::mousePressEvent(QMouseEvent* event) -{ - int i; - int dist; - int minDistance; - - bool mousePressedOnSomething = false; - - _mousePressedPosition = event->pos(); - - // Note: we compare with the square value for fastest computation of the distance - minDistance = MM::VERTEX_SELECT_RADIUS * MM::VERTEX_SELECT_RADIUS; - - // Drag the closest vertex - if (event->buttons() & Qt::LeftButton) - { - Shape* shape = getCurrentShape(); - if (shape) - { - // find the ID of the nearest vertex: (from the selected shape) - for (i = 0; i < shape->nVertices(); i++) - { - dist = distSq(_mousePressedPosition, shape->getVertex(i)); // squared distance - if (dist < minDistance) - { - _activeVertex = i; - minDistance = dist; - _mousePressedOnVertex = true; - mousePressedOnSomething = true; - } - } - } - } - - if (mousePressedOnSomething) - return; - - // Select a shape with a click. - if (event->buttons() & Qt::LeftButton) - { - Shape* orig = getCurrentShape(); - MappingManager manager = getMainWindow()->getMappingManager(); - QVector mappings = manager.getVisibleMappings(); - for (QVector::const_iterator it = mappings.end() - 1; it >= mappings.begin(); --it) - { - Shape *shape = getShapeFromMappingId((*it)->getId()); - // Mouse pressed on a shape. - if (shape && shape->includesPoint(_mousePressedPosition)) - { - mousePressedOnSomething = true; - // Deselect vertices. - deselectVertices(); - // Change mapping. - if (shape != orig) - { - getMainWindow()->setCurrentMapping((*it)->getId()); - } - break; - } - } - - // Grab the shape. - if (orig && orig->includesPoint(_mousePressedPosition)) - { - _shapeGrabbed = true; - _shapeFirstGrab = true; - } - } - - if (mousePressedOnSomething) - return; - - // Deactivate. - deselectAll(); -} - -void MapperGLCanvas::mouseReleaseEvent(QMouseEvent* event) -{ - Q_UNUSED(event); -// // Click on vertex ==> select the vertex. -// if ((event->buttons() & Qt::LeftButton) && _mousePressedOnVertex) +//Shape* MapperGLCanvas::getCurrentShape() +//{ +// return getShapeFromMappingId(getMainWindow()->getCurrentMappingId()); +//} +// +//void MapperGLCanvas::mousePressEvent(QMouseEvent* event) +//{ +// int i; +// int dist; +// int minDistance; +// +// bool mousePressedOnSomething = false; +// +// _mousePressedPosition = event->pos(); +// +// // Note: we compare with the square value for fastest computation of the distance +// minDistance = MM::VERTEX_SELECT_RADIUS * MM::VERTEX_SELECT_RADIUS; +// +// // Drag the closest vertex +// if (event->buttons() & Qt::LeftButton) // { -// } - _mousePressedOnVertex = false; - _shapeGrabbed = false; -} - -void MapperGLCanvas::mouseMoveEvent(QMouseEvent* event) -{ - if (_mousePressedOnVertex) - { - // std::cout << "Move event " << std::endl; - Shape* shape = getCurrentShape(); - if (shape && _activeVertex != NO_VERTEX) - { - QPointF p = shape->getVertex(_activeVertex); - // Set point to mouse coordinates. - p.setX(event->x()); - p.setY(event->y()); - - // Stick to vertices. - if (stickyVertices()) - glueVertex(shape, &p); - shape->setVertex(_activeVertex, p); - - update(); - emit shapeChanged(getCurrentShape()); - } - } - else if (_shapeGrabbed) - { - // std::cout << "Move event " << std::endl; - Shape* shape = getCurrentShape(); - static QPointF prevMousePosition(0,0); // point that keeps track of last position of the mouse - if (shape) - { - if (!_shapeFirstGrab) - { - shape->translate(event->x() - prevMousePosition.x(), event->y() - prevMousePosition.y()); - update(); - emit shapeChanged(getCurrentShape()); - } - else - _shapeFirstGrab = false; - } - // Update previous mouse position. - prevMousePosition.setX( event->x() ); - prevMousePosition.setY( event->y() ); - } -} - -void MapperGLCanvas::keyPressEvent(QKeyEvent* event) -{ - // Checks if the key has been handled by this function or needs to be deferred to superclass. - bool handledKey = false; - - // Active vertex selected. - if (hasActiveVertex()) - { - Shape* shape = getCurrentShape(); - QPointF p = shape->getVertex(_activeVertex); - handledKey = true; - switch (event->key()) { - // TODO: key tab should switch to next vertex: not working because somehow caught at a higher level - // to switch between frames of the layout -// case Qt::Key_Tab: -// if (shape) -// _activeVertex = (_activeVertex + 1) % shape->nVertices(); -// p = shape->getVertex(_activeVertex); // reset to new vertex -// qDebug() << "New active vertex : " << _activeVertex << endl; -// break; - // Handle pixel-wise adjustments of vertex. - case Qt::Key_Up: - p.ry()--; - break; - case Qt::Key_Down: - p.ry()++; - break; - case Qt::Key_Right: - p.rx()++; - break; - case Qt::Key_Left: - p.rx()--; - break; - default: - handledKey = false; - break; - } - // TODO: this will always be called even if no arrow key has been pressed (small performance issue). - shape->setVertex(_activeVertex, p); - update(); - emit shapeChanged(getCurrentShape()); - } - - // Defer unhandled keys to parent. - if (!handledKey) - { - QWidget::keyPressEvent(event); - } - -// std::cout << "Key pressed" << std::endl; -// int xMove = 0; -// int yMove = 0; -// switch (event->key()) { -// case Qt::Key_Tab: -// if (event->modifiers() & Qt::ControlModifier) -// switchImage( (Common::getCurrentSourceId() + 1) % Common::nImages()); -// else +// Shape* shape = getCurrentShape(); +// if (shape) // { -// Quad& quad = getQuad(); -// _active_vertex = (_active_vertex + 1 ) % 4; +// // find the ID of the nearest vertex: (from the selected shape) +// for (i = 0; i < shape->nVertices(); i++) +// { +// dist = distSq(_mousePressedPosition, shape->getVertex(i)); // squared distance +// if (dist < minDistance) +// { +// _activeVertex = i; +// minDistance = dist; +// _mousePressedOnVertex = true; +// mousePressedOnSomething = true; +// } +// } // } -// break; -// case Qt::Key_Up: -// yMove = -1; -// break; -// case Qt::Key_Down: -// yMove = +1; -// break; -// case Qt::Key_Left: -// xMove = -1; -// break; -// case Qt::Key_Right: -// xMove = +1; -// break; -// default: -// std::cerr << "Unhandled key" << std::endl; -// QWidget::keyPressEvent(event); -// break; // } // -// Quad& quad = getQuad(); -// Point *p = quad.getVertex(_active_vertex); -// p->x += xMove; -// p->y += yMove; -// quad.setVertex(_active_vertex, p); +// if (mousePressedOnSomething) +// return; // -// update(); +// // Select a shape with a click. +// if (event->buttons() & Qt::LeftButton) +// { +// Shape* orig = getCurrentShape(); +// MappingManager manager = getMainWindow()->getMappingManager(); +// QVector mappings = manager.getVisibleMappings(); +// for (QVector::const_iterator it = mappings.end() - 1; it >= mappings.begin(); --it) +// { +// Shape *shape = getShapeFromMappingId((*it)->getId()); +// // Mouse pressed on a shape. +// if (shape && shape->includesPoint(_mousePressedPosition)) +// { +// mousePressedOnSomething = true; +// // Deselect vertices. +// deselectVertices(); +// // Change mapping. +// if (shape != orig) +// { +// getMainWindow()->setCurrentMapping((*it)->getId()); +// } +// break; +// } +// } // -// emit quadChanged(); -} - -void MapperGLCanvas::paintEvent(QPaintEvent* /* event */) -{ - makeCurrent(); - - QPainter painter(this); - painter.setRenderHint(QPainter::Antialiasing); - - draw(&painter); - - painter.end(); -} +// // Grab the shape. +// if (orig && orig->includesPoint(_mousePressedPosition)) +// { +// _shapeGrabbed = true; +// _shapeFirstGrab = true; +// } +// } +// +// if (mousePressedOnSomething) +// return; +// +// // Deactivate. +// deselectAll(); +//} +// +//void MapperGLCanvas::mouseReleaseEvent(QMouseEvent* event) +//{ +// Q_UNUSED(event); +//// // Click on vertex ==> select the vertex. +//// if ((event->buttons() & Qt::LeftButton) && _mousePressedOnVertex) +//// { +//// } +// _mousePressedOnVertex = false; +// _shapeGrabbed = false; +//} +// +//void MapperGLCanvas::mouseMoveEvent(QMouseEvent* event) +//{ +// if (_mousePressedOnVertex) +// { +// // std::cout << "Move event " << std::endl; +// Shape* shape = getCurrentShape(); +// if (shape && _activeVertex != NO_VERTEX) +// { +// QPointF p = shape->getVertex(_activeVertex); +// // Set point to mouse coordinates. +// p.setX(event->x()); +// p.setY(event->y()); +// +// // Stick to vertices. +// if (stickyVertices()) +// glueVertex(shape, &p); +// shape->setVertex(_activeVertex, p); +// +// update(); +// emit shapeChanged(getCurrentShape()); +// } +// } +// else if (_shapeGrabbed) +// { +// // std::cout << "Move event " << std::endl; +// Shape* shape = getCurrentShape(); +// static QPointF prevMousePosition(0,0); // point that keeps track of last position of the mouse +// if (shape) +// { +// if (!_shapeFirstGrab) +// { +// shape->translate(event->x() - prevMousePosition.x(), event->y() - prevMousePosition.y()); +// update(); +// emit shapeChanged(getCurrentShape()); +// } +// else +// _shapeFirstGrab = false; +// } +// // Update previous mouse position. +// prevMousePosition.setX( event->x() ); +// prevMousePosition.setY( event->y() ); +// } +//} +// +//void MapperGLCanvas::keyPressEvent(QKeyEvent* event) +//{ +// // Checks if the key has been handled by this function or needs to be deferred to superclass. +// bool handledKey = false; +// +// // Active vertex selected. +// if (hasActiveVertex()) +// { +// Shape* shape = getCurrentShape(); +// QPointF p = shape->getVertex(_activeVertex); +// handledKey = true; +// switch (event->key()) { +// // TODO: key tab should switch to next vertex: not working because somehow caught at a higher level +// // to switch between frames of the layout +//// case Qt::Key_Tab: +//// if (shape) +//// _activeVertex = (_activeVertex + 1) % shape->nVertices(); +//// p = shape->getVertex(_activeVertex); // reset to new vertex +//// qDebug() << "New active vertex : " << _activeVertex << endl; +//// break; +// // Handle pixel-wise adjustments of vertex. +// case Qt::Key_Up: +// p.ry()--; +// break; +// case Qt::Key_Down: +// p.ry()++; +// break; +// case Qt::Key_Right: +// p.rx()++; +// break; +// case Qt::Key_Left: +// p.rx()--; +// break; +// default: +// handledKey = false; +// break; +// } +// // TODO: this will always be called even if no arrow key has been pressed (small performance issue). +// shape->setVertex(_activeVertex, p); +// update(); +// emit shapeChanged(getCurrentShape()); +// } +// +// // Defer unhandled keys to parent. +// if (!handledKey) +// { +// QWidget::keyPressEvent(event); +// } +// +//// std::cout << "Key pressed" << std::endl; +//// int xMove = 0; +//// int yMove = 0; +//// switch (event->key()) { +//// case Qt::Key_Tab: +//// if (event->modifiers() & Qt::ControlModifier) +//// switchImage( (Common::getCurrentSourceId() + 1) % Common::nImages()); +//// else +//// { +//// Quad& quad = getQuad(); +//// _active_vertex = (_active_vertex + 1 ) % 4; +//// } +//// break; +//// case Qt::Key_Up: +//// yMove = -1; +//// break; +//// case Qt::Key_Down: +//// yMove = +1; +//// break; +//// case Qt::Key_Left: +//// xMove = -1; +//// break; +//// case Qt::Key_Right: +//// xMove = +1; +//// break; +//// default: +//// std::cerr << "Unhandled key" << std::endl; +//// QWidget::keyPressEvent(event); +//// break; +//// } +//// +//// Quad& quad = getQuad(); +//// Point *p = quad.getVertex(_active_vertex); +//// p->x += xMove; +//// p->y += yMove; +//// quad.setVertex(_active_vertex, p); +//// +//// update(); +//// +//// emit quadChanged(); +//} +// +//void MapperGLCanvas::paintEvent(QPaintEvent* /* event */) +//{ +// makeCurrent(); +// +// QPainter painter(this); +// painter.setRenderHint(QPainter::Antialiasing); +// +// draw(&painter); +// +// painter.end(); +//} void MapperGLCanvas::updateCanvas() { diff --git a/MapperGLCanvas.h b/MapperGLCanvas.h index 93a3191..f8920ef 100644 --- a/MapperGLCanvas.h +++ b/MapperGLCanvas.h @@ -21,6 +21,8 @@ #define MAPPERGLCANVAS_H_ #include +#include +#include #include #include @@ -35,7 +37,7 @@ class MainWindow; * Mother class for OpenGL canvases that allow the display and controls of shapes and vertices. * Provides common functionality to both main sublasses: SourceGLCanvas and DestinationGLCanvas. */ -class MapperGLCanvas: public QGLWidget +class MapperGLCanvas: public QGraphicsView { Q_OBJECT @@ -64,6 +66,8 @@ public: /// Returns pointer to main window. MainWindow* getMainWindow() const { return _mainWindow; } +// QGLWidget* getViewport() const { return _viewport; } + /// Returns true iff we should display the controls. bool displayControls() const { return _displayControls; } @@ -77,40 +81,44 @@ public: int getActiveVertexIndex() const { return _activeVertex; } protected: - void initializeGL(); - void resizeGL(int width, int height); - void paintGL(); +// void initializeGL(); +// void resizeGL(int width, int height); +// void paintGL(); - void keyPressEvent(QKeyEvent* event); - void mousePressEvent(QMouseEvent* event); - void mouseMoveEvent(QMouseEvent* event); - void mouseReleaseEvent(QMouseEvent* event); - void paintEvent(QPaintEvent* event); +// void keyPressEvent(QKeyEvent* event); +// void mousePressEvent(QMouseEvent* event); +// void mouseMoveEvent(QMouseEvent* event); +// void mouseReleaseEvent(QMouseEvent* event); +// void paintEvent(QPaintEvent* event); protected: - /** - * Draws the shapes and controls over the canvas. This method calls: - * - * enterDraw(painter); - * doDraw(painter); - * exitDraw(painter); - * - */ - void draw(QPainter* painter); - - /// Performs initalizations before drawing. - void enterDraw(QPainter* painter); - - /// Performs the drawing (implemented by subclasses). - virtual void doDraw(QPainter* painter) = 0; - - /// Performs last drawing actions before exiting draw(QPainter*). - void exitDraw(QPainter* painter); +// /** +// * Draws the shapes and controls over the canvas. This method calls: +// * +// * enterDraw(painter); +// * doDraw(painter); +// * exitDraw(painter); +// * +// */ +// void draw(QPainter* painter); +// +// /// Performs initalizations before drawing. +// void enterDraw(QPainter* painter); +// +// /// Performs the drawing (implemented by subclasses). +// virtual void doDraw(QPainter* painter) = 0; +// +// /// Performs last drawing actions before exiting draw(QPainter*). +// void exitDraw(QPainter* painter); private: // Pointer to main window. MainWindow* _mainWindow; +// QGraphicsScene* _scene; + +// QGLWidget* _viewport; + // Last point pressed. QPoint _mousePressedPosition; diff --git a/SourceGLCanvas.cpp b/SourceGLCanvas.cpp index a567c0c..66ddbdc 100644 --- a/SourceGLCanvas.cpp +++ b/SourceGLCanvas.cpp @@ -40,29 +40,29 @@ MShape* SourceGLCanvas::getShapeFromMappingId(uid mappingId) return mapping->getInputShape().get(); } } +// - -void SourceGLCanvas::doDraw(QPainter* painter) -{ - if (getMainWindow()->hasCurrentMapping()) - { - uint mappingId = getMainWindow()->getCurrentMappingId(); - const Mapper::ptr& mapper = getMainWindow()->getMapperByMappingId(mappingId); - painter->save(); - mapper->drawInput(painter); - painter->restore(); - if (displayControls()) - { - painter->save(); - if (hasActiveVertex()) { - QList selectedVertices; - selectedVertices.append(getActiveVertexIndex()); - mapper->drawInputControls(painter, &selectedVertices); - } - else - mapper->drawInputControls(painter); - painter->restore(); - } - } -} +//void SourceGLCanvas::doDraw(QPainter* painter) +//{ +// if (getMainWindow()->hasCurrentMapping()) +// { +// uint mappingId = getMainWindow()->getCurrentMappingId(); +// const Mapper::ptr& mapper = getMainWindow()->getMapperByMappingId(mappingId); +// painter->save(); +// mapper->drawInput(painter); +// painter->restore(); +// if (displayControls()) +// { +// painter->save(); +// if (hasActiveVertex()) { +// QList selectedVertices; +// selectedVertices.append(getActiveVertexIndex()); +// mapper->drawInputControls(painter, &selectedVertices); +// } +// else +// mapper->drawInputControls(painter); +// painter->restore(); +// } +// } +//} diff --git a/SourceGLCanvas.h b/SourceGLCanvas.h index 88b08da..ec92045 100644 --- a/SourceGLCanvas.h +++ b/SourceGLCanvas.h @@ -33,12 +33,12 @@ class SourceGLCanvas: public MapperGLCanvas public: SourceGLCanvas(MainWindow* mainWindow, QWidget* parent = 0); -// virtual ~SourceGLCanvas() {} + virtual ~SourceGLCanvas() {} virtual MShape* getShapeFromMappingId(uid mappingId); private: - virtual void doDraw(QPainter* painter); +// virtual void doDraw(QPainter* painter); };