X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fitem.cc;h=f90b29d30a78445c0789de622aadd1275d916ca3;hb=97a0169312a260933246ab224e4f8b0969871dd5;hp=c3718796e011e9a3e4aaff55028df44c344431d7;hpb=408475516f7db93450e45c7e1b4a2660a4fa96c0;p=lilypond.git diff --git a/lily/item.cc b/lily/item.cc index c3718796e0..f90b29d30a 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--2011 Han-Wen Nienhuys + Copyright (C) 1997--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 @@ -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) @@ -55,9 +55,6 @@ Item::Item (Item const &s) bool Item::is_non_musical (Grob *me) { - if (me->original ()) - return false; - Item *i = dynamic_cast (me->get_parent (X_AXIS)); return i ? Item::is_non_musical (i) : to_boolean (me->get_property ("non-musical")); } @@ -80,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; } @@ -105,7 +100,7 @@ Item::is_broken () const void Item::discretionary_processing () { - if (is_broken ()) + if (is_broken () || original ()) return; if (Item::is_non_musical (this)) @@ -118,27 +113,16 @@ 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; } -Item * -Item::maybe_find_prebroken_piece (Item *g, Direction d) -{ - Item *ret = g->find_prebroken_piece (d); - if (ret) - return ret; - return g; -} - Item * Item::find_prebroken_piece (Direction d) const { @@ -214,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; } @@ -242,19 +223,16 @@ Item::derived_mark () const scm_gc_mark (broken_to_drul_[RIGHT]->self_scm ()); } -Item * -unsmob_item (SCM s) -{ - return dynamic_cast (unsmob_grob (s)); -} - Interval -Item::pure_height (Grob *g, int start, int end) +Item::pure_y_extent (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'. + */ - cache_pure_height (Grob::pure_height (this, start, end)); + cache_pure_height (Grob::pure_y_extent (this, start, end)); return cached_pure_height_ + pure_relative_y_coordinate (g, start, end); }