compound_fixed_note_space to 0.0. Document why.
* lily/simple-spacer.cc (is_sane): also have a kludge for numeric
range of inverse_hooke_
(Simple_spacer): init completely.
(fits): const
(get_line_configuration): don't use cols.resize(); it introduces
initialized data.
* scm/framework-ps.scm (dump-page): add setstrokeadjust. Backportme.
* ps/music-drawing-routines.ps: remove selectfont L1 hack.
2006-06-18 Han-Wen Nienhuys <hanwen@lilypond.org>
2006-06-18 Han-Wen Nienhuys <hanwen@lilypond.org>
+ * lily/spacing-spanner.cc (musical_column_spacing): set
+ compound_fixed_note_space to 0.0. Document why.
+
+ * lily/simple-spacer.cc (is_sane): also have a kludge for numeric
+ range of inverse_hooke_
+ (Simple_spacer): init completely.
+ (fits): const
+ (get_line_configuration): don't use cols.resize(); it introduces
+ initialized data.
+
+ * scm/framework-ps.scm (dump-page): add setstrokeadjust. Backportme.
+
+ * ps/music-drawing-routines.ps: remove selectfont L1 hack.
+
* lily/beaming-pattern.cc (best_splitpoint_index): urg, 2nd
try. Divide by beatlength.
* lily/beaming-pattern.cc (best_splitpoint_index): urg, 2nd
try. Divide by beatlength.
* lily/align-interface.cc (align_to_fixed_distance): remove
hungarian suffix.
* lily/align-interface.cc (align_to_fixed_distance): remove
hungarian suffix.
- * lily/beaming-pattern.cc (count_factor_twos): oops. We want to
+ * lily/beaming-pattern.cc (count_factor_twos): oops. We want
x%2==0.
2006-06-15 Han-Wen Nienhuys <hanwen@lilypond.org>
x%2==0.
2006-06-15 Han-Wen Nienhuys <hanwen@lilypond.org>
Ruud van Silfhout
Sietse Brouwer
Stephen Carter
Ruud van Silfhout
Sietse Brouwer
Stephen Carter
Thies Albrecht
Trent Johnston
Vaclav Smilauer
Thies Albrecht
Trent Johnston
Vaclav Smilauer
Column_x_positions cp = get_line_configuration (line, line_dims[RIGHT] - line_dims[LEFT],
line_dims[LEFT], ragged);
Column_x_positions cp = get_line_configuration (line, line_dims[RIGHT] - line_dims[LEFT],
line_dims[LEFT], ragged);
if (ragged && last_line)
cp.force_ = 0.0;
if (ragged && last_line)
cp.force_ = 0.0;
void add_spring (Real, Real);
Real range_ideal_len (int l, int r) const;
Real range_stiffness (int l, int r) const;
void add_spring (Real, Real);
Real range_ideal_len (int l, int r) const;
Real range_stiffness (int l, int r) const;
- Real configuration_length () const;
+ Real configuration_length (Real) const;
vector<Real> spring_positions () const;
vector<Real> spring_positions () const;
- Real force ();
- bool fits ();
+ Real force () const;
+ bool fits () const;
DECLARE_SIMPLE_SMOBS (Simple_spacer,);
DECLARE_SIMPLE_SMOBS (Simple_spacer,);
in that chunk should be in len.grace_part_
*/
in that chunk should be in len.grace_part_
*/
- last_mom_ = here_mom_;;
Simple_spacer::Simple_spacer ()
{
Simple_spacer::Simple_spacer ()
{
+ line_len_ = 0.0;
+ force_ = 0.0;
+Simple_spacer::force () const
+Simple_spacer::fits () const
-Simple_spacer::configuration_length () const
+Simple_spacer::configuration_length (Real force) const
{
Real l = 0.;
for (vsize i = 0; i < springs_.size (); i++)
{
Real l = 0.;
for (vsize i = 0; i < springs_.size (); i++)
- l += springs_[i].length (force_);
+ l += springs_[i].length (force);
void
Simple_spacer::solve (Real line_len, bool ragged)
{
void
Simple_spacer::solve (Real line_len, bool ragged)
{
- Real conf = configuration_length ();
+ Real conf = configuration_length (force_);
ragged_ = ragged;
line_len_ = line_len;
if (ragged)
{
force_ = 0;
ragged_ = ragged;
line_len_ = line_len;
if (ragged)
{
force_ = 0;
- fits_ = configuration_length () <= line_len_;
+ fits_ = configuration_length (force_) <= line_len_;
/* we need to calculate a force here to prevent a bunch of short lines */
if (fits_)
force_ = expand_line ();
/* we need to calculate a force here to prevent a bunch of short lines */
if (fits_)
force_ = expand_line ();
Simple_spacer::expand_line ()
{
double inv_hooke = 0;
Simple_spacer::expand_line ()
{
double inv_hooke = 0;
- double cur_len = configuration_length ();
+ double cur_len = configuration_length (force_);
fits_ = true;
for (vsize i=0; i < springs_.size (); i++)
fits_ = true;
for (vsize i=0; i < springs_.size (); i++)
Simple_spacer::compress_line ()
{
double inv_hooke = 0;
Simple_spacer::compress_line ()
{
double inv_hooke = 0;
- double cur_len = configuration_length ();
+ double cur_len = configuration_length (force_);
double cur_force = force_;
fits_ = true;
double cur_force = force_;
fits_ = true;
break;
double block_dist = (cur_force - sp.block_force_) * inv_hooke;
break;
double block_dist = (cur_force - sp.block_force_) * inv_hooke;
- if (cur_len - block_dist <= line_len_)
- return cur_force + (line_len_ - cur_len) / inv_hooke;
+ if (cur_len - block_dist < line_len_)
+ {
+ cur_force += (line_len_ - cur_len) / inv_hooke;
+ cur_len = line_len_;
+
+ /*
+ Paranoia check.
+ */
+ assert (fabs (configuration_length (cur_force) - cur_len) < 1e-6);
+ return cur_force;
+ }
+
cur_len -= block_dist;
inv_hooke -= sp.inverse_hooke_;
cur_force = sp.block_force_;
cur_len -= block_dist;
inv_hooke -= sp.inverse_hooke_;
cur_force = sp.block_force_;
{
return (inverse_hooke_ >= 0)
&& ideal_ > 0
{
return (inverse_hooke_ >= 0)
&& ideal_ > 0
- && !isinf (ideal_) && !isnan (ideal_);
+ && !isinf (ideal_) && !isnan (ideal_)
+ && (inverse_hooke_ == 0.0 || fabs (inverse_hooke_) > 1e-8)
+ ;
-get_line_configuration (vector<Grob*>const &columns,
+get_line_configuration (vector<Grob*> const &columns,
Real line_len,
Real indent,
bool ragged)
Real line_len,
Real indent,
bool ragged)
}
ret.cols_.push_back (dynamic_cast<Item*> (columns.back ())->find_prebroken_piece (LEFT));
}
ret.cols_.push_back (dynamic_cast<Item*> (columns.back ())->find_prebroken_piece (LEFT));
- cols.resize (ret.cols_.size () - 1);
-
/* since we've already put our line-ending column in the column list, we can ignore
the end_XXX_ fields of our column_description */
/* since we've already put our line-ending column in the column list, we can ignore
the end_XXX_ fields of our column_description */
- for (vsize i = 0; i < cols.size (); i++)
+ for (vsize i = 0; i < ret.cols_.size () - 1; i++)
- cols[i] = get_column_description (ret.cols_, i, i == 0);
+ cols.push_back (get_column_description (ret.cols_, i, i == 0));
spacer.add_spring (cols[i].ideal_, cols[i].inverse_hooke_);
}
for (vsize i = 0; i < cols.size (); i++)
spacer.add_spring (cols[i].ideal_, cols[i].inverse_hooke_);
}
for (vsize i = 0; i < cols.size (); i++)
if (compound_note_space < 0 || wish_count == 0)
{
if (compound_note_space < 0 || wish_count == 0)
{
+ /*
+ Fixed should be 0.0. If there are no spacing wishes, we're
+ likely dealing with polyphonic spacing of hemiolas.
+
+ We used to have compound_fixed_note_space = options->increment_
+
+ but this can lead to numeric instability problems when we
+ do
+
+ inverse_strength = (compound_note_space - compound_fixed_note_space)
+
+ */
+
compound_note_space = base_note_space;
compound_note_space = base_note_space;
- compound_fixed_note_space = options->increment_;
+ compound_fixed_note_space = 0.0;
}
else if (to_boolean (me->get_property ("average-spacing-wishes")))
{
}
else if (to_boolean (me->get_property ("average-spacing-wishes")))
{
Ties_configuration
Tie_formatting_problem::generate_optimal_chord_configuration ()
{
Ties_configuration
Tie_formatting_problem::generate_optimal_chord_configuration ()
{
Ties_configuration base = generate_base_chord_configuration ();
vector<Tie_configuration_variation> vars = generate_collision_variations (base);
Ties_configuration base = generate_base_chord_configuration ();
vector<Tie_configuration_variation> vars = generate_collision_variations (base);
% TODO: use dicts or prefixes to prevent namespace pollution.
% TODO: use dicts or prefixes to prevent namespace pollution.
-% Emulation code from Postscript Language Reference.
-
-/*SF
-{
- exch findfont exch
- dup type /arraytype eq
- {makefont}
- {scalefont}
- ifelse
- setfont
-} bind def
-
-/languagelevel where
- {pop languagelevel}
- {1}
-ifelse
-
-2 lt
- { /selectfont /*SF load def }
-if
-
-% end emulation code
-
/pdfmark where
{pop} {userdict /pdfmark /cleartomark load put} ifelse
/pdfmark where
{pop} {userdict /pdfmark /cleartomark load put} ifelse
"page-width output-scale lily-output-units mul mul 0 translate 90 rotate\n"
"")
"%%EndPageSetup\n"
"page-width output-scale lily-output-units mul mul 0 translate 90 rotate\n"
"")
"%%EndPageSetup\n"
+
+ "true setstrokeadjust\n"
"gsave 0 paper-height translate "
"set-ps-scale-to-lily-scale "
"\n"))
"gsave 0 paper-height translate "
"set-ps-scale-to-lily-scale "
"\n"))