Merge pull request #4489 from dmitrio95/280574-ctrl-del-corruption

fix #280574: fix corruption on time delete of start of measure with full-measure rests
This commit is contained in:
anatoly-os 2019-01-05 21:28:08 +02:00 committed by GitHub
commit 3db34aa471
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 229 additions and 1 deletions

View file

@ -3026,7 +3026,15 @@ void Score::timeDelete(Measure* m, Segment* startSegment, const Fraction& f)
}
if (cr->isFullMeasureRest()) {
cr->setDuration(cr->duration() - f);
if (cr->rtick() >= tick) {
// Move full-measure rest from the deleted area
undoRemoveElement(cr);
ChordRest* newCR = toChordRest(cr->clone());
newCR->setDuration(cr->duration() - f);
undoAddCR(newCR, m, etick);
}
else
cr->undoChangeProperty(Pid::DURATION, cr->duration() - f);
}
// inside deleted area
else if (s->rtick() >= tick && cetick <= etick) {

View file

@ -0,0 +1,204 @@
<?xml version="1.0" encoding="UTF-8"?>
<museScore version="3.01">
<programVersion>3.0.0</programVersion>
<programRevision>6187abc</programRevision>
<Score>
<LayerTag id="0" tag="default"></LayerTag>
<currentLayer>0</currentLayer>
<Synthesizer>
</Synthesizer>
<Division>480</Division>
<Style>
<pageWidth>8.27</pageWidth>
<pageHeight>11.69</pageHeight>
<pagePrintableWidth>7.4826</pagePrintableWidth>
<Spatium>1.76389</Spatium>
</Style>
<showInvisible>1</showInvisible>
<showUnprintable>1</showUnprintable>
<showFrames>1</showFrames>
<showMargins>0</showMargins>
<metaTag name="arranger"></metaTag>
<metaTag name="composer"></metaTag>
<metaTag name="copyright"></metaTag>
<metaTag name="creationDate">2018-12-21</metaTag>
<metaTag name="lyricist"></metaTag>
<metaTag name="movementNumber"></metaTag>
<metaTag name="movementTitle"></metaTag>
<metaTag name="platform">Linux</metaTag>
<metaTag name="poet"></metaTag>
<metaTag name="source"></metaTag>
<metaTag name="translator"></metaTag>
<metaTag name="workNumber"></metaTag>
<metaTag name="workTitle">Voice-Piano-3-4</metaTag>
<Part>
<Staff id="1">
<StaffType group="pitched">
<name>stdNormal</name>
</StaffType>
</Staff>
<trackName>Voice</trackName>
<Instrument>
<longName>Voice</longName>
<shortName>Vo.</shortName>
<trackName>Voice</trackName>
<minPitchP>36</minPitchP>
<maxPitchP>94</maxPitchP>
<minPitchA>40</minPitchA>
<maxPitchA>79</maxPitchA>
<instrumentId>voice.vocals</instrumentId>
<Articulation>
<velocity>100</velocity>
<gateTime>100</gateTime>
</Articulation>
<Articulation name="staccatissimo">
<velocity>100</velocity>
<gateTime>33</gateTime>
</Articulation>
<Articulation name="staccato">
<velocity>100</velocity>
<gateTime>50</gateTime>
</Articulation>
<Articulation name="portato">
<velocity>100</velocity>
<gateTime>67</gateTime>
</Articulation>
<Articulation name="tenuto">
<velocity>100</velocity>
<gateTime>100</gateTime>
</Articulation>
<Articulation name="marcato">
<velocity>120</velocity>
<gateTime>67</gateTime>
</Articulation>
<Articulation name="sforzato">
<velocity>120</velocity>
<gateTime>100</gateTime>
</Articulation>
<Channel>
<program value="52"/>
<synti>Fluid</synti>
</Channel>
</Instrument>
</Part>
<Part>
<Staff id="2">
<StaffType group="pitched">
<name>stdNormal</name>
</StaffType>
<bracket type="1" span="2" col="0"/>
<barLineSpan>1</barLineSpan>
</Staff>
<Staff id="3">
<StaffType group="pitched">
<name>stdNormal</name>
</StaffType>
<defaultClef>F</defaultClef>
</Staff>
<trackName>Piano</trackName>
<Instrument>
<longName>Piano</longName>
<shortName>Pno.</shortName>
<trackName>Piano</trackName>
<minPitchP>21</minPitchP>
<maxPitchP>108</maxPitchP>
<minPitchA>21</minPitchA>
<maxPitchA>108</maxPitchA>
<instrumentId>keyboard.piano</instrumentId>
<clef staff="2">F</clef>
<Articulation>
<velocity>100</velocity>
<gateTime>95</gateTime>
</Articulation>
<Articulation name="staccatissimo">
<velocity>100</velocity>
<gateTime>33</gateTime>
</Articulation>
<Articulation name="staccato">
<velocity>100</velocity>
<gateTime>50</gateTime>
</Articulation>
<Articulation name="portato">
<velocity>100</velocity>
<gateTime>67</gateTime>
</Articulation>
<Articulation name="tenuto">
<velocity>100</velocity>
<gateTime>100</gateTime>
</Articulation>
<Articulation name="marcato">
<velocity>120</velocity>
<gateTime>67</gateTime>
</Articulation>
<Articulation name="sforzato">
<velocity>120</velocity>
<gateTime>100</gateTime>
</Articulation>
<Channel>
<program value="0"/>
<synti>Fluid</synti>
</Channel>
</Instrument>
</Part>
<Staff id="1">
<VBox>
<height>10</height>
<Text>
<style>Title</style>
<text>Voice-Piano-3-4</text>
</Text>
</VBox>
<Measure len="1/4">
<voice>
<KeySig>
<accidental>4</accidental>
</KeySig>
<TimeSig>
<sigN>3</sigN>
<sigD>4</sigD>
</TimeSig>
<Rest>
<durationType>eighth</durationType>
</Rest>
<Rest>
<durationType>eighth</durationType>
</Rest>
</voice>
</Measure>
</Staff>
<Staff id="2">
<Measure len="1/4">
<voice>
<KeySig>
<accidental>4</accidental>
</KeySig>
<TimeSig>
<sigN>3</sigN>
<sigD>4</sigD>
</TimeSig>
<Rest>
<durationType>measure</durationType>
<duration>1/4</duration>
</Rest>
</voice>
</Measure>
</Staff>
<Staff id="3">
<Measure len="1/4">
<voice>
<KeySig>
<accidental>4</accidental>
</KeySig>
<TimeSig>
<sigN>3</sigN>
<sigD>4</sigD>
</TimeSig>
<Rest>
<durationType>measure</durationType>
<duration>1/4</duration>
</Rest>
</voice>
</Measure>
</Staff>
</Score>
</museScore>

View file

@ -0,0 +1,16 @@
init init/Voice-Piano-3-4.mscx
cmd note-input
cmd escape
cmd pad-note-2
cmd time-delete
cmd note-input
cmd escape
cmd pad-note-8
cmd del-empty-measures
test score #280574-ctrl-del-corruption.mscx
cmd undo
cmd undo
cmd undo
cmd undo
test score init/Voice-Piano-3-4.mscx