void UBGraphicsProtractor::paintButtons(QPainter *painter) { Q_UNUSED(painter); if (mShowButtons) { qreal antiSc = antiScale(); qreal scale = buttonSizeReference().width() / mCloseSvgItem->boundingRect().width(); mCloseSvgItem->setPos(closeButtonRect().topLeft() + rect().center()); mCloseSvgItem->resetTransform(); mCloseSvgItem->translate(-closeButtonRect().left(),-closeButtonRect().top()); mCloseSvgItem->rotate(-mStartAngle); mCloseSvgItem->translate(closeButtonRect().left(), closeButtonRect().top()); mCloseSvgItem->scale(scale * antiSc, scale * antiSc);//this do not impact the bounding box of thr svg item... mResetSvgItem->setPos(resetButtonRect().topLeft() + rect().center()); mResetSvgItem->resetTransform(); mResetSvgItem->translate(-resetButtonRect().left(), -resetButtonRect().top()); mResetSvgItem->rotate(-mStartAngle); mResetSvgItem->translate(resetButtonRect().left(), resetButtonRect().top()); mResetSvgItem->scale(scale * antiSc, scale * antiSc);//this do not impact the bounding box of thr svg item... mResizeSvgItem->setPos(resizeButtonRect().topLeft() + rect().center()); mResizeSvgItem->resetTransform(); mResizeSvgItem->translate(-resizeButtonRect().left(), -resizeButtonRect().top()); mResizeSvgItem->rotate(-mStartAngle); mResizeSvgItem->translate(resizeButtonRect().left(), resizeButtonRect().top()); mResizeSvgItem->scale(scale * antiSc, scale * antiSc);//this do not impact the bounding box of thr svg item... mRotateSvgItem->setPos(rotateButtonRect().topLeft() + rect().center()); mRotateSvgItem->resetTransform(); mRotateSvgItem->translate(-rotateButtonRect().left(), -rotateButtonRect().top()); mRotateSvgItem->rotate(-mStartAngle); mRotateSvgItem->translate(rotateButtonRect().left(), rotateButtonRect().top()); mRotateSvgItem->scale(scale, scale);//this do not impact the bounding box of thr svg item... } qreal scale = markerSizeReference().width()/mMarkerSvgItem->boundingRect().width(); mMarkerSvgItem->setPos(markerButtonRect().topLeft() + rect().center()); mMarkerSvgItem->resetTransform(); mMarkerSvgItem->translate(-markerButtonRect().left(), -markerButtonRect().top()); mMarkerSvgItem->rotate(- mStartAngle - mCurrentAngle); mMarkerSvgItem->translate(markerButtonRect().left(), markerButtonRect().top()); mMarkerSvgItem->scale(scale, scale);//this do not impact the bounding box of thr svg item... mCloseSvgItem->setVisible(mShowButtons); mResetSvgItem->setVisible(mShowButtons); mResizeSvgItem->setVisible(mShowButtons); mRotateSvgItem->setVisible(mShowButtons); mMarkerSvgItem->setVisible(true); }
void UBGraphicsRuler::paint(QPainter *painter, const QStyleOptionGraphicsItem *styleOption, QWidget *widget) { Q_UNUSED(styleOption); Q_UNUSED(widget); UBAbstractDrawRuler::paint(); QTransform antiScaleTransform2; qreal ratio = mAntiScaleRatio > 1.0 ? mAntiScaleRatio : 1.0; antiScaleTransform2.scale(ratio, 1.0); mResizeSvgItem->setTransform(antiScaleTransform2); mResizeSvgItem->setPos(resizeButtonRect().topLeft()); mRotateSvgItem->setTransform(antiScaleTransform2); mRotateSvgItem->setPos(rotateButtonRect().topLeft()); painter->setPen(drawColor()); painter->setRenderHint(QPainter::Antialiasing, true); painter->drawRoundedRect(rect(), sRoundingRadius, sRoundingRadius); fillBackground(painter); paintGraduations(painter); if (mRotating) paintRotationCenter(painter); }
void UBGraphicsRuler::hoverMoveEvent(QGraphicsSceneHoverEvent *event) { UBStylusTool::Enum currentTool = (UBStylusTool::Enum)UBDrawingController::drawingController ()->stylusTool (); if (currentTool == UBStylusTool::Selector) { mCloseSvgItem->setVisible(mShowButtons); mResizeSvgItem->setVisible(mShowButtons); mRotateSvgItem->setVisible(mShowButtons); if (resizeButtonRect().contains(event->pos())) setCursor(resizeCursor()); else if (closeButtonRect().contains(event->pos())) setCursor(closeCursor()); else if (rotateButtonRect().contains(event->pos())) setCursor(rotateCursor()); else setCursor(moveCursor()); event->accept(); } else if (UBDrawingController::drawingController()->isDrawingTool()) { event->accept(); } }
UBGraphicsProtractor::Tool UBGraphicsProtractor::toolFromPos(QPointF pos) { pos = pos - rect().center(); QLineF line(QPointF(0,0), pos); QTransform t; t.rotate(mStartAngle); QPointF p1 = t.map(pos); t.rotate(mCurrentAngle); QPointF p2 = t.map(pos); if (resizeButtonRect().contains(p1)) return Resize; else if (closeButtonRect().contains(p1)) return Close; else if (resetButtonRect().contains(p1)) return Reset; else if (rotateButtonRect().contains(p1)) return Rotate; else if (markerButtonRect().contains(p2)) return MoveMarker; else if (line.length() <= radius()) return Move; else return None; }
void UBGraphicsRuler::mousePressEvent(QGraphicsSceneMouseEvent *event) { if (event->pos().x() > resizeButtonRect().left()) { mResizing = true; event->accept(); } else if (rotateButtonRect().contains(event->pos())) { mRotating = true; event->accept(); } else { mResizeSvgItem->setVisible(false); mRotateSvgItem->setVisible(false); QGraphicsItem::mousePressEvent(event); } mResizeSvgItem->setVisible(mShowButtons && mResizing); mRotateSvgItem->setVisible(mShowButtons && mRotating); mCloseSvgItem->setVisible(false); }
void UBGraphicsRuler::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { UBStylusTool::Enum currentTool = (UBStylusTool::Enum)UBDrawingController::drawingController ()->stylusTool (); if (currentTool == UBStylusTool::Selector || currentTool == UBStylusTool::Play) { mCloseSvgItem->setParentItem(this); mResizeSvgItem->setParentItem(this); mRotateSvgItem->setParentItem(this); mShowButtons = true; mCloseSvgItem->setVisible(mShowButtons); mResizeSvgItem->setVisible(mShowButtons); mRotateSvgItem->setVisible(mShowButtons); if (event->pos().x() >= resizeButtonRect().left()) { setCursor(resizeCursor()); } else { if (closeButtonRect().contains(event->pos())) setCursor(closeCursor()); else if (rotateButtonRect().contains(event->pos())) setCursor(rotateCursor()); else setCursor(moveCursor()); } event->accept(); update(); } else if (UBDrawingController::drawingController()->isDrawingTool()) { setCursor(drawRulerLineCursor()); UBDrawingController::drawingController()->mActiveRuler = this; event->accept(); } }