X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fbox.cc;h=6569493419da6a66c44077feab15ea5297c46ee9;hb=97a0169312a260933246ab224e4f8b0969871dd5;hp=df4770ff7861eada58715e88cea9be1c74ae92da;hpb=d61cf3bbdb1c6670a127ba3baddf2f04d3e34fd3;p=lilypond.git diff --git a/lily/box.cc b/lily/box.cc index df4770ff78..6569493419 100644 --- a/lily/box.cc +++ b/lily/box.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1996--2012 Han-Wen Nienhuys + Copyright (C) 1996--2015 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -23,7 +23,8 @@ void 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 @@ -33,6 +34,13 @@ Box::unite (Box b) interval_a_[i].unite (b[i]); } +Real +Box::area () const +{ + return interval_a_[X_AXIS].length () + * interval_a_[Y_AXIS].length (); +} + Box::Box () { } @@ -44,6 +52,21 @@ Box::set_empty () 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; @@ -90,6 +113,13 @@ Box::widen (Real x, Real y) 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 @@ -102,21 +132,5 @@ Box::print () /****************************************************************/ -#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 ("#", p); - return 1; -} +const char * const Box::type_p_name_ = "ly:box?";