]> git.donarmstrong.com Git - lilypond.git/commitdiff
* lily/spacing-spanner.cc (find_shortest): make 1/8 configurable:
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Fri, 14 Jun 2002 14:38:43 +0000 (14:38 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Fri, 14 Jun 2002 14:38:43 +0000 (14:38 +0000)
introduce base-shortest-duration

* lily/parser.yy (music_output_def_body): don't crash when \tempo
in unexpected \midi{} is found.

ChangeLog
lily/parser.yy
lily/spacing-spanner.cc
scm/grob-description.scm
scm/grob-property-description.scm

index fc4afe01febbe4216bc6b2253147fe69f7db932d..b1a5517021a94e62ca7e8675abce4506843cbef5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2002-06-14  Han-Wen Nienhuys  <hanwen@cs.uu.nl>
+
+       * lily/spacing-spanner.cc (find_shortest): make 1/8 configurable:
+       introduce base-shortest-duration
+
+       * lily/parser.yy (music_output_def_body): don't crash when \tempo
+       in unexpected \midi{} is found.
+
 2002-06-13  Jan Nieuwenhuizen  <janneke@gnu.org>
 
        * stepmake/GNUmakefile.in: Don't install stepmake.  This breaks
index 13ec353baab3d76ae8f2f1c29ea2732fd39acb70..05d570ab5be69be99fb1b539f38fba864ae47006 100644 (file)
@@ -658,7 +658,9 @@ music_output_def_body:
                */
                int m = gh_scm2int ( $2->get_mus_property ("metronome-count"));
                Duration *d = unsmob_duration ($2->get_mus_property ("duration"));
-               dynamic_cast<Midi_def*> ($$)->set_tempo (d->length_mom (), m);
+               Midi_def * md = dynamic_cast<Midi_def*> ($$);
+               if (md)
+                       md->set_tempo (d->length_mom (), m);
        }
        | music_output_def_body error {
 
index 2d5204918c05a6173ed56048b888805d4263bd1f..f4c02b2068ad713a0b063cfa9177b6006fe73689 100644 (file)
@@ -42,7 +42,7 @@ public:
   static Real default_bar_spacing (Grob*,Grob*,Grob*,Moment);
   static Real note_spacing (Grob*,Grob*,Grob*,Moment, bool*);
   static Real get_duration_space (Grob*,Moment dur, Rational shortest, bool*);
-  static Rational find_shortest (Link_array<Grob> const &);  
+  static Rational find_shortest (Grob *, Link_array<Grob> const &);  
   static void breakable_column_spacing (Grob*, Item* l, Item *r, Moment);
   static void find_loose_columns () {}
   static void prune_loose_colunms (Grob*,Link_array<Grob> *cols, Rational);
@@ -343,7 +343,7 @@ Spacing_spanner::set_springs (SCM smob)
 
   set_explicit_neighbor_columns (all);
 
-  Rational global_shortest = find_shortest (all);
+  Rational global_shortest = find_shortest (me, all);
   prune_loose_colunms (me, &all, global_shortest);
   set_implicit_neighbor_columns (all);
 
@@ -375,7 +375,7 @@ Spacing_spanner::set_springs (SCM smob)
 
 */
 Rational
-Spacing_spanner::find_shortest (Link_array<Grob> const &cols)
+Spacing_spanner::find_shortest (Grob *me, Link_array<Grob> const &cols)
 {
   /*
     ascending in duration
@@ -445,10 +445,11 @@ Spacing_spanner::find_shortest (Link_array<Grob> const &cols)
       //      printf ("duration %d/%d, count %d\n", durations[i].num (), durations[i].den (), counts[i]);
     }
 
-  /*
-    TODO: 1/8 should be adjustable?
-   */
+  SCM  bsd = me->get_grob_property ("base-shortest-duration");
   Rational d = Rational (1,8);
+  if (Moment *m = unsmob_moment (bsd))
+    d = m->main_part_;
+  
   if (max_idx >= 0)
     d = d <? durations[max_idx] ;
 
index 3c1d87a7f49cf077ad6210ea49f6648b907d5ba1..b5443afc47239d79597c6ec880ccd26494d405b3 100644 (file)
        (grace-space-factor . 0.6)
        (shortest-duration-space . 2.0)
        (spacing-increment . 1.2)
+       (base-shortest-duration . ,(make-moment 1 8))
        (meta . ((interfaces . (spacing-spanner-interface))))
        ))
 
index c873757540d839ab00f1d5ff4fa4eef5531df3cb..c878c0cdcfb44a0df83cd17e24452c06454830b8 100644 (file)
@@ -62,6 +62,8 @@ In the case of alignment grobs, this should contain only one number.")
 (grob-property-description 'bar-size number? "size of a bar line.")
 (grob-property-description 'bars list? "list of barline pointers.")
 (grob-property-description 'bar-size-procedure procedure? "Procedure that computes the size of a bar line.")
+(grob-property-description 'base-shortest-duration moment?
+                          "Spacing is based on the shortest notes in a piece. Normally, pieces are spaced as if notes at least as short as this are present.")
 (grob-property-description 'baseline-skip number? "Baseline skip to use for multiple lines of text.")
 (grob-property-description 'bass list? " musical-pitch, optional.")
 (grob-property-description 'beam ly-grob? "pointer to the beam, if applicable.")