Skip to content

Commit

Permalink
preparations for using fractions instead of ticks in Segment()
Browse files Browse the repository at this point in the history
  • Loading branch information
wschweer committed Dec 21, 2018
1 parent 7cb9349 commit 2ce05d0
Show file tree
Hide file tree
Showing 5 changed files with 128 additions and 64 deletions.
4 changes: 4 additions & 0 deletions libmscore/check.cpp
Expand Up @@ -358,13 +358,16 @@ void Measure::checkMeasure(int staffIdx)
Fraction expectedPos = 0;
Fraction currentPos = 0;

printf("Check measure==\n");
for (Segment* seg = first(SegmentType::ChordRest); seg; seg = seg->next(SegmentType::ChordRest)) {
Element* e = seg->element(track);
if (!e)
continue;

ChordRest* cr = toChordRest(e);
currentPos = seg->rfrac() * stretch;
printf(" %d/%d ", seg->rfrac().numerator(), seg->rfrac().denominator());
fflush(stdout);

if (currentPos < expectedPos)
qDebug("overlap measure %6d at %d-%d track %d", tick(), (currentPos/stretch).ticks(), (expectedPos/stretch).ticks(), track);
Expand All @@ -377,6 +380,7 @@ void Measure::checkMeasure(int staffIdx)
seg = skipTuplet(tuplet);
de = tuplet;
}
printf(" + %d/%d\n", de->duration().numerator(), de->duration().denominator());
expectedPos = currentPos + de->duration();
}
if (f > expectedPos) {
Expand Down
104 changes: 81 additions & 23 deletions libmscore/segment.cpp
Expand Up @@ -121,7 +121,7 @@ Segment::Segment(Measure* m, SegmentType st, int t)
{
setParent(m);
_segmentType = st;
_tick = t;
setRtick(t);
init();
}

Expand Down Expand Up @@ -787,26 +787,6 @@ void Segment::checkEmpty() const
}
}

//---------------------------------------------------------
// rfrac
// return relative position of segment in measure
//---------------------------------------------------------

Fraction Segment::rfrac() const
{
return Fraction::fromTicks(_tick);
}

//---------------------------------------------------------
// afrac
// return absolute position of segment
//---------------------------------------------------------

Fraction Segment::afrac() const
{
return Fraction::fromTicks(tick());
}

//---------------------------------------------------------
// swapElements
//---------------------------------------------------------
Expand Down Expand Up @@ -865,7 +845,7 @@ QVariant Segment::getProperty(Pid propertyId) const
{
switch (propertyId) {
case Pid::TICK:
return _tick;
return _tick.ticks();
case Pid::LEADING_SPACE:
return extraLeadingSpace();
default:
Expand Down Expand Up @@ -895,7 +875,7 @@ bool Segment::setProperty(Pid propertyId, const QVariant& v)
{
switch (propertyId) {
case Pid::TICK:
_tick = v.toInt();
setRtick(v.toInt());
break;
case Pid::LEADING_SPACE:
setExtraLeadingSpace(v.value<Spatium>());
Expand Down Expand Up @@ -2091,4 +2071,82 @@ qreal Segment::minHorizontalDistance(Segment* ns, bool systemHeaderGap) const
return w;
}

//---------------------------------------------------------
// setTick
// *** deprecated ***
//---------------------------------------------------------

void Segment::setTick(int t)
{
setRtick(t - measure()->tick());
}

//---------------------------------------------------------
// tick
// *** deprecated ***
//---------------------------------------------------------

int Segment::tick() const
{
return rtick() + measure()->tick();
}

//---------------------------------------------------------
// ticks
//---------------------------------------------------------

int Segment::ticks() const
{
return _ticks.ticks();
}

//---------------------------------------------------------
// setTicks
//---------------------------------------------------------

void Segment::setTicks(int val)
{
_ticks = Fraction::fromTicks(val);
}

//---------------------------------------------------------
// rtick
// tickposition relative to measure start
//---------------------------------------------------------

int Segment::rtick() const
{
return _tick.ticks();
}

//---------------------------------------------------------
// setRtick
//---------------------------------------------------------

void Segment::setRtick(int val)
{
_tick = Fraction::fromTicks(val);
}

//---------------------------------------------------------
// rfrac
// return relative position of segment in measure
//---------------------------------------------------------

Fraction Segment::rfrac() const
{
return _tick;
}

//---------------------------------------------------------
// afrac
// return absolute position of segment
// *** deprecated ***
//---------------------------------------------------------

Fraction Segment::afrac() const
{
return _tick + Fraction::fromTicks(measure()->tick());
}

} // namespace Ms
17 changes: 9 additions & 8 deletions libmscore/segment.h
Expand Up @@ -83,8 +83,8 @@ constexpr bool operator& (const SegmentType t1, const SegmentType t2) {

class Segment final : public Element {
SegmentType _segmentType { SegmentType::Invalid };
int _tick = 0; // tick offset to measure
int _ticks = 0;
Fraction _tick; // { Fraction(0, 1) };
Fraction _ticks; // { Fraction(0, 1) };
Spatium _extraLeadingSpace;
qreal _stretch;

Expand Down Expand Up @@ -187,14 +187,15 @@ class Segment final : public Element {

qreal stretch() const { return _stretch; }
void setStretch(qreal v) { _stretch = v; }
void setTick(int t) { _tick = t - parent()->tick(); }
virtual int tick() const override { return _tick + parent()->tick(); }
virtual int rtick() const override { return _tick; } // tickposition relative to measure start

void setTick(int t);
virtual int tick() const override;
virtual int rtick() const override;
Fraction rfrac() const;
Fraction afrac() const;
void setRtick(int val) { _tick = val; }
int ticks() const { return _ticks; }
void setTicks(int val) { _ticks = val; }
void setRtick(int val);
int ticks() const;
void setTicks(int val);

bool splitsTuplet() const;

Expand Down

0 comments on commit 2ce05d0

Please sign in to comment.