]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/include/simple-spacer.hh
* Another grand 2003 update.
[lilypond.git] / lily / include / simple-spacer.hh
index 4f317b148abd251d8868ce49d240910aa96e7a10..2cb444deafd4ff657baa684e5741fcfe1bc0d4ae 100644 (file)
@@ -3,7 +3,7 @@
   
   source file of the GNU LilyPond music typesetter
   
-  (c) 1999--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  (c)  1999--2003 Han-Wen Nienhuys <hanwen@cs.uu.nl>
   
  */
 
 
 struct Spring_description
 {
-  Real ideal_f_;
-  Real hooke_f_;
+  Real ideal_;
+  Real hooke_;
   bool active_b_;
 
-  Real block_force_f_;
+  Real block_force_;
 
   Real length (Real force) const;
   Spring_description ();
@@ -28,52 +28,22 @@ struct Spring_description
   bool sane_b () const;
 };
 
-/**
-   A simple spacing constraint solver. The approach:
-
-   Stretch the line uniformly until none of the constraints (rods)
-   block.  It then is very wide.
-
-
-      Compress until the next constraint blocks,
-
-      Mark the springs over the constrained part to be non-active.
-      
-   Repeat with the smaller set of non-active constraints, until all
-   constraints blocked, or until the line is as short as desired.
-
-   This is much simpler, and much much faster than full scale
-   Constrained QP. On the other hand, a situation like this will not
-   be typeset as dense as possible, because
-
-   c4                   c4           c4                  c4
-   veryveryverylongsyllable2         veryveryverylongsyllable2
-   " "4                 veryveryverylongsyllable2        syllable4
-
-
-   can be further compressed to
-
-
-   c4    c4                        c4   c4
-   veryveryverylongsyllable2       veryveryverylongsyllable2
-   " "4  veryveryverylongsyllable2      syllable4
-
-
-   Perhaps this is not a bad thing, because the 1st looks better anyway.  */
 struct Simple_spacer
 {
   Array<Spring_description> springs_;
-
-  Real force_f_;
-  Real indent_f_;
-  Real line_len_f_;
-  Real default_space_f_;
-
-
+  Link_array<Grob> spaced_cols_;
+  Link_array<Grob> loose_cols_;
+  Real force_;
+  Real indent_;
+  Real line_len_;
+  Real default_space_;
+  int active_count_;
+  bool compression_penalty_b_;
+  
   Simple_spacer ();
   
-  void solve (Column_x_positions *) const;
-  void add_columns (Link_array<Score_element>);
+  void solve (Column_x_positions *, bool) const;
+  void add_columns (Link_array<Grob>const &);
   void my_solve_linelen ();
   void my_solve_natural_len ();
   Real active_springs_stiffness () const;