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 "paper-column.hh"
#include "lily-guile.hh"
#include "system.hh"
-#include "group-interface.hh"
+#include "pointer-group-interface.hh"
Grob *
Item::clone (int count) const
: Grob (s, key)
{
broken_to_drul_[LEFT] = broken_to_drul_[RIGHT] = 0;
- Group_interface::add_thing (this, ly_symbol2scm ("interfaces"), ly_symbol2scm ("item-interface"));
}
/**
}
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;
}
/*
Can't do this earlier, because try_visibility_lambda () might set
the elt property transparent, which would then be copied.
-
- TODO:
-
- give the item to break-visibility itself, so the function can do
- more complicated things.
*/
SCM vis = get_property ("break-visibility");
- if (ly_is_procedure (vis))
+ if (scm_is_vector (vis))
{
- SCM args = scm_list_n (scm_int2num (break_status_dir ()), SCM_UNDEFINED);
- SCM result = scm_apply_0 (vis, args);
- bool trans = ly_scm2bool (scm_car (result));
- bool empty = ly_scm2bool (scm_cdr (result));
+ bool visible = to_boolean (scm_vector_ref (vis, scm_from_int (break_status_dir () + 1)));
- if (empty && trans)
+ if (!visible)
suicide ();
- else if (empty)
- {
- set_extent (SCM_EOL, X_AXIS);
- set_extent (SCM_EOL, Y_AXIS);
- }
- else if (trans)
- set_property ("print-function", SCM_EOL);
}
}
-SCM
-Item::do_derived_mark () const
+void
+Item::derived_mark () const
{
if (broken_to_drul_[LEFT])
scm_gc_mark (broken_to_drul_[LEFT]->self_scm ());
if (broken_to_drul_[RIGHT])
scm_gc_mark (broken_to_drul_[RIGHT]->self_scm ());
- return SCM_EOL;
}
Item *
" all-visible yes yes yes\n"
" begin-of-line-invisible yes yes no\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")