diff options
Diffstat (limited to 'Swift/QtUI/Whiteboard/FreehandLineItem.cpp')
-rw-r--r-- | Swift/QtUI/Whiteboard/FreehandLineItem.cpp | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/Swift/QtUI/Whiteboard/FreehandLineItem.cpp b/Swift/QtUI/Whiteboard/FreehandLineItem.cpp new file mode 100644 index 0000000..3dc42a7 --- /dev/null +++ b/Swift/QtUI/Whiteboard/FreehandLineItem.cpp @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2012 Mateusz Piękos + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +#include "FreehandLineItem.h" + + +namespace Swift { + FreehandLineItem::FreehandLineItem(QGraphicsItem* parent) : QGraphicsItem(parent) { + } + + QRectF FreehandLineItem::boundingRect() const + { + return boundRect; + } + + void FreehandLineItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) + { + painter->setPen(_pen); + if (points.size() > 0) { + QVector<QPointF>::const_iterator it = points.begin(); + QPointF previous = *it; + ++it; + for (; it != points.end(); ++it) { + painter->drawLine(previous, *it); + previous = *it; + } + } + } + + void FreehandLineItem::setStartPoint(QPointF point) + { + points.clear(); + points.append(point); + QRectF rect(point, point); + boundRect = rect; + update(rect); + } + + void FreehandLineItem::lineTo(QPointF point) + { + qreal x1, x2, y1, y2; + x1 = points.last().x(); + x2 = point.x(); + y1 = points.last().y(); + y2 = point.y(); + if (x1 > x2) { + qreal temp = x1; + x1 = x2; + x2 = temp; + } + if (y1 > y2) { + qreal temp = y1; + y1 = y2; + y2 = temp; + } + QRectF rect(x1-1, y1-1, x2+1-x1, y2+1-y1); + + points.append(point); + + boundRect |= rect; + update(rect); + } + + bool FreehandLineItem::collidesWithPath(const QPainterPath& path, Qt::ItemSelectionMode mode) const + { + QVector<QPointF>::const_iterator it; + QSizeF size(1,1); + for (it = points.begin(); it != points.end(); ++it) { + if (path.intersects(QRectF(*it, size))) { + return true; + } + } + return false; + } + + void FreehandLineItem::setPen(const QPen& pen) + { + _pen = pen; + } + + QPen FreehandLineItem::pen() const + { + return _pen; + } +} |