original parent for alignment.
This happens e.g. for MultiMeasureRestNumbers and PercentRepeatCounters.
*/
- if (!dynamic_cast <Spanner *> (this->get_parent (X_AXIS)))
+ if (!dynamic_cast <Spanner *> (get_parent (X_AXIS)))
set_parent (i, X_AXIS);
/*
Pointer_group_interface::add_grob (i, ly_symbol2scm ("bounded-by-me"), this);
}
+Preinit_Spanner::Preinit_Spanner ()
+{
+ spanned_drul_.set (0, 0);
+ pure_property_cache_ = SCM_UNDEFINED;
+}
+
Spanner::Spanner (SCM s)
: Grob (s)
{
break_index_ = 0;
- spanned_drul_.set (0, 0);
- pure_property_cache_ = SCM_UNDEFINED;
}
Spanner::Spanner (Spanner const &s)
: Grob (s)
{
- spanned_drul_.set (0, 0);
- pure_property_cache_ = SCM_UNDEFINED;
+ break_index_ = 0;
}
/*
scm_gc_mark (spanned_drul_[d]->self_scm ());
;
- for (vsize i = broken_intos_.size (); i--;)
- scm_gc_mark (broken_intos_[i]->self_scm ());
+ // If break_index_ is -1, broken_intos_ might not yet have run its
+ // constructor and any access might break things.
+ if (break_index_ != (vsize)-1)
+ for (vsize i = broken_intos_.size (); i--;)
+ scm_gc_mark (broken_intos_[i]->self_scm ());
}
/*
SCM
Spanner::set_spacing_rods (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
SCM num_length = me->get_property ("minimum-length");
SCM broken_length = me->get_property ("minimum-length-after-break");
if (scm_is_number (num_length)
SCM
Spanner::calc_normalized_endpoints (SCM smob)
{
- Spanner *me = Spanner::unsmob (smob);
+ Spanner *me = unsmob<Spanner> (smob);
SCM result = SCM_EOL;
Spanner *orig = dynamic_cast<Spanner *> (me->original ());
Real total_width = 0.0;
vector<Real> span_data;
- if (!orig->is_broken ())
- span_data.push_back (orig->spanner_length ());
- else
- for (vsize i = 0; i < orig->broken_intos_.size (); i++)
- span_data.push_back (orig->broken_intos_[i]->spanner_length ());
+ for (vsize i = 0; i < orig->broken_intos_.size (); i++)
+ span_data.push_back (orig->broken_intos_[i]->spanner_length ());
vector<Interval> unnormalized_endpoints;
SCM
Spanner::bounds_width (SCM grob)
{
- Spanner *me = Spanner::unsmob (grob);
+ Spanner *me = unsmob<Spanner> (grob);
Grob *common = me->get_bound (LEFT)->common_refpoint (me->get_bound (RIGHT), X_AXIS);
SCM
Spanner::kill_zero_spanned_time (SCM grob)
{
- Spanner *me = Spanner::unsmob (grob);
+ Spanner *me = unsmob<Spanner> (grob);
/*
Remove the line or hairpin at the start of the line. For
piano voice indicators, it makes no sense to have them at