}
if (stems.size () <= 2)
- return SCM_UNSPECIFIED;
+ return scm_from_int (0);
vector<int> close_positions;
vector<int> far_positions;
static int get_column_rank (Grob *, Direction);
static int get_position (Grob *);
static Direction get_default_dir (Grob *);
- static void set_control_points (Grob *, Grob *,
- Tie_configuration const&,
- Tie_details const&);
- static void set_default_control_points (Grob *);
+ static SCM get_control_points (Grob *, Grob *,
+ Tie_configuration const&,
+ Tie_details const&);
+ static SCM get_default_control_points (Grob *);
DECLARE_SCHEME_CALLBACK (print, (SCM));
DECLARE_SCHEME_CALLBACK (set_spacing_rods, (SCM));
DECLARE_SCHEME_CALLBACK (calc_direction, (SCM));
Grob *stem = unsmob_grob (smob);
Grob *me = unsmob_grob (stem->get_object ("melody-spanner"));
if (!me || !me->is_live ())
- return SCM_UNSPECIFIED;
+ return scm_from_int (DOWN);
extract_grob_set (me, "stems", stems);
&& !dirs[next_nonneutral])
next_nonneutral++;
+ SCM retval = SCM_EOL;
while (last_nonneutral == VPOS || last_nonneutral < dirs.size () - 1)
{
Direction d1 = CENTER;
total = to_dir (me->get_property ("neutral-direction"));
for (vsize i = last_nonneutral + 1; i < next_nonneutral; i++)
- stems[i]->set_property ("neutral-direction", scm_from_int (total));
-
+ {
+ if (stems[i] == stem)
+ retval = scm_from_int (total);
+ else
+ stems[i]->set_property ("neutral-direction", scm_from_int (total));
+ }
last_nonneutral = next_nonneutral;
while (last_nonneutral < dirs.size ()
next_nonneutral++;
}
- me->suicide ();
- return SCM_UNSPECIFIED;
+ return retval;
}
void
Ties_configuration base = problem.generate_optimal_chord_configuration ();
for (vsize i = 0; i < lv_ties.size(); i++)
{
- Tie::set_control_points (lv_ties[i], problem.common_x_refpoint (), base[i],
- problem.details_);
+ SCM cp = Tie::get_control_points (lv_ties[i], problem.common_x_refpoint (), base[i],
+ problem.details_);
+
+ lv_ties[i]->set_property ("control-points", cp);
set_grob_direction (lv_ties[i], base[i].dir_);
}
programming_error ("lv tie without Semi_tie_column. Killing lv tie.");
me->suicide ();
}
-
- return SCM_UNSPECIFIED;
+
+ return me->get_property_data ("control-points");
}
int
for (vsize i = 0; i < base.size(); i++)
{
- Tie::set_control_points (ties[i], problem.common_x_refpoint (),
- base[i],
- problem.details_);
+ SCM cp = Tie::get_control_points (ties[i], problem.common_x_refpoint (),
+ base[i],
+ problem.details_);
+
+ ties[i]->set_property ("control-points", cp);
set_grob_direction (ties[i],
base[i].dir_);
{
/* trigger positioning. */
(void) yparent->get_property ("positioning-done");
+
+ return me->get_property_data ("direction");
}
else
- set_grob_direction (me, Tie::get_default_dir (me));
-
- return SCM_UNSPECIFIED;
+ return scm_from_int (Tie::get_default_dir (me));
}
-void
-Tie::set_default_control_points (Grob *me_grob)
+SCM
+Tie::get_default_control_points (Grob *me_grob)
{
Spanner *me = dynamic_cast<Spanner*> (me_grob);
Grob *common = me;
spec.has_manual_dir_ = true;
spec.manual_dir_ = get_grob_direction (me);
- if (me->is_live ())
- {
- Tie_configuration conf
- = problem.find_optimal_tie_configuration (spec);
+ if (!me->is_live ())
+ return SCM_EOL;
+
+ Tie_configuration conf
+ = problem.find_optimal_tie_configuration (spec);
- set_control_points (me, problem.common_x_refpoint (),
- conf, problem.details_);
- }
+ return get_control_points (me, problem.common_x_refpoint (),
+ conf, problem.details_);
}
-void
-Tie::set_control_points (Grob *me,
+
+SCM
+Tie::get_control_points (Grob *me,
Grob *common,
Tie_configuration const &conf,
Tie_details const &details
programming_error ("Insane offset");
controls = scm_cons (ly_offset2scm (b.control_[i]), controls);
}
- me->set_property ("control-points", controls);
+ return controls;
}
+
MAKE_SCHEME_CALLBACK(Tie, calc_control_points, 1);
SCM
Tie::calc_control_points (SCM smob)
(void) yparent->get_property ("positioning-done");
}
- if (!scm_is_pair (me->get_property_data ("control-points")))
+ SCM cp = me->get_property_data ("control-points");
+ if (!scm_is_pair (cp))
{
- set_default_control_points (me);
+ cp = get_default_control_points (me);
}
- return SCM_UNSPECIFIED;
+ return cp;
}
/*