diff --git a/src/lottie/lottieitem.cpp b/src/lottie/lottieitem.cpp index a55bc3c560..51bfe91824 100644 --- a/src/lottie/lottieitem.cpp +++ b/src/lottie/lottieitem.cpp @@ -904,23 +904,7 @@ LOTShapeItem::LOTShapeItem(LOTShapeData *data):LOTPathDataItem(data->isStatic()) VPath LOTShapeItem::getPath(int frameNo) { - LottieShapeData shapeData = mData->mShape.value(frameNo); - - if (shapeData.mPoints.empty()) - return VPath(); - - VPath path; - - int size = shapeData.mPoints.size(); - const VPointF *points = shapeData.mPoints.data(); - path.moveTo(points[0]); - for (int i = 1 ; i < size; i+=3) { - path.cubicTo(points[i], points[i+1], points[i+2]); - } - if (shapeData.mClosed) - path.close(); - - return path; + return mData->mShape.value(frameNo).toPath(); } diff --git a/src/lottie/lottiemodel.h b/src/lottie/lottiemodel.h index fc3475e981..9e37dc1bf0 100644 --- a/src/lottie/lottiemodel.h +++ b/src/lottie/lottiemodel.h @@ -109,6 +109,11 @@ public: VPath path; int size = mPoints.size(); const VPointF *points = mPoints.data(); + /* reserve exact memory requirement at once + * ptSize = size + 1(size + close) + * elmSize = size/3 cubic + 1 move + 1 close + */ + path.reserve(size + 1 , size/3 + 2); path.moveTo(points[0]); for (int i = 1 ; i < size; i+=3) { path.cubicTo(points[i], points[i+1], points[i+2]);