X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fitem.cc;h=e71bc4190b4f5f3fe8aa3d8026bdf5eb4520f29f;hb=0b544cfb7332615ef809b71b57ab656741311ae1;hp=6ea5643a5445e7d791a119479e73d54a5fe7aead;hpb=1be9b72e4f00f7273a8e5ff220b710a52f975344;p=lilypond.git diff --git a/lily/item.cc b/lily/item.cc index 6ea5643a54..e71bc4190b 100644 --- a/lily/item.cc +++ b/lily/item.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--2014 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 @@ -43,7 +43,7 @@ Item::Item (SCM s) } /** - Item copy ctor. Copy nothing: everything should be a elt property + Item copy ctor. Copy nothing: everything should be an elt property or a special purpose pointer (such as broken_to_drul_[]) */ Item::Item (Item const &s) : Grob (s) @@ -77,15 +77,13 @@ void Item::copy_breakable_items () { Drul_array new_copies; - Direction i = LEFT; - do + for (LEFT_and_RIGHT (d)) { Grob *dolly = clone (); Item *item = dynamic_cast (dolly); get_root_system (this)->typeset_grob (item); - new_copies[i] = item; + new_copies[d] = item; } - while (flip (&i) != LEFT); broken_to_drul_ = new_copies; } @@ -115,14 +113,12 @@ Item::find_broken_piece (System *l) const if (get_system () == l) return (Item *) (this); - Direction d = LEFT; - do + for (LEFT_and_RIGHT (d)) { Grob *s = broken_to_drul_[d]; if (s && s->get_system () == l) return s; } - while (flip (&d) != LEFT); return 0; } @@ -202,21 +198,18 @@ spanned_time_interval (Item *l, Item *r) Drul_array bounds (l, r); Interval_t iv; - Direction d = LEFT; - do + for (LEFT_and_RIGHT (d)) { if (bounds[d] && bounds[d]->get_column ()) iv[d] = robust_scm2moment (bounds[d]->get_column ()->get_property ("when"), iv[d]); } - while (flip (&d) != LEFT); - do + for (LEFT_and_RIGHT (d)) { if (!bounds[d] || !bounds[d]->get_column ()) iv[d] = iv[-d]; } - while (flip (&d) != LEFT); return iv; } @@ -241,6 +234,10 @@ Item::pure_height (Grob *g, int start, int end) { if (cached_pure_height_valid_) return cached_pure_height_ + pure_relative_y_coordinate (g, start, end); + /* Note: cached_pure_height_ does not notice if start changes, implicitly + assuming that Items' pure_heights do not depend on 'start' or 'end'. + Accidental_interface::pure_height(), however, does depend on 'start'. + */ cache_pure_height (Grob::pure_height (this, start, end)); return cached_pure_height_ + pure_relative_y_coordinate (g, start, end);