bool
Note_column::has_rests (Grob *me)
{
- return Grob::unsmob (me->get_object ("rest"));
+ return Grob::is_smob (me->get_object ("rest"));
}
bool
return (Direction)sign (head_positions_interval (me).center ());
}
- programming_error ("note column without heads and stem");
+ if (has_interface (me))
+ programming_error ("Note_column without heads and stem");
+ else
+ programming_error ("dir() given grob without Note_column interface");
return CENTER;
}
}
else if (Note_head::has_interface (h))
{
- if (Grob::unsmob (me->get_object ("rest")))
+ if (Grob::is_smob (me->get_object ("rest")))
both = true;
Pointer_group_interface::add_grob (me, ly_symbol2scm ("note-heads"), h);
}
/*
Return extent of the noteheads in the "main column",
- i.e. excluding any suspended noteheads.
+ (i.e. excluding any suspended noteheads), or extent
+ of the rest (if there are no heads).
*/
Interval
-Note_column::calc_main_heads_extent (Grob *me)
+Note_column::calc_main_extent (Grob *me)
{
- if (get_stem (me))
- return first_head (me)->extent (me, X_AXIS);
- else
- {
- // no stems => no suspended noteheads.
- extract_grob_set (me, "note-heads", heads);
- if (heads.size())
- return heads[0]->extent (me, X_AXIS);
- else
- return Interval (0, 0);
- }
+ 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);
}
/*