]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/stem.hh
release: 1.0.15
[lilypond.git] / lily / include / stem.hh
1 /*
2   stem.hh -- declare Stem
3
4   (c) 1996--1998 Han-Wen Nienhuys
5 */
6
7 #ifndef STEM_HH
8 #define STEM_HH
9 #include "item.hh"
10 #include "array.hh"
11 #include "moment.hh"
12 #include "molecule.hh"
13
14
15 /**the rule attached to the ball.
16   takes care of:
17
18   \begin{itemize}
19   \item the rule
20   \item the flag
21   \item up/down position.
22   \end{itemize}
23
24   should move beam_{left, right} into Beam
25
26   TODO.
27   
28   Stem size depends on flag.
29   */
30 class Stem : public Item {
31
32     
33   Drul_array<Real> yextent_drul_;
34     
35   /// needed for determining direction/length
36   int staff_size_i_;
37
38   /**extent of the stem (positions).
39     fractional, since Beam has to adapt them.
40     */
41
42
43   /**
44     geen gedonder, jij gaat onder.
45     -1 stem points down, +1: stem points up
46     */
47   Direction  stem_xdir_;
48
49   Link_array<Note_head> head_l_arr_;
50   Link_array<Rest> rest_l_arr_;
51     
52 public:
53
54   /// how many abbrev beam don't reach stem?
55   int beam_gap_i_;
56
57   /// log of the duration. Eg. 4 -> 16th note -> 2 flags
58   int flag_i_;
59
60   /** 
61     don't print flag when in beam.
62     our beam, for aligning abbrev flags
63    */
64   Beam* beam_l_;
65
66   int beams_left_i_;
67   int beams_right_i_;
68
69   /// maximum number of beams
70   int mult_i_;
71
72   /// direction stem (that's me)
73   Direction dir_;
74
75   /// is direction explicitely specified?
76   bool dir_forced_b_;
77
78   /// direction of the beam
79   Direction beam_dir_;
80     
81   Stem ();
82     
83   /// ensure that this Stem also encompasses the Notehead #n#
84   void add_head (Rhythmic_head*n);
85
86   DECLARE_MY_RUNTIME_TYPEINFO;
87
88   Real hpos_f () const;
89   Real chord_start_f () const;
90   
91   int type_i () const;
92
93   void do_print() const;
94   void set_stemend (Real);
95   Direction get_default_dir() const;
96   Direction get_dir () const;
97
98   int get_center_distance(Direction) const;
99   void set_default_dir();
100   void set_default_stemlen();
101   void set_default_extents();
102   void set_noteheads();
103
104   Real stem_length_f() const;
105   Real stem_end_f() const;
106   Real stem_begin_f() const;
107   Real note_delta_f () const;
108
109   bool invisible_b() const;
110     
111   /// heads that the stem encompasses (positions)
112   Interval_t<int> head_positions() const;
113   virtual ~Stem ();
114 protected:
115   virtual void do_substitute_dependency (Score_element*,Score_element*);
116   virtual void do_pre_processing();
117   virtual Interval do_width() const;
118   Molecule* brew_molecule_p() const;
119 };
120 #endif