source file of the GNU LilyPond music typesetter
- (c) 1999--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
*/
+#include "spacing-spanner.hh"
+
#include <math.h>
#include <cstdio>
+using namespace std;
-#include "spacing-spanner.hh"
-#include "paper-column.hh"
-#include "output-def.hh"
-#include "paper-score.hh"
-#include "system.hh"
+#include "international.hh"
+#include "main.hh"
#include "moment.hh"
#include "note-spacing.hh"
-#include "main.hh"
-#include "warn.hh"
+#include "output-def.hh"
+#include "paper-column.hh"
+#include "paper-score.hh"
#include "pointer-group-interface.hh"
#include "spaceable-grob.hh"
-#include "staff-spacing.hh"
#include "spacing-interface.hh"
+#include "staff-spacing.hh"
+#include "system.hh"
+#include "warn.hh"
+
+
+/*
+ TODO:
+ use callback instead?
+*/
Rational
-Spacing_spanner::effective_shortest_duration (Grob *me, Link_array<Grob> const &all)
+Spacing_spanner::effective_shortest_duration (Grob *me,
+ Link_array<Grob> const &all)
{
SCM preset_shortest = me->get_property ("common-shortest-duration");
Rational global_shortest;
if (unsmob_moment (preset_shortest))
- {
- global_shortest = unsmob_moment (preset_shortest)->main_part_;
- }
+ global_shortest = unsmob_moment (preset_shortest)->main_part_;
else
{
global_shortest = Spacing_spanner::find_shortest (me, all);
return global_shortest;
}
+
MAKE_SCHEME_CALLBACK (Spacing_spanner, set_springs, 1);
SCM
Spacing_spanner::set_springs (SCM smob)
/*
can't use get_system() ? --hwn.
*/
- Link_array<Grob> all (me->pscore_->root_system ()->columns ());
+ Link_array<Grob> all (get_root_system (me)->columns ());
set_explicit_neighbor_columns (all);
bool expand_only = false;
Real base_note_space = note_spacing (me, left_col, right_col, options, &expand_only);
+ Real max_fixed = 0;
+ Real max_space = 0;
Real compound_note_space = 0.0;
Real compound_fixed_note_space = 0.0;
if (options->stretch_uniformly_)
- {
- compound_note_space = base_note_space;
- }
+ compound_note_space = base_note_space;
else
{
int wish_count = 0;
Item *wish_rcol = Note_spacing::right_column (wish);
if (Note_spacing::left_column (wish) != left_col
- || (wish_rcol != right_col && wish_rcol != right_col->original_))
+ || (wish_rcol != right_col && wish_rcol != right_col->original ()))
continue;
/*
Note_spacing::get_spacing (wish, right_col, base_note_space, options->increment_, &space, &fixed);
- compound_note_space = compound_note_space + space;
- compound_fixed_note_space = compound_fixed_note_space + fixed;
+
+ max_space = max (max_space, space);
+ max_fixed = max (max_fixed, fixed);
+
+ compound_note_space += space;
+ compound_fixed_note_space += fixed;
wish_count++;
}
}
compound_note_space = base_note_space;
compound_fixed_note_space = options->increment_;
}
- else
+ else if (to_boolean (me->get_property ("average-spacing-wishes")))
{
compound_note_space /= wish_count;
compound_fixed_note_space /= wish_count;
}
+ else
+ {
+ compound_fixed_note_space = max_fixed;
+ compound_note_space = max_space;
+ }
/*
Whatever we do, the fixed space is smaller than the real
{
Real compound_fixed = 0.0;
Real compound_space = 0.0;
+ Real max_fixed = 0.0;
+ Real max_space = 0.0;
+
int wish_count = 0;
Moment dt = Paper_column::when_mom (r) - Paper_column::when_mom (l);
space *= 0.8;
}
+ max_space = max (max_space, space);
+ max_fixed = max (max_fixed, fixed_space);
+
compound_space += space;
compound_fixed += fixed_space;
wish_count++;
}
else
{
- compound_space /= wish_count;
- compound_fixed /= wish_count;
+ if (to_boolean (me->get_property ("average-spacing-wishes")))
+ {
+ compound_space /= wish_count;
+ compound_fixed /= wish_count;
+ }
+ else
+ {
+ compound_fixed = max_fixed;
+ compound_space = max_space;
+ }
+
}
if (options->stretch_uniformly_ && l->break_status_dir () != RIGHT)
- {
- compound_fixed = 0.0;
- }
+ compound_fixed = 0.0;
assert (!isinf (compound_space));
compound_space = max (compound_space, compound_fixed);
"head width) A 16th note is followed by 0.5 note head width. The\n"
"quarter note is followed by 3 NHW, the half by 4 NHW, etc.\n",
- "grace-space-factor spacing-increment base-shortest-duration strict-note-spacing "
- "shortest-duration-space common-shortest-duration uniform-stretching "
+ "average-spacing-wishes "
+ "grace-space-factor "
+ "spacing-increment "
+ "base-shortest-duration "
+ "strict-note-spacing "
+ "shortest-duration-space "
+ "common-shortest-duration "
+ "uniform-stretching "
"packed-spacing "
);