return exthead;
}
-/* The positions, in ascending order. */
+/* The staff positions, in ascending order.
+ * If FILTER, include the main column of noteheads only */
vector<int>
-Stem::note_head_positions (Grob *me)
+Stem::note_head_positions (Grob *me, bool filter)
{
vector<int> ps;
extract_grob_set (me, "note-heads", heads);
+ Grob *xref = common_refpoint_of_array (heads, me, X_AXIS);
for (vsize i = heads.size (); i--;)
{
Grob *n = heads[i];
- int p = Staff_symbol_referencer::get_rounded_position (n);
+ if (filter
+ && n->relative_coordinate (xref, X_AXIS) != 0.0)
+ continue;
+ int p = Staff_symbol_referencer::get_rounded_position (n);
ps.push_back (p);
}
bool
Stem::is_normal_stem (Grob *me)
{
- return head_count (me) && scm_to_int (me->get_property ("duration-log")) >= 1;
+ if (!head_count (me))
+ return false;
+
+ extract_grob_set (me, "note-heads", heads);
+ SCM style = heads[0]->get_property ("style");
+ return style != ly_symbol2scm ("kievan") && scm_to_int (me->get_property ("duration-log")) >= 1;
}
MAKE_SCHEME_CALLBACK (Stem, pure_height, 3)
"stemlet-length "
"thickness "
"tremolo-flag "
+ "tuplet-start "
);
/****************************************************************/