bool
Note_column::has_rests (Grob *me)
{
- return unsmob_grob (me->get_object ("rest"));
+ return Grob::unsmob (me->get_object ("rest"));
}
bool
Note_column::get_stem (Grob *me)
{
SCM s = me->get_object ("stem");
- return unsmob_item (s);
+ return Item::unsmob (s);
}
Item *
if (stem)
{
SCM s = stem->get_object ("flag");
- return unsmob_item (s);
+ return Item::unsmob (s);
}
return 0;
}
Direction
Note_column::dir (Grob *me)
{
- Grob *stem = unsmob_grob (me->get_object ("stem"));
+ Grob *stem = Grob::unsmob (me->get_object ("stem"));
if (stem && Stem::has_interface (stem))
return get_grob_direction (stem);
else
Grob *
Note_column::get_rest (Grob *me)
{
- return unsmob_grob (me->get_object ("rest"));
+ return Grob::unsmob (me->get_object ("rest"));
}
void
}
else if (Note_head::has_interface (h))
{
- if (unsmob_grob (me->get_object ("rest")))
+ if (Grob::unsmob (me->get_object ("rest")))
both = true;
Pointer_group_interface::add_grob (me, ly_symbol2scm ("note-heads"), h);
}
return st ? Stem::first_head (st) : 0;
}
+/*
+ Return extent of the noteheads in the "main column",
+ (i.e. excluding any suspended noteheads), or extent
+ of the rest (if there are no heads).
+*/
+Interval
+Note_column::calc_main_extent (Grob *me)
+{
+ Grob *main_head = 0;
+ if (get_stem (me))
+ main_head = first_head (me);
+ else
+ {
+ // no stems => no suspended noteheads.
+ extract_grob_set (me, "note-heads", heads);
+ if (heads.size())
+ main_head = heads[0];
+ }
+ Grob *main_item = main_head
+ ? main_head
+ : Grob::unsmob (me->get_object ("rest"));
+
+ return main_item
+ ? main_item->extent (me, X_AXIS)
+ : Interval (0, 0);
+}
+
/*
Return the first AccidentalPlacement grob that we find in a note-head.
*/
for (vsize i = 0; i < heads.size (); i++)
{
Grob *h = heads[i];
- acc = h ? unsmob_grob (h->get_object ("accidental-grob")) : 0;
+ acc = h ? Grob::unsmob (h->get_object ("accidental-grob")) : 0;
if (acc)
break;
}
extract_grob_set (me, "note-heads", heads);
for (vsize i = 0; i < heads.size (); i++)
{
- Grob *dots = unsmob_grob (heads[i]->get_object ("dot"));
+ Grob *dots = Grob::unsmob (heads[i]->get_object ("dot"));
if (dots)
return dots->get_parent (X_AXIS);
}