From 42aff908ee7b1faaa8ed37be8212f06789300343 Mon Sep 17 00:00:00 2001 From: fred Date: Wed, 27 Mar 2002 00:56:55 +0000 Subject: [PATCH] lilypond-1.3.134 --- Documentation/footer.html.in | 2 +- input/test/orchestscore.ly | 6 +- lily/a2-engraver.cc | 12 +-- lily/align-interface.cc | 15 ++-- lily/align-note-column-engraver.cc | 4 +- lily/arpeggio-engraver.cc | 2 +- lily/bar-number-engraver.cc | 2 +- lily/break-align-item.cc | 2 +- lily/clef-engraver.cc | 2 +- lily/dot-column-engraver.cc | 4 +- lily/dot-column.cc | 2 +- lily/dynamic-engraver.cc | 10 +-- lily/grace-position-engraver.cc | 4 +- lily/include/side-position-interface.hh | 11 ++- lily/instrument-name-engraver.cc | 34 ++++++-- lily/mark-engraver.cc | 2 +- lily/paper-outputter.cc | 5 ++ lily/performance.cc | 5 ++ lily/piano-pedal-engraver.cc | 10 +-- lily/script-column-engraver.cc | 4 +- lily/script-column.cc | 4 +- lily/script-engraver.cc | 12 +-- lily/script.cc | 6 +- lily/side-position-interface.cc | 103 +++++++++++++++--------- lily/syllable-group.cc | 2 +- lily/system-start-delimiter.cc | 3 +- lily/text-engraver.cc | 18 ++--- lily/text-spanner-engraver.cc | 6 +- lily/volta-engraver.cc | 2 +- lily/volta-spanner.cc | 4 +- scm/grob-description.scm | 57 +++++++------ 31 files changed, 212 insertions(+), 143 deletions(-) diff --git a/Documentation/footer.html.in b/Documentation/footer.html.in index 205114b335..19ed96aed4 100644 --- a/Documentation/footer.html.in +++ b/Documentation/footer.html.in @@ -28,7 +28,7 @@ Please send comments on these web pages to

-Copyright (c) 1997, 1998, 1999, 2000 Han-Wen Nienhuys and Jan Nieuwenhuizen. +Copyright (c) 1997--2001 Han-Wen Nienhuys and Jan Nieuwenhuizen.

diff --git a/input/test/orchestscore.ly b/input/test/orchestscore.ly index 06a8b1acf8..5dc33ef467 100644 --- a/input/test/orchestscore.ly +++ b/input/test/orchestscore.ly @@ -17,7 +17,9 @@ c1 | c2 c | c c | R1*5 \score{ < \context StaffGroup = wood < \context Staff = flauto < - \property Staff.instrument = "\\rotatebox[origin=c]{90}{Flauto}" + %"\\rotatebox[origin=c]{90}{Flauto}" + + \property Staff.instrument = "Flauto" \property Staff.instr = "Fl." \m > @@ -82,7 +84,7 @@ c1 | c2 c | c c | R1*5 > \context Staff = vlc < %% \property Staff.instrument = "Violoncello" - \property StaffCombineStaff.instrument = #'(lines "Violoncello" "e" "Contrabasso") + \property Staff.instrument = #'(lines "Violoncello" "e" "Contrabasso") \property Staff.instr = "Vlc" \m > diff --git a/lily/a2-engraver.cc b/lily/a2-engraver.cc index f767e7004d..b6958618bc 100644 --- a/lily/a2-engraver.cc +++ b/lily/a2-engraver.cc @@ -55,7 +55,7 @@ A2_engraver::create_grobs () && daddy_trans_l_->id_str_.left_str (3) == "one"))) { text_p_ = new Item (get_property ("TextScript")); - Side_position::set_axis (text_p_, Y_AXIS); + Side_position_interface::set_axis (text_p_, Y_AXIS); announce_grob (text_p_, 0); Direction dir = UP; @@ -80,7 +80,7 @@ A2_engraver::create_grobs () text = get_property ("aDueText"); } - Side_position::set_direction (text_p_, dir); + Side_position_interface::set_direction (text_p_, dir); text_p_->set_grob_property ("text", text); } } @@ -97,14 +97,14 @@ A2_engraver::acknowledge_grob (Grob_info i) if (Note_head::has_interface (i.elem_l_)) { Grob*t = text_p_; - Side_position::add_support (t, i.elem_l_); - if (Side_position::get_axis (t) == X_AXIS + Side_position_interface::add_support (t, i.elem_l_); + if (Side_position_interface::get_axis (t) == X_AXIS && !t->parent_l (Y_AXIS)) t->set_parent (i.elem_l_, Y_AXIS); } if (Stem::has_interface (i.elem_l_)) { - Side_position::add_support (text_p_, i.elem_l_); + Side_position_interface::add_support (text_p_, i.elem_l_); } } @@ -174,7 +174,7 @@ A2_engraver::stop_translation_timestep () { if (text_p_) { - Side_position::add_staff_support (text_p_); + Side_position_interface::add_staff_support (text_p_); typeset_grob (text_p_); text_p_ = 0; } diff --git a/lily/align-interface.cc b/lily/align-interface.cc index 5df19061aa..7aa6de3fc8 100644 --- a/lily/align-interface.cc +++ b/lily/align-interface.cc @@ -199,17 +199,16 @@ Align_interface::align_elements_to_extents (Grob * me, Axis a) all_translates .push (w); j++; } - } - if (isdir_b (align)) - { - center_offset = total.linear_combination (gh_scm2double (align)); - } + if (isdir_b (align)) + { + center_offset = total.linear_combination (gh_scm2double (align)); + } - for (int j = 0 ; j < all_grobs.size (); j++) - all_grobs[j]->translate_axis (all_translates[j] - center_offset, a); + for (int j = 0 ; j < all_grobs.size (); j++) + all_grobs[j]->translate_axis (all_translates[j] - center_offset, a); + } } - Axis Align_interface::axis (Grob*me) { diff --git a/lily/align-note-column-engraver.cc b/lily/align-note-column-engraver.cc index d03f316746..87dd0f0794 100644 --- a/lily/align-note-column-engraver.cc +++ b/lily/align-note-column-engraver.cc @@ -48,8 +48,8 @@ Align_note_column_engraver::initialize () { align_item_p_ = new Item (get_property ("GraceAlignment")); Grace_align_item::set_interface (align_item_p_); - Side_position::set_axis (align_item_p_, X_AXIS); - Side_position::set_direction (align_item_p_, LEFT); + Side_position_interface::set_axis (align_item_p_, X_AXIS); + Side_position_interface::set_direction (align_item_p_, LEFT); // needed for setting font size. announce_grob (align_item_p_, 0); diff --git a/lily/arpeggio-engraver.cc b/lily/arpeggio-engraver.cc index 76bc80a505..b69aeb35bc 100644 --- a/lily/arpeggio-engraver.cc +++ b/lily/arpeggio-engraver.cc @@ -91,7 +91,7 @@ Arpeggio_engraver::create_grobs () } for (int i = 0; i < supports_.size (); i++) { - Side_position::add_support (arpeggio_, supports_[i]); + Side_position_interface::add_support (arpeggio_, supports_[i]); } announce_grob (arpeggio_, arpeggio_req_); } diff --git a/lily/bar-number-engraver.cc b/lily/bar-number-engraver.cc index b082ddb1aa..eb91eeef96 100644 --- a/lily/bar-number-engraver.cc +++ b/lily/bar-number-engraver.cc @@ -119,7 +119,7 @@ Bar_number_engraver::create_items () SCM b = get_property ("BarNumber"); text_p_ = new Item (b); - Side_position::set_axis(text_p_,Y_AXIS); + Side_position_interface::set_axis(text_p_,Y_AXIS); announce_grob (text_p_, 0); } diff --git a/lily/break-align-item.cc b/lily/break-align-item.cc index 74dab15ca4..779be73cf3 100644 --- a/lily/break-align-item.cc +++ b/lily/break-align-item.cc @@ -69,7 +69,7 @@ Break_align_interface::self_align_callback (SCM element_smob, SCM axis) */ - return Side_position::aligned_on_self (element_smob, axis); + return Side_position_interface::aligned_on_self (element_smob, axis); } void diff --git a/lily/clef-engraver.cc b/lily/clef-engraver.cc index adc1807f39..f0fe112bac 100644 --- a/lily/clef-engraver.cc +++ b/lily/clef-engraver.cc @@ -163,7 +163,7 @@ Clef_engraver::create_clef () { Item * g = new Item (get_property ("OctavateEight")); - Side_position::add_support (g,clef_p_); + Side_position_interface::add_support (g,clef_p_); g->set_parent (clef_p_, Y_AXIS); g->set_parent (clef_p_, X_AXIS); diff --git a/lily/dot-column-engraver.cc b/lily/dot-column-engraver.cc index 9fc7bbcd04..9e234405cf 100644 --- a/lily/dot-column-engraver.cc +++ b/lily/dot-column-engraver.cc @@ -54,8 +54,8 @@ Dot_column_engraver::acknowledge_grob (Grob_info info) dotcol_p_ = new Item(get_property ("DotColumn")); Dot_column::set_interface (dotcol_p_); - Side_position::set_axis (dotcol_p_, X_AXIS); - Side_position::set_direction (dotcol_p_, RIGHT); + Side_position_interface::set_axis (dotcol_p_, X_AXIS); + Side_position_interface::set_direction (dotcol_p_, RIGHT); announce_grob (dotcol_p_, 0); } diff --git a/lily/dot-column.cc b/lily/dot-column.cc index cfd51975ac..db7e3b0d3c 100644 --- a/lily/dot-column.cc +++ b/lily/dot-column.cc @@ -124,7 +124,7 @@ Dot_column::add_head (Grob * me, Grob *rh) Grob * d = unsmob_grob (rh->get_grob_property ("dot")); if (d) { - Side_position::add_support (me,rh); + Side_position_interface::add_support (me,rh); Pointer_group_interface ::add_element (me, "dots",d); d->add_offset_callback (Dot_column::force_shift_callback_proc , Y_AXIS); diff --git a/lily/dynamic-engraver.cc b/lily/dynamic-engraver.cc index 2aee3603d1..ae16fb9aaf 100644 --- a/lily/dynamic-engraver.cc +++ b/lily/dynamic-engraver.cc @@ -140,7 +140,7 @@ Dynamic_engraver::process_music () { line_spanner_ = new Spanner (get_property ("DynamicLineSpanner")); - Side_position::set_axis (line_spanner_, Y_AXIS); + Side_position_interface::set_axis (line_spanner_, Y_AXIS); Axis_group_interface::set_interface (line_spanner_); Axis_group_interface::set_axes (line_spanner_, Y_AXIS, Y_AXIS); @@ -174,8 +174,8 @@ Dynamic_engraver::process_music () script_p_->set_grob_property ("text", script_req_l_->get_mus_property ("text")); - Side_position::set_direction (script_p_, LEFT); - Side_position::set_axis (script_p_, X_AXIS); + Side_position_interface::set_direction (script_p_, LEFT); + Side_position_interface::set_axis (script_p_, X_AXIS); if (Direction d = script_req_l_->get_direction ()) Directional_element_interface::set (line_spanner_, d); @@ -339,7 +339,7 @@ Dynamic_engraver::typeset_all () /* To make sure that this works */ - Side_position::add_staff_support (finished_line_spanner_); + Side_position_interface::add_staff_support (finished_line_spanner_); /* We used to have @@ -366,7 +366,7 @@ Dynamic_engraver::acknowledge_grob (Grob_info i) { if (line_spanner_) { - Side_position::add_support (line_spanner_,i.elem_l_); + Side_position_interface::add_support (line_spanner_,i.elem_l_); add_bound_item (line_spanner_,dynamic_cast(i.elem_l_)); } } diff --git a/lily/grace-position-engraver.cc b/lily/grace-position-engraver.cc index b5bf1b1a05..0f732a37d8 100644 --- a/lily/grace-position-engraver.cc +++ b/lily/grace-position-engraver.cc @@ -67,7 +67,7 @@ Grace_position_engraver::create_grobs () if (align_l_) { for (int i=0; i < support_.size (); i++) - Side_position::add_support (align_l_,support_[i]); + Side_position_interface::add_support (align_l_,support_[i]); support_.clear (); } } @@ -75,7 +75,7 @@ Grace_position_engraver::create_grobs () void Grace_position_engraver::stop_translation_timestep () { - if (align_l_ && !Side_position::supported_b (align_l_)) + if (align_l_ && !Side_position_interface::supported_b (align_l_)) { /* We don't have support. Either some moron tried attaching us to a rest, diff --git a/lily/include/side-position-interface.hh b/lily/include/side-position-interface.hh index 38ab695aa1..9ce408a662 100644 --- a/lily/include/side-position-interface.hh +++ b/lily/include/side-position-interface.hh @@ -14,18 +14,21 @@ #include "item.hh" /* - TODO: move out unrelated callbacks. + TODO: move out unrelated callbacks. TODO: reduce number of methods. */ -struct Side_position +struct Side_position_interface { public: - DECLARE_SCHEME_CALLBACK(side_position, (SCM element, SCM axis)); - DECLARE_SCHEME_CALLBACK(aligned_on_self, (SCM element, SCM axis)); + DECLARE_SCHEME_CALLBACK(aligned_on_support_extents, (SCM element, SCM axis)); + DECLARE_SCHEME_CALLBACK(aligned_on_support_refpoints, (SCM element, SCM axis)); + DECLARE_SCHEME_CALLBACK(aligned_on_self, (SCM element, SCM axis)); DECLARE_SCHEME_CALLBACK(aligned_side, (SCM element, SCM axis)); DECLARE_SCHEME_CALLBACK(quantised_position, (SCM element, SCM axis)); DECLARE_SCHEME_CALLBACK(centered_on_parent, (SCM element, SCM axis)); + + static SCM general_side_position (Grob*, Axis, bool); static void set_axis (Grob*,Axis); static void set_minimum_space (Grob*,Real); static void set_padding (Grob*,Real); diff --git a/lily/instrument-name-engraver.cc b/lily/instrument-name-engraver.cc index 852ef176d3..9171bb6919 100644 --- a/lily/instrument-name-engraver.cc +++ b/lily/instrument-name-engraver.cc @@ -13,17 +13,19 @@ #include "system-start-delimiter.hh" #include "side-position-interface.hh" #include "align-interface.hh" +#include "axis-group-interface.hh" +#include "translator-group.hh" class Instrument_name_engraver : public Engraver { Item *text_; - Grob * delim_ ; - + Grob *delim_ ; + void create_text (SCM s); public: VIRTUAL_COPY_CONS(Translator); Instrument_name_engraver (); - + virtual void initialize (); virtual void acknowledge_grob (Grob_info); virtual void stop_translation_timestep (); }; @@ -37,11 +39,19 @@ Instrument_name_engraver::Instrument_name_engraver () } +void +Instrument_name_engraver::initialize () +{ + daddy_trans_l_->set_property ("instrumentSupport", SCM_EOL); +} + void Instrument_name_engraver::stop_translation_timestep () { if (text_) { + text_->set_grob_property ("side-support-elements", + get_property ("instrumentSupport")); typeset_grob (text_); text_ = 0; } @@ -82,12 +92,20 @@ Instrument_name_engraver::acknowledge_grob (Grob_info i) } - if (Align_interface::has_interface (i.elem_l_) - && Align_interface::axis (i.elem_l_) == Y_AXIS - //System_start_delimiter::has_interface (i.elem_l_) - && i.origin_trans_l_->daddy_trans_l_ == daddy_trans_l_) + if (dynamic_cast (i.elem_l_) + && i.elem_l_->has_interface (ly_symbol2scm ("dynamic-interface"))) + return; + + if (dynamic_cast (i.elem_l_) + &&((Axis_group_interface::has_interface (i.elem_l_) + && Axis_group_interface::axis_b (i.elem_l_, Y_AXIS)) + || (Align_interface::has_interface (i.elem_l_) + && Align_interface::axis (i.elem_l_) == Y_AXIS))) { - delim_ = i.elem_l_; + SCM nl = gh_cons (i.elem_l_->self_scm (), + get_property ("instrumentSupport")); + + daddy_trans_l_->set_property ("instrumentSupport", nl); } } diff --git a/lily/mark-engraver.cc b/lily/mark-engraver.cc index e559ff8029..b860caba17 100644 --- a/lily/mark-engraver.cc +++ b/lily/mark-engraver.cc @@ -107,7 +107,7 @@ Mark_engraver::create_items (Request *rq) text_p_ = new Item (s); - Side_position::set_axis (text_p_, Y_AXIS); + Side_position_interface::set_axis (text_p_, Y_AXIS); announce_grob (text_p_, rq); } diff --git a/lily/paper-outputter.cc b/lily/paper-outputter.cc index 5317b7ada1..46016c7573 100644 --- a/lily/paper-outputter.cc +++ b/lily/paper-outputter.cc @@ -97,6 +97,11 @@ Paper_outputter::output_header () generate = generate.left_str (generate.length_i () - 1); } + /* + Make fixed length time stamps + */ + generate = generate + to_str (' ' * (120 - generate.length_i ())>? 0) ; + SCM args_scm = gh_list (ly_str02scm (creator.ch_l ()), ly_str02scm (generate.ch_l ()), SCM_UNDEFINED); diff --git a/lily/performance.cc b/lily/performance.cc index 7418c30f86..9e8715b111 100644 --- a/lily/performance.cc +++ b/lily/performance.cc @@ -104,6 +104,11 @@ Performance::output_header_track (Midi_stream& midi_stream) str += ctime (&t); str = str.left_str (str.length_i() - 1); } + + /* + Pad out time stamps to 120 chars. */ + str = str + to_str (' ' , (120 - str.length_i ()) >? 0); + Audio_text generate_a (Audio_text::TEXT, str); Midi_text generate (&generate_a); midi_track.add (Moment (0), &generate); diff --git a/lily/piano-pedal-engraver.cc b/lily/piano-pedal-engraver.cc index 641a7fb0f7..527bd396c7 100644 --- a/lily/piano-pedal-engraver.cc +++ b/lily/piano-pedal-engraver.cc @@ -90,15 +90,15 @@ Piano_pedal_engraver::acknowledge_grob (Grob_info info) { if (Rhythmic_head::has_interface (info.elem_l_)) { - Side_position::add_support (p->item_p_, info.elem_l_); + Side_position_interface::add_support (p->item_p_, info.elem_l_); - if (Side_position::get_axis(p->item_p_) == X_AXIS + if (Side_position_interface::get_axis(p->item_p_) == X_AXIS && !p->item_p_->parent_l (Y_AXIS)) p->item_p_->set_parent (info.elem_l_, Y_AXIS); } if (Stem::has_interface (info.elem_l_)) { - Side_position::add_support (p->item_p_,info.elem_l_); + Side_position_interface::add_support (p->item_p_,info.elem_l_); } } } @@ -195,7 +195,7 @@ Piano_pedal_engraver::stop_translation_timestep () { if (p->item_p_) { - Side_position::add_staff_support (p->item_p_); + Side_position_interface::add_staff_support (p->item_p_); /* Hmm. @@ -204,7 +204,7 @@ Piano_pedal_engraver::stop_translation_timestep () { if (sustain) { - Side_position::add_support (p->item_p_,sustain); + Side_position_interface::add_support (p->item_p_,sustain); } } typeset_grob (p->item_p_); diff --git a/lily/script-column-engraver.cc b/lily/script-column-engraver.cc index 185ae49cdf..5f0b41db4e 100644 --- a/lily/script-column-engraver.cc +++ b/lily/script-column-engraver.cc @@ -57,10 +57,10 @@ void Script_column_engraver::acknowledge_grob(Grob_info inf) { Item *thing = dynamic_cast (inf.elem_l_); - if (thing && Side_position::has_interface (inf.elem_l_)) // ugh FIXME + if (thing && Side_position_interface::has_interface (inf.elem_l_)) // ugh FIXME { if (!Item::breakable_b (thing) - && Side_position::get_axis (inf.elem_l_) == Y_AXIS) + && Side_position_interface::get_axis (inf.elem_l_) == Y_AXIS) { script_l_arr_.push (thing); } diff --git a/lily/script-column.cc b/lily/script-column.cc index 2c7e6b24de..1bddead770 100644 --- a/lily/script-column.cc +++ b/lily/script-column.cc @@ -46,7 +46,7 @@ Script_column::before_line_breaking (SCM smob) for (int i=0; i < staff_sided.size (); i++) { - arrs[Side_position::get_direction (staff_sided[i])] + arrs[Side_position_interface::get_direction (staff_sided[i])] .push (staff_sided[i]); } @@ -61,7 +61,7 @@ Script_column::before_line_breaking (SCM smob) { if (last) - Side_position::add_support( arr[i],last); + Side_position_interface::add_support( arr[i],last); arr[i]->remove_grob_property ("script-priority"); last = arr[i]; diff --git a/lily/script-engraver.cc b/lily/script-engraver.cc index c8d677d26e..22870e2075 100644 --- a/lily/script-engraver.cc +++ b/lily/script-engraver.cc @@ -100,13 +100,13 @@ Script_engraver::create_grobs () */ SCM axisprop = get_property ("scriptHorizontal"); bool xaxis = to_boolean (axisprop); - Side_position::set_axis (p, xaxis ? X_AXIS : Y_AXIS); + Side_position_interface::set_axis (p, xaxis ? X_AXIS : Y_AXIS); if (!follow_staff && ! xaxis) p->set_grob_property ("staff-support", SCM_BOOL_T); if (!xaxis && follow_staff) - p->add_offset_callback (Side_position::quantised_position_proc, Y_AXIS); + p->add_offset_callback (Side_position_interface::quantised_position_proc, Y_AXIS); p->set_grob_property ("script-priority", priority); @@ -134,7 +134,7 @@ Script_engraver::acknowledge_grob (Grob_info inf) Grob*e = script_p_arr_[i]; e->set_grob_property ("direction-source", inf.elem_l_->self_scm ()); - Side_position::add_support (e, inf.elem_l_); + Side_position_interface::add_support (e, inf.elem_l_); } } else if (Rhythmic_head::has_interface (inf.elem_l_)) @@ -147,11 +147,11 @@ Script_engraver::acknowledge_grob (Grob_info inf) { e->set_parent (inf.elem_l_, X_AXIS); } - if (Side_position::get_axis (e) == X_AXIS + if (Side_position_interface::get_axis (e) == X_AXIS && !e->parent_l (Y_AXIS)) e->set_parent (inf.elem_l_, Y_AXIS); - Side_position::add_support (e,inf.elem_l_); + Side_position_interface::add_support (e,inf.elem_l_); } } } @@ -164,7 +164,7 @@ Script_engraver::stop_translation_timestep() Grob * sc = script_p_arr_[i]; if (to_boolean (sc->get_grob_property ("staff-support"))) { - Side_position::add_staff_support (sc); + Side_position_interface::add_staff_support (sc); } typeset_grob (sc); } diff --git a/lily/script.cc b/lily/script.cc index 6ed6ee306c..b19724f6b1 100644 --- a/lily/script.cc +++ b/lily/script.cc @@ -44,8 +44,8 @@ Script::after_line_breaking (SCM smob) { Grob * me = unsmob_grob (smob); - Direction d = Side_position::get_direction (me); - Side_position::set_direction (me,d); + Direction d = Side_position_interface::get_direction (me); + Side_position_interface::set_direction (me,d); return SCM_UNSPECIFIED; } @@ -62,7 +62,7 @@ Script::brew_molecule (SCM smob) if (isdir_b (d)) dir = to_dir (d); #endif - Direction dir = Side_position::get_direction(me); + Direction dir = Side_position_interface::get_direction(me); return get_molecule (me, dir).smobbed_copy(); } diff --git a/lily/side-position-interface.cc b/lily/side-position-interface.cc index f19e5471cc..f18363f95d 100644 --- a/lily/side-position-interface.cc +++ b/lily/side-position-interface.cc @@ -16,7 +16,7 @@ #include "group-interface.hh" void -Side_position::add_support (Grob*me, Grob*e) +Side_position_interface::add_support (Grob*me, Grob*e) { Pointer_group_interface::add_element (me, "side-support-elements",e); } @@ -24,7 +24,7 @@ Side_position::add_support (Grob*me, Grob*e) Direction -Side_position::get_direction (Grob*me) +Side_position_interface::get_direction (Grob*me) { SCM d = me->get_grob_property ("direction"); if (isdir_b (d) && to_dir (d)) @@ -41,23 +41,31 @@ Side_position::get_direction (Grob*me) Grob * e = unsmob_grob(other_elt); if (e) { - return (Direction)(relative_dir * Side_position::get_direction (e)); + return (Direction)(relative_dir * Side_position_interface::get_direction (e)); } - return DOWN; + return CENTER; } -/* - Callback that does the aligning. Puts the element next to the support - */ -MAKE_SCHEME_CALLBACK(Side_position,side_position,2); +MAKE_SCHEME_CALLBACK(Side_position_interface,aligned_on_support_extents, 2); SCM -Side_position::side_position (SCM element_smob, SCM axis) +Side_position_interface::aligned_on_support_extents (SCM element_smob, SCM axis) { Grob *me = unsmob_grob (element_smob); Axis a = (Axis) gh_scm2int (axis); + return general_side_position (me, a, true); +} + + +/* + Puts the element next to the support, optionally taking in + account the extent of the support. +*/ +SCM +Side_position_interface::general_side_position (Grob * me, Axis a, bool use_extents) +{ Grob *common = me->parent_l (a); SCM support = me->get_grob_property ("side-support-elements"); for (SCM s = support; s != SCM_EOL; s = gh_cdr (s)) @@ -70,12 +78,15 @@ Side_position::side_position (SCM element_smob, SCM axis) Interval dim; for (SCM s = support; s != SCM_EOL; s = gh_cdr (s)) { - Grob * e = unsmob_grob ( gh_car (s)); if (e) - { + if (use_extents) dim.unite (e->extent (common, a)); - } + else + { + Real x = e->relative_coordinate (common, a); + dim.unite (Interval (x,x)); + } } if (dim.empty_b ()) @@ -83,33 +94,51 @@ Side_position::side_position (SCM element_smob, SCM axis) dim = Interval(0,0); } - Direction dir = Side_position::get_direction (me); + Direction dir = Side_position_interface::get_direction (me); Real off = me->parent_l (a)->relative_coordinate (common, a); SCM minimum = me->remove_grob_property ("minimum-space"); - Real total_off = dim[dir] + off; + Real total_off = dim.linear_combination (dir) + off; SCM padding = me->remove_grob_property ("padding"); if (gh_number_p (padding)) { total_off += gh_scm2double (padding) * dir; } - if (gh_number_p (minimum) && total_off * dir < gh_scm2double (minimum)) + + if (gh_number_p (minimum) + && dir + && total_off * dir < gh_scm2double (minimum)) { total_off = gh_scm2double (minimum) * dir; } + if (fabs (total_off) > 100 CM) programming_error ("Huh ? Improbable staff side dim."); return gh_double2scm (total_off); } +/* + Cut & paste (ugh.) + */ +MAKE_SCHEME_CALLBACK(Side_position_interface,aligned_on_support_refpoints,2); +SCM +Side_position_interface::aligned_on_support_refpoints (SCM smob, SCM axis) +{ + Grob *me = unsmob_grob (smob); + Axis a = (Axis) gh_scm2int (axis); + + return general_side_position (me, a, false); +} + + /** callback that centers the element on itself */ -MAKE_SCHEME_CALLBACK(Side_position,aligned_on_self,2); +MAKE_SCHEME_CALLBACK(Side_position_interface,aligned_on_self,2); SCM -Side_position::aligned_on_self (SCM element_smob, SCM axis) +Side_position_interface::aligned_on_self (SCM element_smob, SCM axis) { Grob *me = unsmob_grob (element_smob); Axis a = (Axis) gh_scm2int (axis); @@ -156,14 +185,14 @@ directed_round (Real f, Direction d) Only rounds when we're inside the staff, as determined by Staff_symbol_referencer::staff_radius() */ -MAKE_SCHEME_CALLBACK(Side_position,quantised_position,2); +MAKE_SCHEME_CALLBACK(Side_position_interface,quantised_position,2); SCM -Side_position::quantised_position (SCM element_smob, SCM ) +Side_position_interface::quantised_position (SCM element_smob, SCM ) { Grob *me = unsmob_grob (element_smob); - Direction d = Side_position::get_direction (me); + Direction d = Side_position_interface::get_direction (me); if (Staff_symbol_referencer::has_interface (me)) { @@ -186,15 +215,15 @@ Side_position::quantised_position (SCM element_smob, SCM ) /* Position next to support, taking into account my own dimensions and padding. */ -MAKE_SCHEME_CALLBACK(Side_position,aligned_side,2); +MAKE_SCHEME_CALLBACK(Side_position_interface,aligned_side,2); SCM -Side_position::aligned_side (SCM element_smob, SCM axis) +Side_position_interface::aligned_side (SCM element_smob, SCM axis) { Grob *me = unsmob_grob (element_smob); Axis a = (Axis) gh_scm2int (axis); - Direction d = Side_position::get_direction (me); - Real o = gh_scm2double (side_position (element_smob,axis)); + Direction d = Side_position_interface::get_direction (me); + Real o = gh_scm2double (aligned_on_support_extents (element_smob,axis)); Interval iv = me->extent (me, a); @@ -212,9 +241,9 @@ Side_position::aligned_side (SCM element_smob, SCM axis) /* Position centered on parent. */ -MAKE_SCHEME_CALLBACK(Side_position,centered_on_parent,2); +MAKE_SCHEME_CALLBACK(Side_position_interface,centered_on_parent,2); SCM -Side_position::centered_on_parent (SCM element_smob, SCM axis) +Side_position_interface::centered_on_parent (SCM element_smob, SCM axis) { Grob *me = unsmob_grob (element_smob); Axis a = (Axis) gh_scm2int (axis); @@ -225,7 +254,7 @@ Side_position::centered_on_parent (SCM element_smob, SCM axis) void -Side_position::add_staff_support (Grob*me) +Side_position_interface::add_staff_support (Grob*me) { Grob* st = Staff_symbol_referencer::staff_symbol_l (me); if (st) @@ -235,19 +264,19 @@ Side_position::add_staff_support (Grob*me) } void -Side_position::set_axis (Grob*me, Axis a) +Side_position_interface::set_axis (Grob*me, Axis a) { - me->add_offset_callback (Side_position::aligned_side_proc, a); + me->add_offset_callback (Side_position_interface::aligned_side_proc, a); } // ugh. doesn't cactch all variants. Axis -Side_position::get_axis (Grob*me) +Side_position_interface::get_axis (Grob*me) { - if (me->has_offset_callback_b (Side_position::aligned_side_proc, X_AXIS) - || me->has_offset_callback_b (Side_position::aligned_side_proc , X_AXIS)) + if (me->has_offset_callback_b (Side_position_interface::aligned_side_proc, X_AXIS) + || me->has_offset_callback_b (Side_position_interface::aligned_side_proc , X_AXIS)) return X_AXIS; @@ -255,31 +284,31 @@ Side_position::get_axis (Grob*me) } void -Side_position::set_direction (Grob*me, Direction d) +Side_position_interface::set_direction (Grob*me, Direction d) { me->set_grob_property ("direction", gh_int2scm (d)); } void -Side_position::set_minimum_space (Grob*me, Real m) +Side_position_interface::set_minimum_space (Grob*me, Real m) { me->set_grob_property ("minimum-space", gh_double2scm (m)); } void -Side_position::set_padding (Grob*me, Real p) +Side_position_interface::set_padding (Grob*me, Real p) { me->set_grob_property ("padding", gh_double2scm (p)); } bool -Side_position::has_interface (Grob*me) +Side_position_interface::has_interface (Grob*me) { return me->has_interface (ly_symbol2scm ("side-position-interface")); } bool -Side_position::supported_b (Grob*me) +Side_position_interface::supported_b (Grob*me) { SCM s = me->get_grob_property ("side-support-elements"); return gh_pair_p(s); diff --git a/lily/syllable-group.cc b/lily/syllable-group.cc index 5b1e5c6cfe..6965162778 100644 --- a/lily/syllable-group.cc +++ b/lily/syllable-group.cc @@ -120,7 +120,7 @@ Syllable_group::set_lyric_align(const char *punc, Grob *default_notehead_l) // centre on notehead ... if we have one. if(notehead_l_) { lyric->set_parent(notehead_l_, X_AXIS); - lyric->add_offset_callback (Side_position::centered_on_parent_proc, X_AXIS); + lyric->add_offset_callback (Side_position_interface::centered_on_parent_proc, X_AXIS); // reference is on the right of the notehead; move it left half way, and add translation lyric->translate_axis (group_translation_f_-(notehead_l_->extent(notehead_l_, X_AXIS)).center(), X_AXIS); } diff --git a/lily/system-start-delimiter.cc b/lily/system-start-delimiter.cc index 6f3223ad18..85d4947d59 100644 --- a/lily/system-start-delimiter.cc +++ b/lily/system-start-delimiter.cc @@ -100,7 +100,8 @@ System_start_delimiter::brew_molecule (SCM smob) (me->self_scm(), gh_int2scm (Y_AXIS))); Real l = ext.length () / staff_space; - if (gh_number_p (c) && l <= gh_scm2double (c)) + if (ext.empty_b () + || (gh_number_p (c) && l <= gh_scm2double (c))) { me->suicide(); return SCM_EOL; diff --git a/lily/text-engraver.cc b/lily/text-engraver.cc index cb668b4146..e4d2bbc882 100644 --- a/lily/text-engraver.cc +++ b/lily/text-engraver.cc @@ -53,15 +53,15 @@ Text_engraver::acknowledge_grob (Grob_info inf) for (int i=0; i < texts_.size (); i++) { Grob*t = texts_[i]; - Side_position::add_support (t,inf.elem_l_); + Side_position_interface::add_support (t,inf.elem_l_); /* ugh. */ - if (Side_position::get_axis( t) == X_AXIS + if (Side_position_interface::get_axis( t) == X_AXIS && !t->parent_l (Y_AXIS)) t->set_parent (inf.elem_l_, Y_AXIS); - else if (Side_position::get_axis(t) == Y_AXIS + else if (Side_position_interface::get_axis(t) == Y_AXIS && !t->parent_l (X_AXIS)) t->set_parent (inf.elem_l_, X_AXIS); } @@ -71,7 +71,7 @@ Text_engraver::acknowledge_grob (Grob_info inf) { for (int i=0; i < texts_.size (); i++) { - Side_position::add_support(texts_[i],inf.elem_l_); + Side_position_interface::add_support(texts_[i],inf.elem_l_); } } } @@ -101,7 +101,7 @@ Text_engraver::create_grobs () SCM axisprop = get_property ("scriptHorizontal"); Axis ax = to_boolean (axisprop) ? X_AXIS : Y_AXIS; - Side_position::set_axis (text, ax); + Side_position_interface::set_axis (text, ax); #if 0 if (r->style_str_ == "finger" && ax == Y_AXIS) @@ -109,8 +109,8 @@ Text_engraver::create_grobs () /* nicely center the scripts. */ - text->add_offset_callback (Side_position::aligned_on_self_proc, X_AXIS); - text->add_offset_callback (Side_position::centered_on_parent_proc, X_AXIS); + text->add_offset_callback (Side_position_interface::aligned_on_self_proc, X_AXIS); + text->add_offset_callback (Side_position_interface::centered_on_parent_proc, X_AXIS); } #endif @@ -123,7 +123,7 @@ Text_engraver::create_grobs () gh_int2scm (200 + i)); if (r->get_direction ()) - Side_position::set_direction (text, r->get_direction ()); + Side_position_interface::set_direction (text, r->get_direction ()); text->set_grob_property ("text", r->get_mus_property ("text")); @@ -145,7 +145,7 @@ Text_engraver::stop_translation_timestep () for (int i=0; i < texts_.size (); i++) { Item *ti = texts_[i]; - Side_position::add_staff_support (ti); + Side_position_interface::add_staff_support (ti); typeset_grob (ti); } texts_.clear (); diff --git a/lily/text-spanner-engraver.cc b/lily/text-spanner-engraver.cc index 07e9b00fbd..bba9f9be4e 100644 --- a/lily/text-spanner-engraver.cc +++ b/lily/text-spanner-engraver.cc @@ -123,7 +123,7 @@ Text_spanner_engraver::create_grobs () span_->set_grob_property ("if-text-padding", gh_double2scm (0)); span_->set_grob_property ("width-correct", gh_double2scm (0)); - Side_position::set_axis (span_, Y_AXIS); + Side_position_interface::set_axis (span_, Y_AXIS); Grob *e = unsmob_grob (get_property ("currentMusicalColumn")); span_->set_bound (LEFT, e); @@ -138,7 +138,7 @@ Text_spanner_engraver::acknowledge_grob (Grob_info info) { if (span_ && Note_column::has_interface (info.elem_l_)) { - Side_position::add_support (span_, info.elem_l_); + Side_position_interface::add_support (span_, info.elem_l_); add_bound_item (span_, dynamic_cast (info.elem_l_)); } } @@ -148,7 +148,7 @@ Text_spanner_engraver::typeset_all () { if (finished_) { - Side_position::add_staff_support (finished_); + Side_position_interface::add_staff_support (finished_); typeset_grob (finished_); finished_ = 0; } diff --git a/lily/volta-engraver.cc b/lily/volta-engraver.cc index f21f8aebba..a6a9bbd7ba 100644 --- a/lily/volta-engraver.cc +++ b/lily/volta-engraver.cc @@ -173,7 +173,7 @@ Volta_engraver::stop_translation_timestep () { if (end_volta_span_p_) { - Side_position::add_staff_support (end_volta_span_p_); + Side_position_interface::add_staff_support (end_volta_span_p_); typeset_grob (end_volta_span_p_ ); end_volta_span_p_ =0; diff --git a/lily/volta-spanner.cc b/lily/volta-spanner.cc index df0d1e6349..0385af35c2 100644 --- a/lily/volta-spanner.cc +++ b/lily/volta-spanner.cc @@ -111,12 +111,12 @@ void Volta_spanner::add_bar (Grob *me, Item* b) { Pointer_group_interface::add_element(me, "bars",b); - Side_position::add_support (me,b); + Side_position_interface::add_support (me,b); add_bound_item (dynamic_cast(me), b); } void Volta_spanner::add_column (Grob*me, Grob* c) { - Side_position::add_support (me,c); + Side_position_interface::add_support (me,c); } diff --git a/scm/grob-description.scm b/scm/grob-description.scm index f9bbfab167..32e7a67705 100644 --- a/scm/grob-description.scm +++ b/scm/grob-description.scm @@ -14,7 +14,7 @@ (Y-extent-callback . #f) (molecule-callback . ,Arpeggio::brew_molecule) (Y-offset-callbacks . (,Staff_symbol_referencer::callback)) - (X-offset-callbacks . (,Side_position::aligned_side)) + (X-offset-callbacks . (,Side_position_interface::aligned_side)) (direction . -1) (staff-position . 0.0) (meta . ,(grob-description "Arpeggio" arpeggio-interface side-position-interface font-interface)) @@ -49,7 +49,7 @@ (direction . 1) (font-family . roman) (font-relative-size . -1) - (Y-offset-callbacks . (,Side_position::aligned_side)) + (Y-offset-callbacks . (,Side_position_interface::aligned_side)) (meta . ,(grob-description "BarNumber" side-position-interface text-interface font-interface break-aligned-interface)) @@ -150,7 +150,7 @@ (dash-thickness . 1.2) (dash-length . 4.0) (self-alignment-Y . 0) - (Y-offset-callbacks . (,Side_position::aligned_on_self)) + (Y-offset-callbacks . (,Side_position_interface::aligned_on_self)) (meta . ,(grob-description "Hairpin" hairpin-interface)) )) @@ -164,11 +164,11 @@ (dot-count . 1) (staff-position . 0.0) (Y-offset-callbacks . (,Dots::quantised_position_callback ,Staff_symbol_referencer::callback)) - (meta . ,(grob-description "Dots" font-interface dot-interface )) + (meta . ,(grob-description "Dots" font-interface dots-interface )) )) (DynamicText . ( - (Y-offset-callbacks . (,Side_position::aligned_on_self)) + (Y-offset-callbacks . (,Side_position_interface::aligned_on_self)) (molecule-callback . ,Text_item::brew_molecule) (script-priority . 100) (font-series . bold) @@ -182,6 +182,7 @@ (axes . ( 1)) (padding . 0.6) (minimum-space . 1.2) + (direction . -1) (meta . ,(grob-description "DynamicLineSpanner" dynamic-interface axis-group-interface side-position-interface)) )) @@ -194,8 +195,9 @@ (Fingering . ( (molecule-callback . ,Text_item::brew_molecule) - (X-offset-callbacks . (,Side_position::centered_on_parent ,Side_position::aligned_on_self)) + (X-offset-callbacks . (,Side_position_interface::centered_on_parent ,Side_position_interface::aligned_on_self)) (padding . 0.6) + (direction . -1) (self-alignment-X . 0) (font-family . number) (font-relative-size . -3) @@ -229,8 +231,10 @@ (InstrumentName . ( (breakable . #t) - (Y-offset-callbacks . (,Side_position::centered_on_parent - ,Side_position::aligned_on_self)) + (Y-offset-callbacks . (,Side_position_interface::aligned_on_self + ,Side_position_interface::aligned_on_support_refpoints +)) + (direction . 0) (self-alignment-Y . 0) (molecule-callback . ,Text_item::brew_molecule) (break-align-symbol . Instrument_name) @@ -250,7 +254,7 @@ (Accidentals . ( (molecule-callback . ,Local_key_item::brew_molecule) - (X-offset-callbacks . (,Side_position::aligned_side)) + (X-offset-callbacks . (,Side_position_interface::aligned_side)) (after-line-breaking-callback . ,Local_key_item::after_line_breaking) (direction . -1) (left-padding . 0.2) @@ -273,7 +277,7 @@ (LyricText . ( (molecule-callback . ,Text_item::brew_molecule) - (X-offset-callbacks . (,Side_position::aligned_on_self)) + (X-offset-callbacks . (,Side_position_interface::aligned_on_self)) (self-alignment-X . 0) (non-rhythmic . #t) (word-space . 0.6) @@ -284,7 +288,7 @@ (RehearsalMark . ( (molecule-callback . ,Text_item::brew_molecule) - (X-offset-callbacks . (,Side_position::aligned_on_self)) + (X-offset-callbacks . (,Side_position_interface::aligned_on_self)) (self-alignment-X . 0) (direction . 1) @@ -363,8 +367,8 @@ (self-alignment-X . 0) (text . "8") (visibility-lambda . ,begin-of-line-visible) - (X-offset-callbacks . (,Side_position::centered_on_parent ,Side_position::aligned_on_self)) - (Y-offset-callbacks . (,Side_position::aligned_side)) + (X-offset-callbacks . (,Side_position_interface::centered_on_parent ,Side_position_interface::aligned_on_self)) + (Y-offset-callbacks . (,Side_position_interface::aligned_side)) (molecule-callback . ,Text_item::brew_molecule) (font-shape . italic) (font-family . roman) @@ -410,9 +414,11 @@ (X-extent-callback . ,Rest::extent_callback) (Y-extent-callback . ,Rest::extent_callback) (molecule-callback . ,Rest::brew_molecule) + (Y-offset-callbacks . (,Staff_symbol_referencer::callback)) (minimum-beam-collision-distance . 1.5) (meta . ,(grob-description "Rest" rhythmic-head-interface + staff-symbol-referencer-interface rest-interface)) )) (RestCollision . ( @@ -422,7 +428,7 @@ (Script . ( (molecule-callback . ,Script::brew_molecule) - (X-offset-callbacks . (,Side_position::centered_on_parent)) + (X-offset-callbacks . (,Side_position_interface::centered_on_parent)) (after-line-breaking-callback . ,Script::after_line_breaking) (meta . ,(grob-description "Script" script-interface side-position-interface font-interface)) )) @@ -498,15 +504,16 @@ (StaffSymbol . ( (molecule-callback . ,Staff_symbol::brew_molecule) (staff-space . 1.0) - (line-count . 5 ) + (line-count . 5) + (layer . 0) (meta . ,(grob-description "StaffSymbol" staff-symbol-interface )) )) (SostenutoPedal . ( (molecule-callback . ,Text_item::brew_molecule) - (X-offset-callbacks . (,Side_position::aligned_on_self)) + (X-offset-callbacks . (,Side_position_interface::aligned_on_self)) (Y-offset-callbacks . - (,Side_position::aligned_side - ,Side_position::centered_on_parent)) + (,Side_position_interface::aligned_side + ,Side_position_interface::centered_on_parent)) (no-spacing-rods . #t) (font-shape . italic) (self-alignment-X . 0) @@ -557,10 +564,10 @@ (no-spacing-rods . #t) (molecule-callback . ,Sustain_pedal::brew_molecule) (self-alignment-X . 0) - (X-offset-callbacks . (,Side_position::aligned_on_self)) + (X-offset-callbacks . (,Side_position_interface::aligned_on_self)) (Y-offset-callbacks . - (,Side_position::aligned_side - ,Side_position::centered_on_parent)) + (,Side_position_interface::aligned_side + ,Side_position_interface::centered_on_parent)) (meta . ,(grob-description "SustainPedal" sustain-pedal-interface side-position-interface font-interface)) )) @@ -654,10 +661,10 @@ (font-shape . italic) (no-spacing-rods . #t) (self-alignment-X . 0) - (X-offset-callbacks . (,Side_position::aligned_on_self)) + (X-offset-callbacks . (,Side_position_interface::aligned_on_self)) (Y-offset-callbacks . - (,Side_position::aligned_side - ,Side_position::centered_on_parent)) + (,Side_position_interface::aligned_side + ,Side_position_interface::centered_on_parent)) (meta . ,(grob-description "UnaChordaPedal" text-interface font-interface)) )) @@ -667,7 +674,7 @@ (direction . 1) (padding . 1) (font-style . volta) - (Y-offset-callbacks . (,Side_position::aligned_side)) + (Y-offset-callbacks . (,Side_position_interface::aligned_side)) (thickness . 1.6) ; stafflinethickness (height . 2.0) ; staffspace; (minimum-space . 5) -- 2.39.5