]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/p-col.cc
release: 1.1.43
[lilypond.git] / lily / p-col.cc
index 06fae0d37fb468d15f2e512400f58f651a62f024..8378a68f7a069c69a02f8f278c22697877d46007 100644 (file)
@@ -3,13 +3,40 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+  (c)  1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
 #include "p-col.hh"
 #include "p-score.hh"
 #include "debug.hh"
 
+void
+Paper_column::add_rod (Paper_column * p, Real d)
+{
+  Direction dir =  Direction (sign (p->rank_i ()  - rank_i ()));
+  
+  if (!dir)
+    {
+      warning ("Must set minimum distance between differing columns.");
+      return;
+    }
+  
+  for (int i=0; i < minimal_dists_arr_drul_[dir].size (); i++)
+    {
+      Column_rod &rod = minimal_dists_arr_drul_[dir][i];
+      if (rod.other_l_ == p)
+       {
+         rod.distance_f_ = rod.distance_f_ >? d;
+         return ;
+       }
+    }
+
+  Column_rod cr;
+  cr.distance_f_ = d;
+  cr.other_l_ = p;
+
+  minimal_dists_arr_drul_[dir].push (cr);
+}
 
 int
 Paper_column::rank_i() const
@@ -21,10 +48,6 @@ void
 Paper_column::set_rank (int i)
 {
   rank_i_ = i;
-  if (prebreak_l())
-    prebreak_l()->rank_i_ = i;
-  if (postbreak_l())
-    postbreak_l()->rank_i_ = i;
 }
 
 void
@@ -32,42 +55,19 @@ Paper_column::do_print() const
 {
 #ifndef NPRINT
   DOUT << "rank: " << rank_i_ << '\n';
-  if (prebreak_l())
+  for (int i=0; i < minimal_dists_arr_drul_[LEFT].size (); i++)
     {
-      DOUT << "\npre: ";
-      prebreak_l()->print();
+      minimal_dists_arr_drul_[LEFT][i].print ();
     }
-  if (postbreak_l()) 
-    {
-      DOUT << "post: ";
-      postbreak_l()->print();
-    } 
-  if (break_status_i_)
+  DOUT << "Right: ";
+  for (int i=0; i < minimal_dists_arr_drul_[RIGHT].size (); i++)
     {
-      DOUT <<'\n' << ((break_status_i_ == -1)? "prebreak" : "postbreak");
-      DOUT << '\n';
+      minimal_dists_arr_drul_[RIGHT][i].print ();
     }
-  // DOUT << "extent: " << width().str () << "\n";
+  Item::do_print ();
 #endif 
 }
 
-int
-Paper_column::compare (Paper_column const &c1, Paper_column const &c2)
-{
-  return c1.rank_i() - c2.rank_i ();
-}
-
-Paper_column*
-Paper_column::prebreak_l() const
-{
-  return (Paper_column*)broken_to_drul_[LEFT];
-}
-
-Paper_column*
-Paper_column::postbreak_l() const
-{
-  return(Paper_column*) broken_to_drul_[RIGHT];
-}
 bool
 Paper_column::breakpoint_b() const
 {
@@ -76,8 +76,8 @@ Paper_column::breakpoint_b() const
 
 Paper_column::Paper_column()
 {
-  used_b_ = false;
-  error_mark_b_ = false;
+  set_axes (X_AXIS, X_AXIS);
+
   line_l_=0;
   rank_i_ = -1;
 }
@@ -88,11 +88,19 @@ Paper_column::line_l() const
   return line_l_;
 }
 
-bool
-Paper_column::used_b() const
+
+
+
+Paper_column*
+Paper_column::column_l () const
 {
-  return linked_b();
+  return (Paper_column*)(this);
 }
 
-IMPLEMENT_IS_TYPE_B1(Paper_column, Horizontal_group_item);
 
+void
+Paper_column::preprocess ()
+{
+  minimal_dists_arr_drul_[LEFT].sort (Column_rod::compare);
+  minimal_dists_arr_drul_[RIGHT].sort (Column_rod::compare);  
+}