From: fred Date: Tue, 26 Mar 2002 22:23:50 +0000 (+0000) Subject: lilypond-1.1.60 X-Git-Tag: release/1.5.59~2256 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=299b05540cd7b31b170f0f90b37fd7abf99547cb;p=lilypond.git lilypond-1.1.60 --- diff --git a/lily/axis-group-element.cc b/lily/axis-group-element.cc index d843dfbbbb..0c5322bec7 100644 --- a/lily/axis-group-element.cc +++ b/lily/axis-group-element.cc @@ -9,12 +9,11 @@ #include "axis-group-element.hh" #include "graphical-axis-group.hh" - - Link_array Axis_group_element::get_extra_dependencies() const { - return elem_l_arr (); + Link_array e(elem_l_arr ()); + return e; } Link_array @@ -35,6 +34,7 @@ Axis_group_element::get_children () { Link_array childs; Link_array elems = elem_l_arr (); + elems.concat (extra_elems_ ); for (int i=0; i < elems.size (); i++) { Score_element* e = elems[i]; @@ -72,21 +72,71 @@ Axis_group_element::do_substitute_element_pointer (Score_element*o, Score_element*n) { int i; - while ((i = elem_l_arr_.find_i (o))>=0) - if (n) + Graphical_element * go = o; + Graphical_element * gn = n; + + while ((i = elem_l_arr_.find_i (go))>=0) + elem_l_arr_.substitute (go,gn); +#if 0 + if (n) elem_l_arr_[i] = n; else elem_l_arr_.del (i); +#endif + extra_elems_.substitute (o, n); +} + +Interval +Axis_group_element::extra_extent (Axis a )const +{ + Interval g; + for (int i=0; i < extra_elems_.size (); i++) + { + Interval ge = extra_elems_[i]->extent (a); + ge += extra_elems_[i]->relative_coordinate (dim_cache_[a], a); + g.unite (ge); + } + return g; } Interval Axis_group_element::do_height () const { - return Graphical_axis_group::extent (Y_AXIS); + Interval gag = Graphical_axis_group::extent (Y_AXIS); + gag.unite (extra_extent (Y_AXIS)); + return gag; } Interval Axis_group_element::do_width () const { - return Graphical_axis_group::extent (X_AXIS); + Interval gag = Graphical_axis_group::extent (X_AXIS); + gag.unite (extra_extent (X_AXIS)); + return gag; +} + + +/* + UGH. + */ +void +Axis_group_element::add_extra_element (Score_element *e) +{ + Link_array se; + while (e && e != this) + { + se.push (e); + e = dynamic_cast (e->dim_cache_[Y_AXIS]->parent_l_ ? e->dim_cache_[Y_AXIS]->parent_l_->element_l() : 0); + } + + if (1) // e == this) + { + for (int i=0; i < se.size( ); i++) + { + extra_elems_.push (se[i]); + add_dependency (se[i]); + se[i]->set_elt_property (ly_symbol ("Axis_group_element::add_extra_element"), SCM_BOOL_T); // UGH GUH. + } + + } } diff --git a/lily/axis-group-engraver.cc b/lily/axis-group-engraver.cc index a3bf9111fd..e13dcdd518 100644 --- a/lily/axis-group-engraver.cc +++ b/lily/axis-group-engraver.cc @@ -40,10 +40,7 @@ Axis_group_engraver::do_removal_processing () void Axis_group_engraver::acknowledge_element (Score_element_info i) { - if (!i.elem_l_->parent_l (Y_AXIS)) - { - elts_.push (i.elem_l_); - } + elts_.push (i.elem_l_); } void @@ -53,6 +50,12 @@ Axis_group_engraver::process_acknowledged () { if (!elts_[i]->parent_l (Y_AXIS)) staffline_p_->add_element (elts_[i]); + + /* UGH UGH UGH */ + else if (elts_[i]->get_elt_property (ly_symbol ("Axis_group_element::add_extra_element")) == SCM_BOOL_F) + { + staffline_p_->add_extra_element (elts_[i]); + } } elts_.clear (); }