MuseScore/libmscore/style_p.h

129 lines
4.3 KiB
C++

//=============================================================================
// MuseScore
// Music Composition & Notation
// $Id:$
//
// 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
//=============================================================================
#ifndef __STYLE_P_H__
#define __STYLE_P_H__
//
// private header for MStyle
//
#include "elementlayout.h"
#include "articulation.h"
#include "page.h"
class Xml;
struct ChordDescription;
class ChordList;
//---------------------------------------------------------
// TextStyleData
//---------------------------------------------------------
class TextStyleData : public QSharedData, public ElementLayout {
protected:
qreal frameWidthMM; // for compatibility with old scores
qreal paddingWidthMM;
QString name; // style name
QString family; // font face
qreal size;
bool bold;
bool italic;
bool underline;
bool hasFrame;
bool sizeIsSpatiumDependent; // text point size depends on _spatium unit
Spatium frameWidth;
Spatium paddingWidth;
int frameRound;
QColor frameColor;
bool circle;
bool systemFlag;
QColor foregroundColor;
QColor backgroundColor;
public:
TextStyleData(QString _name, QString _family, qreal _size,
bool _bold, bool _italic, bool _underline,
Align _align,
const QPointF& _off, OffsetType _ot, const QPointF& _roff,
bool sizeSpatiumDependent,
Spatium fw, Spatium pw, int fr,
QColor co, bool circle, bool systemFlag,
QColor fg, QColor bg);
TextStyleData();
void write(Xml&) const;
void writeProperties(Xml& xml) const;
void read(const QDomElement&);
bool readProperties(const QDomElement& v);
QFont font(qreal space) const;
QFont fontPx(qreal spatium) const;
QRectF bbox(qreal space, const QString& s) const { return fontMetrics(space).boundingRect(s); }
QFontMetricsF fontMetrics(qreal space) const { return QFontMetricsF(font(space)); }
bool operator!=(const TextStyleData& s) const;
friend class TextStyle;
};
//---------------------------------------------------------
// StyleData
// this structure contains all style elements
//---------------------------------------------------------
class StyleData : public QSharedData {
protected:
QVector<StyleVal> _values;
mutable ChordList* _chordList;
QList<TextStyle> _textStyles;
PageFormat _pageFormat;
qreal _spatium;
ArticulationAnchor _articulationAnchor[ARTICULATIONS];
bool _customChordList; // if true, chordlist will be saved as part of score
void set(const StyleVal& v) { _values[v.getIdx()] = v; }
StyleVal value(StyleIdx idx) const { return _values[idx]; }
const TextStyle& textStyle(int idx) const;
const TextStyle& textStyle(const QString&) const;
int textStyleType(const QString&) const;
void setTextStyle(const TextStyle& ts);
public:
StyleData();
StyleData(const StyleData&);
~StyleData();
bool load(QFile* qf);
void load(const QDomElement& e);
void save(Xml& xml, bool optimize) const;
bool isDefault(StyleIdx) const;
const ChordDescription* chordDescription(int id) const;
ChordList* chordList() const;
void setChordList(ChordList*); // Style gets ownership of ChordList
const PageFormat* pageFormat() const { return &_pageFormat; }
void setPageFormat(const PageFormat& pf);
friend class MStyle;
qreal spatium() const { return _spatium; }
void setSpatium(qreal v) { _spatium = v; }
ArticulationAnchor articulationAnchor(int id) const { return _articulationAnchor[id]; }
void setArticulationAnchor(int id, ArticulationAnchor val) { _articulationAnchor[id] = val; }
friend class TextStyle;
};
#endif