From: hanwen Date: Sun, 16 Oct 2005 01:25:47 +0000 (+0000) Subject: * lily/rest.cc (y_offset_callback): use offset callback X-Git-Tag: release/2.7.16^2~88 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=54a07ee32e6d777295b9ec1e820b4d27be35aae3;p=lilypond.git * lily/rest.cc (y_offset_callback): use offset callback iso. after-line-breaking callback. * lily/grob.cc: change after/before-line-breaking-callback to after/before-line-breaking dummy properties. * lily/include/grob.hh: remove Grob_status. * lily/grob.cc (other_axis_parent_positioning): new function. (same_axis_parent_positioning): new function * scm/define-grob-properties.scm (all-user-grob-properties): doc callbacks property. --- diff --git a/ChangeLog b/ChangeLog index f4eb09e2fb..78256a0414 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2005-10-16 Han-Wen Nienhuys + * lily/rest.cc (y_offset_callback): use offset callback + iso. after-line-breaking callback. + + * lily/grob.cc: change after/before-line-breaking-callback to + after/before-line-breaking dummy properties. + + * lily/include/grob.hh: remove Grob_status. + * scm/define-context-properties.scm (all-user-translation-properties): remove verticalAlignmentChildCallback diff --git a/lily/grob.cc b/lily/grob.cc index 4933934c0c..95208d3a16 100644 --- a/lily/grob.cc +++ b/lily/grob.cc @@ -165,9 +165,6 @@ Grob::Grob (Grob const &s, int copy_index) property_callbacks_ = s.property_callbacks_; object_alist_ = SCM_EOL; - /* No properties are copied. That is the job of - handle_broken_dependencies. */ - status_ = s.status_; pscore_ = 0; smobify_self (); @@ -209,36 +206,6 @@ Grob::get_layout () const return pscore_ ? pscore_->layout () : 0; } -/* Recursively track all dependencies of this Grob. The status_ field - is used as a mark-field. It is marked with BUSY during execution - of this function, and marked with FINAL when finished. - - FUNCPTR is the function to call to update this element. */ -void -Grob::calculate_dependencies (int final, int busy, SCM funcname) -{ - if (status_ >= final) - return; - - if (status_ == busy) - { - programming_error ("element is busy, come back later"); - return; - } - - status_ = busy; - - extract_grob_set (this, "dependencies", deps); - for (int i = 0; i < deps.size (); i++) - deps[i]->calculate_dependencies (final, busy, funcname); - - SCM proc = internal_get_property (funcname); - if (ly_is_procedure (proc)) - scm_call_1 (proc, this->self_scm ()); - - status_ = final; -} - Stencil * Grob::get_stencil () const { @@ -746,6 +713,9 @@ ADD_INTERFACE (Grob, "grob-interface", "lists of other objects, or results from computations are stored in" "mutable properties: every call to set-grob-property (or its C++ equivalent) " "sets a mutable property. ", + "\n\n" + + "The properties @code{after-line-breaking} and @code{before-line-breaking} are unused dummies. " /* properties */ "X-extent " @@ -754,10 +724,10 @@ ADD_INTERFACE (Grob, "grob-interface", "Y-extent " "Y-extent-callback " "Y-offset-callbacks " - "after-line-breaking-callback " + "after-line-breaking " "axis-group-parent-X " "axis-group-parent-Y " - "before-line-breaking-callback " + "before-line-breaking " "callbacks " "cause " "color " diff --git a/lily/include/grob.hh b/lily/include/grob.hh index c0dd655b47..a5e8c62068 100644 --- a/lily/include/grob.hh +++ b/lily/include/grob.hh @@ -14,15 +14,6 @@ #include "grob-interface.hh" #include "object-key.hh" -enum Grob_status - { - ORPHAN = 0, // not yet added to Paper_score - PRECALCING, - PRECALCED, // calcs before spacing done - POSTCALCING, // busy calculating. This is used to trap cyclic deps. - POSTCALCED, // after spacing calcs done - }; - typedef void (Grob:: *Grob_method_pointer) (void); class Grob @@ -31,8 +22,6 @@ private: DECLARE_SMOBS (Grob, foo); void init (); - - protected: Object_key const *key_; SCM immutable_property_alist_; diff --git a/lily/include/rest.hh b/lily/include/rest.hh index 22be2d4b5b..de9f3122f7 100644 --- a/lily/include/rest.hh +++ b/lily/include/rest.hh @@ -16,7 +16,7 @@ class Grob; class Rest { public: - DECLARE_SCHEME_CALLBACK (after_line_breaking, (SCM)); + DECLARE_SCHEME_CALLBACK (y_offset_callback, (SCM, SCM)); static bool has_interface (Grob *); static String glyph_name (Grob *, int, String, bool); static SCM brew_internal_stencil (SCM, bool); diff --git a/lily/rest.cc b/lily/rest.cc index e36525262b..9d9579f6a2 100644 --- a/lily/rest.cc +++ b/lily/rest.cc @@ -17,21 +17,25 @@ #include "directional-element-interface.hh" // -> offset callback -MAKE_SCHEME_CALLBACK (Rest, after_line_breaking, 1); +MAKE_SCHEME_CALLBACK (Rest, y_offset_callback, 2); SCM -Rest::after_line_breaking (SCM smob) +Rest::y_offset_callback (SCM smob, SCM axis) { Grob *me = unsmob_grob (smob); + (void) axis; + int bt = scm_to_int (me->get_property ("duration-log")); int lc = Staff_symbol_referencer::line_count (me); Real ss = Staff_symbol_referencer::staff_space (me); + + Real amount = 0.0; if (lc % 2) { if (bt == 0 && lc > 1) - me->translate_axis (ss, Y_AXIS); + amount += ss; } else - me->translate_axis (ss / 2, Y_AXIS); + amount += ss / 2; Grob *d = unsmob_grob (me->get_object ("dot")); if (d && bt > 4) // UGH. @@ -44,7 +48,7 @@ Rest::after_line_breaking (SCM smob) d->set_property ("staff-position", scm_from_int ((bt == 0) ? -1 : 1)); } - return SCM_UNSPECIFIED; + return scm_from_double (amount); } /* diff --git a/lily/script-interface.cc b/lily/script-interface.cc index 7c01a673e5..6aa4c53884 100644 --- a/lily/script-interface.cc +++ b/lily/script-interface.cc @@ -41,6 +41,9 @@ Script_interface::get_stencil (Grob *me, Direction d) return Stencil (); } +/* +todo: use proper callbacks. +*/ MAKE_SCHEME_CALLBACK (Script_interface, before_line_breaking, 1); SCM Script_interface::before_line_breaking (SCM smob) diff --git a/lily/system.cc b/lily/system.cc index 4795e63c0a..848b3e7b61 100644 --- a/lily/system.cc +++ b/lily/system.cc @@ -280,8 +280,10 @@ System::pre_processing () apply_tweaks (all_elements_->grob (i), false); for (int i = 0; i < all_elements_->size (); i++) - all_elements_->grob (i)->calculate_dependencies (PRECALCED, PRECALCING, - ly_symbol2scm ("before-line-breaking-callback")); + { + Grob *g = all_elements_->grob (i); + (void) g->get_property ("after-line-breaking"); + } message (_ ("Calculating line breaks...")); progress_indication (" "); @@ -303,8 +305,7 @@ System::post_processing () Grob *g = all_elements_->grob (i); apply_tweaks (g, true); - g->calculate_dependencies (POSTCALCED, POSTCALCING, - ly_symbol2scm ("after-line-breaking-callback")); + (void) g->get_property ("after-line-breaking"); } Interval iv (extent (this, Y_AXIS)); diff --git a/lily/volta-bracket.cc b/lily/volta-bracket.cc index 7d7100e468..e97c7b0994 100644 --- a/lily/volta-bracket.cc +++ b/lily/volta-bracket.cc @@ -36,17 +36,6 @@ SCM Volta_bracket_interface::print (SCM smob) { Spanner *me = unsmob_spanner (smob); - - /* - UGH UGH dependency tracking. - */ - SCM proc = me->get_property ("after-line-breaking-callback"); - if (ly_is_procedure (proc)) - { - me->set_property ("after-line-breaking-callback", SCM_EOL); - scm_call_1 (proc, me->self_scm ()); - } - Spanner *orig_span = dynamic_cast (me->original_); bool broken_first_bracket = orig_span && (orig_span->broken_intos_[0] == (Spanner *)me); diff --git a/scm/define-grob-properties.scm b/scm/define-grob-properties.scm index 9a0ade0fd8..508e8578b3 100644 --- a/scm/define-grob-properties.scm +++ b/scm/define-grob-properties.scm @@ -84,9 +84,7 @@ note etc. This information is used to determine how to connect the beaming patterns from stem to stem inside a beam.") - (before-line-breaking-callback ,procedure? "This procedure is -called before line breaking, but after splitting breakable items at -potential line breaks.") + (before-line-breaking ,boolean? "Dummy property, used to trigger a callback function.") (between-cols ,pair? "Where to attach a loose column to") (bound-padding ,number? "The amount of padding to insert around spanner bounds.") (bracket-flare ,number-pair? "A pair of numbers specifying how @@ -529,7 +527,7 @@ sizes (like the dynamic @b{p} and @b{f}) on their baselines.") (axis-group-parent-Y ,ly:grob? "Containing Y axis group") (accidental-grobs ,list? "Alist with (NOTENAME . GROBLIST) entries") (adjacent-hairpins ,ly:grob-array? "List of directly neighboring hairpins") - (after-line-breaking-callback ,procedure? "This procedure is called after line breaking. Its return value is ignored.") + (after-line-breaking ,boolean? "Dummy property, used to trigger callback for after-line-breaking") (all-elements ,ly:grob-array? "list of all grobs in this line. Its function is to protect objects from being garbage collected.") (arpeggio ,ly:grob? "pointer to arpeggio object.") diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index 2ed04b5668..52d88dc32b 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -22,7 +22,8 @@ (print-function . ,Accidental_interface::print) (avoid-slur . inside) (cautionary-style . parentheses) - (after-line-breaking-callback . ,Accidental_interface::after_line_breaking) + (callbacks ((after-line-breaking . ,Accidental_interface::after_line_breaking))) + (meta . ((class . Item) (interfaces . (accidental-interface font-interface)))))) @@ -94,7 +95,8 @@ (X-offset-callbacks . (,Side_position_interface::aligned_side)) (direction . -1) (cautionary-style . parentheses) - (after-line-breaking-callback . ,Accidental_interface::after_line_breaking) + (callbacks . ((after-line-breaking . ,Accidental_interface::after_line_breaking) + )) (meta . ((class . Item) (interfaces . (item-interface accidental-interface @@ -141,7 +143,7 @@ (print-function . ,Bar_line::print) (break-visibility . ,all-visible) (breakable . #t) - (before-line-breaking-callback . ,Bar_line::before_line_breaking) + (callbacks . ((before-line-breaking . ,Bar_line::before_line_breaking))) (space-alist . ( (time-signature . (extra-space . 0.75)) (custos . (minimum-space . 2.0)) @@ -264,8 +266,6 @@ ;; TODO: should be in SLT. (thickness . 0.48) ; in staff-space -; (before-line-breaking-callback . ,Beam::before_line_breaking) -; (after-line-breaking-callback . ,Beam::after_line_breaking) (neutral-direction . -1) (dir-function . ,beam-dir-majority-median) @@ -377,7 +377,7 @@ (Clef . ( (print-function . ,Clef::print) - (before-line-breaking-callback . ,Clef::before_line_breaking) + (callbacks ((before-line-breaking . ,Clef::before_line_breaking))) (breakable . #t) (font-family . music) (break-align-symbol . clef) @@ -417,7 +417,8 @@ (ChordName . ( (print-function . ,Text_interface::print) - (after-line-breaking-callback . ,Chord_name::after_line_breaking) + (callbacks . ((after-line-breaking . ,Chord_name::after_line_breaking) + )) (word-space . 0.0) (font-family . sans) (font-size . 1.5) @@ -541,7 +542,8 @@ (DynamicText . ( (print-function . ,Text_interface::print) - (before-line-breaking-callback . ,Script_interface::before_line_breaking) + ;; todo. + (callbacks . ((before-line-breaking . ,Script_interface::before_line_breaking))) (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self)) (self-alignment-X . 0) (Y-offset-callbacks . (,Self_alignment_interface::aligned_on_self)) @@ -591,7 +593,7 @@ (self-alignment-X . 0) (self-alignment-Y . 0) (script-priority . 100) - (before-line-breaking-callback . ,Script_interface::before_line_breaking) + (callbacks . ((before-line-breaking . ,Script_interface::before_line_breaking))) (font-encoding . fetaNumber) (font-size . -5) ; don't overlap when next to heads. (meta . ((class . Item) @@ -610,7 +612,8 @@ (breakable . #t) (X-extent-callback . #f) (Y-extent-callback . #f) - (after-line-breaking-callback . ,Line_spanner::after_line_breaking) + (callbacks ((after-line-breaking . ,Line_spanner::after_line_breaking) + )) (print-function . ,Line_spanner::print) (meta . ((class . Spanner) (interfaces . (line-interface @@ -638,7 +641,7 @@ (Hairpin . ( (print-function . ,Hairpin::print) - (after-line-breaking-callback . ,Hairpin::after_line_breaking) + (callbacks . ((after-line-breaking . ,Hairpin::after_line_breaking))) (thickness . 1.0) (height . 0.6666) (spacing-procedure . ,Spanner::set_spacing_rods) @@ -1029,7 +1032,7 @@ (PaperColumn . ( (axes . (0)) - (before-line-breaking-callback . ,Paper_column::before_line_breaking) + (callbacks ((before-line-breaking . ,Paper_column::before_line_breaking))) (X-extent-callback . ,Axis_group_interface::group_extent_callback) ;; debugging @@ -1058,7 +1061,7 @@ . ( (axes . (0)) (X-extent-callback . ,Axis_group_interface::group_extent_callback) - (before-line-breaking-callback . ,Paper_column::before_line_breaking) + (callbacks . ((before-line-breaking . ,Paper_column::before_line_breaking))) (breakable . #t) ;; debugging stuff: print column number. @@ -1119,7 +1122,7 @@ (print-function . ,Text_interface::print) (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self)) (Y-offset-callbacks . (,Side_position_interface::aligned_side)) - (after-line-breaking-callback . ,shift-right-at-line-begin) + (callbacks . ((after-line-breaking . ,shift-right-at-line-begin))) (self-alignment-X . 0) (direction . 1) (breakable . #t) @@ -1154,12 +1157,14 @@ (interfaces . (percent-repeat-interface)))))) (Rest . ( - (after-line-breaking-callback . ,Rest::after_line_breaking) (X-extent-callback . ,Rest::extent_callback) (Y-extent-callback . ,Rest::extent_callback) (print-function . ,Rest::print) - (Y-offset-callbacks . (,Staff_symbol_referencer::callback - ,Rest::polyphonic_offset_callback)) + (Y-offset-callbacks . ( + ,Staff_symbol_referencer::callback + ,Rest::polyphonic_offset_callback + ,Rest::y_offset_callback + )) (minimum-distance . 0.25) (meta . ((class . Item) (interfaces . (font-interface @@ -1187,7 +1192,7 @@ (staff-padding . 0.25) ;; (script-priority . 0) priorities for scripts, see script.scm (X-offset-callbacks . (,Self_alignment_interface::centered_on_parent)) - (before-line-breaking-callback . ,Script_interface::before_line_breaking) + (callbacks . ((before-line-breaking . ,Script_interface::before_line_breaking))) (font-encoding . fetaMusic) (meta . ((class . Item) (interfaces . (script-interface @@ -1196,7 +1201,7 @@ (ScriptColumn . ( - (before-line-breaking-callback . ,Script_column::before_line_breaking) + (callbacks . ((before-line-breaking . ,Script_column::before_line_breaking))) (meta . ((class . Item) (interfaces . (script-column-interface)))))) @@ -1252,7 +1257,7 @@ (Y-extent-callback . ()) (layer . 0) (breakable . #t) - (before-line-breaking-callback . ,Span_bar::before_line_breaking) + (callbacks . ((before-line-breaking . ,Span_bar::before_line_breaking))) ;; ugh duplication! ;; @@ -1473,7 +1478,8 @@ (print-function . ,System_start_delimiter::print) (glyph . "bar-line") (thickness . 1.6) - (after-line-breaking-callback . ,System_start_delimiter::after_line_breaking) + (callbacks . ((after-line-breaking . ,System_start_delimiter::after_line_breaking))) + (meta . ((class . Spanner) (interfaces . (system-start-delimiter-interface)))))) @@ -1502,7 +1508,7 @@ ;; sync with Fingering ? (padding . 0.5) (staff-padding . 0.5) - (before-line-breaking-callback . ,Script_interface::before_line_breaking) + (callbacks . ((before-line-breaking . ,Script_interface::before_line_breaking))) (avoid-slur . around) (slur-padding . 0.5) (script-priority . 200) @@ -1543,8 +1549,8 @@ (TieColumn . ( (callbacks . ((positioning-done . ,Tie_column::calc_positioning_done) + (before-line-breaking . ,Tie_column::before_line_breaking) )) - (before-line-breaking-callback . ,Tie_column::before_line_breaking) (X-extent-callback . #f) (Y-extent-callback . #f) @@ -1722,7 +1728,7 @@ (VoltaBracket . ( (print-function . ,Volta_bracket_interface::print) - (after-line-breaking-callback . ,Volta_bracket_interface::after_line_breaking) + (callbacks . ((after-line-breaking . ,Volta_bracket_interface::after_line_breaking))) (direction . ,UP) (padding . 1) (font-encoding . fetaNumber) @@ -1747,7 +1753,7 @@ (X-extent-callback . #f) (Y-extent-callback . #f) (print-function . ,Line_spanner::print) - (after-line-breaking-callback . ,Line_spanner::after_line_breaking) + (callbacks ((after-line-breaking . ,Line_spanner::after_line_breaking))) (meta . ((class . Spanner) (interfaces . (line-spanner-interface line-interface))))))))