X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fsimple-spacer.hh;h=935cb94c6c260e72872b9261d34282f6432984ef;hb=5b4b0d6e9a197e8f9eb085b7c2ad78b8be3e5cfc;hp=1f6fc479c09714833435adfe94c2441a16f2ec8b;hpb=6ae532ffb4350961d3901a42b67d1db620f925a5;p=lilypond.git diff --git a/lily/include/simple-spacer.hh b/lily/include/simple-spacer.hh index 1f6fc479c0..935cb94c6c 100644 --- a/lily/include/simple-spacer.hh +++ b/lily/include/simple-spacer.hh @@ -1,48 +1,60 @@ -/* - simple-spacer.hh -- declare - +/* + simple-spacer.hh -- declare Simple_spacer + source file of the GNU LilyPond music typesetter - - (c) 1998 Han-Wen Nienhuys - - */ + + (c) 1999--2008 Han-Wen Nienhuys +*/ #ifndef SIMPLE_SPACER_HH #define SIMPLE_SPACER_HH -#include "real.hh" -#include "array.hh" +#include "std-vector.hh" #include "lily-proto.hh" -#include "list.hh" -#include "drul-array.hh" - -struct Rod_info { - Real distance_f_; - Drul_array cols_; +#include "spring.hh" +#include "smobs.hh" + +class Simple_spacer +{ +public: + Simple_spacer (); + + void solve (Real line_len, bool ragged); + void add_rod (int l, int r, Real dist); + void add_spring (Spring const&); + Real range_ideal_len (int l, int r) const; + Real range_stiffness (int l, int r, bool stretch) const; + Real configuration_length (Real) const; + vector spring_positions () const; + + Real force () const; + Real force_penalty (bool ragged) const; + bool fits () const; + + DECLARE_SIMPLE_SMOBS (Simple_spacer); + +private: + Real expand_line (); + Real compress_line (); + Real rod_force (int l, int r, Real dist); + + vector springs_; + Real line_len_; + Real force_; + bool ragged_; + bool fits_; }; -struct Spring_info { - /// the ideal distance - Real space_f_; +/* returns a vector of dimensions breaks.size () * breaks.size () */ +vector get_line_forces (vector const &columns, + Real line_len, + Real indent, + bool ragged); - /// Hooke's constant: how strong are the "springs" attached to columns - Real hooke_f_; - - Real blocking_stretch_f_; - Rod_info * blocking_rod_l_; - void set (Idealspacing *); - Spring_info(); -}; - - -class Simple_spring_spacer { - Array springs_; - Pointer_list rods_; - - void init (); - Array solve (); - -}; +Column_x_positions get_line_configuration (vector const &columns, + Real line_len, + Real indent, + bool ragged); #endif /* SIMPLE_SPACER_HH */