+ Spanner*sp = dynamic_cast<Spanner*>(me);
+ r.item_l_drul_[LEFT] = sp->get_bound (LEFT);
+ r.item_l_drul_[RIGHT] = sp->get_bound (RIGHT);
+ r.distance_f_ =
+ gh_scm2double (me->get_elt_property ("minimum-length"))
+ * me->paper_l ()->get_var ("staffspace");
+
+ r.add_to_cols ();
+ return SCM_UNSPECIFIED;
+}
+
+
+/*
+ Ugh should have dash-length + dash-period
+ */
+MAKE_SCHEME_CALLBACK (Slur, brew_molecule,1);
+SCM
+Slur::brew_molecule (SCM smob)
+{
+ Score_element * me = unsmob_element (smob);
+ if (!scm_ilength (me->get_elt_property ("note-columns")))
+ {
+ me->suicide ();
+ return SCM_EOL;
+ }
+
+ Real thick = me->paper_l ()->get_var ("stafflinethickness") *
+ gh_scm2double (me->get_elt_property ("thickness"));
+ Bezier one = get_curve (me);
+
+ // get_curve may suicide
+ if (!scm_ilength (me->get_elt_property ("note-columns")))
+ return SCM_EOL;
+
+ Molecule a;
+ SCM d = me->get_elt_property ("dashed");
+ if (gh_number_p (d))
+ a = me->lookup_l ()->dashed_slur (one, thick, thick * gh_scm2double (d));
+ else
+ a = me->lookup_l ()->slur (one, Directional_element_interface::get (me) * thick, thick);
+
+ return a.create_scheme();
+}
+
+void
+Slur::set_control_points (Score_element*me)
+{
+ Real staff_space = Staff_symbol_referencer::staff_space ((Score_element*)me);
+
+ SCM details = me->get_elt_property ("details");
+ SCM h_inf_scm = scm_assq (ly_symbol2scm ("height-limit"), details);
+ SCM r_0_scm = scm_assq (ly_symbol2scm ("ratio"), details);
+
+ Real r_0 = gh_scm2double (gh_cdr (r_0_scm));
+ Real h_inf = staff_space * gh_scm2double (gh_cdr (h_inf_scm));
+
+ Slur_bezier_bow bb (get_encompass_offset_arr (me),
+ Directional_element_interface::get (me),
+ h_inf, r_0);
+
+ if (bb.fit_factor () > 1.0)
+ {
+ Real length = bb.curve_.control_[3][X_AXIS];
+ Real default_height = slur_height (length, h_inf, r_0);
+
+ SCM ssb = me->get_elt_property ("beautiful");
+ Real sb = 0;
+ if (gh_number_p (ssb))
+ sb = gh_scm2double (ssb);
+
+ bb.minimise_enclosed_area (me->paper_l(), sb, details);
+ SCM sbf = scm_assq (ly_symbol2scm ("force-blowfit"), details);
+ Real bff = 1.0;
+ if (gh_pair_p (sbf) && gh_number_p (gh_cdr (sbf)))
+ bff = gh_scm2double (gh_cdr (sbf));
+
+ bb.curve_.control_[1][Y_AXIS] *= bff;
+ bb.curve_.control_[2][Y_AXIS] *= bff;
+ bb.blow_fit ();