]> git.donarmstrong.com Git - lilypond.git/commitdiff
Revert moving columns_ into Spacing_options. Fixes core dumps.
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Mon, 8 Jan 2007 08:33:32 +0000 (09:33 +0100)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Mon, 8 Jan 2007 08:33:32 +0000 (09:33 +0100)
input/regression/spacing-bar-whole-measure.ly
lily/include/spacing-options.hh
lily/include/spacing-spanner.hh
lily/spacing-basic.cc
lily/spacing-determine-loose-columns.cc
lily/spacing-options.cc
lily/spacing-spanner.cc

index e2cb1d9f1df15cf784eb224f9a7fe6260b066654..f2bbb62cb33d61321ee2efd04bcdbfbb463c365b 100644 (file)
@@ -17,5 +17,6 @@
   s1
   c2. c4
   \time 3/4
+  s2.
   c2.
 }
index 1b5ee32db09e49170f533713927f47bb1ffd3aee..670f0e96f7c4f59304c44b3bfd2ed3015718acaf 100644 (file)
 #include "rational.hh"
 #include "std-vector.hh"
 
+/*
+  Various options for spacing. Usually inited from SpacingSpanner, but sometimes
+  from GraceSpacing.
+ */
+
 struct Spacing_options
 {
   bool packed_;
@@ -23,7 +28,6 @@ struct Spacing_options
   Rational global_shortest_;
   Real increment_;
   Real shortest_duration_space_;
-  vector<Grob*> columns_;
   
   Spacing_options();
   void init_from_grob (Grob *me);
index 6723dfefbfed25bb6c9b6790cb1f0091966c5992..8a2d25eff0e400b6ce1a9b1c3240ec6bd661c426 100644 (file)
@@ -26,10 +26,10 @@ private:
   static Real get_duration_space (Moment dur, Spacing_options const *, bool *);
   static Rational effective_shortest_duration (Grob *me, vector<Grob*> const &all);
   static void breakable_column_spacing (Grob *, Item *l, Item *r, Spacing_options const *);
-  static void prune_loose_columns (Grob *, Spacing_options  *);
+  static void prune_loose_columns (Grob *, vector<Grob*> *cols, Spacing_options  *);
   static void set_explicit_neighbor_columns (vector<Grob*> const &cols);
   static void set_implicit_neighbor_columns (vector<Grob*> const &cols);
-  static void generate_springs (Grob *me, Spacing_options const *);
+  static void generate_springs (Grob *me, vector<Grob*> const &cols, Spacing_options const *);
   static void musical_column_spacing (Grob *, Item *, Item *, Spacing_options const *);
   static bool fills_measure (Grob *, Item *, Item *);
 public:
index 835801d94ad09fd812df6f0b3d2b9c1051e2ab70..fe9fd7c14436d772d38a2122d6c1f149359eb6e4 100644 (file)
@@ -164,7 +164,6 @@ Spacing_spanner::note_spacing (Grob *me, Grob *lc, Grob *rc,
        {
          Spacing_options grace_opts;
          grace_opts.init_from_grob (grace_spacing);
-
          bool bla;
          dist = grace_opts.get_duration_space (delta_t.grace_part_, &bla);
        }
index 11e9caa18d5ced03ef77fc2b2fa335c839236cda..4657afee31806a70d4dcc98d28d03329b12aae3a 100644 (file)
@@ -194,9 +194,10 @@ Spacing_spanner::set_distances_for_loose_col (Grob *me, Grob *c,
   between.
 */
 void
-Spacing_spanner::prune_loose_columns (Grob *me, Spacing_options *options)
- {
-  vector<Grob*> *cols = &options->columns_;  
+Spacing_spanner::prune_loose_columns (Grob *me,
+                                     vector<Grob*> *cols,
+                                     Spacing_options *options)
+{
   vector<Grob*> newcols;
 
   for (vsize i = 0; i < cols->size (); i++)
index 9a73ad6d7f70abd51e00cd5e2031a6239c52d3c7..c4e40a88373de47b5219b2b73b0ad6652a23307b 100644 (file)
@@ -35,8 +35,6 @@ Spacing_options::init_from_grob (Grob *me)
     global_shortest_ = shortest_dur.main_part_;
   else
     global_shortest_ = shortest_dur.grace_part_;
-
-  columns_ = Spacing_spanner::get_columns (me);        // ugh.
 }
 
 Spacing_options::Spacing_options ()
index fb91f0b0102b4c7e0432e0ffde48cb57e62e7eb4..ab623f29e8edcc1d947fb58e069d2152b7725ad3 100644 (file)
@@ -54,12 +54,12 @@ Spacing_spanner::set_springs (SCM smob)
   */
   Spacing_options options;
   options.init_from_grob (me);
+  vector<Grob*> cols = Spacing_spanner::get_columns (me);
+  set_explicit_neighbor_columns (cols);
 
-  set_explicit_neighbor_columns (options.columns_);
-
-  prune_loose_columns (me, &options);
-  set_implicit_neighbor_columns (options.columns_);
-  generate_springs (me, &options);
+  prune_loose_columns (me, &cols, &options);
+  set_implicit_neighbor_columns (cols);
+  generate_springs (me, cols, &options);
 
   return SCM_UNSPECIFIED;
 }
@@ -216,13 +216,14 @@ Spacing_spanner::generate_pair_spacing (Grob *me,
 
 void
 Spacing_spanner::generate_springs (Grob *me,
+                                  vector<Grob*> const &cols,
                                   Spacing_options const *options)
 {
   Paper_column *prev = 0;
-  for (vsize i = 0; i < options->columns_.size (); i++)
+  for (vsize i = 0; i < cols.size (); i++)
     {
-      Paper_column *col = dynamic_cast<Paper_column *> (options->columns_[i]);
-      Paper_column *next = (i < options->columns_.size()-1) ? dynamic_cast<Paper_column *> (options->columns_[i+1]) : 0;
+      Paper_column *col = dynamic_cast<Paper_column *> (cols[i]);
+      Paper_column *next = (i < cols.size()-1) ? dynamic_cast<Paper_column *> (cols[i+1]) : 0;
       
       if (i > 0)
        generate_pair_spacing (me, prev, col, next, options);
@@ -396,12 +397,14 @@ Spacing_spanner::musical_column_spacing (Grob *me,
 bool
 Spacing_spanner::fills_measure (Grob *me, Item *l, Item *r)
 {
-  return false;
   System *sys = get_root_system (me);
   Grob *next = sys->column (r->get_column()->get_rank () + 1);
   if (!next)
     return false;
 
+  if (Paper_column::is_musical (next))
+    return false;
+  
   Moment dt =
     Paper_column::when_mom (next) - Paper_column::when_mom (r);
   
@@ -493,7 +496,8 @@ Spacing_spanner::breakable_column_spacing (Grob *me, Item *l, Item *r,
       
     }
 
-  if (fills_measure (me, l, r))
+  if (Paper_column::is_musical (r)
+      && fills_measure (me, l, r))
     {
       compound_space += 1.0; 
     }