30270e4cbd
Measure rest was drawn on fix y coordinate. Now the y coordinate is calculated taking the staff height into account so it is always vertically centered. Also the size of the symbol is sized depending on the staff line distance.
99 lines
2.6 KiB
C++
99 lines
2.6 KiB
C++
//=============================================================================
|
|
// MuseScore
|
|
// Music Composition & Notation
|
|
//
|
|
// Copyright (C) 2002-2011 Werner Schweer
|
|
//
|
|
// This program is free software; you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License version 2
|
|
// as published by the Free Software Foundation and appearing in
|
|
// the file LICENCE.GPL
|
|
//=============================================================================
|
|
|
|
#include "repeat.h"
|
|
#include "sym.h"
|
|
#include "score.h"
|
|
#include "system.h"
|
|
#include "measure.h"
|
|
#include "mscore.h"
|
|
#include "staff.h"
|
|
|
|
namespace Ms {
|
|
|
|
//---------------------------------------------------------
|
|
// RepeatMeasure
|
|
//---------------------------------------------------------
|
|
|
|
RepeatMeasure::RepeatMeasure(Score* score)
|
|
: Rest(score)
|
|
{
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// draw
|
|
//---------------------------------------------------------
|
|
|
|
void RepeatMeasure::draw(QPainter* painter) const
|
|
{
|
|
painter->setBrush(QBrush(curColor()));
|
|
painter->setPen(Qt::NoPen);
|
|
painter->drawPath(path);
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// layout
|
|
//---------------------------------------------------------
|
|
|
|
void RepeatMeasure::layout()
|
|
{
|
|
for (Element* e : el())
|
|
e->layout();
|
|
|
|
Staff* st = staff();
|
|
qreal ld = st ? st->lineDistance(tick()) : 1.0;
|
|
qreal sp = spatium();
|
|
|
|
qreal y = sp * 1.0 * ld;
|
|
qreal w = sp * 2.4 * ld;
|
|
qreal h = sp * 2.0 * ld;
|
|
qreal lw = sp * .50 * ld; // line width
|
|
qreal r = sp * .20 * ld; // dot radius
|
|
|
|
setPos(0.0, (st ? (st->height() - h) / 2.0 : y) - y);
|
|
|
|
path = QPainterPath();
|
|
|
|
path.moveTo(w - lw, y);
|
|
path.lineTo(w, y);
|
|
path.lineTo(lw, h+y);
|
|
path.lineTo(0.0, h+y);
|
|
path.closeSubpath();
|
|
path.addEllipse(QRectF(w * .25 - r, y+h * .25 - r, r * 2.0, r * 2.0 ));
|
|
path.addEllipse(QRectF(w * .75 - r, y+h * .75 - r, r * 2.0, r * 2.0 ));
|
|
|
|
setbbox(path.boundingRect());
|
|
// _space.setRw(width());
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// ticks
|
|
//---------------------------------------------------------
|
|
|
|
Fraction RepeatMeasure::ticks() const
|
|
{
|
|
if (measure())
|
|
return measure()->stretchedLen(staff());
|
|
return Fraction(0, 1);
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// accessibleInfo
|
|
//---------------------------------------------------------
|
|
|
|
QString RepeatMeasure::accessibleInfo() const
|
|
{
|
|
return Element::accessibleInfo();
|
|
}
|
|
|
|
}
|
|
|