2 beam.hh -- part of GNU LilyPond
4 (c) 1996,97 Han-Wen Nienhuys
9 #include "lily-proto.hh"
10 #include "directional-spanner.hh"
13 /** a beam connects multiple stems.
15 Beam adjusts the stems its owns to make sure that they reach the
16 beam and that point in the correct direction */
17 class Beam: public Directional_spanner {
19 /** The beams (especially at small slopes) should be prevented to
20 conflict with the stafflines. This necessitates some quantisation
21 of start and end posititons of the beam.
23 enum Pos { NONE, SIT = 1, STRADDLE = 2, HANG = 4, INTER = 8 };
24 // ugh, silly C++ (Pos::NONE vs Quantise::NONE)
25 enum Quantise { NUNE, NORMAL, TRADITIONAL };
27 Link_array<Stem> stems_;
28 /// the slope of the beam in posns / point (dimension)
31 /// position of leftmost end of beam
33 /// should beam slope be damped? 0: no, 1: yes, 100000: horizontal beams
35 /// should beam pos / slope be quantised? 0: no, 1: yes, 2: traditional
36 Quantise quantisation_;
37 /// maximum number of beams (for opening-up of beam-spacing)
41 DECLARE_MY_RUNTIME_TYPEINFO;
45 void set_grouping (Rhythmic_grouping def, Rhythmic_grouping current);
47 SCORE_ELEM_CLONE (Beam);
50 virtual Interval do_width () const;
51 Offset center () const;
52 void set_default_dir ();
53 virtual void do_pre_processing ();
54 virtual void do_post_processing ();
55 virtual void do_substitute_dependent (Score_elem*, Score_elem*);
57 virtual void do_print() const;
59 virtual void quantise_left_y (Beam::Pos pos, bool extend_b);
60 virtual Molecule stem_beams (Stem *here, Stem *next, Stem *prev) const;
61 virtual void solve_slope ();
62 virtual void quantise_yspan ();
63 virtual Molecule*brew_molecule_p () const;