void LineSegment::editDrag(const EditData& ed) { // Only for resizing according to the diagonal properties QPointF deltaResize(ed.delta.x(), line()->diagonal() ? ed.delta.y() : 0.0); // Only for moving, no y limitaion QPointF deltaMove(ed.delta.x(), ed.delta.y()); switch(ed.curGrip) { case GRIP_LINE_START: // Resize the begin of element (left grip) setUserOff(userOff() + deltaResize); _userOff2 -= deltaResize; break; case GRIP_LINE_END: // Resize the end of element (rigth grip) _userOff2 += deltaResize; break; case GRIP_LINE_MIDDLE: // Move the element (middle grip) setUserOff(userOff() + deltaMove); break; } if ((line()->anchor() == Spanner::ANCHOR_NOTE) && (ed.curGrip == GRIP_LINE_START || ed.curGrip == GRIP_LINE_END)) { // // if we touch a different note, change anchor // Element* e = ed.view->elementNear(ed.pos); if (e && e->type() == NOTE) { SLine* l = line(); if (ed.curGrip == GRIP_LINE_END && e != line()->endElement()) { qDebug("LineSegment: move end anchor"); Note* noteOld = static_cast<Note*>(l->endElement()); Note* noteNew = static_cast<Note*>(e); noteOld->removeSpannerBack(l); noteNew->addSpannerBack(l); l->setEndElement(noteNew); _userOff2 += noteOld->canvasPos() - noteNew->canvasPos(); } else if (ed.curGrip == GRIP_LINE_START && e != l->startElement()) { qDebug("LineSegment: move start anchor (not impl.)"); } } } line()->layout(); }
void LineSegment::editDrag(const EditData& ed) { // Only for resizing according to the diagonal properties QPointF deltaResize(ed.delta.x(), line()->diagonal() ? ed.delta.y() : 0.0); // Only for moving, no y limitaion QPointF deltaMove(ed.delta.x(), ed.delta.y()); switch(ed.curGrip) { case GRIP_LINE_START: // Resize the begin of element (left grip) setUserOff(userOff() + deltaResize); _userOff2 -= deltaResize; break; case GRIP_LINE_END: // Resize the end of element (rigth grip) _userOff2 += deltaResize; break; case GRIP_LINE_MIDDLE: // Move the element (middle grip) setUserOff(userOff() + deltaMove); break; } layout(); }