From 83ec1b4f1722ce891f3d5871e27ae66a7228abe4 Mon Sep 17 00:00:00 2001 From: Lukáš Lalinský Date: Mon, 8 Dec 2008 22:27:59 +0100 Subject: Show grid --- src/diagramdocument.cpp | 78 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 77 insertions(+), 1 deletion(-) (limited to 'src/diagramdocument.cpp') diff --git a/src/diagramdocument.cpp b/src/diagramdocument.cpp index 71b38db..7ed2418 100644 --- a/src/diagramdocument.cpp +++ b/src/diagramdocument.cpp @@ -14,6 +14,7 @@ // with this program; if not, write to the Free Software Foundation, Inc., // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +#include #include "diagramdocument.h" #include "diagramobject.h" #include "diagramconnection.h" @@ -25,13 +26,88 @@ #include #include #include +#include + +using namespace std; + +class DiagramDocument::DiagramDocumentPrivate +{ +public: + DiagramDocumentPrivate() : + gridSize(10), + gridVisible(true), + gridPen(QColor(185, 185, 185), 0) + {} + int gridSize; + bool gridVisible; + QPen gridPen; +}; DiagramDocument::DiagramDocument(QObject *parent) - : QGraphicsScene(parent), m_mode(DiagramDocument::Select), m_line(NULL) + : QGraphicsScene(parent), d(new DiagramDocumentPrivate), m_mode(DiagramDocument::Select), m_line(NULL) { m_undoStack = new QUndoStack(this); } +int +DiagramDocument::gridSize() const +{ + return d->gridSize; +} + +void +DiagramDocument::setGridSize(int size) +{ + d->gridSize = size; + update(); +} + +bool +DiagramDocument::isGridVisible() const +{ + return d->gridVisible; +} + +void +DiagramDocument::setGridVisible(bool visible) +{ + d->gridVisible = visible; + update(); +} + +QColor +DiagramDocument::gridColor() const +{ + return d->gridPen.color(); +} + +void +DiagramDocument::setGridColor(const QColor &color) +{ + d->gridPen.setColor(color); + update(); +} + +void +DiagramDocument::drawBackground(QPainter *painter, const QRectF &rect) +{ + if (d->gridVisible) { + qreal gridSize = d->gridSize; + qreal x0 = gridSize * floor(rect.left() / gridSize); + qreal y0 = gridSize * floor(rect.top() / gridSize); + qreal x1 = gridSize * ceil(rect.right() / gridSize); + qreal y1 = gridSize * ceil(rect.bottom() / gridSize); + painter->save(); + painter->setPen(d->gridPen); + painter->setRenderHint(QPainter::Antialiasing, false); + // FIXME do this in one QPainter::drawPoints call + for (qreal x = x0; x < x1; x += gridSize) + for (qreal y = y0; y < y1; y += gridSize) + painter->drawPoint(x, y); + painter->restore(); + } +} + DiagramDocument::Mode DiagramDocument::mode() { -- cgit v1.2.3-54-g00ecf