void KoPathPointInsertCommand::redo() { QUndoCommand::redo(); for (int i = m_pointDataList.size() - 1; i >= 0; --i) { KoPathPointData pointData = m_pointDataList.at(i); KoPathShape * pathShape = pointData.pathShape; KoPathSegment segment = pathShape->segmentByIndex(pointData.pointIndex); ++pointData.pointIndex.second; if (segment.first()->activeControlPoint2()) { QPointF controlPoint2 = segment.first()->controlPoint2(); qSwap(controlPoint2, m_controlPoints[i].first); segment.first()->setControlPoint2(controlPoint2); } if (segment.second()->activeControlPoint1()) { QPointF controlPoint1 = segment.second()->controlPoint1(); qSwap(controlPoint1, m_controlPoints[i].second); segment.second()->setControlPoint1(controlPoint1); } pathShape->insertPoint(m_points.at(i), pointData.pointIndex); pathShape->update(); } m_deletePoints = false; }
void KoPathBreakAtPointCommand::redo() { KUndo2Command::redo(); KoPathPointData last(0, KoPathPointIndex(-1, -1)); // offset, needed when path was opened int offset = 0; for (int i = m_pointDataList.size() - 1; i >= 0; --i) { const KoPathPointData & pd = m_pointDataList.at(i); KoPathShape * pathShape = pd.pathShape; KoPathPointIndex pointIndex = pd.pointIndex; if (last.pathShape != pathShape || last.pointIndex.first != pointIndex.first) { offset = 0; } pointIndex.second = pointIndex.second + offset + 1; pathShape->insertPoint(m_points[i], pointIndex); if (m_closedIndex.at(i).first != -1) { m_closedIndex[i] = pathShape->openSubpath(m_closedIndex.at(i)); offset = m_closedIndex.at(i).second; } else { KoPathPointIndex breakIndex = pd.pointIndex; breakIndex.second += offset; pathShape->breakAfter(breakIndex); m_closedIndex[i].second = offset; } if (last.pathShape != pathShape) { if (last.pathShape) { last.pathShape->update(); } last = pd; } } if (last.pathShape) { last.pathShape->update(); } m_deletePoints = false; }