From 04eba421f1c33064939a281e169dec472f424c32 Mon Sep 17 00:00:00 2001 From: Mateusz Piekos Date: Mon, 23 Jul 2012 11:53:25 +0200 Subject: Added abitlity to change color and line witdth of drawn elements diff --git a/Swift/QtUI/Whiteboard/FreehandLineItem.cpp b/Swift/QtUI/Whiteboard/FreehandLineItem.cpp index 9beb47b..8821062 100644 --- a/Swift/QtUI/Whiteboard/FreehandLineItem.cpp +++ b/Swift/QtUI/Whiteboard/FreehandLineItem.cpp @@ -32,18 +32,15 @@ namespace Swift { void FreehandLineItem::setStartPoint(QPointF point) { - prepareGeometryChange(); points_.clear(); points_.append(point); QRectF rect(point, point); + prepareGeometryChange(); boundRect = rect; - update(rect); } void FreehandLineItem::lineTo(QPointF point) { - prepareGeometryChange(); - qreal x1, x2, y1, y2; x1 = points_.last().x(); x2 = point.x(); @@ -63,8 +60,8 @@ namespace Swift { points_.append(point); + prepareGeometryChange(); boundRect |= rect; - update(rect); } bool FreehandLineItem::collidesWithPath(const QPainterPath& path, Qt::ItemSelectionMode /*mode*/) const @@ -82,6 +79,7 @@ namespace Swift { void FreehandLineItem::setPen(const QPen& pen) { pen_ = pen; + update(boundRect); } QPen FreehandLineItem::pen() const diff --git a/Swift/QtUI/Whiteboard/GView.cpp b/Swift/QtUI/Whiteboard/GView.cpp index e82d193..8d5e2bc 100644 --- a/Swift/QtUI/Whiteboard/GView.cpp +++ b/Swift/QtUI/Whiteboard/GView.cpp @@ -8,41 +8,56 @@ #include namespace Swift { - GView::GView(QGraphicsScene* scene, QWidget* parent) : QGraphicsView(scene, parent), brush(QColor(Qt::white)) - { + GView::GView(QGraphicsScene* scene, QWidget* parent) : QGraphicsView(scene, parent), brush(QColor(Qt::white)), defaultBrush(QColor(Qt::white)) { selectionRect = 0; lastItem = 0; zValue = 0; } - void GView::setLineWidth(int i) - { + void GView::setLineWidth(int i) { pen.setWidth(i); + if (selectionRect) { + QGraphicsItem* item = selectionRect->data(1).value(); + changePenAndBrush(selectionRect->data(1).value(), pen, brush); + lastItemChanged(item, items_.indexOf(item)+1, Update); + } else { + defaultPen.setWidth(i); + } } - void GView::setLineColor(QColor color) - { + void GView::setLineColor(QColor color) { pen.setColor(color); + if (selectionRect) { + QGraphicsItem* item = selectionRect->data(1).value(); + changePenAndBrush(selectionRect->data(1).value(), pen, brush); + lastItemChanged(item, items_.indexOf(item)+1, Update); + } else { + defaultPen.setColor(color); + } } - QColor GView::getLineColor() - { + QColor GView::getLineColor() { return pen.color(); } - void GView::setBrushColor(QColor color) - { + void GView::setBrushColor(QColor color) { brush.setColor(color); + if (selectionRect) { + QGraphicsItem* item = selectionRect->data(1).value(); + changePenAndBrush(selectionRect->data(1).value(), pen, brush); + lastItemChanged(item, items_.indexOf(item)+1, Update); + } else { + defaultBrush.setColor(color); + } + // brush.setStyle(Qt::SolidPattern); } - QColor GView::getBrushColor() - { + QColor GView::getBrushColor() { return brush.color(); } - void GView::setMode(Mode mode) - { + void GView::setMode(Mode mode) { this->mode = mode; lastItem = 0; } @@ -62,7 +77,7 @@ namespace Swift { } std::cout << "items in:" << std::endl; for (QList::const_iterator it = items_.begin(); it != items_.end(); ++it) { - std::cout << "item: " << (*it)->data(100).toString().toStdString() << std::endl; + std::cout << (*it)->data(100).toString().toStdString() << std::endl; } std::cout << std::endl; } @@ -199,16 +214,17 @@ namespace Swift { { mousePressed = true; if (selectionRect != 0) { + pen = defaultPen; + brush = defaultBrush; scene()->removeItem(selectionRect); delete selectionRect; selectionRect = 0; + lineWidthChanged(pen.width()); } if (mode == Line) { QPointF point = this->mapToScene(event->pos()); QGraphicsItem* item = scene()->addLine(point.x(), point.y(), point.x(), point.y(), pen); QString id = getNewID(); -// items_.append(item); -// item->setZValue(zValue++); item->setZValue(10000000); item->setData(100, id); item->setData(101, items_.size()); @@ -218,8 +234,6 @@ namespace Swift { QPointF point = this->mapToScene(event->pos()); QGraphicsRectItem* item = scene()->addRect(point.x(), point.y(), 0, 0, pen, brush); QString id = getNewID(); -// items_.append(item); -// item->setZValue(zValue++); item->setZValue(10000000); item->setData(0, point); item->setData(100, id); @@ -236,14 +250,6 @@ namespace Swift { QGraphicsItem* item = scene()->items(rect).first(); QString id = item->data(100).toString(); deleteItem(id); -/* int i = 1; - QList::const_iterator it; - for (it = items_.begin(); it != items_.end(); ++it) { - if (*it == item) { - break; - } - i++; - }*/ itemDeleted(id, items_.indexOf(item)+1); } } @@ -251,8 +257,6 @@ namespace Swift { QPointF point = this->mapToScene(event->pos()); QGraphicsEllipseItem* item = scene()->addEllipse(point.x(), point.y(), 0, 0, pen, brush); QString id = getNewID(); -// items_.append(item); -// item->setZValue(zValue++); item->setZValue(10000000); item->setData(0, point); item->setData(100, id); @@ -263,10 +267,8 @@ namespace Swift { QPointF point = this->mapToScene(event->pos()); FreehandLineItem* item = new FreehandLineItem; QString id = getNewID(); -// items_.append(item); item->setPen(pen); item->setStartPoint(point); -// item->setZValue(zValue++); item->setZValue(10000000); item->setData(100, id); item->setData(101, items_.size()); @@ -278,8 +280,6 @@ namespace Swift { QPainterPath path; QGraphicsPathItem* item = scene()->addPath(path, pen, brush); QString id = getNewID(); -// items_.append(item); -// item->setZValue(zValue++); item->setZValue(10000000); item->setData(0, point); item->setData(100, id); @@ -290,8 +290,6 @@ namespace Swift { QPointF point = this->mapToScene(event->pos()); QGraphicsTextItem* item = scene()->addText(""); QString id = getNewID(); -// items_.append(item); -// item->setZValue(zValue++); item->setData(100, id); item->setData(101, items_.size()); item->setDefaultTextColor(pen.color()); @@ -311,8 +309,6 @@ namespace Swift { polygon.append(point); item = scene()->addPolygon(polygon, pen, brush); QString id = getNewID(); -// items_.append(item); -// item->setZValue(zValue++); item->setZValue(10000000); item->setData(100, id); item->setData(101, items_.size()); @@ -335,6 +331,7 @@ namespace Swift { pen.setColor(QColor(Qt::gray)); pen.setStyle(Qt::DashLine); QGraphicsItem *item = scene()->items(rect).first(); + setActualPenAndBrushFromItem(item); selectionRect = scene()->addRect(item->boundingRect(), pen); selectionRect->setZValue(1000000); selectionRect->setData(0, item->pos()-point); @@ -386,4 +383,75 @@ namespace Swift { QGraphicsItem* item = selectionRect->data(1).value(); item->setZValue(item->zValue()-1); } + + void GView::changePenAndBrush(QGraphicsItem* item, QPen pen, QBrush brush) { + QGraphicsLineItem* lineItem = qgraphicsitem_cast(item); + if (lineItem) { + lineItem->setPen(pen); + } + + FreehandLineItem* handLineItem = qgraphicsitem_cast(item); + if (handLineItem) { + handLineItem->setPen(pen); + } + + QGraphicsRectItem* rectItem = qgraphicsitem_cast(item); + if (rectItem) { + rectItem->setPen(pen); + rectItem->setBrush(brush); + } + + QGraphicsTextItem* textItem = qgraphicsitem_cast(item); + if (textItem) { + textItem->setDefaultTextColor(pen.color()); + } + + QGraphicsPolygonItem* polygonItem = qgraphicsitem_cast(item); + if (polygonItem) { + polygonItem->setPen(pen); + polygonItem->setBrush(brush); + } + + QGraphicsEllipseItem* ellipseItem = qgraphicsitem_cast(item); + if (ellipseItem) { + ellipseItem->setPen(pen); + ellipseItem->setBrush(brush); + } + } + + void GView::setActualPenAndBrushFromItem(QGraphicsItem* item) { + QGraphicsLineItem* lineItem = qgraphicsitem_cast(item); + if (lineItem) { + pen = lineItem->pen(); + } + + FreehandLineItem* handLineItem = qgraphicsitem_cast(item); + if (handLineItem) { + pen = handLineItem->pen(); + } + + QGraphicsRectItem* rectItem = qgraphicsitem_cast(item); + if (rectItem) { + pen = rectItem->pen(); + brush = rectItem->brush(); + } + + QGraphicsTextItem* textItem = qgraphicsitem_cast(item); + if (textItem) { + pen.setColor(textItem->defaultTextColor()); + } + + QGraphicsPolygonItem* polygonItem = qgraphicsitem_cast(item); + if (polygonItem) { + pen = polygonItem->pen(); + brush = polygonItem->brush(); + } + + QGraphicsEllipseItem* ellipseItem = qgraphicsitem_cast(item); + if (ellipseItem) { + pen = ellipseItem->pen(); + brush = ellipseItem->brush(); + } + lineWidthChanged(pen.width()); + } } diff --git a/Swift/QtUI/Whiteboard/GView.h b/Swift/QtUI/Whiteboard/GView.h index 786c1f3..443b7ab 100644 --- a/Swift/QtUI/Whiteboard/GView.h +++ b/Swift/QtUI/Whiteboard/GView.h @@ -46,11 +46,15 @@ namespace Swift { void handleTextItemModified(QGraphicsTextItem*); private: QString getNewID(); + void changePenAndBrush(QGraphicsItem* item, QPen pen, QBrush brush); + void setActualPenAndBrushFromItem(QGraphicsItem* item); int zValue; bool mousePressed; QPen pen; QBrush brush; + QPen defaultPen; + QBrush defaultBrush; Mode mode; QGraphicsItem* lastItem; QGraphicsRectItem* selectionRect; @@ -63,5 +67,6 @@ namespace Swift { signals: void lastItemChanged(QGraphicsItem* item, int pos, GView::Type type); void itemDeleted(QString id, int pos); + void lineWidthChanged(int i); }; } diff --git a/Swift/QtUI/Whiteboard/QtWhiteboardWindow.cpp b/Swift/QtUI/Whiteboard/QtWhiteboardWindow.cpp index d89a7f6..b3f42a9 100644 --- a/Swift/QtUI/Whiteboard/QtWhiteboardWindow.cpp +++ b/Swift/QtUI/Whiteboard/QtWhiteboardWindow.cpp @@ -43,6 +43,7 @@ namespace Swift { widthBox = new QSpinBox(this); connect(widthBox, SIGNAL(valueChanged(int)), this, SLOT(changeLineWidth(int))); + connect(graphicsView, SIGNAL(lineWidthChanged(int)), widthBox, SLOT(setValue(int))); widthBox->setValue(1); moveUpButton = new QPushButton("Move Up", this); @@ -246,12 +247,10 @@ namespace Swift { QLine line = lineItem->line().toLine(); QColor color = lineItem->pen().color(); WhiteboardLineElement::ref element = boost::make_shared(line.x1()+lineItem->pos().x(), line.y1()+lineItem->pos().y(), line.x2()+lineItem->pos().x(), line.y2()+lineItem->pos().y()); -// element->setShift(lineItem->pos().x(), lineItem->pos().y()); element->setColor(Color(color.red(), color.green(), color.blue(), color.alpha())); element->setPenWidth(lineItem->pen().width()); element->setID(lineItem->data(100).toString().toStdString()); -// whiteboardSession_->sendElement(element); el = element; } FreehandLineItem* freehandLineItem = qgraphicsitem_cast(item); @@ -269,7 +268,6 @@ namespace Swift { element->setPoints(points); element->setID(freehandLineItem->data(100).toString().toStdString()); -// whiteboardSession_->sendElement(element); el = element; } @@ -283,9 +281,9 @@ namespace Swift { element->setBrushColor(Color(brushColor.red(), brushColor.green(), brushColor.blue(), brushColor.alpha())); element->setPenColor(Color(penColor.red(), penColor.green(), penColor.blue(), penColor.alpha())); element->setPenWidth(rectItem->pen().width()); + std::cout << penColor.red() << " " << brushColor.red() << std::endl; element->setID(rectItem->data(100).toString().toStdString()); -// whiteboardSession_->sendElement(element); el = element; } @@ -299,7 +297,6 @@ namespace Swift { element->setColor(Color(color.red(), color.green(), color.blue(), color.alpha())); element->setID(textItem->data(100).toString().toStdString()); -// whiteboardSession_->sendElement(element); el = element; } @@ -322,7 +319,6 @@ namespace Swift { element->setPenWidth(polygonItem->pen().width()); element->setID(polygonItem->data(100).toString().toStdString()); -// whiteboardSession_->sendElement(element); el = element; } @@ -342,7 +338,6 @@ namespace Swift { element->setPenWidth(ellipseItem->pen().width()); element->setID(ellipseItem->data(100).toString().toStdString()); -// whiteboardSession_->sendElement(element); el = element; } diff --git a/Swiften/Serializer/PayloadSerializers/WhiteboardSerializer.cpp b/Swiften/Serializer/PayloadSerializers/WhiteboardSerializer.cpp index 1a9d761..7248c0e 100644 --- a/Swiften/Serializer/PayloadSerializers/WhiteboardSerializer.cpp +++ b/Swiften/Serializer/PayloadSerializers/WhiteboardSerializer.cpp @@ -199,14 +199,5 @@ namespace Swift { } assert(false); return ""; -/* if (type == WhiteboardPayload::Data) { - return ""; - } else if (type == WhiteboardPayload::SessionRequest) { - return "session-request"; - } else if (type == WhiteboardPayload::SessionAccept) { - return "session-accept"; - } else if (type == WhiteboardPayload::SessionTerminate) { - return "session-terminate"; - } else*/ } } -- cgit v0.10.2-6-g49f6