- Array<Offset> offset_arr;
- offset_arr.push (Offset (dx_f_drul_[LEFT], dy_f_drul_[LEFT]));
- offset_arr.push (Offset (spanner_length () + dx_f_drul_[RIGHT],
- dy_f_drul_[RIGHT]));
-
- return offset_arr;
+ Grob*me = unsmob_grob (smob);
+
+ SCM cp = me->get_grob_property ("control-points");
+ if (!gh_pair_p (cp)) // list is more accurate
+ {
+ cp = get_control_points (smob);
+ me->set_grob_property ("control-points", cp);
+ }
+
+ if (!gh_pair_p (cp))
+ return Molecule ().smobbed_copy ();
+
+ Real thick
+ = Staff_symbol_referencer::line_thickness (me)
+ * robust_scm2double (me->get_grob_property ("thickness"), 1);
+
+ Bezier b;
+ int i = 0;
+ for (SCM s= cp; s != SCM_EOL; s = ly_cdr (s))
+ {
+ b.control_[i] = ly_scm2offset (ly_car (s));
+ i++;
+ }
+
+ Molecule a = Lookup::slur (b, get_grob_direction (me) * thick, thick);
+
+ return a.smobbed_copy ();