/* * 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::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::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; } }