17 #include "durationtype.h"
28 enum class SpannerSegmentType;
36 class Beam final :
public Element {
38 QVector<ChordRest*> _elements;
39 QVector<QLineF*> beamSegments;
46 bool _userModified[2];
54 QVector<BeamFragment*> fragments;
60 TDuration maxDuration;
63 void layout2(std::vector<ChordRest*>, SpannerSegmentType,
int frag);
64 bool twoBeamedNotes();
65 void computeStemLen(
const std::vector<ChordRest*>& crl, qreal& py1,
int beamLevels);
66 bool slopeZero(
const std::vector<ChordRest*>& crl);
72 enum class Mode : signed char {
82 virtual Beam* clone()
const override {
return new Beam(*
this); }
87 virtual bool isEditable()
const override {
return true; }
88 virtual void startEdit(EditData&)
override;
89 virtual void endEdit(EditData&)
override;
90 virtual void editDrag(EditData&)
override;
91 virtual void updateGrips(EditData&)
const override;
93 virtual Fraction tick()
const override;
94 virtual Fraction rtick()
const override;
96 virtual void write(XmlWriter& xml)
const override;
97 virtual void read(XmlReader&)
override;
98 virtual void spatiumChanged(qreal , qreal )
override;
100 virtual void reset()
override;
102 System* system()
const {
return toSystem(parent()); }
105 void layoutGraceNotes();
108 const QVector<ChordRest*>& elements() {
return _elements; }
109 void clear() { _elements.clear(); }
110 bool empty()
const {
return _elements.empty(); }
111 bool contains(
const ChordRest* cr)
const {
return std::find(_elements.begin(), _elements.end(), cr) != _elements.end(); }
113 virtual void add(Element*)
override;
114 virtual void remove(Element*)
override;
116 virtual void move(
const QPointF&)
override;
117 virtual void draw(QPainter*)
const override;
119 bool up()
const {
return _up; }
120 void setUp(
bool v) { _up = v; }
121 void setId(
int i)
const { _id = i; }
122 int id()
const {
return _id; }
123 bool noSlope()
const {
return _noSlope; }
124 void setNoSlope(
bool val) { _noSlope = val; }
127 Direction beamDirection()
const {
return _direction; }
129 virtual bool acceptDrop(EditData&)
const override;
130 virtual Element* drop(EditData&)
override;
132 qreal growLeft()
const {
return _grow1; }
133 qreal growRight()
const {
return _grow2; }
134 void setGrowLeft(qreal val) { _grow1 = val; }
135 void setGrowRight(qreal val) { _grow2 = val; }
137 bool distribute()
const {
return _distribute; }
138 void setDistribute(
bool val) { _distribute = val; }
140 bool userModified()
const;
141 void setUserModified(
bool val);
143 QPointF beamPos()
const;
144 void setBeamPos(
const QPointF& bp);
146 qreal beamDist()
const {
return _beamDist; }
148 virtual QVariant getProperty(Pid propertyId)
const override;
149 virtual bool setProperty(Pid propertyId,
const QVariant&)
override;
150 virtual QVariant propertyDefault(Pid
id)
const override;
152 bool isGrace()
const {
return _isGrace; }
153 bool cross()
const {
return _cross; }
155 void addSkyline(Skyline&);
157 virtual void triggerLayout()
const override;
Mode
Definition: beam.h:72
virtual QPointF pagePos() const override
position in page coordinates
virtual QPointF canvasPos() const override
position in page coordinates
Definition: cursor.cpp:29
ElementType
Definition: types.h:34
Direction
Definition: types.h:281