]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/include/beam.hh
release: 1.0.8
[lilypond.git] / lily / include / beam.hh
index a85858bad82c9c62d78ca0b0056c2778c9a61118..f6f59c8c9eb24f178eefdd837ee5966479073eb3 100644 (file)
@@ -1,50 +1,67 @@
 /*
-  beam.hh -- part of LilyPond
+  beam.hh -- part of GNU LilyPond
 
-  (c) 1996,97 Han-Wen Nienhuys
+  (c) 1996--1998 Han-Wen Nienhuys
 */
 
 #ifndef BEAM_HH
 #define BEAM_HH
-#include "proto.hh"
+#include "lily-proto.hh"
 #include "directional-spanner.hh"
 #include "plist.hh"
 
-/** a beam connects multiple stems Beam adjusts the stems its owns to
-  make sure that they reach the beam and that point in the correct
-  direction */
-struct Beam:  public Directional_spanner {
-    PointerList<Stem*> stems;
-    /// the slope of the beam in posns / point (dimension)   
-    Real slope;
-
-    /// position of leftmost end of beam  
-    Real left_pos;
-   
-
-    /* *************** */
-NAME_MEMBERS(Beam);
-    
-    virtual Interval do_width()const;    
-    Offset center() const;
-    Spanner *do_break_at(PCol *,  PCol *) const;
-    Beam();
-    void add(Stem*);
-    
-
-    void set_default_dir();
-    void do_pre_processing();
-    void do_post_processing();
-
-    void do_print() const;
-    void set_grouping(Rhythmic_grouping def, Rhythmic_grouping current);
-    void set_stemlens();
-    ~Beam();
-
-private:
-    Molecule stem_beams(Stem *here, Stem *next, Stem *prev)const;
-    void solve_slope();
-    Molecule*brew_molecule_p()const;
+/** a beam connects multiple stems.
+
+  Beam adjusts the stems its owns to make sure that they reach the
+  beam and that point in the correct direction */
+class Beam:  public Directional_spanner {
+public:
+  /** 
+    The beams should be prevented to conflict with the stafflines, 
+    especially at small slopes.
+    */
+  enum Quantisation { NONE, NORMAL, TRADITIONAL, TEST };
+  enum Dir_algorithm { /* DOWN=-1, UP=1, */ MAJORITY=2, MEAN, MEDIAN };
+
+  Link_array<Stem> stems_;
+  /// the slope of the beam in posns / point (dimension)   
+  Real slope_f_;
+  /// the slope as solved; not quantised or damped
+  Real solved_slope_f_;
+
+  /// position of leftmost end of beam  
+  Real left_y_;
+  /// should beam slope be damped? 0: no, 1: yes, 100000: horizontal beams
+  int damping_i_;
+  /// should beam pos / slope be quantised? 0: no, 1: yes, 2: traditional
+  Quantisation quantisation_;
+  /// maximum number of beams (for opening-up of beam-spacing)
+  int multiple_i_;
+
+
+  DECLARE_MY_RUNTIME_TYPEINFO;
+  Beam();
+  void add_stem (Stem*);
+
+  void set_grouping (Rhythmic_grouping def, Rhythmic_grouping current);
+  void set_stemlens ();
+  SCORE_ELEMENT_CLONE (Beam);
+
+protected:
+  virtual Interval do_width () const;    
+  Offset center () const;
+  void set_default_dir ();
+  virtual void do_pre_processing ();
+  virtual void do_post_processing ();
+  virtual void do_substitute_dependent (Score_element*, Score_element*);
+
+  virtual void do_print() const;
+
+  virtual void quantise_left_y (bool extend_b);
+  virtual Molecule stem_beams (Stem *here, Stem *next, Stem *prev) const;
+  virtual void solve_slope ();
+  virtual void quantise_dy ();
+  virtual Molecule*brew_molecule_p () const;
 };
 
 #endif // BEAM_HH