X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fgrob-property.cc;h=55b06d6dfa2f522052b929b881bf2a974d7609c4;hb=57739e02af91498141bd96bb73b8b559e38da027;hp=4eee8955e609747d618063ee873d4e3212aadb4f;hpb=8f92566e08013ad67147ca2c78b588fbb8e98198;p=lilypond.git diff --git a/lily/grob-property.cc b/lily/grob-property.cc index 4eee8955e6..55b06d6dfa 100644 --- a/lily/grob-property.cc +++ b/lily/grob-property.cc @@ -23,9 +23,9 @@ Protected_scm grob_property_callback_stack = SCM_EOL; -#ifndef NDEBUG extern bool debug_property_callbacks; +#ifndef NDEBUG static void print_property_callback_stack () { @@ -33,50 +33,54 @@ print_property_callback_stack () for (SCM s = grob_property_callback_stack; scm_is_pair (s); s = scm_cdr (s)) message (_f ("%d: %s", frame++, ly_scm_write_string (scm_car (s)).c_str ())); } - +#endif static SCM modification_callback = SCM_EOL; static SCM cache_callback = SCM_EOL; + +/* + +FIXME: this should use ly:set-option interface instead. + +*/ + LY_DEFINE (ly_set_grob_modification_callback, "ly:set-grob-modification-callback", 1, 0, 0, (SCM cb), - "Specify a procedure that will be called every time lilypond modifies " - "a grob property. The callback will receive as arguments " - "the grob that is being modified, " - "the name of the C++ file in which the modification was requested, " - "the line number in the C++ file in which the modification was requested, " - "the name of the function in which the modification was requested, " - "the property to be changed and " - "the new value for the property.") + "Specify a procedure that will be called every time LilyPond" + " modifies a grob property. The callback will receive as" + " arguments the grob that is being modified, the name of the" + " C++ file in which the modification was requested, the line" + " number in the C++ file in which the modification was requested," + " the name of the function in which the modification was" + " requested, the property to be changed, and the new value for" + " the property.") { - LY_ASSERT_TYPE (ly_is_procedure, cb, 1); - - modification_callback = cb; + modification_callback = (ly_is_procedure (cb)) ? cb : SCM_BOOL_F; return SCM_UNSPECIFIED; } LY_DEFINE (ly_set_property_cache_callback, "ly:set-property-cache-callback", 1, 0, 0, (SCM cb), - "Specify a procedure that will be called whenever lilypond calculates " - "a callback function and caches the result. The callback will " - "receive as arguments " - "the grob whose property it is, " - "the name of the property, " - "the name of the callback that calculated the property and " - "the new (cached) value of the property.") + "Specify a procedure that will be called whenever lilypond" + " calculates a callback function and caches the result. The" + " callback will receive as arguments the grob whose property it" + " is, the name of the property, the name of the callback that" + " calculated the property, and the new (cached) value of the" + " property.") { - LY_ASSERT_TYPE (ly_is_procedure, cb, 1); - - cache_callback = cb; + cache_callback = (ly_is_procedure (cb)) ? cb : SCM_BOOL_F; return SCM_UNSPECIFIED; } + void Grob::instrumented_set_property (SCM sym, SCM v, char const *file, int line, char const *fun) { +#ifndef NDEBUG if (ly_is_procedure (modification_callback)) scm_apply_0 (modification_callback, scm_list_n (self_scm (), @@ -84,9 +88,14 @@ Grob::instrumented_set_property (SCM sym, SCM v, scm_from_int (line), scm_from_locale_string (fun), sym, v, SCM_UNDEFINED)); +#else + (void) file; + (void) line; + (void) fun; +#endif + internal_set_property (sym, v); } -#endif SCM Grob::get_property_alist_chain (SCM def) const