File: line.h

package info (click to toggle)
musescore3 3.2.3%2Bdfsg2-11
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 210,672 kB
  • sloc: cpp: 291,093; xml: 200,238; sh: 3,779; ansic: 1,447; python: 393; makefile: 240; perl: 82; pascal: 79
file content (130 lines) | stat: -rw-r--r-- 5,058 bytes parent folder | download | duplicates (4)
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
//=============================================================================
//  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 __LINE_H__
#define __LINE_H__

#include "spanner.h"
#include "mscore.h"

namespace Ms {

class SLine;
class System;

//---------------------------------------------------------
//   @@ LineSegment
///    Virtual base class for segmented lines segments
///    (OttavaSegment, HairpinSegment, TrillSegment...)
///
///    This class describes one segment of an segmented
///    line object. Line objects can span multiple staves.
///    For every staff a segment is created.
//---------------------------------------------------------

class LineSegment : public SpannerSegment {
   protected:
      virtual void startEdit(EditData&) override;
      virtual void editDrag(EditData&) override;
      virtual bool edit(EditData&) override;
      virtual void updateGrips(EditData&) const override;
      virtual QPointF gripAnchor(Grip) const override;
      virtual void startEditDrag(EditData&) override;

   public:
      LineSegment(Spanner* sp, Score* s, ElementFlags f = ElementFlag::NOTHING) : SpannerSegment(sp, s, f) {}
      LineSegment(Score* s, ElementFlags f = ElementFlag::NOTHING) : SpannerSegment(s, f) {}
      LineSegment(const LineSegment&);
      virtual void draw(QPainter*) const = 0;
      SLine* line() const                         { return (SLine*)spanner(); }
      virtual void spatiumChanged(qreal, qreal) override;
      virtual void localSpatiumChanged(qreal, qreal) override;

      friend class SLine;
      virtual void read(XmlReader&) override;
      bool readProperties(XmlReader&);

      virtual Element* propertyDelegate(Pid) override;

      virtual QLineF dragAnchor() const override;
      };

//---------------------------------------------------------
//   @@ SLine
///    virtual base class for Hairpin, Trill and TextLine
//---------------------------------------------------------

class SLine : public Spanner {
      qreal _lineWidth;
      QColor _lineColor       { MScore::defaultColor };
      Qt::PenStyle _lineStyle { Qt::SolidLine };
      qreal _dashLineLen      { 5.0   };
      qreal _dashGapLen       { 5.0   };
      bool _diagonal          { false };

      PropertyFlags lineWidthStyle;
      PropertyFlags lineStyleStyle;
      PropertyFlags lineColorStyle;

   protected:
      virtual QPointF linePos(Grip, System** system) const;

   public:
      SLine(Score* s, ElementFlags = ElementFlag::NOTHING);
      SLine(const SLine&);

      virtual void layout() override;
      virtual SpannerSegment* layoutSystem(System*) override;

      bool readProperties(XmlReader& node);
      void writeProperties(XmlWriter& xml) const;
      virtual LineSegment* createLineSegment() = 0;
      void setLen(qreal l);
      using Element::bbox;
      virtual const QRectF& bbox() const override;

      virtual void write(XmlWriter&) const override;
      virtual void read(XmlReader&) override;

      bool diagonal() const               { return _diagonal; }
      void setDiagonal(bool v)            { _diagonal = v;    }

      qreal lineWidth() const             { return _lineWidth;            }
      QColor lineColor() const            { return _lineColor;            }
      Qt::PenStyle lineStyle() const      { return _lineStyle;            }
      void setLineWidth(const qreal& v)   { _lineWidth = v;               }
      void setLineColor(const QColor& v)  { _lineColor = v;               }
      void setLineStyle(Qt::PenStyle v)   { _lineStyle = v;               }

      qreal dashLineLen() const           { return _dashLineLen; }
      void setDashLineLen(qreal val)      { _dashLineLen = val; }
      qreal dashGapLen() const            { return _dashGapLen; }
      void setDashGapLen(qreal val)       { _dashGapLen = val; }

      LineSegment* frontSegment()               { return toLineSegment(Spanner::frontSegment()); }
      const LineSegment* frontSegment() const   { return toLineSegment(Spanner::frontSegment()); }
      LineSegment* backSegment()                { return toLineSegment(Spanner::backSegment());  }
      const LineSegment* backSegment() const    { return toLineSegment(Spanner::backSegment());  }
      LineSegment* segmentAt(int n)             { return toLineSegment(Spanner::segmentAt(n));   }
      const LineSegment* segmentAt(int n) const { return toLineSegment(Spanner::segmentAt(n));   }

      virtual QVariant getProperty(Pid id) const override;
      virtual bool setProperty(Pid propertyId, const QVariant&) override;
      virtual QVariant propertyDefault(Pid id) const override;

      friend class LineSegment;
      };


}     // namespace Ms
#endif