diff --git a/MapperGLCanvas.cpp b/MapperGLCanvas.cpp index 3c0c538..9b4b32f 100644 --- a/MapperGLCanvas.cpp +++ b/MapperGLCanvas.cpp @@ -20,7 +20,7 @@ #include "MapperGLCanvas.h" MapperGLCanvas::MapperGLCanvas(QWidget* parent, const QGLWidget * shareWidget) - : QGLWidget(parent, shareWidget) + : QGLWidget(parent, shareWidget), _mousepressed(false) { } @@ -93,10 +93,56 @@ void MapperGLCanvas::enterDraw() //// glLoadIdentity (); // FIXME? is this needed here? } +void MapperGLCanvas::mousePressEvent(QMouseEvent* event) +{ + int i, dist, maxdist, mindist; + int xmouse = event->x(); + int ymouse = event->y(); + maxdist = mindist = 50; + if (event->buttons() & Qt::LeftButton) + { + // std::cout << "Left Mouse key pressed" << std::endl; + for (i = 0; i < 4; i++) + { + Quad& quad = getQuad(); + Point p = quad.getVertex(i); + dist = abs(xmouse - p.x) + abs(ymouse - p.y); + if (dist < maxdist && dist < mindist) + { + quad.setActiveVertex(i); + mindist = dist; + } + } + _mousepressed = true; + } +} + +void MapperGLCanvas::mouseReleaseEvent(QMouseEvent* event) +{ + // std::cout << "Mouse Release event " << std::endl; + _mousepressed = false; +} + +void MapperGLCanvas::mouseMoveEvent(QMouseEvent* event) +{ + + if (_mousepressed) + { + // std::cout << "Move event " << std::endl; + Quad& quad = getQuad(); + Point p = quad.getVertex(quad.getActiveVertex()); + p.x = event->x(); + p.y = event->y(); + + quad.setVertex(quad.getActiveVertex(), p); + update(); + emit quadChanged(); + } +} + void MapperGLCanvas::keyPressEvent(QKeyEvent* event) { std::cout << "Key pressed" << std::endl; - static int current = 0; int xMove = 0; int yMove = 0; switch (event->key()) { @@ -107,7 +153,10 @@ void MapperGLCanvas::keyPressEvent(QKeyEvent* event) emit quadSwitched(); } else - current = (current + 1) % 4; + { + Quad& quad = getQuad(); + quad.setActiveVertex((quad.getActiveVertex() + 1) % 4); + } break; case Qt::Key_Up: yMove = -1; @@ -128,10 +177,10 @@ void MapperGLCanvas::keyPressEvent(QKeyEvent* event) } Quad& quad = getQuad(); - Point p = quad.getVertex(current); + Point p = quad.getVertex(quad.getActiveVertex()); p.x += xMove; p.y += yMove; - quad.setVertex(current, p); + quad.setVertex(quad.getActiveVertex(), p); update(); diff --git a/MapperGLCanvas.h b/MapperGLCanvas.h index a5d3db2..6e33dbf 100644 --- a/MapperGLCanvas.h +++ b/MapperGLCanvas.h @@ -48,6 +48,9 @@ protected: void paintGL(); void keyPressEvent(QKeyEvent* event); + void mousePressEvent(QMouseEvent* event); + void mouseMoveEvent(QMouseEvent* event); + void mouseReleaseEvent(QMouseEvent* event); void paintEvent(QPaintEvent* event); private: @@ -55,6 +58,7 @@ private: void enterDraw(); virtual void doDraw() = 0; void exitDraw(); + bool _mousepressed; signals: void quadChanged(); diff --git a/Shape.h b/Shape.h index 5e87a3d..f4d4a35 100644 --- a/Shape.h +++ b/Shape.h @@ -41,9 +41,11 @@ class Shape public: typedef std::tr1::shared_ptr ptr; std::vector vertices; + int active_vertex; Shape() {} Shape(std::vector vertices_) : - vertices(vertices_) + vertices(vertices_), + active_vertex(0) {} virtual ~Shape() {} @@ -62,6 +64,8 @@ public: vertices[i].x = x; vertices[i].y = y; } + void setActiveVertex(int x) {active_vertex = x;} + int getActiveVertex() {return active_vertex;} }; /**