2 stem.hh -- declare Stem
4 (c) 1996--1999 Han-Wen Nienhuys
12 #include "molecule.hh"
13 #include "staff-symbol-referencer.hh"
15 /**the rule attached to the ball.
21 \item up/down position.
24 should move beam_{left, right} into Beam
28 Stem size depends on flag.
32 beam_dir: direction of the beam (int)
34 dir_force: is direction explicitely specified? (bool)
37 // todo: remove baseclass Staff_symbol_referencer, since stem
38 // can be across a staff.
39 class Stem : public Item, public Staff_symbol_referencer {
41 /**extent of the stem (positions).
42 fractional, since Beam has to adapt them.
44 Drul_array<Real> yextent_drul_;
47 geen gedonder, jij gaat onder.
48 -1 stem points down, +1: stem points up
52 Link_array<Note_head> head_l_arr_;
53 Link_array<Rest> rest_l_arr_;
56 /// how many abbrev beam don't reach stem?
59 /// log of the duration. Eg. 4 -> 16th note -> 2 flags
63 don't print flag when in beam.
64 our beam, for aligning abbrev flags
68 Drul_array<int> beams_i_drul_;
70 /// maximum number of beams
73 /// direction stem (that's me)
79 /// ensure that this Stem also encompasses the Notehead #n#
80 void add_head (Rhythmic_head*n);
85 Real chord_start_f () const;
89 void do_print() const;
90 void set_stemend (Real);
91 Direction get_default_dir() const;
92 Direction get_dir () const;
94 int get_center_distance(Direction) const;
95 void set_default_dir();
96 void set_default_stemlen();
97 void set_default_extents();
100 Real stem_length_f() const;
101 Real stem_end_f() const;
102 Real stem_begin_f() const;
103 Real note_delta_f () const;
105 bool invisible_b() const;
107 /// heads that the stem encompasses (positions)
108 Interval_t<int> head_positions() const;
111 virtual void do_substitute_element_pointer (Score_element*,Score_element*);
112 virtual void do_pre_processing();
113 virtual Interval do_width() const;
114 virtual Molecule* do_brew_molecule_p() const;