fix #282404: line colour not saved
This commit is contained in:
parent
6469ea48c6
commit
43b1d5f050
8 changed files with 338 additions and 9 deletions
|
@ -405,7 +405,7 @@ void LineSegment::localSpatiumChanged(qreal ov, qreal nv)
|
|||
Element* LineSegment::propertyDelegate(Pid pid)
|
||||
{
|
||||
if (pid == Pid::DIAGONAL
|
||||
|| pid == Pid::LINE_COLOR
|
||||
|| pid == Pid::COLOR
|
||||
|| pid == Pid::LINE_WIDTH
|
||||
|| pid == Pid::LINE_STYLE
|
||||
|| pid == Pid::DASH_LINE_LEN
|
||||
|
@ -959,7 +959,7 @@ void SLine::writeProperties(XmlWriter& xml) const
|
|||
xml.tag("diagonal", _diagonal);
|
||||
writeProperty(xml, Pid::LINE_WIDTH);
|
||||
writeProperty(xml, Pid::LINE_STYLE);
|
||||
writeProperty(xml, Pid::LINE_COLOR);
|
||||
writeProperty(xml, Pid::COLOR);
|
||||
writeProperty(xml, Pid::ANCHOR);
|
||||
writeProperty(xml, Pid::DASH_LINE_LEN);
|
||||
writeProperty(xml, Pid::DASH_GAP_LEN);
|
||||
|
@ -1040,6 +1040,8 @@ bool SLine::readProperties(XmlReader& e)
|
|||
_dashGapLen = e.readDouble();
|
||||
else if (tag == "lineColor")
|
||||
_lineColor = e.readColor();
|
||||
else if (tag == "color")
|
||||
_lineColor = e.readColor();
|
||||
else if (!Element::readProperties(e))
|
||||
return false;
|
||||
return true;
|
||||
|
@ -1110,7 +1112,7 @@ QVariant SLine::getProperty(Pid id) const
|
|||
switch (id) {
|
||||
case Pid::DIAGONAL:
|
||||
return _diagonal;
|
||||
case Pid::LINE_COLOR:
|
||||
case Pid::COLOR:
|
||||
return _lineColor;
|
||||
case Pid::LINE_WIDTH:
|
||||
return _lineWidth;
|
||||
|
@ -1135,7 +1137,7 @@ bool SLine::setProperty(Pid id, const QVariant& v)
|
|||
case Pid::DIAGONAL:
|
||||
_diagonal = v.toBool();
|
||||
break;
|
||||
case Pid::LINE_COLOR:
|
||||
case Pid::COLOR:
|
||||
_lineColor = v.value<QColor>();
|
||||
break;
|
||||
case Pid::LINE_WIDTH:
|
||||
|
@ -1166,7 +1168,7 @@ QVariant SLine::propertyDefault(Pid pid) const
|
|||
switch (pid) {
|
||||
case Pid::DIAGONAL:
|
||||
return false;
|
||||
case Pid::LINE_COLOR:
|
||||
case Pid::COLOR:
|
||||
return MScore::defaultColor;
|
||||
case Pid::LINE_WIDTH:
|
||||
if (propertyFlags(pid) != PropertyFlags::NOSTYLE)
|
||||
|
|
|
@ -167,7 +167,6 @@ static constexpr PropertyMetaData propertyList[] = {
|
|||
{ Pid::DIAGONAL, false, 0, P_TYPE::BOOL, DUMMY_QT_TRANSLATE_NOOP("propertyName", "diagonal") },
|
||||
{ Pid::GROUPS, false, 0, P_TYPE::GROUPS, DUMMY_QT_TRANSLATE_NOOP("propertyName", "groups") },
|
||||
{ Pid::LINE_STYLE, false, "lineStyle", P_TYPE::INT, DUMMY_QT_TRANSLATE_NOOP("propertyName", "line style") },
|
||||
{ Pid::LINE_COLOR, false, 0, P_TYPE::COLOR, DUMMY_QT_TRANSLATE_NOOP("propertyName", "line color") },
|
||||
{ Pid::LINE_WIDTH, false, "lineWidth", P_TYPE::SP_REAL, DUMMY_QT_TRANSLATE_NOOP("propertyName", "line width") },
|
||||
{ Pid::LASSO_POS, false, 0, P_TYPE::POINT_MM, DUMMY_QT_TRANSLATE_NOOP("propertyName", "lasso position") },
|
||||
{ Pid::LASSO_SIZE, false, 0, P_TYPE::SIZE_MM, DUMMY_QT_TRANSLATE_NOOP("propertyName", "lasso size") },
|
||||
|
|
|
@ -185,7 +185,6 @@ enum class Pid {
|
|||
DIAGONAL,
|
||||
GROUPS,
|
||||
LINE_STYLE,
|
||||
LINE_COLOR,
|
||||
LINE_WIDTH,
|
||||
LASSO_POS,
|
||||
LASSO_SIZE,
|
||||
|
|
|
@ -57,7 +57,7 @@ InspectorTextLineBase::InspectorTextLineBase(QWidget* parent)
|
|||
const std::vector<InspectorItem> iiList = {
|
||||
{ Pid::DIAGONAL, 0, l.diagonal, l.resetDiagonal },
|
||||
{ Pid::LINE_VISIBLE, 0, l.lineVisible, l.resetLineVisible },
|
||||
{ Pid::LINE_COLOR, 0, l.lineColor, l.resetLineColor },
|
||||
{ Pid::COLOR, 0, l.lineColor, l.resetLineColor },
|
||||
{ Pid::LINE_WIDTH, 0, l.lineWidth, l.resetLineWidth },
|
||||
{ Pid::LINE_STYLE, 0, l.lineStyle, l.resetLineStyle },
|
||||
{ Pid::DASH_LINE_LEN, 0, l.dashLineLength, l.resetDashLineLength },
|
||||
|
@ -196,6 +196,8 @@ void InspectorTextLineBase::valueChanged(int idx)
|
|||
updateBeginHookType();
|
||||
else if (iList[idx].t == Pid::END_HOOK_TYPE)
|
||||
updateEndHookType();
|
||||
else if (iList[idx].t == Pid::COLOR)
|
||||
inspector->update();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -159,7 +159,7 @@ class Element : public Ms::PluginAPI::ScoreElement {
|
|||
API_PROPERTY( diagonal, DIAGONAL )
|
||||
API_PROPERTY( groups, GROUPS )
|
||||
API_PROPERTY( lineStyle, LINE_STYLE )
|
||||
API_PROPERTY( lineColor, LINE_COLOR )
|
||||
API_PROPERTY( lineColor, COLOR )
|
||||
API_PROPERTY( lineWidth, LINE_WIDTH )
|
||||
API_PROPERTY( lassoPos, LASSO_POS )
|
||||
API_PROPERTY( lassoSize, LASSO_SIZE )
|
||||
|
|
148
mtest/libmscore/spanners/linecolor01-ref.mscx
Normal file
148
mtest/libmscore/spanners/linecolor01-ref.mscx
Normal file
|
@ -0,0 +1,148 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<museScore version="3.01">
|
||||
<Score>
|
||||
<LayerTag id="0" tag="default"></LayerTag>
|
||||
<currentLayer>0</currentLayer>
|
||||
<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="lyricist"></metaTag>
|
||||
<metaTag name="movementNumber"></metaTag>
|
||||
<metaTag name="movementTitle"></metaTag>
|
||||
<metaTag name="poet"></metaTag>
|
||||
<metaTag name="source"></metaTag>
|
||||
<metaTag name="translator"></metaTag>
|
||||
<metaTag name="workNumber"></metaTag>
|
||||
<metaTag name="workTitle"></metaTag>
|
||||
<Part>
|
||||
<Staff id="1">
|
||||
<StaffType group="pitched">
|
||||
<name>stdNormal</name>
|
||||
</StaffType>
|
||||
</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>
|
||||
<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>150</velocity>
|
||||
<gateTime>100</gateTime>
|
||||
</Articulation>
|
||||
<Articulation name="sforzatoStaccato">
|
||||
<velocity>150</velocity>
|
||||
<gateTime>50</gateTime>
|
||||
</Articulation>
|
||||
<Articulation name="marcatoStaccato">
|
||||
<velocity>120</velocity>
|
||||
<gateTime>50</gateTime>
|
||||
</Articulation>
|
||||
<Articulation name="marcatoTenuto">
|
||||
<velocity>120</velocity>
|
||||
<gateTime>100</gateTime>
|
||||
</Articulation>
|
||||
<Channel>
|
||||
<program value="0"/>
|
||||
</Channel>
|
||||
</Instrument>
|
||||
</Part>
|
||||
<Staff id="1">
|
||||
<Measure>
|
||||
<voice>
|
||||
<TimeSig>
|
||||
<sigN>4</sigN>
|
||||
<sigD>4</sigD>
|
||||
</TimeSig>
|
||||
<Spanner type="Pedal">
|
||||
<Pedal>
|
||||
<endHookType>1</endHookType>
|
||||
<beginHookType>1</beginHookType>
|
||||
<color r="255" g="0" b="0" a="255"/>
|
||||
<color r="255" g="0" b="0" a="255"/>
|
||||
</Pedal>
|
||||
<next>
|
||||
<location>
|
||||
<measures>1</measures>
|
||||
</location>
|
||||
</next>
|
||||
</Spanner>
|
||||
<Rest>
|
||||
<durationType>measure</durationType>
|
||||
<duration>4/4</duration>
|
||||
</Rest>
|
||||
</voice>
|
||||
</Measure>
|
||||
<Measure>
|
||||
<voice>
|
||||
<Spanner type="Pedal">
|
||||
<prev>
|
||||
<location>
|
||||
<measures>-1</measures>
|
||||
</location>
|
||||
</prev>
|
||||
</Spanner>
|
||||
<Rest>
|
||||
<durationType>measure</durationType>
|
||||
<duration>4/4</duration>
|
||||
</Rest>
|
||||
</voice>
|
||||
</Measure>
|
||||
<Measure>
|
||||
<voice>
|
||||
<Rest>
|
||||
<durationType>measure</durationType>
|
||||
<duration>4/4</duration>
|
||||
</Rest>
|
||||
</voice>
|
||||
</Measure>
|
||||
<Measure>
|
||||
<voice>
|
||||
<Rest>
|
||||
<durationType>measure</durationType>
|
||||
<duration>4/4</duration>
|
||||
</Rest>
|
||||
</voice>
|
||||
</Measure>
|
||||
</Staff>
|
||||
</Score>
|
||||
</museScore>
|
157
mtest/libmscore/spanners/linecolor01.mscx
Normal file
157
mtest/libmscore/spanners/linecolor01.mscx
Normal file
|
@ -0,0 +1,157 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<museScore version="3.01">
|
||||
<programVersion>3.1.0</programVersion>
|
||||
<programRevision>3543170</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">2019-02-18</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"></metaTag>
|
||||
<Part>
|
||||
<Staff id="1">
|
||||
<StaffType group="pitched">
|
||||
<name>stdNormal</name>
|
||||
</StaffType>
|
||||
</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>
|
||||
<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>150</velocity>
|
||||
<gateTime>100</gateTime>
|
||||
</Articulation>
|
||||
<Articulation name="sforzatoStaccato">
|
||||
<velocity>150</velocity>
|
||||
<gateTime>50</gateTime>
|
||||
</Articulation>
|
||||
<Articulation name="marcatoStaccato">
|
||||
<velocity>120</velocity>
|
||||
<gateTime>50</gateTime>
|
||||
</Articulation>
|
||||
<Articulation name="marcatoTenuto">
|
||||
<velocity>120</velocity>
|
||||
<gateTime>100</gateTime>
|
||||
</Articulation>
|
||||
<Channel>
|
||||
<program value="0"/>
|
||||
<synti>Fluid</synti>
|
||||
</Channel>
|
||||
</Instrument>
|
||||
</Part>
|
||||
<Staff id="1">
|
||||
<!-- Measure 1 -->
|
||||
<Measure>
|
||||
<voice>
|
||||
<TimeSig>
|
||||
<sigN>4</sigN>
|
||||
<sigD>4</sigD>
|
||||
</TimeSig>
|
||||
<Spanner type="Pedal">
|
||||
<Pedal>
|
||||
<endHookType>1</endHookType>
|
||||
<beginHookType>1</beginHookType>
|
||||
</Pedal>
|
||||
<next>
|
||||
<location>
|
||||
<measures>1</measures>
|
||||
</location>
|
||||
</next>
|
||||
</Spanner>
|
||||
<Rest>
|
||||
<durationType>measure</durationType>
|
||||
<duration>4/4</duration>
|
||||
</Rest>
|
||||
</voice>
|
||||
</Measure>
|
||||
<!-- Measure 2 -->
|
||||
<Measure>
|
||||
<voice>
|
||||
<Spanner type="Pedal">
|
||||
<prev>
|
||||
<location>
|
||||
<measures>-1</measures>
|
||||
</location>
|
||||
</prev>
|
||||
</Spanner>
|
||||
<Rest>
|
||||
<durationType>measure</durationType>
|
||||
<duration>4/4</duration>
|
||||
</Rest>
|
||||
</voice>
|
||||
</Measure>
|
||||
<!-- Measure 3 -->
|
||||
<Measure>
|
||||
<voice>
|
||||
<Rest>
|
||||
<durationType>measure</durationType>
|
||||
<duration>4/4</duration>
|
||||
</Rest>
|
||||
</voice>
|
||||
</Measure>
|
||||
<!-- Measure 4 -->
|
||||
<Measure>
|
||||
<voice>
|
||||
<Rest>
|
||||
<durationType>measure</durationType>
|
||||
<duration>4/4</duration>
|
||||
</Rest>
|
||||
</voice>
|
||||
</Measure>
|
||||
</Staff>
|
||||
</Score>
|
||||
</museScore>
|
|
@ -23,6 +23,7 @@
|
|||
#include "libmscore/score.h"
|
||||
#include "libmscore/system.h"
|
||||
#include "libmscore/undo.h"
|
||||
#include "libmscore/line.h"
|
||||
|
||||
#define DIR QString("libmscore/spanners/")
|
||||
|
||||
|
@ -52,6 +53,7 @@ class TestSpanners : public QObject, public MTest
|
|||
void spanners12(); // remove a measure containing the middle portion of a LyricsLine and undo
|
||||
// void spanners13(); // drop a line break at the middle of a LyricsLine and check LyricsLineSegments
|
||||
void spanners14(); // creating part from an existing grand staff containing a cross staff glissando
|
||||
void spanners15(); // change the color of a line and save it
|
||||
};
|
||||
|
||||
//---------------------------------------------------------
|
||||
|
@ -621,6 +623,26 @@ void TestSpanners::spanners14()
|
|||
delete score;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
/// spanners15
|
||||
/// set the color of a spanner and save
|
||||
//---------------------------------------------------------
|
||||
|
||||
void TestSpanners::spanners15()
|
||||
{
|
||||
MasterScore* score = readScore(DIR + "linecolor01.mscx");
|
||||
QVERIFY(score);
|
||||
|
||||
for (auto it = score->spanner().cbegin(); it != score->spanner().cend(); ++it) {
|
||||
Spanner* spanner = (*it).second;
|
||||
SLine* sl = static_cast<SLine*>(spanner);
|
||||
sl->setProperty(Pid::COLOR, QVariant::fromValue(QColor(255, 0, 0, 255)));
|
||||
}
|
||||
|
||||
QVERIFY(saveCompareScore(score, "linecolor01.mscx", DIR + "linecolor01-ref.mscx"));
|
||||
delete score;
|
||||
}
|
||||
|
||||
|
||||
|
||||
QTEST_MAIN(TestSpanners)
|
||||
|
|
Loading…
Reference in a new issue