]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/include/beam.hh
patch::: 1.3.11.hwn1
[lilypond.git] / lily / include / beam.hh
index 1e6a36fe1513c25531c5421090741424f9c0eb06..258c538d9db3a93f56fd4ab905d4f68b0ee9e9c0 100644 (file)
@@ -1,50 +1,84 @@
 /*
   beam.hh -- part of GNU LilyPond
 
-  (c) 1996,97 Han-Wen Nienhuys
+  (c) 1996--1999 Han-Wen Nienhuys
 */
 
 #ifndef BEAM_HH
 #define BEAM_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 */
-class Beam:  public Directional_spanner {
+
+/** 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
+
+elt property:
+
+damping: amount of beam slope damping. (int)
+
+should beam slope be damped? 0: no, 1: yes, 100000: horizontal beams 
+
+slope_quantisation: 'none, 'normal or 'traditional
+
+*/
+class Beam : public Directional_spanner  {
 public:
-    Link_array<Stem> stems;
-    /// the slope of the beam in posns / point (dimension)   
-    Real slope;
-
-    /// position of leftmost end of beam  
-    Real left_pos;
-   
-
-    /* *************** */
-    DECLARE_MY_RUNTIME_TYPEINFO;
-    Beam();
-    void add(Stem*);
-
-    void set_grouping(Rhythmic_grouping def, Rhythmic_grouping current);
-    void set_stemlens();
-    SCORE_ELEM_CLONE(Beam);
+
+  int stem_count () const;
+  Stem* stem (int) const;
+  Stem* stem_top () const;
+  int visible_stem_count () const;
+  Stem* first_visible_stem () const;
+  Stem* last_visible_stem () const;
+
+  /**
+     the slope of the beam in (staffpositions) per (X-dimension, in PT).
+     UGH. standardise this for once and for all.
+   */
+  Real slope_f_;
+
+  /// position of leftmost end of beam  
+  Real left_y_;
+
+  /** 
+   */
+
+  Beam ();
+  void add_stem (Stem*);
+
+  void set_grouping (Rhythmic_grouping def, Rhythmic_grouping current);
+  void set_beaming (Beaming_info_list *);
+  void set_stemlens ();
+  VIRTUAL_COPY_CONS(Score_element);
+  int multiplicity_i () const;
+
 protected:
-    virtual Interval do_width()const;    
-    virtual Offset center() const;
-    virtual void set_default_dir();
-    virtual void do_pre_processing();
-    virtual void do_post_processing();
-    virtual void do_substitute_dependent(Score_elem*, Score_elem*);
+  Offset center () const;
+  Direction get_default_dir () const;
+  void set_direction (Direction);
+  void set_stem_shorten ();
+  bool auto_knee (SCM gap, bool interstaff_b);
+  bool auto_knees ();
+  
+  virtual void do_pre_processing ();
+  virtual void do_post_processing ();
+  virtual void do_print() const;
+  virtual Molecule*do_brew_molecule_p () const;
 
-    virtual void do_print() const;
+  Molecule stem_beams (Stem *here, Stem *next, Stem *prev) const;
 
 private:
-    Molecule stem_beams(Stem *here, Stem *next, Stem *prev)const;
-    void solve_slope();
-    Molecule*brew_molecule_p()const;
+  void calculate_slope ();
+  Real check_stemlengths_f (bool set_b);
+  void solve_slope ();
+
+  void quantise_left_y (bool extend_b);
+  void quantise_dy ();
+
 };
 
 #endif // BEAM_HH