From a7ef972d7e2275c68089db3e0be3fdb19cb7b458 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Sat, 28 Oct 2006 22:59:16 +0000 Subject: [PATCH] * scm/define-grobs.scm: separation-items have width * VERSION: bump version * .gitignore: * Documentation/topdocs/NEWS.tely: * lily/separating-group-spanner.cc: * lily/slur-engraver.cc: * lily/slur-scoring.cc: * scm/define-grobs.scm: * input/regression/slur-clef.ly: add breakableSeparationItem to extra encompass for slurs. This fixesslur/clef slur/key collisions etc. Should fix #49 * lily/include/slur-scoring.hh: * lily/slur-scoring.cc: Use X of separation item as slur start. Fixes #120 --- .gitignore | 1 + ChangeLog | 25 +++++++++++++++++++++++ Documentation/topdocs/NEWS.tely | 6 ++++++ VERSION | 2 +- buildscripts/git-update-changelog.py | 2 -- input/regression/slur-clef.ly | 6 ++++++ lily/include/slur-scoring.hh | 4 +++- lily/separating-group-spanner.cc | 2 +- lily/slur-engraver.cc | 16 ++++++++++++++- lily/slur-scoring.cc | 30 +++++++++++++++++++++++++--- scm/define-grobs.scm | 5 +++-- 11 files changed, 88 insertions(+), 11 deletions(-) create mode 100644 input/regression/slur-clef.ly diff --git a/.gitignore b/.gitignore index 849b7705d3..6a3858d251 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,4 @@ TAGS tags .gdbinit ?.ly +*.midi diff --git a/ChangeLog b/ChangeLog index 6edc681b44..fbd2c2fadf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,28 @@ +2006-10-29 Han-Wen Nienhuys + + + * scm/define-grobs.scm: + separation-items have width + + + * VERSION: + bump version + + + * .gitignore: + * Documentation/topdocs/NEWS.tely: + * lily/separating-group-spanner.cc: + * lily/slur-engraver.cc: + * lily/slur-scoring.cc: + * scm/define-grobs.scm: + * input/regression/slur-clef.ly: + add breakableSeparationItem to extra encompass for slurs. This fixesslur/clef slur/key collisions etc. Should fix #49 + + + * lily/include/slur-scoring.hh: + * lily/slur-scoring.cc: + Use X of separation item as slur start. Fixes #120 + 2006-10-29 Han-Wen Nienhuys * buildscripts/git-update-changelog.py (changelog_body): don't diff --git a/Documentation/topdocs/NEWS.tely b/Documentation/topdocs/NEWS.tely index 33f3510055..c8ee8888d5 100644 --- a/Documentation/topdocs/NEWS.tely +++ b/Documentation/topdocs/NEWS.tely @@ -66,6 +66,12 @@ which scares away people. @end ignore +@item Slurs now avoid clefs and key changes. + +@lilypond[fragment,ragged-right] +\new Staff { \clef bass c^( \clef "G" g') } +@end lilypond + @item The @code{FretBoards} context will generate guitar frettings automatically, diff --git a/VERSION b/VERSION index 597888e2cd..b60133ba58 100644 --- a/VERSION +++ b/VERSION @@ -1,6 +1,6 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=2 MINOR_VERSION=9 -PATCH_LEVEL=27 +PATCH_LEVEL=28 MY_PATCH_LEVEL= diff --git a/buildscripts/git-update-changelog.py b/buildscripts/git-update-changelog.py index 73355dddea..135237beca 100644 --- a/buildscripts/git-update-changelog.py +++ b/buildscripts/git-update-changelog.py @@ -23,8 +23,6 @@ class Commit: 'author', 'committish'): self.__dict__[v] = dict[v] - - # Sat Oct 28 18:52:30 2006 +0200 self.date = ' '.join (self.date.split (' ')[:-1]) self.date = time.strptime (self.date, '%a %b %d %H:%M:%S %Y') diff --git a/input/regression/slur-clef.ly b/input/regression/slur-clef.ly new file mode 100644 index 0000000000..0b878838ac --- /dev/null +++ b/input/regression/slur-clef.ly @@ -0,0 +1,6 @@ +\paper { + ragged-right = ##t + } +\version "2.9.27" + +\new Staff { \clef bass c^( \clef "G" g') } diff --git a/lily/include/slur-scoring.hh b/lily/include/slur-scoring.hh index 4668c58489..3e5b9d86b4 100644 --- a/lily/include/slur-scoring.hh +++ b/lily/include/slur-scoring.hh @@ -98,7 +98,7 @@ struct Slur_score_state Bezier get_best_curve (); void fill (Grob *); void set_next_direction (); - + vector generate_avoid_offsets () const; Drul_array get_bound_info () const; void generate_curves () const; @@ -109,6 +109,8 @@ struct Slur_score_state vector get_extra_encompass_infos () const; Real move_away_from_staffline (Real y, Grob *on_staff) const; int get_closest_index (SCM inspect_quants) const; + + Grob *breakable_bound_item (Direction) const; }; void set_slur_control_points (Grob *me); diff --git a/lily/separating-group-spanner.cc b/lily/separating-group-spanner.cc index 5ef9038dfb..14e457b6ef 100644 --- a/lily/separating-group-spanner.cc +++ b/lily/separating-group-spanner.cc @@ -115,4 +115,4 @@ ADD_INTERFACE (Separating_group_spanner, "separation-spanner-interface", /* properties */ "elements " - "padding"); + "padding "); diff --git a/lily/slur-engraver.cc b/lily/slur-engraver.cc index c203d4602d..864ea77473 100644 --- a/lily/slur-engraver.cc +++ b/lily/slur-engraver.cc @@ -196,6 +196,17 @@ Slur_engraver::process_music () void Slur_engraver::stop_translation_timestep () { + if (Grob *g = unsmob_grob (get_property ("breakableSeparationItem"))) + { + for (vsize i = 0; i < end_slurs_.size (); i++) + Slur::add_extra_encompass (end_slurs_[i], g); + + if (!events_[START]) + for (vsize i = 0; i < slurs_.size (); i++) + Slur::add_extra_encompass (slurs_[i], g); + } + + for (vsize i = 0; i < end_slurs_.size (); i++) announce_end_grob (end_slurs_[i], SCM_EOL); end_slurs_.clear (); @@ -213,5 +224,8 @@ ADD_ACKNOWLEDGER (Slur_engraver, tuplet_number); ADD_TRANSLATOR (Slur_engraver, /* doc */ "Build slur grobs from slur events", /* create */ "Slur", - /* read */ "slurMelismaBusy doubleSlurs", + /* read */ + "slurMelismaBusy " + "doubleSlurs ", + /* write */ ""); diff --git a/lily/slur-scoring.cc b/lily/slur-scoring.cc index 6371082b07..618786867e 100644 --- a/lily/slur-scoring.cc +++ b/lily/slur-scoring.cc @@ -412,6 +412,23 @@ Slur_score_state::get_best_curve () return configurations_[opt_idx]->curve_; } +Grob * +Slur_score_state::breakable_bound_item (Direction d) const +{ + Grob *col = slur_->get_bound (d)->get_column (); + + extract_grob_set (slur_, "encompass-objects", extra_encompasses); + + for (vsize i = 0; i < extra_encompasses.size (); i++) + { + Item *item = dynamic_cast (extra_encompasses[i]); + if (item && col == item->get_column ()) + return item; + } + + return 0; +} + int Slur_score_state::get_closest_index (SCM inspect_quants) const { @@ -450,7 +467,7 @@ Slur_score_state::get_y_attachment_range () const { end_ys[d] = dir_ * max (max (dir_ * (base_attachments_[d][Y_AXIS] - + parameters_.region_size_ * dir_), + + parameters_.region_size_ * dir_), dir_ * (dir_ + extremes_[d].note_column_->extent (common_[Y_AXIS], Y_AXIS)[dir_])), dir_ * base_attachments_[-d][Y_AXIS]); } @@ -524,11 +541,18 @@ Slur_score_state::get_base_attachments () const { if (!extremes_[d].note_column_) { - Real x, y; - if (d == RIGHT) + Real x = 0; + Real y = 0; + + if (Grob *g = breakable_bound_item (d)) + { + x = robust_relative_extent (g, common_[X_AXIS], X_AXIS)[RIGHT]; + } + else if (d == RIGHT) x = robust_relative_extent (extremes_[d].bound_, common_[X_AXIS], X_AXIS)[d]; else x = slur_->get_broken_left_end_align (); + Grob *col = (d == LEFT) ? columns_[0] : columns_.back (); if (extremes_[-d].bound_ != col) diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index 77dc44fb4a..37277a762a 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -1351,8 +1351,9 @@ (SeparationItem . ( - (X-extent . #f) - (Y-extent . #f) + (avoid-slur . inside) + (X-extent . ,ly:axis-group-interface::width) + (Y-extent . ,ly:axis-group-interface::height) (meta . ((class . Item) (interfaces . (spacing-interface separation-item-interface)))))) -- 2.39.2