Skip to content

Commit

Permalink
fix #179926: add scale property for time signature
Browse files Browse the repository at this point in the history
  • Loading branch information
wschweer committed Mar 9, 2017
1 parent 5b7c72a commit cf42a3a
Show file tree
Hide file tree
Showing 29 changed files with 527 additions and 240 deletions.
13 changes: 9 additions & 4 deletions libmscore/element.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1405,19 +1405,24 @@ void Element::scriptSetUserOff(const QPointF& o)
// drawSymbol
//---------------------------------------------------------

void Element::drawSymbol(SymId id, QPainter* p, const QPointF& o) const
void Element::drawSymbol(SymId id, QPainter* p, const QPointF& o, qreal scale) const
{
score()->scoreFont()->draw(id, p, magS(), o);
score()->scoreFont()->draw(id, p, magS() * scale, o);
}

void Element::drawSymbol(SymId id, QPainter* p, const QPointF& o, int n) const
{
score()->scoreFont()->draw(id, p, magS(), o, n);
}

void Element::drawSymbols(const std::vector<SymId>& s, QPainter* p, const QPointF& o) const
void Element::drawSymbols(const std::vector<SymId>& s, QPainter* p, const QPointF& o, qreal scale) const
{
score()->scoreFont()->draw(s, p, magS(), o);
score()->scoreFont()->draw(s, p, magS() * scale, o);
}

void Element::drawSymbols(const std::vector<SymId>& s, QPainter* p, const QPointF& o, const QSizeF& scale) const
{
score()->scoreFont()->draw(s, p, magS() * scale, o);
}

//---------------------------------------------------------
Expand Down
5 changes: 3 additions & 2 deletions libmscore/element.h
Original file line number Diff line number Diff line change
Expand Up @@ -453,9 +453,10 @@ class Element : public ScoreElement {

virtual void styleChanged() {}

void drawSymbol(SymId id, QPainter* p, const QPointF& o = QPointF()) const;
void drawSymbol(SymId id, QPainter* p, const QPointF& o = QPointF(), qreal scale = 1.0) const;
void drawSymbol(SymId id, QPainter* p, const QPointF& o, int n) const;
void drawSymbols(const std::vector<SymId>&, QPainter* p, const QPointF& o = QPointF()) const;
void drawSymbols(const std::vector<SymId>&, QPainter* p, const QPointF& o = QPointF(), qreal scale = 1.0) const;
void drawSymbols(const std::vector<SymId>&, QPainter* p, const QPointF& o, const QSizeF& scale) const;
qreal symHeight(SymId id) const;
qreal symWidth(SymId id) const;
qreal symWidth(const std::vector<SymId>&) const;
Expand Down
2 changes: 1 addition & 1 deletion libmscore/excerpt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1138,7 +1138,7 @@ QList<Excerpt*> Excerpt::createAllExcerpt(MasterScore *score)
QList<Excerpt*> all;
for (Part* part : score->parts()) {
if (part->show()) {
Excerpt* e = new Excerpt(score);
Excerpt* e = new Excerpt(score);
e->parts().append(part);
for (int i = part->startTrack(), j = 0; i < part->endTrack(); i++, j++) {
e->tracks().insert(i, j);
Expand Down
5 changes: 4 additions & 1 deletion libmscore/layout.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2979,8 +2979,11 @@ System* Score::collectSystem(LayoutContext& lc)
continue;
Measure* m = toMeasure(mb);
m->staffShape(si).clear();
for (Segment& s : m->segments())
for (Segment& s : m->segments()) {
if (s.isTimeSigType()) // hack: ignore time signatures
continue;
m->staffShape(si).add(s.staffShape(si).translated(s.pos()));
}
m->staffShape(si).add(m->staffLines(si)->bbox());
}
}
Expand Down
18 changes: 9 additions & 9 deletions libmscore/mscore.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,10 @@ bool MScore::useFallbackFont = true;
bool MScore::saveTemplateMode = false;
bool MScore::noGui = false;

MStyle MScore::_defaultStyleForParts;
MStyle MScore::_baseStyle;
MStyle MScore::_defaultStyle;
MStyle* MScore::_defaultStyleForParts;

QString MScore::_globalShare;
int MScore::_vRaster;
int MScore::_hRaster;
Expand Down Expand Up @@ -197,7 +199,6 @@ void Direction::fillComboBox(QComboBox* cb)
}

static Spatium doubleToSpatium(double d) { return Spatium(d); }
// static SubStyle intToSubStyle(int i) { return SubStyle(i); }

//---------------------------------------------------------
// init
Expand All @@ -209,8 +210,6 @@ void MScore::init()
qFatal("registerConverter Spatium::toDouble failed");
if (!QMetaType::registerConverter<double, Spatium>(&doubleToSpatium))
qFatal("registerConverter doubleToSpatium failed");
// if (!QMetaType::registerConverter<int, SubStyle>(&intToSubStyle))
// qFatal("registerConverter intToSubStyle failed");

#ifdef SCRIPT_INTERFACE
qRegisterMetaType<ElementType> ("ElementType");
Expand Down Expand Up @@ -287,6 +286,7 @@ void MScore::init()
//
// initialize styles
//
_baseStyle.precomputeValues();
QSettings s;
QString defStyle = s.value("defaultStyle").toString();
if (!defStyle.isEmpty()) {
Expand All @@ -297,16 +297,16 @@ void MScore::init()
}
}
_defaultStyle.precomputeValues();
_baseStyle = _defaultStyle;
_defaultStyleForParts = _defaultStyle;
QString partStyle = s.value("partStyle").toString();
if (!partStyle.isEmpty()) {
QFile f(partStyle);
if (f.open(QIODevice::ReadOnly))
_defaultStyleForParts.load(&f);
if (f.open(QIODevice::ReadOnly)) {
_defaultStyleForParts = new MStyle(_defaultStyle);
_defaultStyleForParts->load(&f);
_defaultStyleForParts->precomputeValues();
}
}


//
// load internal fonts
//
Expand Down
13 changes: 7 additions & 6 deletions libmscore/mscore.h
Original file line number Diff line number Diff line change
Expand Up @@ -383,9 +383,9 @@ class MPaintDevice : public QPaintDevice {
class MScore : public QObject {
Q_GADGET

static MStyle _defaultStyle; // buildin modified by preferences
static MStyle _defaultStyleForParts;
static MStyle _baseStyle; // buildin initial style
static MStyle _defaultStyle; // buildin modified by preferences
static MStyle* _defaultStyleForParts;

static QString _globalShare;
static int _hRaster, _vRaster;
Expand All @@ -409,11 +409,12 @@ class MScore : public QObject {

static void init();

static void defaultStyleForPartsHasChanged();
static void setDefaultStyle(const MStyle& s) { _defaultStyle = s; }
static MStyle& defaultStyle() { return _defaultStyle; }
static const MStyle& defaultStyleForParts() { return _defaultStyleForParts; }
static const MStyle& baseStyle() { return _baseStyle; }
static MStyle& defaultStyle() { return _defaultStyle; }
static const MStyle* defaultStyleForParts() { return _defaultStyleForParts; }

static void setDefaultStyle(const MStyle& s) { _defaultStyle = s; }
static void defaultStyleForPartsHasChanged();

static const QString& globalShare() { return _globalShare; }
static qreal hRaster() { return _hRaster; }
Expand Down
2 changes: 1 addition & 1 deletion libmscore/property.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ static constexpr PropertyData propertyList[] = {
{ P_ID::AUTOSCALE, "autoscale", false, "autoScale", P_TYPE::BOOL },
{ P_ID::SIZE, "size", false, "size", P_TYPE::SIZE },

{ P_ID::SCALE, "scale", false, 0, P_TYPE::SCALE },
{ P_ID::SCALE, "scale", false, "scale", P_TYPE::SCALE },
{ P_ID::LOCK_ASPECT_RATIO, "lock_aspect_ratio", false, "lockAspectRatio", P_TYPE::BOOL },
{ P_ID::SIZE_IS_SPATIUM, "size_is_spatium", false, "sizeIsSpatium", P_TYPE::BOOL },
{ P_ID::TEXT, "text", false, 0, P_TYPE::STRING },
Expand Down
2 changes: 1 addition & 1 deletion libmscore/read300.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ bool Score::read(XmlReader& e)
else {
e.tracks().clear(); // ???
MasterScore* m = masterScore();
Score* s = new Score(m, MScore::baseStyle());
Score* s = new Score(m);
Excerpt* ex = new Excerpt(m);

ex->setPartScore(s);
Expand Down
41 changes: 19 additions & 22 deletions libmscore/score.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -267,31 +267,28 @@ Score::Score(MasterScore* parent)
: Score{}
{
_masterScore = parent;
QString partStyle = QSettings().value("partStyle").toString();
if (!partStyle.isEmpty())
style() = MScore::defaultStyleForParts();
if (MScore::defaultStyleForParts())
_style = *MScore::defaultStyleForParts();
else {
// inherit most style settings from parent
style() = parent->style();

_style = parent->style();

static const StyleIdx styles[] = {
StyleIdx::pageWidth,
StyleIdx::pageHeight,
StyleIdx::pagePrintableWidth,
StyleIdx::pageEvenLeftMargin,
StyleIdx::pageOddLeftMargin,
StyleIdx::pageEvenTopMargin,
StyleIdx::pageEvenBottomMargin,
StyleIdx::pageOddTopMargin,
StyleIdx::pageOddBottomMargin,
StyleIdx::pageTwosided,
StyleIdx::spatium
};
// but borrow defaultStyle page layout settings
for (auto i :
{
StyleIdx::pageWidth,
StyleIdx::pageHeight,
StyleIdx::pagePrintableWidth,
StyleIdx::pageEvenLeftMargin,
StyleIdx::pageOddLeftMargin,
StyleIdx::pageEvenTopMargin,
StyleIdx::pageEvenBottomMargin,
StyleIdx::pageOddTopMargin,
StyleIdx::pageOddBottomMargin,
StyleIdx::pageTwosided,
StyleIdx::spatium
} ) {
style().set(i, MScore::defaultStyle().value(i));
}

for (auto i : styles)
_style.set(i, MScore::defaultStyle().value(i));
// and force some style settings that just make sense for parts
style().set(StyleIdx::concertPitch, false);
style().set(StyleIdx::createMultiMeasureRests, true);
Expand Down
2 changes: 1 addition & 1 deletion libmscore/scorefile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -915,7 +915,7 @@ Score::FileError MasterScore::read1(XmlReader& e, bool ignoreVersionError)
error = read114(e);
else
*/
if (mscVersion() <= 206)
if (mscVersion() <= 206)
error = read206(e);
else
error = read300(e);
Expand Down
8 changes: 1 addition & 7 deletions libmscore/style.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ static const StyleType styleTypes[] {
{ StyleIdx::ambitusMargin, "ambitusMargin", Spatium(0.5) },

{ StyleIdx::timesigLeftMargin, "timesigLeftMargin", Spatium(0.5) },
{ StyleIdx::timesigScale, "timesigScale", QVariant(QSizeF(1.0, 1.0)) },
{ StyleIdx::clefKeyRightMargin, "clefKeyRightMargin", Spatium(0.8) },
{ StyleIdx::clefKeyDistance, "clefKeyDistance", Spatium(1.0) }, // gould: 1 - 1.25
{ StyleIdx::clefTimesigDistance, "clefTimesigDistance", Spatium(1.0) },
Expand Down Expand Up @@ -1273,7 +1274,6 @@ MStyle::MStyle()
_customChordList = false;
for (const StyleType& t : styleTypes)
_values[t.idx()] = t.defaultValue();
//precomputeValues();
};

//---------------------------------------------------------
Expand Down Expand Up @@ -1538,10 +1538,4 @@ void checkStyles()
}
#endif

//---------------------------------------------------------
// _defaultStyle
//---------------------------------------------------------

MStyle MScore::_defaultStyle;

}
1 change: 1 addition & 0 deletions libmscore/style.h
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ enum class StyleIdx {
keysigLeftMargin,
ambitusMargin,
timesigLeftMargin,
timesigScale,

clefKeyRightMargin,
clefKeyDistance,
Expand Down
66 changes: 54 additions & 12 deletions libmscore/sym.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5604,7 +5604,7 @@ SymId Sym::userName2id(const QString& s)
bool GlyphKey::operator==(const GlyphKey& k) const
{
return (face == k.face) && (id == k.id)
&& (mag == k.mag) && (worldScale == k.worldScale) && (color == k.color);
&& (magX == k.magX) && (magY == k.magY) && (worldScale == k.worldScale) && (color == k.color);
}

//---------------------------------------------------------
Expand All @@ -5617,7 +5617,18 @@ void ScoreFont::draw(SymId id, QPainter* painter, qreal mag, const QPointF& pos)
draw(id, painter, mag, pos, worldScale);
}

void ScoreFont::draw(SymId id, QPainter* painter, const QSizeF& mag, const QPointF& pos) const
{
qreal worldScale = painter->worldTransform().m11();
draw(id, painter, mag, pos, worldScale);
}

void ScoreFont::draw(SymId id, QPainter* painter, qreal mag, const QPointF& pos, qreal worldScale) const
{
draw(id, painter, QSizeF(mag, mag), pos, worldScale);
}

void ScoreFont::draw(SymId id, QPainter* painter, const QSizeF& mag, const QPointF& pos, qreal worldScale) const
{
if (!sym(id).symList().empty()) { // is this a compound symbol?
draw(sym(id).symList(), painter, mag, pos);
Expand Down Expand Up @@ -5652,11 +5663,11 @@ void ScoreFont::draw(SymId id, QPainter* painter, qreal mag, const QPointF& pos,
qreal size = 20.0 * MScore::pixelRatio;
font->setPointSize(size);
}
qreal imag = 1.0 / mag;
painter->scale(mag, mag);
QSizeF imag = QSizeF(1.0 / mag.width(), 1.0 / mag.height());
painter->scale(mag.width(), mag.height());
painter->setFont(*font);
painter->drawText(pos * imag, toString(id));
painter->scale(imag, imag);
painter->drawText(QPointF(pos.x() * imag.width(), pos.y() * imag.height()), toString(id));
painter->scale(imag.width(), imag.height());
return;
}

Expand All @@ -5667,14 +5678,15 @@ void ScoreFont::draw(SymId id, QPainter* painter, qreal mag, const QPointF& pos,
worldScale *= pixelRatio;
// if (worldScale < 1.0)
// worldScale = 1.0;
int scale16 = lrint(worldScale * 6553.6 * mag * DPI_F);
int scale16X = lrint(worldScale * 6553.6 * mag.width() * DPI_F);
int scale16Y = lrint(worldScale * 6553.6 * mag.height() * DPI_F);

GlyphKey gk(face, id, mag, worldScale, color);
GlyphKey gk(face, id, mag.width(), mag.height(), worldScale, color);
GlyphPixmap* pm = cache->object(gk);
if (!pm) {
FT_Matrix matrix {
scale16, 0,
0, scale16
scale16X, 0,
0, scale16Y
};

FT_Glyph glyph;
Expand Down Expand Up @@ -5733,12 +5745,28 @@ void ScoreFont::draw(const std::vector<SymId>& ids, QPainter* p, qreal mag, cons
}
}

void ScoreFont::draw(const std::vector<SymId>& ids, QPainter* p, const QSizeF& mag, const QPointF& _pos) const
{
qreal scale = p->worldTransform().m11();
draw(ids, p, mag, _pos, scale);
}

void ScoreFont::draw(const std::vector<SymId>& ids, QPainter* p, const QSizeF& mag, const QPointF& _pos, qreal scale) const
{
QPointF pos(_pos);
for (SymId id : ids) {
draw(id, p, mag, pos, scale);
pos.rx() += (sym(id).advance() * mag.width());
}
}

void ScoreFont::draw(const std::vector<SymId>& ids, QPainter* p, qreal mag, const QPointF& _pos) const
{
qreal scale = p->worldTransform().m11();
draw(ids, p, mag, _pos, scale);
}


//---------------------------------------------------------
// id2name
//---------------------------------------------------------
Expand Down Expand Up @@ -6215,24 +6243,38 @@ bool ScoreFont::useFallbackFont(SymId id) const
//---------------------------------------------------------

const QRectF ScoreFont::bbox(SymId id, qreal mag) const
{
return bbox(id, QSizeF(mag, mag));
}

const QRectF ScoreFont::bbox(SymId id, const QSizeF& mag) const
{
if (useFallbackFont(id))
return fallbackFont()->bbox(id, mag);
return fallbackFont()->bbox(id, mag.width());
QRectF r = sym(id).bbox();
return QRectF(r.x() * mag, r.y() * mag, r.width() * mag, r.height() * mag);
return QRectF(r.x() * mag.width(), r.y() * mag.height(), r.width() * mag.width(), r.height() * mag.height());
}

const QRectF ScoreFont::bbox(const std::vector<SymId>& s, qreal mag) const
{
return bbox(s, QSizeF(mag, mag));
}

const QRectF ScoreFont::bbox(const std::vector<SymId>& s, const QSizeF& mag) const
{
QRectF r;
QPointF pos;
for (SymId id : s) {
r |= bbox(id, mag).translated(pos);
pos.rx() += advance(id, mag);
pos.rx() += advance(id, mag.width());
}
return r;
}

//---------------------------------------------------------
// advance
//---------------------------------------------------------

qreal ScoreFont::advance(SymId id, qreal mag) const
{
if (useFallbackFont(id))
Expand Down
Loading

0 comments on commit cf42a3a

Please sign in to comment.