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