]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/item.cc
Merge branch 'master' of ssh://hanwen@git.sv.gnu.org/srv/git/lilypond
[lilypond.git] / lily / item.cc
index c6ca1b2c6939778a77f096ba2671bac0ad0ecdd0..33e5e2027edf86e72395da4e590112b99741bca3 100644 (file)
@@ -16,6 +16,9 @@
 #include "system.hh"
 #include "pointer-group-interface.hh"
 
+#include "moment.hh"
+
+
 Grob *
 Item::clone () const
 {
@@ -146,14 +149,18 @@ Item::handle_prebroken_dependencies ()
     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
@@ -174,12 +181,39 @@ Item::pure_is_visible (int start, int end) const
 }
 
 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
 {