MuseScore/libmscore/repeat.cpp
2020-05-29 21:15:25 +02:00

98 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();
}
}