From 9de63f660f14abb25a02f68ad9f0535ce9e79502 Mon Sep 17 00:00:00 2001 From: Youngbok Shin Date: Mon, 27 Aug 2018 16:18:46 +0900 Subject: [PATCH] lottie/vdasher: improve readability for lineTo function It creates two internal functions for duplicated code. By replacing nested 'if' conditions with the functions, it improves readability and manageability. Change-Id: I303ba6849f776c5f02df6552f0a37acecb14a78b --- src/vector/vdasher.cpp | 67 +++++++++++++++++++++--------------------- src/vector/vdasher.h | 2 ++ 2 files changed, 35 insertions(+), 34 deletions(-) diff --git a/src/vector/vdasher.cpp b/src/vector/vdasher.cpp index d5f7ba9..178f63a 100644 --- a/src/vector/vdasher.cpp +++ b/src/vector/vdasher.cpp @@ -106,6 +106,30 @@ void VDasher::moveTo(const VPointF &p) } } +void VDasher::addLine(const VPointF &p) +{ + if (mIsCurrentOperationGap) return; + + if (!mNewSegment) { + mDashedPath.moveTo(mCurPt); + mNewSegment = true; + } + mDashedPath.lineTo(p); +} + +void VDasher::updateActiveSegment() +{ + if (!mIsCurrentOperationGap) { + mIsCurrentOperationGap = true; + mNewSegment = false; + mCurrentDashLength = mDashArray[mCurrentDashIndex].gap; + } else { + mIsCurrentOperationGap = false; + mCurrentDashIndex = (mCurrentDashIndex + 1) % mArraySize; + mCurrentDashLength = mDashArray[mCurrentDashIndex].length; + } +} + void VDasher::lineTo(const VPointF &p) { VLine left, right; @@ -113,51 +137,26 @@ void VDasher::lineTo(const VPointF &p) float length = line.length(); if (length < mCurrentDashLength) { mCurrentDashLength -= length; - if (!mIsCurrentOperationGap) { - if (!mNewSegment) { - mDashedPath.moveTo(mCurPt); - mNewSegment = true; - } - mDashedPath.lineTo(p); - } + addLine(p); } else { while (length > mCurrentDashLength) { length -= mCurrentDashLength; line.splitAtLength(mCurrentDashLength, left, right); - if (!mIsCurrentOperationGap) { - if (!mNewSegment) { - mDashedPath.moveTo(left.p1()); - mNewSegment = true; - } - mDashedPath.lineTo(left.p2()); - mCurrentDashLength = mDashArray[mCurrentDashIndex].gap; - } else { - mCurrentDashIndex = (mCurrentDashIndex + 1) % mArraySize; - mCurrentDashLength = mDashArray[mCurrentDashIndex].length; - } - mIsCurrentOperationGap = !mIsCurrentOperationGap; - if (mIsCurrentOperationGap) - mNewSegment = false; + + addLine(left.p2()); + updateActiveSegment(); + line = right; mCurPt = line.p1(); } + // remainder mCurrentDashLength -= length; - if (!mIsCurrentOperationGap) { - mDashedPath.moveTo(line.p1()); - mDashedPath.lineTo(line.p2()); - } + addLine(line.p2()); + if (mCurrentDashLength < 1.0) { // move to next dash - if (!mIsCurrentOperationGap) { - mIsCurrentOperationGap = true; - mCurrentDashLength = mDashArray[mCurrentDashIndex].gap; - mNewSegment = false; - } else { - mIsCurrentOperationGap = false; - mCurrentDashIndex = (mCurrentDashIndex + 1) % mArraySize; - mCurrentDashLength = mDashArray[mCurrentDashIndex].length; - } + updateActiveSegment(); } } mCurPt = p; diff --git a/src/vector/vdasher.h b/src/vector/vdasher.h index c50bfb5..cc34199 100644 --- a/src/vector/vdasher.h +++ b/src/vector/vdasher.h @@ -14,6 +14,8 @@ private: void lineTo(const VPointF &p); void cubicTo(const VPointF &cp1, const VPointF &cp2, const VPointF &e); void close(); + void addLine(const VPointF &p); + void updateActiveSegment(); private: struct Dash { -- 2.34.1