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
Item::Item (SCM s, Object_key const *key)
: Grob (s, key)
{
- broken_to_drul_[LEFT] = broken_to_drul_[RIGHT]= 0;
- Group_interface::add_thing (this, ly_symbol2scm ("interfaces"), ly_symbol2scm ("item-interface"));
+ broken_to_drul_[LEFT] = broken_to_drul_[RIGHT] = 0;
}
/**
bool
Item::is_breakable (Grob *me)
{
- if (me->original_)
+ if (me->original ())
return false;
if (!dynamic_cast<Item *> (me))
{
Grob *dolly = clone (count++);
Item *item = dynamic_cast<Item *> (dolly);
- pscore_->system_->typeset_grob (item);
+ get_root_system (this)->typeset_grob (item);
new_copies[i] = item;
}
while (flip (&i) != LEFT);
+
broken_to_drul_ = new_copies;
}
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_c_procedure_p (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")