From 6dcc906d0eab776bddec84fe6d95fa53ed06b607 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Sun, 24 Oct 2004 22:24:25 +0000 Subject: [PATCH] * scm/define-context-properties.scm (all-user-translation-properties): add verticallySpacedContexts. * scm/define-grob-interfaces.scm (vertically-spaceable-interface): add interface * scm/define-grob-properties.scm (all-internal-grob-properties): add spaceable-staves * scm/define-grobs.scm (all-grob-descriptions): set vertically-spaceable-interface for VerticalAxisGroup and RemoveEmptyVerticalGroup * lily/system.cc (get_line): determine staff_refpoints_ using spaceable-staves. * lily/score-engraver.cc (acknowledge_grob): ack vertically-spaceable-interface and verticallySpacedContexts to set spaceable-staves. * input/regression/new-slur.ly: add slur under 16th subbeam case. * lily/slur-scoring.cc (fill): init has_same_beam_ before use. --- ChangeLog | 26 ++++++++++++++++++++++++++ input/regression/new-slur.ly | 3 +-- lily/score-engraver.cc | 20 ++++++++++++++++++-- lily/slur-scoring.cc | 6 +++--- lily/system.cc | 28 +++++++++++----------------- ly/engraver-init.ly | 2 ++ scm/define-context-properties.scm | 6 +++++- scm/define-grob-interfaces.scm | 6 ++++++ scm/define-grob-properties.scm | 2 +- scm/define-grobs.scm | 4 ++-- 10 files changed, 75 insertions(+), 28 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3a866432e7..f3e0732012 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,29 @@ +2004-10-25 Han-Wen Nienhuys + + * scm/define-context-properties.scm + (all-user-translation-properties): add verticallySpacedContexts. + + * scm/define-grob-interfaces.scm (vertically-spaceable-interface): + add interface + + * scm/define-grob-properties.scm (all-internal-grob-properties): + add spaceable-staves + + * scm/define-grobs.scm (all-grob-descriptions): set + vertically-spaceable-interface for VerticalAxisGroup and + RemoveEmptyVerticalGroup + + * lily/system.cc (get_line): determine staff_refpoints_ + using spaceable-staves. + + * lily/score-engraver.cc (acknowledge_grob): ack + vertically-spaceable-interface and verticallySpacedContexts to + set spaceable-staves. + + * input/regression/new-slur.ly: add slur under 16th subbeam case. + + * lily/slur-scoring.cc (fill): init has_same_beam_ before use. + 2004-10-24 Han-Wen Nienhuys * input/mutopia/F.Schubert/morgenlied.ly (pianoLH): tune diff --git a/input/regression/new-slur.ly b/input/regression/new-slur.ly index 7bccbfbb94..e0117d3054 100644 --- a/input/regression/new-slur.ly +++ b/input/regression/new-slur.ly @@ -21,8 +21,7 @@ \\ {r8 r r } >> - s4 - + \new Voice { \voiceOne b='8[ c16( d]) } g='8[( a b b! ] c4 bes) bes='8( f' des bes) as4( bes) r8 d( f e d c b a) diff --git a/lily/score-engraver.cc b/lily/score-engraver.cc index 0b28780dcc..432d18b720 100644 --- a/lily/score-engraver.cc +++ b/lily/score-engraver.cc @@ -291,6 +291,22 @@ Score_engraver::acknowledge_grob (Grob_info gi) ly_symbol2scm ("spacing-wishes"), gi.grob_); } + + if (Axis_group_interface::has_interface (gi.grob_) + && gi.grob_->internal_has_interface (ly_symbol2scm ("vertically-spaceable-interface"))) + { + SCM spaceable = get_property ("verticallySpacedContexts"); + Context *orig = gi.origin_contexts (this)[0]; + + if (scm_memq (ly_symbol2scm (orig->context_name ().to_str0()), + spaceable) != SCM_BOOL_F) + { + Pointer_group_interface::add_grob (system_, + ly_symbol2scm ("spaceable-staves"), + gi.grob_); + } + } + } @@ -307,6 +323,6 @@ ENTER_DESCRIPTION (Score_engraver, , /* creats*/ "System PaperColumn NonMusicalPaperColumn", /* accepts */ "break-event", -/* acks */ "note-spacing-interface staff-spacing-interface", -/* reads */ "currentMusicalColumn currentCommandColumn", +/* acks */ "note-spacing-interface staff-spacing-interface axis-group-interface", +/* reads */ "currentMusicalColumn currentCommandColumn verticallySpacedContexts", /* write */ ""); diff --git a/lily/slur-scoring.cc b/lily/slur-scoring.cc index ae76a64abb..8543c9e904 100644 --- a/lily/slur-scoring.cc +++ b/lily/slur-scoring.cc @@ -319,6 +319,9 @@ Slur_score_state::fill (Grob *me) is_broken_ = (!extremes_[LEFT].note_column_ || !extremes_[RIGHT].note_column_); + has_same_beam_ = + (extremes_[LEFT].stem_ && extremes_[RIGHT].stem_ + && Stem::get_beam (extremes_[LEFT].stem_) == Stem::get_beam (extremes_[RIGHT].stem_)); base_attachments_ = get_base_attachments (); @@ -347,9 +350,6 @@ Slur_score_state::fill (Grob *me) = (extremes_[LEFT].stem_ && Stem::get_beam (extremes_[LEFT].stem_)) || (extremes_[RIGHT].stem_ && Stem::get_beam (extremes_[RIGHT].stem_)); - has_same_beam_ = - (extremes_[LEFT].stem_ && extremes_[RIGHT].stem_ - && Stem::get_beam (extremes_[LEFT].stem_) == Stem::get_beam (extremes_[RIGHT].stem_)); set_next_direction (); diff --git a/lily/system.cc b/lily/system.cc index b727207568..0eecf4afeb 100644 --- a/lily/system.cc +++ b/lily/system.cc @@ -336,8 +336,6 @@ System::get_line () Start with layer 3, since scm_cons prepends to list. */ SCM all = get_property ("all-elements"); - Interval staff_refpoints; - staff_refpoints.set_empty(); for (int i = LAYER_COUNT; i--;) for (SCM s = all; scm_is_pair (s); s = scm_cdr (s)) @@ -345,20 +343,6 @@ System::get_line () Grob *g = unsmob_grob (scm_car (s)); Stencil *stil = g->get_stencil (); - if (i == 0 - && Axis_group_interface::has_interface (g) - && !Align_interface::has_interface (g) - && dynamic_cast (g) - /* - UGH. - */ - && !g->internal_has_interface (ly_symbol2scm ("dynamic-interface")) - && !g->internal_has_interface (ly_symbol2scm ("piano-pedal-interface")) - ) - { - staff_refpoints.add_point (g->relative_coordinate (this, Y_AXIS)); - } - /* Skip empty stencils and grobs that are not in this layer. */ if (!stil || robust_scm2int (g->get_property ("layer"), 1) != i) @@ -388,7 +372,17 @@ System::get_line () Stencil sys_stencil (Box (x,y), scm_cons (ly_symbol2scm ("combine-stencil"), exprs)); + + Interval staff_refpoints; + staff_refpoints.set_empty(); + for (SCM s = get_property ("spaceable-staves"); + scm_is_pair (s); s = scm_cdr (s)) + { + Grob *g = unsmob_grob (scm_car (s)); + staff_refpoints.add_point (g->relative_coordinate (this, Y_AXIS)); + } + Paper_system *pl = new Paper_system (sys_stencil, false); pl->staff_refpoints_ = staff_refpoints; Item * break_point =this->get_bound(LEFT); @@ -453,4 +447,4 @@ System::columns () const ADD_INTERFACE (System,"system-interface", "This is the toplevel object: each object in a score " "ultimately has a System object as its X and Y parent. ", - "all-elements columns") + "all-elements spaceable-staves columns") diff --git a/ly/engraver-init.ly b/ly/engraver-init.ly index 9e205f9bd2..a16809b7e5 100644 --- a/ly/engraver-init.ly +++ b/ly/engraver-init.ly @@ -561,6 +561,8 @@ AncientRemoveEmptyStaffContext = \context { quotedEventTypes = #'(note-event rest-event time-scaled-music tie-event) instrumentTransposition = #(ly:make-pitch 0 0 0) + + verticallySpacedContexts = #'(Staff) } EasyNotation = \context { % TODO: why \context override? diff --git a/scm/define-context-properties.scm b/scm/define-context-properties.scm index 7a9815b775..8aedad8d88 100644 --- a/scm/define-context-properties.scm +++ b/scm/define-context-properties.scm @@ -397,7 +397,11 @@ to 10 (5+5) staffspaces high. This does not work for Voice or any other context that doesn't form a vertical group.") - + + (verticallySpacedContexts ,list? "List of symbols, containing +context names whose vertical axis groups should be taken into account for +vertical spacing of systems.") + (vocalName ,markup? "Name of a vocal line.") (vocNam ,markup? "Name of a vocal line, short version.") diff --git a/scm/define-grob-interfaces.scm b/scm/define-grob-interfaces.scm index e04c1e6b9d..aecf2acb02 100644 --- a/scm/define-grob-interfaces.scm +++ b/scm/define-grob-interfaces.scm @@ -103,3 +103,9 @@ are interesting enough to maintain a hara-kiri staff." "An interface for any notes set in a tablature staff" '()) + +(ly:add-interface + 'vertically-spaceable-interface + "Objects that should be kept at constant vertical distances. Typically: +@internalsref{VerticalAxisGroup} objects of @internalsref{Staff} contexts." + '()) diff --git a/scm/define-grob-properties.scm b/scm/define-grob-properties.scm index 168944dec2..0740f9ece4 100644 --- a/scm/define-grob-properties.scm +++ b/scm/define-grob-properties.scm @@ -615,7 +615,7 @@ stem. Internally used to distribute beam shortening over stems. ") than a whole rest.") - + (spaceable-staves ,grob-list? "Objects to be spaced during page layout.") ;; ancient notation diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index eca4ce72a1..05cc4b28f5 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -852,7 +852,7 @@ (Y-extent-callback . ,Hara_kiri_group_spanner::y_extent) (remove-first . #t) (axes . (1)) - (meta . ((interfaces . (axis-group-interface hara-kiri-group-interface item-interface spanner-interface)))) + (meta . ((interfaces . (axis-group-interface vertically-spaceable-interface hara-kiri-group-interface item-interface spanner-interface)))) )) (RepeatSlash @@ -1345,7 +1345,7 @@ (Y-extent-callback . ,Axis_group_interface::group_extent_callback) (X-extent-callback . ,Axis_group_interface::group_extent_callback) - (meta . ((interfaces . (axis-group-interface spanner-interface)))) + (meta . ((interfaces . (axis-group-interface vertically-spaceable-interface spanner-interface)))) )) ) ) -- 2.39.5