void KoPathPointInsertCommand::undo() { QUndoCommand::undo(); for (int i = 0; i < m_pointDataList.size(); ++i) { const KoPathPointData &pdBefore = m_pointDataList.at(i); KoPathShape * pathShape = pdBefore.pathShape; KoPathPointIndex piAfter = pdBefore.pointIndex; ++piAfter.second; KoPathPoint * before = pathShape->pointByIndex(pdBefore.pointIndex); m_points[i] = pathShape->removePoint(piAfter); if (m_points[i]->properties() & KoPathPoint::CloseSubpath) { piAfter.second = 0; } KoPathPoint * after = pathShape->pointByIndex(piAfter); if (before->activeControlPoint2()) { QPointF controlPoint2 = before->controlPoint2(); qSwap(controlPoint2, m_controlPoints[i].first); before->setControlPoint2(controlPoint2); } if (after->activeControlPoint1()) { QPointF controlPoint1 = after->controlPoint1(); qSwap(controlPoint1, m_controlPoints[i].second); after->setControlPoint1(controlPoint1); } pathShape->update(); } m_deletePoints = true; }
void KoPathBreakAtPointCommand::undo() { KUndo2Command::undo(); KoPathShape * lastPathShape = 0; for (int i = 0; i < m_pointDataList.size(); ++i) { const KoPathPointData & pd = m_pointDataList.at(i); KoPathShape * pathShape = pd.pathShape; KoPathPointIndex pointIndex = pd.pointIndex; ++pointIndex.second; if (m_closedIndex.at(i).first != -1) { m_closedIndex[i] = pathShape->closeSubpath(m_closedIndex.at(i)); } else { pointIndex.second = pointIndex.second + m_closedIndex.at(i).second; pathShape->join(pd.pointIndex.first); } m_points[i] = pathShape->removePoint(pointIndex); if (lastPathShape != pathShape) { if (lastPathShape) { lastPathShape->update(); } lastPathShape = pathShape; } } if (lastPathShape) { lastPathShape->update(); } m_deletePoints = true; }