]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/beam.hh
release: 1.1.50
[lilypond.git] / lily / include / beam.hh
1 /*
2   beam.hh -- part of GNU LilyPond
3
4   (c) 1996--1999 Han-Wen Nienhuys
5 */
6
7 #ifndef BEAM_HH
8 #define BEAM_HH
9
10 #include "lily-proto.hh"
11 #include "directional-spanner.hh"
12 #include "stem-info.hh"
13
14
15 /** a beam connects multiple stems.
16
17   Beam adjusts the stems its owns to make sure that they reach the
18   beam and that point in the correct direction
19
20 elt property:
21
22 damping: amount of beam slope damping. (int)
23
24 should beam slope be damped? 0: no, 1: yes, 100000: horizontal beams 
25
26
27 */
28 class Beam : public Directional_spanner  {
29 public:
30   /** 
31     The beams should be prevented to conflict with the stafflines, 
32     especially at small slopes.
33     */
34   enum Quantisation { NONE, NORMAL, TRADITIONAL, TEST };
35   enum Dir_algorithm { /* DOWN=-1, UP=1, */ MAJORITY=2, MEAN, MEDIAN };
36
37   Link_array<Stem> stems_;
38   /**
39      the slope of the beam in (staffpositions) per (X-dimension, in PT).
40      UGH. standardise this for once and for all.
41    */
42   Real slope_f_;
43
44   /// position of leftmost end of beam  
45   Real left_y_;
46
47   /** should beam pos / slope be quantised? 0: no, 1: yes, 2: traditional
48       JUNKME.
49    */
50   Quantisation quantisation_;
51   
52   /// maximum number of beams (for opening-up of beam-spacing)
53   int multiple_i_;
54
55   Array<Stem_info> sinfo_;
56   
57   Beam();
58   void add_stem (Stem*);
59   Stem_info get_stem_info (Stem*);
60
61   void set_grouping (Rhythmic_grouping def, Rhythmic_grouping current);
62   void set_stemlens ();
63   VIRTUAL_COPY_CONS(Score_element);
64
65 protected:
66   virtual Interval do_width () const;    
67   Offset center () const;
68   Direction get_default_dir () const;
69   void set_direction (Direction);
70   void set_steminfo ();
71   
72   virtual void do_pre_processing ();
73   virtual void do_post_processing ();
74   virtual void do_substitute_element_pointer (Score_element*, Score_element*);
75   virtual void do_print() const;
76   virtual void quantise_left_y (bool extend_b);
77   virtual Molecule stem_beams (Stem *here, Stem *next, Stem *prev) const;
78   virtual void calculate_slope ();
79   virtual Real check_stemlengths_f (bool set_b);
80   virtual void solve_slope ();
81   virtual void quantise_dy ();
82   virtual Molecule*do_brew_molecule_p () const;
83 };
84
85 #endif // BEAM_HH
86