+ return Offset (interval_a_[X_AXIS].center (),
+ interval_a_[Y_AXIS].center ());
+}
+
+void
+Box::widen (Real x, Real y)
+{
+ interval_a_[X_AXIS].widen (x);
+ interval_a_[Y_AXIS].widen (y);
+}
+
+void
+Box::intersect (Box b)
+{
+ interval_a_[X_AXIS].intersect (b[X_AXIS]);
+ interval_a_[Y_AXIS].intersect (b[Y_AXIS]);
+}
+
+// for debugging
+
+void
+Box::print ()
+{
+ printf ("X left %4.4f right %4.4f Y down %4.4f up %4.4f\n",
+ interval_a_[X_AXIS][LEFT], interval_a_[X_AXIS][RIGHT],
+ interval_a_[Y_AXIS][DOWN], interval_a_[Y_AXIS][UP]);
+}
+
+/****************************************************************/
+
+#include "ly-smobs.icc"
+
+IMPLEMENT_SIMPLE_SMOBS (Box);
+IMPLEMENT_TYPE_P (Box, "ly:box?");
+IMPLEMENT_DEFAULT_EQUAL_P (Box);
+
+SCM
+Box::mark_smob (SCM /* x */)
+{
+ return SCM_EOL;
+}
+
+int
+Box::print_smob (SCM /* x */, SCM p, scm_print_state *)
+{
+ scm_puts ("#<Box>", p);
+ return 1;