Real xr = fvs ? lvs->relative_coordinate (common[X_AXIS], X_AXIS) : 0.0;
/*
- We store some info to quickly interpolate.
-
- Sometimes my head is screwed on backwards. The stemlength are
- AFFINE linear in YL and YR. If YL == YR == 0, then we might have
+ We store some info to quickly interpolate. The stemlength are
+ affine linear in YL and YR. If YL == YR == 0, then we might have
stem_y != 0.0, when we're cross staff.
*/
bool f = to_boolean (s->get_property ("french-beaming"))
&& s != lvs && s != fvs;
- base_lengths.push_back (calc_stem_y (me, s, common, xl, xr,
- Interval (0, 0), f) / ss);
+ if (Stem::is_normal_stem (s))
+ {
+ base_lengths.push_back (calc_stem_y (me, s, common, xl, xr,
+ Interval (0, 0), f) / ss);
+ }
+ else
+ {
+ base_lengths.push_back (0);
+ }
+
stem_xposns.push_back (s->relative_coordinate (common[X_AXIS], X_AXIS));
}
-
bool xstaff = false;
if (lvs && fvs)
{
for (vsize i = 0; i < stems.size (); i++)
{
Grob *s = stems[i];
- if (Stem::is_invisible (s))
+ if (!Stem::is_normal_stem (s))
continue;
Real x = stem_xs[i];
Stem::height (SCM smob)
{
Grob *me = unsmob_grob (smob);
-
+ if (!is_normal_stem (me))
+ return ly_interval2scm (Interval ());
+
Direction dir = get_grob_direction (me);
- /* Trigger callback.
-
- UGH. Should be automatic
- */
Grob *beam = get_beam (me);
if (beam)
{
Real height_of_my_trem = 0.0;
Grob *trem = unsmob_grob (me->get_object ("tremolo-flag"));
if (trem)
- height_of_my_trem = trem->extent (trem, Y_AXIS).length ()
+ {
+ height_of_my_trem
+ = Stem_tremolo::vertical_length (trem)
/* hack a bit of space around the trem. */
+ beam_translation;
+ }
+
/* UGH
It seems that also for ideal minimum length, we must use
the maximum beam count (for this direction):