#include "system.hh"
#include "pointer-group-interface.hh"
+#include "moment.hh"
+
+
Grob *
Item::clone () const
{
Can't do this earlier, because try_visibility_lambda () might set
the elt property transparent, which would then be copied.
*/
- SCM vis = get_property ("break-visibility");
- if (scm_is_vector (vis))
- {
- bool visible = to_boolean (scm_c_vector_ref (vis, break_status_dir () + 1));
+ if (!Item::break_visible (this))
+ suicide ();
+}
- if (!visible)
- suicide ();
- }
+bool
+Item::break_visible (Grob *g)
+{
+ Item *it = dynamic_cast<Item*> (g);
+ SCM vis = g->get_property ("break-visibility");
+ if (scm_is_vector (vis))
+ return to_boolean (scm_c_vector_ref (vis, it->break_status_dir () + 1));
+ return true;
}
bool
}
Interval_t<int>
-Item::spanned_rank_iv ()
+Item::spanned_rank_interval () const
{
int c = get_column ()->get_rank ();
return Interval_t<int> (c, c);
}
+Interval_t<Moment>
+spanned_time_interval (Item *l, Item *r)
+{
+ Drul_array<Item*> bounds (l, r);
+ Interval_t<Moment> iv;
+
+ Direction d = LEFT;
+ do
+ {
+ if (bounds[d] && bounds[d]->get_column ())
+ iv[d] = robust_scm2moment (bounds[d]->get_column ()->get_property ("when"),
+ iv[d]);
+ }
+ while (flip (&d) != LEFT);
+
+ do
+ {
+ if (!bounds[d] || !bounds[d]->get_column ())
+ iv[d] = iv[-d];
+ }
+ while (flip (&d) != LEFT);
+
+
+ return iv;
+}
+
+
void
Item::derived_mark () const
{