source file of the GNU LilyPond music typesetter
- (c) 1997--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
*/
#include "item.hh"
+#include "axis-group-interface.hh"
#include "paper-score.hh"
#include "warn.hh"
#include "paper-column.hh"
}
bool
-Item::is_breakable (Grob *me)
+Item::is_non_musical (Grob *me)
{
- if (me->original_)
+ if (me->original ())
return false;
- if (!dynamic_cast<Item *> (me))
- me->programming_error ("only items can be breakable.");
-
Item *i = dynamic_cast<Item *> (me->get_parent (X_AXIS));
- return (i) ? Item::is_breakable (i) : to_boolean (me->get_property ("breakable"));
+ return i ? Item::is_non_musical (i) : to_boolean (me->get_property ("non-musical"));
}
Paper_column *
{
Grob *dolly = clone (count++);
Item *item = dynamic_cast<Item *> (dolly);
- pscore_->root_system ()->typeset_grob (item);
+ get_root_system (this)->typeset_grob (item);
new_copies[i] = item;
}
while (flip (&i) != LEFT);
if (is_broken ())
return;
- if (Item::is_breakable (this))
+ if (Item::is_non_musical (this))
copy_breakable_items ();
}
Direction
Item::break_status_dir () const
{
- if (original_)
+ if (original ())
{
- Item *i = dynamic_cast<Item *> (original_);
+ Item *i = dynamic_cast<Item *> (original ());
return (i->broken_to_drul_[LEFT] == this) ? LEFT : RIGHT;
}
SCM vis = get_property ("break-visibility");
if (scm_is_vector (vis))
{
- bool visible = to_boolean (scm_vector_ref (vis, scm_from_int (break_status_dir () + 1)));
+ bool visible = to_boolean (scm_c_vector_ref (vis, break_status_dir () + 1));
if (!visible)
suicide ();
}
}
+bool
+Item::pure_is_visible (int start, int end) const
+{
+ SCM vis = get_property ("break-visibility");
+ if (scm_is_vector (vis))
+ {
+ int pos = 1;
+ int pc_rank = Paper_column::get_rank (get_column ());
+ if (pc_rank == start)
+ pos = 2;
+ else if (pc_rank == end)
+ pos = 0;
+ return to_boolean (scm_vector_ref (vis, scm_from_int (pos)));
+ }
+ return true;
+}
+
+Interval_t<int>
+Item::spanned_rank_iv ()
+{
+ int c = get_column ()->get_rank ();
+ return Interval_t<int> (c, c);
+}
+
void
Item::derived_mark () const
{
}
ADD_INTERFACE (Item,
- "item-interface",
- "\n"
- "\n"
+
"Grobs can be distinguished in their role in the horizontal spacing.\n"
"Many grobs define constraints on the spacing by their sizes. For\n"
"example, note heads, clefs, stems, and all other symbols with a fixed\n"
" end-of-line-invisible no yes yes\n"
" center-invisible yes no yes\n"
"@end example\n",
- "no-spacing-rods break-visibility breakable")
+
+ /* properties */
+ "break-visibility "
+ "no-spacing-rods "
+ "non-musical")