From: fred Date: Tue, 26 Mar 2002 22:44:08 +0000 (+0000) Subject: lilypond-1.3.10 X-Git-Tag: release/1.5.59~1955 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=312ad993dbeb94063ef116fc9d2236e9e100c844;p=lilypond.git lilypond-1.3.10 --- diff --git a/lily/crescendo.cc b/lily/crescendo.cc index b8ab2137fa..ccd2e91b80 100644 --- a/lily/crescendo.cc +++ b/lily/crescendo.cc @@ -23,7 +23,7 @@ Crescendo::Crescendo () Molecule Crescendo::get_symbol () const { - Real w_dim = extent (X_AXIS).length () - get_broken_left_end_align (); + Real w_dim = spanner_length()- get_broken_left_end_align (); Real absdyn_dim = paper_l ()-> get_var ("crescendo_shorten"); if (dyn_b_drul_[LEFT]) { diff --git a/lily/tuplet-spanner.cc b/lily/tuplet-spanner.cc index 0c3646f6ff..3b9565ce11 100644 --- a/lily/tuplet-spanner.cc +++ b/lily/tuplet-spanner.cc @@ -17,11 +17,18 @@ #include "stem.hh" #include "note-column.hh" #include "dimensions.hh" +#include "group-interface.hh" + Tuplet_spanner::Tuplet_spanner () { + /* + -> GUILE + */ parallel_beam_b_ = false; + set_elt_property ("beams", SCM_EOL); + set_elt_property ("columns", SCM_EOL); } /* @@ -55,77 +62,78 @@ Tuplet_spanner::do_brew_molecule_p () const (value == 2 && !parallel_beam_b_)); } - if (column_arr_.size ()){ - Real ncw = column_arr_.top ()->extent (X_AXIS).length (); - Real w = extent (X_AXIS).length () + ncw; - Molecule num (lookup_l ()->text ("italic", - number_str_, paper_l ())); - num.align_to (X_AXIS, CENTER); - num.translate_axis (w/2, X_AXIS); - Real interline = paper_l ()->get_var ("interline"); - Real dy = column_arr_.top ()->extent (Y_AXIS) [get_direction ()] - - column_arr_[0]->extent (Y_AXIS) [get_direction ()]; - num.align_to (Y_AXIS, CENTER); - num.translate_axis (get_direction () * interline, Y_AXIS); + if (gh_pair_p (get_elt_property ("columns"))) + { + Link_array column_arr= + Group_interface__extract_elements (this, (Note_column*)0, "columns"); + + Real ncw = column_arr.top ()->extent(X_AXIS).length (); + Real w = spanner_length () + ncw; + Molecule num (lookup_l ()->text ("italic", + number_str_, paper_l ())); + num.align_to (X_AXIS, CENTER); + num.translate_axis (w/2, X_AXIS); + Real interline = paper_l ()->get_var ("interline"); + Real dy = column_arr.top ()->extent (Y_AXIS) [get_direction ()] + - column_arr[0]->extent (Y_AXIS) [get_direction ()]; + num.align_to (Y_AXIS, CENTER); + num.translate_axis (get_direction () * interline, Y_AXIS); - num.translate_axis (dy/2, Y_AXIS); + num.translate_axis (dy/2, Y_AXIS); - Real thick = paper_l ()->get_var ("tuplet_thick"); - if (bracket_visibility) - { - Real gap = paper_l () -> get_var ("tuplet_spanner_gap"); + Real thick = paper_l ()->get_var ("tuplet_thick"); + if (bracket_visibility) + { + Real gap = paper_l () -> get_var ("tuplet_spanner_gap"); - mol_p->add_molecule (lookup_l ()->tuplet_bracket (dy, w, thick, gap, interline, get_direction ())); - } - - if (number_visibility) - { - mol_p->add_molecule (num); - } - mol_p->translate_axis (get_direction () * interline, Y_AXIS); - } + mol_p->add_molecule (lookup_l ()->tuplet_bracket (dy, w, thick, gap, interline, get_direction ())); + } + + if (number_visibility) + { + mol_p->add_molecule (num); + } + mol_p->translate_axis (get_direction () * interline, Y_AXIS); + } return mol_p; } void Tuplet_spanner::do_add_processing () { - if (column_arr_.size ()) + if (gh_pair_p (get_elt_property ("columns"))) { - set_bounds (LEFT, column_arr_[0]); - set_bounds (RIGHT, column_arr_.top ()); + Link_array column_arr= + Group_interface__extract_elements (this, (Note_column*)0, "columns"); + + set_bounds (LEFT, column_arr[0]); + set_bounds (RIGHT, column_arr.top ()); } } void Tuplet_spanner::do_post_processing () { - if (column_arr_.size()) - translate_axis (column_arr_[0]->extent (Y_AXIS)[get_direction ()], Y_AXIS); + Link_array column_arr= + Group_interface__extract_elements (this, (Note_column*)0, "columns"); + + + if (column_arr.size()) + translate_axis (column_arr[0]->extent (Y_AXIS)[get_direction ()], Y_AXIS); - if (beam_l_arr_.size () == 1) + + if (scm_ilength (get_elt_property ("beams")) == 1) { - Beam * beam_l = beam_l_arr_[0]; + SCM bs = get_elt_property ("beams"); + Score_element *b = unsmob_element (gh_car (bs)); + Beam * beam_l = dynamic_cast (b); if (!broken_b () && spanned_drul_[LEFT]->column_l () == beam_l->spanned_drul_[LEFT]->column_l () && spanned_drul_[RIGHT]->column_l () == beam_l->spanned_drul_[RIGHT]->column_l ()) parallel_beam_b_ = true; } - - // if (column_arr_.size () == 1) - // bracket_visibility_b_ = false; } -void -Tuplet_spanner::do_substitute_element_pointer (Score_element* o, Score_element* n) -{ - if (Note_column *onc = dynamic_cast (o)) - column_arr_.substitute (onc, dynamic_cast (n)); - else if (Beam * b = dynamic_cast (o)) - { - beam_l_arr_.substitute (b, dynamic_cast (n)); - } -} Direction Tuplet_spanner::get_default_dir () const @@ -138,14 +146,17 @@ Tuplet_spanner::get_default_dir () const return d; } - for (int i=0; i < column_arr_.size (); i ++) + for (SCM s = get_elt_property ("columns"); gh_pair_p (s); s = gh_cdr (s)) { - if (column_arr_[i]->dir () < 0) + Score_element * sc = unsmob_element (gh_car (s)); + Note_column * nc = dynamic_cast (sc); + if (nc->dir () < 0) { d = DOWN; break; } } + return d; } @@ -153,13 +164,16 @@ void Tuplet_spanner::add_beam (Beam *b) { add_dependency (b); - beam_l_arr_.push (b); + Group_interface gi (this, "beams"); + gi.add_element (b); } void Tuplet_spanner::add_column (Note_column*n) { - column_arr_.push (n); + Group_interface gi (this, "columns"); + gi.add_element (n); + add_dependency (n); } diff --git a/lily/volta-spanner.cc b/lily/volta-spanner.cc index 9e06d74c69..ac0973f9e5 100644 --- a/lily/volta-spanner.cc +++ b/lily/volta-spanner.cc @@ -17,12 +17,15 @@ #include "paper-def.hh" #include "volta-spanner.hh" #include "stem.hh" - -#include "pointer.tcc" +#include "dimension-cache.hh" +#include "group-interface.hh" Volta_spanner::Volta_spanner () { last_b_ = false; + dim_cache_ [Y_AXIS]->set_callback (dim_callback); + set_elt_property ("bars", SCM_EOL); + set_elt_property ("note-columns", SCM_EOL); } Molecule* @@ -30,8 +33,15 @@ Volta_spanner::do_brew_molecule_p () const { Molecule* mol_p = new Molecule; - if (!bar_arr_.size ()) + Link_array bar_arr + = Group_interface__extract_elements (this, (Bar*)0, "bars"); + + if (!bar_arr.size ()) return mol_p; + + Link_array note_column_arr + = Group_interface__extract_elements (this, (Bar*)0, "note-columns"); + bool no_vertical_start = false; bool no_vertical_end = last_b_; @@ -40,7 +50,7 @@ Volta_spanner::do_brew_molecule_p () const no_vertical_start = true; if (orig_span && (orig_span->broken_into_l_arr_.top () != (Spanner*)this)) no_vertical_end = true; - if (bar_arr_.top ()->type_str_.length_i () > 1) + if (bar_arr.top ()->type_str_.length_i () > 1) no_vertical_end = false; Real interline_f = paper_l ()->get_var ("interline"); @@ -48,18 +58,18 @@ Volta_spanner::do_brew_molecule_p () const Real t = paper_l ()->get_var ("volta_thick"); Real dx = internote_f; - Real w = extent (X_AXIS).length () - dx - get_broken_left_end_align (); + Real w = spanner_length() - dx - get_broken_left_end_align (); Real h = paper_l()->get_var ("volta_spanner_height"); Molecule volta (lookup_l ()->volta (h, w, t, no_vertical_start, no_vertical_end)); Molecule num (lookup_l ()->text ("volta", number_str_, paper_l ())); - Real dy = bar_arr_.top ()->extent (Y_AXIS) [UP] > - bar_arr_[0]->extent (Y_AXIS) [UP]; + Real dy = bar_arr.top ()->extent (Y_AXIS) [UP] > + bar_arr[0]->extent (Y_AXIS) [UP]; dy += 2 * h; - for (int i = 0; i < note_column_arr_.size (); i++) - dy = dy >? note_column_arr_[i]->extent (Y_AXIS)[BIGGER]; + for (int i = 0; i < note_column_arr.size (); i++) + dy = dy >? note_column_arr[i]->extent (Y_AXIS)[BIGGER]; dy -= h; Molecule two (lookup_l ()->text ("number", "2", paper_l ())); @@ -76,17 +86,18 @@ Volta_spanner::do_brew_molecule_p () const void Volta_spanner::do_add_processing () { - if (bar_arr_.size ()) + + Link_array bar_arr + = Group_interface__extract_elements (this, (Bar*)0, "bars"); + + if (bar_arr.size ()) { - set_bounds (LEFT, bar_arr_[0]); - set_bounds (RIGHT, bar_arr_.top ()); + set_bounds (LEFT, bar_arr[0]); + set_bounds (RIGHT, bar_arr.top ()); } } - -Interval -Volta_spanner::do_height () const -{ - /* + +/* Originally the following comment existed here "in most cases, it's a lot better not no have height...", but problems existed with collision between volta spanner @@ -94,39 +105,44 @@ Volta_spanner::do_height () const height is now being returned. Additional space should still be added elsewhere so lyrics from above staff do not sit on volta spanner. (Roy R. Rankin) - */ - Real h = paper_l()->get_var ("volta_spanner_height") * 2.; +*/ +Interval +Volta_spanner::dim_callback (Dimension_cache const *c) +{ + Volta_spanner * v = dynamic_cast (c->element_l ()); + Real h = v->paper_l()->get_var ("volta_spanner_height") * 2.; return Interval (0., h); } void Volta_spanner::do_post_processing () { - if (bar_arr_.size()) - translate_axis (bar_arr_[0]->extent (Y_AXIS)[UP], Y_AXIS); + + Link_array bar_arr + = Group_interface__extract_elements (this, (Bar*)0, "bars"); + + if (bar_arr.size()) + translate_axis (bar_arr[0]->extent (Y_AXIS)[UP], Y_AXIS); translate_axis (get_broken_left_end_align (), X_AXIS); } -void -Volta_spanner::do_substitute_element_pointer (Score_element* o, Score_element* n) -{ - if (Note_column* c = dynamic_cast (o)) - note_column_arr_.substitute (c, dynamic_cast (n)); - else if (Bar* c = dynamic_cast (o)) - bar_arr_.substitute (c, dynamic_cast (n)); -} + void Volta_spanner::add_bar (Bar* c) { - bar_arr_.push (c); + Group_interface gi(this, "bars"); + gi.add_element (c); + add_dependency (c); } void Volta_spanner::add_column (Note_column* c) { - note_column_arr_.push (c); + Group_interface gi(this, "note-columns"); + gi.add_element (c); + add_dependency (c); }