diff options
Diffstat (limited to 'src/diagramdocument.cpp')
-rw-r--r-- | src/diagramdocument.cpp | 78 |
1 files changed, 77 insertions, 1 deletions
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 <cmath> #include "diagramdocument.h" #include "diagramobject.h" #include "diagramconnection.h" @@ -25,13 +26,88 @@ #include <QDebug> #include <QFile> #include <QTextStream> +#include <QStyle> + +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() { |