QPainterPath LineItem::rightMidGrip() const { QRectF bound = gripBoundingRect(); QRectF grip = QRectF(bound.topRight() - QPointF(sizeOfGrip().width(), 0), sizeOfGrip()); grip.moveCenter(QPointF(grip.center().x(), bound.center().y())); QPainterPath path; path.addEllipse(grip); return path; }
QPainterPath LineItem::rightMidGrip() const { if (gripMode() == Move) return QPainterPath(); QRectF bound = gripBoundingRect(); QRectF grip = QRectF(bound.topRight() - QPointF(sizeOfGrip().width(), 0), sizeOfGrip()); grip.moveCenter(QPointF(grip.center().x(), bound.center().y())); QPainterPath path; if (gripMode() == Resize || gripMode() == Scale) path.addRect(grip); else path.addEllipse(grip); return path; }
void LineItem::creationPolygonChanged(View::CreationEvent event) { if (event == View::MousePress) { const QPolygonF poly = mapFromScene(parentView()->creationPolygon(View::MousePress)); setPos(poly.first().x(), poly.first().y()); setViewRect(QRectF(0.0, 0.0, 0.0, sizeOfGrip().height())); parentView()->scene()->addItem(this); //setZValue(1); return; } if (event == View::MouseMove) { const QPolygonF poly = mapFromScene(parentView()->creationPolygon(View::MouseMove)); if (!rect().isEmpty()) { rotateTowards(line().p2(), poly.last()); } QRectF r = rect(); r.setSize(QSizeF(QLineF(line().p1(), poly.last()).length(), r.height())); setViewRect(r); return; } if (event == View::MouseRelease) { const QPolygonF poly = mapFromScene(parentView()->creationPolygon(View::MouseRelease)); parentView()->disconnect(this, SLOT(deleteLater())); //Don't delete ourself parentView()->disconnect(this, SLOT(creationPolygonChanged(View::CreationEvent))); parentView()->setMouseMode(View::Default); maybeReparent(); emit creationComplete(); return; } }
void LineItem::setLine(const QLineF &line_) { setPos(line_.p1()); setViewRect(QRectF(0.0, 0.0, 0.0, sizeOfGrip().height())); if (!rect().isEmpty()) { rotateTowards(line().p2(), line_.p2()); } QRectF r = rect(); r.setSize(QSizeF(QLineF(line().p1(), line_.p2()).length(), r.height())); setViewRect(r); }
void CircleItem::creationPolygonChanged(View::CreationEvent event) { if (event == View::EscapeEvent) { ViewItem::creationPolygonChanged(event); return; } if (event == View::MousePress) { const QPolygonF poly = mapFromScene(view()->creationPolygon(View::MousePress)); setPos(poly.first().x(), poly.first().y()); setViewRect(QRectF(0.0, 0.0, 0.0, sizeOfGrip().height())); setRect(-2,-2,4,4); view()->scene()->addItem(this); return; } if (event == View::MouseMove) { const QPolygonF poly = mapFromScene(view()->creationPolygon(View::MouseMove)); qreal dx = poly.last().x(); qreal dy = poly.last().y(); qreal r = qMax(qreal(2.0),sqrt(dx*dx + dy*dy)); QRectF newRect(-r, -r, 2.0*r, 2.0*r); setViewRect(newRect); return; } if (event == View::MouseRelease) { const QPolygonF poly = mapFromScene(view()->creationPolygon(View::MouseRelease)); view()->disconnect(this, SLOT(deleteLater())); //Don't delete ourself view()->disconnect(this, SLOT(creationPolygonChanged(View::CreationEvent))); view()->setMouseMode(View::Default); updateViewItemParent(); emit creationComplete(); return; } }