Skip to content

Commit

Permalink
Merge pull request #1282 from trig-ger/memory_fixes
Browse files Browse the repository at this point in the history
Fixes of memory leaks (using Valgrind)
  • Loading branch information
wschweer committed Oct 4, 2014
2 parents e2a4102 + 6832e96 commit 28893f9
Show file tree
Hide file tree
Showing 22 changed files with 317 additions and 298 deletions.
350 changes: 175 additions & 175 deletions aeolus/model.cpp

Large diffs are not rendered by default.

5 changes: 5 additions & 0 deletions libmscore/clef.cpp
Expand Up @@ -102,6 +102,11 @@ Clef::Clef(const Clef& c)
layout1();
}

Clef::~Clef()
{
qDeleteAll(elements);
}

//---------------------------------------------------------
// mag
//---------------------------------------------------------
Expand Down
1 change: 1 addition & 0 deletions libmscore/clef.h
Expand Up @@ -137,6 +137,7 @@ class Clef : public Element {
public:
Clef(Score*);
Clef(const Clef&);
~Clef();
virtual Clef* clone() const { return new Clef(*this); }
virtual Element::Type type() const { return Element::Type::CLEF; }
virtual void setSelected(bool f);
Expand Down
4 changes: 2 additions & 2 deletions libmscore/icon.cpp
Expand Up @@ -23,7 +23,7 @@ void Icon::write(Xml& xml) const
{
xml.stag(name());
xml.tag("subtype", int(_iconType));
if (_action)
if (!_action.isEmpty())
xml.tag("action", _action);
xml.etag();
}
Expand All @@ -37,7 +37,7 @@ void Icon::read(XmlReader& e)
while (e.readNextStartElement()) {
const QStringRef& tag(e.name());
if (tag == "action")
_action = strdup(e.readElementText().toLatin1().data());
_action = e.readElementText();
else if (tag == "subtype")
_iconType = IconType(e.readInt());
else
Expand Down
10 changes: 5 additions & 5 deletions libmscore/icon.h
Expand Up @@ -26,18 +26,18 @@ class Icon : public Element {
Q_OBJECT

IconType _iconType;
const char* _action;
QString _action;
QIcon _icon;

public:
Icon(Score* s) : Element(s), _iconType(IconType::NONE), _action(0) { }
Icon(Score* s) : Element(s), _iconType(IconType::NONE) { }
virtual Icon* clone() const { return new Icon(*this); }
virtual Element::Type type() const { return Element::Type::ICON; }
IconType iconType() const { return _iconType; }
void setIconType(IconType val) { _iconType = val; }
void setAction(const char* s, const QIcon& i) { _action = s; _icon = i; }
const char* action() const { return _action; }
QIcon icon() const { return _icon; }
void setAction(const QString& s, const QIcon& i) { _action = s; _icon = i; }
QString action() const { return _action; }
QIcon icon() const { return _icon; }
virtual void write(Xml&) const;
virtual void read(XmlReader&);
};
Expand Down
54 changes: 23 additions & 31 deletions libmscore/keysig.cpp
Expand Up @@ -56,8 +56,8 @@ KeySig::KeySig(const KeySig& k)
: Element(k)
{
_showCourtesy = k._showCourtesy;
foreach(KeySym* ks, k.keySymbols)
keySymbols.append(new KeySym(*ks));
for (const KeySym& ks: k.keySymbols)
keySymbols.append(ks);
_sig = k._sig;
_hideNaturals = false;
}
Expand All @@ -75,7 +75,7 @@ qreal KeySig::mag() const
// setCustom
//---------------------------------------------------------

void KeySig::setCustom(const QList<KeySym*>& symbols)
void KeySig::setCustom(const QList<KeySym>& symbols)
{
_sig.setCustomType(0);
keySymbols = symbols;
Expand All @@ -87,9 +87,9 @@ void KeySig::setCustom(const QList<KeySym*>& symbols)

void KeySig::addLayout(SymId sym, qreal x, int line)
{
KeySym* ks = new KeySym;
ks->sym = sym;
ks->spos = QPointF(x, qreal(line) * .5);
KeySym ks;
ks.sym = sym;
ks.spos = QPointF(x, qreal(line) * .5);
keySymbols.append(ks);
}

Expand All @@ -103,20 +103,18 @@ void KeySig::layout()
setbbox(QRectF());

if (staff() && !staff()->genKeySig()) { // no key sigs on TAB staves
qDeleteAll(keySymbols);
keySymbols.clear();
return;
}

if (isCustom()) {
foreach(KeySym* ks, keySymbols) {
ks->pos = ks->spos * _spatium;
addbbox(symBbox(ks->sym).translated(ks->pos));
for (KeySym& ks: keySymbols) {
ks.pos = ks.spos * _spatium;
addbbox(symBbox(ks.sym).translated(ks.pos));
}
return;
}

qDeleteAll(keySymbols);
keySymbols.clear();

// determine current clef for this staff
Expand Down Expand Up @@ -249,9 +247,9 @@ void KeySig::layout()

// compute bbox
setbbox(QRectF());
for (KeySym* ks : keySymbols) {
ks->pos = ks->spos * _spatium;
addbbox(symBbox(ks->sym).translated(ks->pos));
for (KeySym& ks : keySymbols) {
ks.pos = ks.spos * _spatium;
addbbox(symBbox(ks.sym).translated(ks.pos));
}
}

Expand All @@ -262,8 +260,8 @@ void KeySig::layout()
void KeySig::draw(QPainter* p) const
{
p->setPen(curColor());
foreach(const KeySym* ks, keySymbols)
drawSymbol(ks->sym, p, QPointF(ks->pos.x(), ks->pos.y()));
for (const KeySym& ks: keySymbols)
drawSymbol(ks.sym, p, QPointF(ks.pos.x(), ks.pos.y()));
}

//---------------------------------------------------------
Expand Down Expand Up @@ -334,10 +332,10 @@ void KeySig::write(Xml& xml) const
Element::writeProperties(xml);
if (_sig.custom()) {
xml.tag("custom", _sig.customType());
foreach(const KeySym* ks, keySymbols) {
for (const KeySym& ks: keySymbols) {
xml.stag("KeySym");
xml.tag("sym", int(ks->sym));
xml.tag("pos", ks->spos);
xml.tag("sym", int(ks.sym));
xml.tag("pos", ks.spos);
xml.etag();
}
}
Expand All @@ -361,13 +359,13 @@ void KeySig::read(XmlReader& e)
while (e.readNextStartElement()) {
const QStringRef& tag(e.name());
if (tag == "KeySym") {
KeySym* ks = new KeySym;
KeySym ks;
while (e.readNextStartElement()) {
const QStringRef& tag(e.name());
if (tag == "sym")
ks->sym = SymId(e.readInt());
ks.sym = SymId(e.readInt());
else if (tag == "pos")
ks->spos = e.readPoint();
ks.spos = e.readPoint();
else
e.unknown();
}
Expand Down Expand Up @@ -408,11 +406,9 @@ bool KeySig::operator==(const KeySig& k) const
if (n != k.keySymbols.size())
return false;
for (int i = 0; i < n; ++i) {
KeySym* ks1 = keySymbols[i];
KeySym* ks2 = k.keySymbols[i];
if (ks1->sym != ks2->sym)
if (keySymbols[i].sym != k.keySymbols[i].sym)
return false;
if (ks1->spos != ks2->spos)
if (keySymbols[i].spos != k.keySymbols[i].spos)
return false;
}
return true;
Expand All @@ -432,11 +428,7 @@ void KeySig::changeKeySigEvent(const KeySigEvent& t)
KeySig* ks = _score->customKeySig(t.customType());
if (!ks)
return;
foreach(KeySym* k, keySymbols)
delete k;
keySymbols.clear();
foreach(KeySym* k, ks->keySymbols)
keySymbols.append(new KeySym(*k));
keySymbols = ks->keySymbols;
}
setKeySigEvent(t);
}
Expand Down
4 changes: 2 additions & 2 deletions libmscore/keysig.h
Expand Up @@ -48,7 +48,7 @@ class KeySig : public Element {

bool _showCourtesy;
bool _hideNaturals; // used in layout to override score style (needed for the Continuous panel)
QList<KeySym*> keySymbols;
QList<KeySym> keySymbols;
KeySigEvent _sig;
void addLayout(SymId sym, qreal x, int y);

Expand All @@ -68,7 +68,7 @@ class KeySig : public Element {
Segment* segment() const { return (Segment*)parent(); }
Measure* measure() const { return parent() ? (Measure*)parent()->parent() : nullptr; }
Space space() const;
void setCustom(const QList<KeySym*>& symbols);
void setCustom(const QList<KeySym>& symbols);
virtual void write(Xml&) const;
virtual void read(XmlReader&);
//@ -7 (flats) -- +7 (sharps)
Expand Down
46 changes: 23 additions & 23 deletions libmscore/sym.cpp
Expand Up @@ -5224,10 +5224,10 @@ QString ScoreFont::symToHtml(SymId s, int leftMargin, const TextStyle* ts, qreal
size = ts->font(_spatium).pointSizeF();
}
else {
size = _font->pixelSize();
size = _font.pixelSize();
}

QString family = _font->family();
QString family = _font.family();
return QString(
"<data>"
"<html>"
Expand All @@ -5249,8 +5249,8 @@ QString ScoreFont::symToHtml(SymId s, int leftMargin, const TextStyle* ts, qreal

QString ScoreFont::symToHtml(SymId s1, SymId s2, int leftMargin)
{
qreal size = _font->pixelSize();
QString family = _font->family();
qreal size = _font.pixelSize();
QString family = _font.family();

return QString(
"<data>"
Expand Down Expand Up @@ -5331,19 +5331,19 @@ void ScoreFont::load()
exit(-1);
}
#endif
_font = new QFont();
_font->setWeight(QFont::Normal); // if not set we get system default
_font->setItalic(false);
_font->setFamily(_family);
_font->setStyleStrategy(QFont::NoFontMerging);
_font = QFont();
_font.setWeight(QFont::Normal); // if not set we get system default
_font.setItalic(false);
_font.setFamily(_family);
_font.setStyleStrategy(QFont::NoFontMerging);

// horizontal hinting is bad as note hooks do not attach to stems
// properly at some magnifications
_font->setHintingPreference(QFont::PreferVerticalHinting);
_font.setHintingPreference(QFont::PreferVerticalHinting);

qreal size = 20.0 * MScore::DPI / PPI;
QFont font2(font()); // See comment below
_font->setPixelSize(lrint(size));
_font.setPixelSize(lrint(size));
font2.setPixelSize(lrint(size)*100); // See comment below
// Since under Windows HintingPreferences always behave as PreferFullHinting (integer result)
// unless DirectWrite is enabled during Qt compilation (and it would work only for Windows 7
Expand All @@ -5362,7 +5362,7 @@ void ScoreFont::load()
qDebug("Json parse error in <%s>(offset: %d): %s", qPrintable(fi.fileName()),
error.offset, qPrintable(error.errorString()));

_fm = new QFontMetricsF(font());
_fm = QFontMetricsF(font());
QFontMetrics fm2(font2); // See comment above
for (auto i : o.keys()) {
bool ok;
Expand All @@ -5374,7 +5374,7 @@ void ScoreFont::load()
Sym* sym = &_symbols[int(symId)];
sym->setString(codeToString(code));
sym->setWidth((fm2.width(sym->string()))/100.0); // Renormalization; see comment above
sym->setBbox(QRectF(_fm->tightBoundingRect(sym->string())));
sym->setBbox(QRectF(_fm.tightBoundingRect(sym->string())));
}
//else
// qDebug("unknown glyph: %s", qPrintable(i));
Expand Down Expand Up @@ -5507,7 +5507,7 @@ void ScoreFont::load()
for (SymId id : c.rids)
s += _symbols[int(id)].string();
sym->setString(s);
sym->setBbox(QRectF(_fm->tightBoundingRect(s)));
sym->setBbox(QRectF(_fm.tightBoundingRect(s)));
}
}

Expand Down Expand Up @@ -5545,7 +5545,7 @@ void ScoreFont::load()
if (ok) {
QString s = codeToString(code);
sym->setString(s);
sym->setBbox(QRectF(_fm->tightBoundingRect(s)));
sym->setBbox(QRectF(_fm.tightBoundingRect(s)));
}
break;
}
Expand All @@ -5561,27 +5561,27 @@ void ScoreFont::load()
{ SymId::unicodeNoteDoubleWhole, QString("%1%2").arg(QChar(0xd834)).arg(QChar(0xdd5c)) },
{ SymId::unicodeNoteWhole, QString("%1%2").arg(QChar(0xd834)).arg(QChar(0xdd5d)) },
{ SymId::unicodeNoteHalfUp, QString("%1%2").arg(QChar(0xd834)).arg(QChar(0xdd5e)) },
{ SymId::unicodeNoteQuarterUp, QString("%1%2").arg(QChar(0xd834)).arg(QChar(0xdd5f)) },
{ SymId::unicodeNoteQuarterUp, QString("%1%2").arg(QChar(0xd834)).arg(QChar(0xdd5f)) },
{ SymId::unicodeNote8thUp, QString("%1%2").arg(QChar(0xd834)).arg(QChar(0xdd60)) },
{ SymId::unicodeNote16thUp, QString("%1%2").arg(QChar(0xd834)).arg(QChar(0xdd61)) },
{ SymId::unicodeNote32ndUp, QString("%1%2").arg(QChar(0xd834)).arg(QChar(0xdd62)) },
{ SymId::unicodeNote64thUp, QString("%1%2").arg(QChar(0xd834)).arg(QChar(0xdd63)) },
{ SymId::unicodeNote128thUp, QString("%1%2").arg(QChar(0xd834)).arg(QChar(0xdd64)) },
{ SymId::unicodeAugmentationDot, QString("%1%2").arg(QChar(0xd834)).arg(QChar(0xdd6D)) }
};

for (const UnicodeAlternate& unicode : unicodes) {
Sym* sym = &_symbols[int(unicode.id)];
sym->setString(unicode.string);
sym->setBbox(QRectF(_fm->tightBoundingRect(sym->string())));
sym->setBbox(QRectF(_fm.tightBoundingRect(sym->string())));
}


// add space symbol
Sym* sym = &_symbols[int(SymId::space)];
sym->setString("\u0020");
sym->setBbox(QRectF(_fm->tightBoundingRect(sym->string())));
sym->setBbox(QRectF(_fm.tightBoundingRect(sym->string())));

/*for (int i = 1; i < int(SymId::lastSym); ++i) {
Sym sym = _symbols[i];
if (!sym.isValid())
Expand Down Expand Up @@ -5643,7 +5643,7 @@ const QRectF ScoreFont::bbox(SymId id, qreal mag) const

const QRectF ScoreFont::bbox(const QString& s, qreal mag) const
{
QRectF r(_fm->tightBoundingRect(s));
QRectF r(_fm.tightBoundingRect(s));
return QRectF(r.x() * mag, r.y() * mag, r.width() * mag, r.height() * mag);
}

Expand Down

0 comments on commit 28893f9

Please sign in to comment.