X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmusic.cc;h=ae75ff795273da024d404a76d144f10da52613bd;hb=5d84bfad4626892bcffd05adcced53c8a2329047;hp=60d33436b98bf1ea17cc2bad6475a222e8b60c45;hpb=75b6979fb22f371780cefb6738b9ca56f1902b73;p=lilypond.git diff --git a/lily/music.cc b/lily/music.cc index 60d33436b9..ae75ff7952 100644 --- a/lily/music.cc +++ b/lily/music.cc @@ -45,12 +45,15 @@ Music::internal_is_music_type (SCM k) const return scm_is_true (scm_c_memq (k, ifs)); } -Music::Music (SCM init) - : Prob (ly_symbol2scm ("Music"), init) +Preinit_Music::Preinit_Music () { length_callback_ = SCM_EOL; start_callback_ = SCM_EOL; +} +Music::Music (SCM init) + : Prob (ly_symbol2scm ("Music"), init) +{ length_callback_ = get_property ("length-callback"); if (!ly_is_procedure (length_callback_)) length_callback_ = duration_length_callback_proc; @@ -198,10 +201,14 @@ Music::compress (Moment factor) /* This mutates alist. Hence, make sure that it is not shared */ + void -transpose_mutable (SCM alist, Pitch delta) +Prob::transpose (Pitch delta) { - for (SCM s = alist; scm_is_pair (s); s = scm_cdr (s)) + if (to_boolean (get_property ("untransposable"))) + return; + + for (SCM s = mutable_property_alist_; scm_is_pair (s); s = scm_cdr (s)) { SCM entry = scm_car (s); SCM prop = scm_car (entry); @@ -220,7 +227,7 @@ transpose_mutable (SCM alist, Pitch delta) } else if (scm_is_eq (prop, ly_symbol2scm ("element"))) { - if (Music *m = unsmob (val)) + if (Prob *m = unsmob (val)) m->transpose (delta); } else if (scm_is_eq (prop, ly_symbol2scm ("elements")) @@ -230,20 +237,11 @@ transpose_mutable (SCM alist, Pitch delta) && scm_is_pair (val)) new_val = ly_transpose_key_alist (val, delta.smobbed_copy ()); - if (val != new_val) + if (!scm_is_eq (val, new_val)) scm_set_cdr_x (entry, new_val); } } -void -Music::transpose (Pitch delta) -{ - if (to_boolean (get_property ("untransposable"))) - return; - - transpose_mutable (mutable_property_alist_, delta); -} - void Music::set_spot (Input ip) {