-
Notifications
You must be signed in to change notification settings - Fork 2.6k
/
articulation.h
144 lines (108 loc) · 4.81 KB
/
articulation.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
//=============================================================================
// 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
//=============================================================================
#ifndef __ARTICULATION_H__
#define __ARTICULATION_H__
#include "element.h"
class QPainter;
namespace Ms {
class ChordRest;
class Segment;
class Measure;
class System;
class Page;
enum class SymId;
//---------------------------------------------------------
// ArticulationInfo
// gives infos about note attributes
//---------------------------------------------------------
enum class ArticulationAnchor : char {
TOP_STAFF, // anchor is always placed at top of staff
BOTTOM_STAFF, // anchor is always placed at bottom of staff
CHORD, // anchor depends on chord direction, away from stem
TOP_CHORD, // attribute is alway placed at top of chord
BOTTOM_CHORD, // attribute is placed at bottom of chord
};
// flags:
enum class ArticulationShowIn : char { PITCHED_STAFF = 1, TABLATURE = 2 };
constexpr ArticulationShowIn operator| (ArticulationShowIn a1, ArticulationShowIn a2) {
return static_cast<ArticulationShowIn>(static_cast<unsigned char>(a1) | static_cast<unsigned char>(a2));
}
constexpr bool operator& (ArticulationShowIn a1, ArticulationShowIn a2) {
return static_cast<unsigned char>(a1) & static_cast<unsigned char>(a2);
}
//---------------------------------------------------------
// @@ Articulation
/// articulation marks
//---------------------------------------------------------
class Articulation : public Element {
Q_OBJECT
SymId _symId;
Direction _direction;
QString _channelName;
ArticulationAnchor _anchor;
bool _up;
qreal _timeStretch; // for fermata
MScore::OrnamentStyle _ornamentStyle; // for use in ornaments such as trill
bool _playArticulation;
virtual void draw(QPainter*) const;
public:
Articulation(Score*);
Articulation(SymId, Score*);
Articulation &operator=(const Articulation&) = delete;
virtual Articulation* clone() const override { return new Articulation(*this); }
virtual Element::Type type() const override { return Element::Type::ARTICULATION; }
virtual qreal mag() const override;
SymId symId() const { return _symId; }
void setSymId(SymId id);
virtual int subtype() const override { return int(_symId); }
QString userName() const;
const char* articulationName() const; // type-name of articulation; used for midi rendering
virtual void layout() override;
virtual void read(XmlReader&) override;
virtual void write(XmlWriter& xml) const override;
virtual bool readProperties(XmlReader&) override;
virtual void reset() override;
virtual QLineF dragAnchor() const override;
virtual QVariant getProperty(P_ID propertyId) const override;
virtual bool setProperty(P_ID propertyId, const QVariant&) override;
virtual QVariant propertyDefault(P_ID) const override;
virtual PropertyStyle propertyStyle(P_ID) const override;
virtual void resetProperty(P_ID id) override;
StyleIdx getPropertyStyle(P_ID id) const override;
bool up() const { return _up; }
void setUp(bool val);
void setDirection(Direction d);
Direction direction() const { return _direction; }
ChordRest* chordRest() const;
Segment* segment() const;
Measure* measure() const;
System* system() const;
Page* page() const;
ArticulationAnchor anchor() const { return _anchor; }
void setAnchor(ArticulationAnchor v) { _anchor = v; }
qreal timeStretch() const { return _timeStretch; }
void setTimeStretch(qreal val) { _timeStretch = val; }
MScore::OrnamentStyle ornamentStyle() const { return _ornamentStyle; }
void setOrnamentStyle(MScore::OrnamentStyle val) { _ornamentStyle = val; }
bool playArticulation() const { return _playArticulation;}
void setPlayArticulation(bool val) { _playArticulation = val; }
QString channelName() const { return _channelName; }
void setChannelName(const QString& s) { _channelName = s; }
QString accessibleInfo() const override;
bool isFermata() const;
bool isTenuto() const;
bool isStaccato() const;
bool isAccent() const;
bool isLuteFingering() const;
};
} // namespace Ms
#endif