/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2011 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1996--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Box::translate (Offset o)
{
for (Axis i = X_AXIS; i < NO_AXES; incr (i))
- interval_a_[i] += o[i];
+ if (!is_empty (i))
+ interval_a_[i] += o[i];
}
void
interval_a_[i].unite (b[i]);
}
+Real
+Box::area () const
+{
+ return interval_a_[X_AXIS].length ()
+ * interval_a_[Y_AXIS].length ();
+}
+
Box::Box ()
{
}
interval_a_[Y_AXIS].set_empty ();
}
+bool
+Box::is_empty () const
+{
+ return is_empty (X_AXIS) && is_empty (Y_AXIS);
+}
+
+bool
+Box::is_empty (Axis a) const
+{
+ Interval empty;
+ empty.set_empty ();
+ return interval_a_[a][LEFT] == empty[LEFT]
+ && interval_a_[a][RIGHT] == empty[RIGHT];
+}
+
Box::Box (Interval ix, Interval iy)
{
x () = ix;
interval_a_[Y_AXIS].widen (y);
}
-/****************************************************************/
-
-#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 */)
+void
+Box::intersect (Box b)
{
- return SCM_EOL;
+ interval_a_[X_AXIS].intersect (b[X_AXIS]);
+ interval_a_[Y_AXIS].intersect (b[Y_AXIS]);
}
-int
-Box::print_smob (SCM /* x */, SCM p, scm_print_state *)
+// for debugging
+
+void
+Box::print ()
{
- scm_puts ("#<Box>", p);
- return 1;
+ 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]);
}
+
+/****************************************************************/
+
+
+const char * const Box::type_p_name_ = "ly:box?";