From 77c7eccb319949accf3076b2a138e3ca16cf513e Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Sun, 5 Feb 2006 00:23:21 +0000 Subject: [PATCH] * lily/instrument-name-engraver.cc (stop_translation_timestep): hack: add to axis group if not added yet. This fixes hara kiri'd piano staves. * lily/hara-kiri-group-spanner.cc (force_hara_kiri_in_y_parent_callback): fix signatures. * lily/hairpin.cc (print): check next hairpin to see whether or not to be continuing. --- ChangeLog | 12 ++++++++++++ lily/align-interface.cc | 1 + lily/hairpin.cc | 22 +++++++++++++++++++++- lily/hara-kiri-engraver.cc | 10 ++++++---- lily/hara-kiri-group-spanner.cc | 22 +++++++++++++--------- lily/include/hairpin.hh | 1 + lily/include/hara-kiri-group-spanner.hh | 5 +++-- lily/instrument-name-engraver.cc | 25 +++++++++++++++++++------ lily/vertical-align-engraver.cc | 2 +- scm/define-grobs.scm | 14 ++++++-------- 10 files changed, 83 insertions(+), 31 deletions(-) diff --git a/ChangeLog b/ChangeLog index fd68c9f1ba..5cce661c16 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2006-02-05 Han-Wen Nienhuys + + * lily/instrument-name-engraver.cc (stop_translation_timestep): + hack: add to axis group if not added yet. This fixes hara kiri'd + piano staves. + + * lily/hara-kiri-group-spanner.cc + (force_hara_kiri_in_y_parent_callback): fix signatures. + + * lily/hairpin.cc (print): check next hairpin to see whether or + not to be continuing. + 2006-02-04 Jan Nieuwenhuizen * Remove trailing whitespace from makefiles. diff --git a/lily/align-interface.cc b/lily/align-interface.cc index 26d8d81143..6faaa013c0 100644 --- a/lily/align-interface.cc +++ b/lily/align-interface.cc @@ -49,6 +49,7 @@ Align_interface::stretch_after_break (SCM grob) Spanner *me_spanner = dynamic_cast (me); extract_grob_set (me, "elements", elems); + if (me_spanner && elems.size ()) { Grob *common = common_refpoint_of_array (elems, me, Y_AXIS); diff --git a/lily/hairpin.cc b/lily/hairpin.cc index f3911339af..addd26b1c2 100644 --- a/lily/hairpin.cc +++ b/lily/hairpin.cc @@ -26,7 +26,14 @@ SCM Hairpin::after_line_breaking (SCM smob) { Spanner *me = dynamic_cast (unsmob_grob (smob)); + consider_suicide (me); + return SCM_UNSPECIFIED; +} + +void +Hairpin::consider_suicide (Spanner*me) +{ Drul_array broken; Drul_array bounds; Direction d = LEFT; @@ -41,7 +48,7 @@ Hairpin::after_line_breaking (SCM smob) && ly_is_equal (bounds[RIGHT]->get_column ()->get_property ("when"), bounds[LEFT]->get_property ("when"))) me->suicide (); - return SCM_UNSPECIFIED; + } MAKE_SCHEME_CALLBACK (Hairpin, print, 1); @@ -51,6 +58,7 @@ Hairpin::print (SCM smob) { Spanner *me = dynamic_cast (unsmob_grob (smob)); + consider_suicide (me); SCM s = me->get_property ("grow-direction"); if (!is_direction (s)) { @@ -70,6 +78,18 @@ Hairpin::print (SCM smob) broken[d] = bounds[d]->break_status_dir () != CENTER; } while (flip (&d) != LEFT); + if (broken[RIGHT]) + { + Spanner *orig = dynamic_cast (me->original ()); + if (me->get_break_index () + < orig->broken_intos_.size () - 1) + { + Spanner *next = orig->broken_intos_[me->get_break_index () + 1]; + Stencil *s = next->get_stencil (); + if (!s || s->is_empty ()) + broken[RIGHT] = false; + } + } Grob *common = bounds[LEFT]->common_refpoint (bounds[RIGHT], X_AXIS); Drul_array x_points; diff --git a/lily/hara-kiri-engraver.cc b/lily/hara-kiri-engraver.cc index 48139aeb94..39cc48a90b 100644 --- a/lily/hara-kiri-engraver.cc +++ b/lily/hara-kiri-engraver.cc @@ -30,6 +30,12 @@ public: TRANSLATOR_DECLARATIONS (Hara_kiri_engraver); }; + +Hara_kiri_engraver::Hara_kiri_engraver () +{ + interesting_ = SCM_EOL; +} + void Hara_kiri_engraver::derived_mark () const { @@ -70,10 +76,6 @@ Hara_kiri_engraver::acknowledge_grob (Grob_info i) } } -Hara_kiri_engraver::Hara_kiri_engraver () -{ - interesting_ = SCM_EOL; -} ADD_ACKNOWLEDGER (Hara_kiri_engraver, grob); ADD_TRANSLATOR (Hara_kiri_engraver, diff --git a/lily/hara-kiri-group-spanner.cc b/lily/hara-kiri-group-spanner.cc index 1c5b92c054..04fe171428 100644 --- a/lily/hara-kiri-group-spanner.cc +++ b/lily/hara-kiri-group-spanner.cc @@ -58,26 +58,30 @@ Hara_kiri_group_spanner::consider_suicide (Grob *me) We can't rely on offsets and dimensions of elements in a hara-kiri group. Use a callback to make sure that hara-kiri has been done before asking for offsets. */ -MAKE_SCHEME_CALLBACK (Hara_kiri_group_spanner, force_hara_kiri_callback, 2); +MAKE_SCHEME_CALLBACK (Hara_kiri_group_spanner, after_line_breaking, 1); SCM -Hara_kiri_group_spanner::force_hara_kiri_callback (SCM smob, SCM axis) +Hara_kiri_group_spanner::after_line_breaking (SCM smob) { Grob *me = unsmob_grob (smob); - (void) axis; + consider_suicide (me); + return SCM_UNSPECIFIED; +} - assert (scm_to_int (axis) == Y_AXIS); +MAKE_SCHEME_CALLBACK (Hara_kiri_group_spanner, force_hara_kiri_callback, 1); +SCM +Hara_kiri_group_spanner::force_hara_kiri_callback (SCM smob) +{ + Grob *me = unsmob_grob (smob); consider_suicide (me); return scm_from_double (0.0); } -MAKE_SCHEME_CALLBACK (Hara_kiri_group_spanner, force_hara_kiri_in_parent_callback, 2); +MAKE_SCHEME_CALLBACK (Hara_kiri_group_spanner, force_hara_kiri_in_y_parent_callback, 1); SCM -Hara_kiri_group_spanner::force_hara_kiri_in_parent_callback (SCM smob, SCM axis) +Hara_kiri_group_spanner::force_hara_kiri_in_y_parent_callback (SCM smob) { Grob *daughter = unsmob_grob (smob); - Axis a = (Axis) scm_to_int (axis); - assert (a == Y_AXIS); - force_hara_kiri_callback (daughter->get_parent (a)->self_scm (), axis); + force_hara_kiri_callback (daughter->get_parent (Y_AXIS)->self_scm ()); return scm_from_double (0.0); } diff --git a/lily/include/hairpin.hh b/lily/include/hairpin.hh index 73570c7370..521fad1e4c 100644 --- a/lily/include/hairpin.hh +++ b/lily/include/hairpin.hh @@ -19,6 +19,7 @@ struct Hairpin public: DECLARE_SCHEME_CALLBACK (print, (SCM)); DECLARE_SCHEME_CALLBACK (after_line_breaking, (SCM)); + static void consider_suicide (Spanner*); static bool has_interface (Grob *); }; diff --git a/lily/include/hara-kiri-group-spanner.hh b/lily/include/hara-kiri-group-spanner.hh index df0a66151b..9533216be8 100644 --- a/lily/include/hara-kiri-group-spanner.hh +++ b/lily/include/hara-kiri-group-spanner.hh @@ -15,9 +15,10 @@ class Hara_kiri_group_spanner { public: - DECLARE_SCHEME_CALLBACK (force_hara_kiri_callback, (SCM, SCM)); + DECLARE_SCHEME_CALLBACK (force_hara_kiri_callback, (SCM)); DECLARE_SCHEME_CALLBACK (y_extent, (SCM smob)); - DECLARE_SCHEME_CALLBACK (force_hara_kiri_in_parent_callback, (SCM, SCM)); + DECLARE_SCHEME_CALLBACK (force_hara_kiri_in_y_parent_callback, (SCM)); + DECLARE_SCHEME_CALLBACK (after_line_breaking, (SCM)); static bool has_interface (Grob *); static void consider_suicide (Grob *me); static void add_interesting_item (Grob *me, Grob *n); diff --git a/lily/instrument-name-engraver.cc b/lily/instrument-name-engraver.cc index 288a68b5a7..0620ae8cfb 100644 --- a/lily/instrument-name-engraver.cc +++ b/lily/instrument-name-engraver.cc @@ -54,8 +54,19 @@ Instrument_name_engraver::stop_translation_timestep () { if (text_) { + SCM support = get_property ("instrumentSupport"); text_->set_object ("side-support-elements", - grob_list_to_grob_array (get_property ("instrumentSupport"))); + grob_list_to_grob_array (support)); + + /* + Hack to get texts on piano staves to disappear. + */ + if (!text_->get_parent (Y_AXIS) + && scm_is_pair (support)) + { + Axis_group_interface::add_element (unsmob_grob (scm_car (support)), + text_); + } text_ = 0; } @@ -113,13 +124,15 @@ Instrument_name_engraver::acknowledge_axis_group (Grob_info info) */ if (dynamic_cast (info.grob ()) && ((Axis_group_interface::has_interface (info.grob ()) - && Axis_group_interface::has_axis (info.grob (), Y_AXIS))) - && !Align_interface::has_interface (info.grob ())) + && Axis_group_interface::has_axis (info.grob (), Y_AXIS)))) { - SCM nl = scm_cons (info.grob ()->self_scm (), - get_property ("instrumentSupport")); + if (!Align_interface::has_interface (info.grob ())) + { + SCM nl = scm_cons (info.grob ()->self_scm (), + get_property ("instrumentSupport")); - context ()->set_property ("instrumentSupport", nl); + context ()->set_property ("instrumentSupport", nl); + } } } diff --git a/lily/vertical-align-engraver.cc b/lily/vertical-align-engraver.cc index 2b2930e9b1..d6f9ef5486 100644 --- a/lily/vertical-align-engraver.cc +++ b/lily/vertical-align-engraver.cc @@ -113,7 +113,7 @@ Vertical_align_engraver::acknowledge_axis_group (Grob_info i) Grob *after_grob = unsmob_grob (after); Align_interface::add_element (valign_, i.grob ()); - + if (before_grob || after_grob) { Grob_array *ga = unsmob_grob_array (valign_->get_object ("elements")); diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index ea41007c0a..4d491af89e 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -313,10 +313,8 @@ . ( (breakable . #t) (stacking-dir . 1) - (positioning-done . ,ly:break-align-interface::calc-positioning-done) (X-extent . ,ly:axis-group-interface::width) - (break-align-orders . ;; end of line #((instrument-name left-edge @@ -360,9 +358,7 @@ (BreakAlignGroup . ( (axes . (0)) - (X-extent . ,ly:axis-group-interface::width) - (meta . ((class . Item) (interfaces . (break-aligned-interface axis-group-interface)))))) @@ -729,8 +725,11 @@ (InstrumentName . ( (breakable . #t) - (Y-offset . ,(ly:make-simple-closure `(,+ ,(ly:make-simple-closure (list ly:self-alignment-interface::y-aligned-on-self)) - ,(ly:make-simple-closure (list ly:side-position-interface::y-aligned-on-support-refpoints))))) + (Y-offset . ,(ly:make-simple-closure + `(,+ ,(ly:make-simple-closure + (list ly:self-alignment-interface::y-aligned-on-self)) + ,(ly:make-simple-closure + (list ly:side-position-interface::y-aligned-on-support-refpoints))))) ;; This direction is for aligned_on_support_refpoints ;; (?) --hwn @@ -962,9 +961,7 @@ (MetronomeMark . ( - (stencil . ,ly:text-interface::print) - (Y-offset . ,ly:side-position-interface::y-aligned-side) (direction . ,UP) (padding . 0.8) @@ -1896,6 +1893,7 @@ . ( (axes . (1)) (Y-offset . ,ly:hara-kiri-group-spanner::force-hara-kiri-callback) + (Y-extent . ,ly:hara-kiri-group-spanner::y-extent) (X-extent . ,ly:axis-group-interface::width) (meta . ((class . Spanner) -- 2.39.5