On Thu, 2006-06-08 at 09:05 +1000, Joe Neeman wrote:
> Anyway, here's another try. Same ChangeLog as before

After your last email, I've removed the changes to
Item::handle_prebroken_dependencies and changed axis-group-interface.cc.
I'm only attaching the part of axis-group-interface.cc with the most
recent changes.

@@ -89,3 +190,47 @@
   return ly_interval2scm (r - my_coord);
 }
 
+SCM
+Axis_group_interface::pure_group_height (Grob *me, int start, int end)
+{
+  Grob *common = unsmob_grob (me->get_object ("common-refpoint-of-elements"));
+
+  if (!common)
+    {
+      extract_grob_set (me, "elements", elts);
+
+      vector<Grob*> relevant_elts;
+      SCM is_relevant = ly_lily_module_constant ("pure-relevant");
+
+      for (vsize i = 0; i < elts.size (); i++)
+	{
+	  if (to_boolean (scm_apply_1 (is_relevant, elts[i]->self_scm (), SCM_EOL)))
+	    relevant_elts.push_back (elts[i]);
+
+	  Item *it = dynamic_cast<Item*> (elts[i]);
+	  Direction d = LEFT;
+	  if (it)
+	    do
+	      {
+		Item *piece = it->find_prebroken_piece (d);
+		if (piece && to_boolean (scm_apply_1 (is_relevant, piece->self_scm (), SCM_EOL)))
+		  relevant_elts.push_back (elts[i]);
+	      }
+	    while (flip (&d) != LEFT);
+	}
+
+      common = common_refpoint_of_array (relevant_elts, me, Y_AXIS);
+      me->set_object ("common-refpoint-of-elements", common->self_scm ());
+
+      SCM ga_scm = Grob_array::make_array ();
+      Grob_array *ga = unsmob_grob_array (ga_scm);
+      ga->set_array (relevant_elts);
+      me->set_object ("pure-relevant-elements", ga_scm);
+    }
+
+  extract_grob_set (me, "pure-relevant-elements", elts);
+  Real my_coord = me->relative_coordinate (common, Y_AXIS);
+  Interval r (relative_pure_height (me, elts, common, start, end, true));
+
+  return ly_interval2scm (r - my_coord);
+}
+
_______________________________________________
lilypond-devel mailing list
lilypond-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/lilypond-devel

Reply via email to