From: <wha...@us...> - 2015-07-30 03:56:12
|
Revision: 9753 http://sourceforge.net/p/planeshift/code/9753 Author: whacko88 Date: 2015-07-30 03:56:09 +0000 (Thu, 30 Jul 2015) Log Message: ----------- Keep track of previous measure attributes rather than current ones, consistently with previous accidentals Modified Paths: -------------- trunk/src/common/music/basemusicscore.h trunk/src/common/music/basemusicscore.hpp trunk/src/common/music/scoreelements.cpp trunk/src/common/music/scoreelements.h Modified: trunk/src/common/music/basemusicscore.h =================================================================== --- trunk/src/common/music/basemusicscore.h 2015-07-29 03:26:52 UTC (rev 9752) +++ trunk/src/common/music/basemusicscore.h 2015-07-30 03:56:09 UTC (rev 9753) @@ -322,7 +322,12 @@ size_t currElementIdx; ///< Index of the current element. size_t currMeasureIdx; ///< Index of the current measure. - ScoreContext* context; ///< The context is valid only if it is in play mode. + + /** + * The context is valid only if the score is in play mode. This keeps track of attributes + * and accidentals of previous measures and notes, not the current ones. + */ + ScoreContext* context; BaseMusicalScore<MeasureType, MeasureElementType>* score; ///< The musical score this cursor refers to. /** Modified: trunk/src/common/music/basemusicscore.hpp =================================================================== --- trunk/src/common/music/basemusicscore.hpp 2015-07-29 03:26:52 UTC (rev 9752) +++ trunk/src/common/music/basemusicscore.hpp 2015-07-30 03:56:09 UTC (rev 9753) @@ -136,6 +136,7 @@ isLastElem = (currElementIdx == score->measures[currMeasureIdx].GetNElements() - 1); if(IsEndOfMeasure() || (isLastElem && ignoreEndOfMeasure)) { + // we need to move to the first element of the next measure currElementIdx = 0; // in play mode we must take repeats into account and update the context @@ -147,17 +148,18 @@ } else { - // we must skip all the endings that end a repeat - // section that has been already performed + // update the context with info on previous measures attributes + context->Update(currMeasureIdx, score->measures[currMeasureIdx]); + + // we must skip all the endings that end a repeat section that has been + // already performed, the context doesn't have to be updated with skipped + // endings do { currMeasureIdx++; }while(score->measures[currMeasureIdx].IsEnding() && score->measures[currMeasureIdx].IsEndRepeat() && !CheckRepeat()); - - // the context doesn't have to be updated with skipped endings - context->Update(currMeasureIdx, score->measures[currMeasureIdx]); } } else // mode == EDIT @@ -167,18 +169,17 @@ } else { - // we update the context with the accidentals of the previous element - if(score->mode == PLAY) - { - context->Update(score->measures[currMeasureIdx].GetElement(currElementIdx)); - } - if(isLastElem) // ignoreEndOfMeasure has been checked before { currElementIdx = INVALID_CURSOR; } else { + // we update the context with the accidentals of the previous element + if(score->mode == PLAY) + { + context->Update(score->measures[currMeasureIdx].GetElement(currElementIdx)); + } currElementIdx++; } } Modified: trunk/src/common/music/scoreelements.cpp =================================================================== --- trunk/src/common/music/scoreelements.cpp 2015-07-29 03:26:52 UTC (rev 9752) +++ trunk/src/common/music/scoreelements.cpp 2015-07-30 03:56:09 UTC (rev 9753) @@ -278,6 +278,7 @@ int ScoreContext::RestoreLastStartRepeat() { + noteContext.ResetContext(); measureAttributes = lastStartRepeatAttributes; return lastStartRepeatID; } Modified: trunk/src/common/music/scoreelements.h =================================================================== --- trunk/src/common/music/scoreelements.h 2015-07-29 03:26:52 UTC (rev 9752) +++ trunk/src/common/music/scoreelements.h 2015-07-30 03:56:09 UTC (rev 9753) @@ -623,7 +623,7 @@ /** * Restore the context of the last measure containing a start repeat. If no explicit * start repeats have been found, the function assumes it to be the first measure. - * Note that you still have to call Update(int, Measure<MeasureElement> &) afterwards. + * It is not necessary to call Update(int, Measure<MeasureElement> &) afterwards. * * @return The ID of the last measure encountered that starts a repeat. */ @@ -631,8 +631,8 @@ /** * Update the context with the new measure. This resets also previous accidentals. - * Note that you still have to call Update(MeasureElement &) to update the list of - * previous accidentals with the first element of this measure. + * Note that you still have to call Update(MeasureElement &) if you want to update + * the list of previous accidentals with the first element of this measure. * * @param measureID The ID of the updated measure. * @param measure The new measure reached by the cursor. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |