# HG changeset patch # User unc0rr # Date 1290954231 -10800 # Node ID 969e411c72aa0cc56f2705ce38bcab79701a97b7 # Parent 2314bb0c433dd25c620b8b8c19fbfecae0bc2d5d Improve map editor a bit diff -r 2314bb0c433d -r 969e411c72aa tools/drawMapTest/drawmapscene.cpp --- a/tools/drawMapTest/drawmapscene.cpp Sat Nov 27 23:57:31 2010 +0300 +++ b/tools/drawMapTest/drawmapscene.cpp Sun Nov 28 17:23:51 2010 +0300 @@ -1,21 +1,25 @@ #include #include +#include #include "drawmapscene.h" DrawMapScene::DrawMapScene(QObject *parent) : QGraphicsScene(parent), - m_pen(Qt::black), - m_brush(Qt::black) + m_pen(Qt::yellow), + m_brush(Qt::yellow) { setSceneRect(0, 0, 4096, 2048); QLinearGradient gradient(0, 0, 0, 2048); - gradient.setColorAt(0, QColor(160, 160, 255)); - gradient.setColorAt(1, QColor(255, 255, 160)); + gradient.setColorAt(0, QColor(60, 60, 155)); + gradient.setColorAt(1, QColor(155, 155, 60)); setBackgroundBrush(QBrush(gradient)); - m_halfWidth = 67; + m_pen.setWidth(67); + m_pen.setJoinStyle(Qt::RoundJoin); + m_pen.setCapStyle(Qt::RoundCap); + m_currPath = 0; } void DrawMapScene::mouseMoveEvent(QGraphicsSceneMouseEvent * mouseEvent) @@ -23,30 +27,40 @@ qDebug() << "move" << mouseEvent->scenePos(); - if(mouseEvent->buttons() && Qt::LeftButton) - drawFigure(mouseEvent->scenePos()); + if(m_currPath && (mouseEvent->buttons() & Qt::LeftButton)) + { + QPainterPath path = m_currPath->path(); + path.lineTo(mouseEvent->scenePos()); + m_currPath->setPath(path); + //drawFigure(mouseEvent->scenePos()); + } } void DrawMapScene::mousePressEvent(QGraphicsSceneMouseEvent * mouseEvent) { qDebug() << "press" << mouseEvent->scenePos(); - drawFigure(mouseEvent->scenePos()); + m_currPath = addPath(QPainterPath(), m_pen); + + QPainterPath path = m_currPath->path(); + QPointF p = mouseEvent->scenePos(); + p += QPointF(0.01, 0.01); + path.moveTo(p); + path.lineTo(mouseEvent->scenePos()); + m_currPath->setPath(path); + + //drawFigure(mouseEvent->scenePos()); } void DrawMapScene::mouseReleaseEvent(QGraphicsSceneMouseEvent * mouseEvent) { qDebug() << "release" << mouseEvent->scenePos(); + + m_currPath = 0; } -void DrawMapScene::drawFigure(const QPointF & point) +void DrawMapScene::undo() { - addEllipse( - point.x() - m_halfWidth, - point.y() - m_halfWidth, - m_halfWidth * 2, - m_halfWidth * 2, - m_pen, - m_brush - ); + if(items().size()) + removeItem(items().first()); } diff -r 2314bb0c433d -r 969e411c72aa tools/drawMapTest/drawmapscene.h --- a/tools/drawMapTest/drawmapscene.h Sat Nov 27 23:57:31 2010 +0300 +++ b/tools/drawMapTest/drawmapscene.h Sun Nov 28 17:23:51 2010 +0300 @@ -3,6 +3,8 @@ #include +class QGraphicsPathItem; + class DrawMapScene : public QGraphicsScene { Q_OBJECT @@ -12,17 +14,16 @@ signals: public slots: + void undo(); private: - qreal m_halfWidth; QPen m_pen; QBrush m_brush; + QGraphicsPathItem * m_currPath; virtual void mouseMoveEvent(QGraphicsSceneMouseEvent * mouseEvent); virtual void mousePressEvent(QGraphicsSceneMouseEvent * mouseEvent); virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent * mouseEvent); - - void drawFigure(const QPointF & point); }; #endif // DRAWMAPSCENE_H diff -r 2314bb0c433d -r 969e411c72aa tools/drawMapTest/mainwindow.cpp --- a/tools/drawMapTest/mainwindow.cpp Sat Nov 27 23:57:31 2010 +0300 +++ b/tools/drawMapTest/mainwindow.cpp Sun Nov 28 17:23:51 2010 +0300 @@ -10,6 +10,8 @@ DrawMapScene * scene = new DrawMapScene(this); ui->graphicsView->setScene(scene); + + connect(ui->pbUndo, SIGNAL(clicked()), scene, SLOT(undo())); } MainWindow::~MainWindow() diff -r 2314bb0c433d -r 969e411c72aa tools/drawMapTest/mainwindow.ui --- a/tools/drawMapTest/mainwindow.ui Sat Nov 27 23:57:31 2010 +0300 +++ b/tools/drawMapTest/mainwindow.ui Sun Nov 28 17:23:51 2010 +0300 @@ -14,11 +14,11 @@ MainWindow - - + + - + @@ -28,6 +28,30 @@ + + + + + + Undo + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + +