summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMateusz Piekos <mateuszpiekos@gmail.com>2012-05-30 12:40:27 (GMT)
committerMateusz Piekos <mateuszpiekos@gmail.com>2012-05-30 12:40:27 (GMT)
commitf20c70620ff8a15079bef36a844800cf544662e0 (patch)
tree4f9293726d9a8f41a31f69d05622fd32791d5b73 /Swift/QtUI/Whiteboard/FreehandLineItem.cpp
parente7db09d201280cb64de649f5e33ca13d82045f38 (diff)
downloadswift-contrib-f20c70620ff8a15079bef36a844800cf544662e0.zip
swift-contrib-f20c70620ff8a15079bef36a844800cf544662e0.tar.bz2
Added whiteboard files to swift tree
Diffstat (limited to 'Swift/QtUI/Whiteboard/FreehandLineItem.cpp')
-rw-r--r--Swift/QtUI/Whiteboard/FreehandLineItem.cpp88
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;
+ }
+}