From d46dac53979adc6757516d311e6c88d004e7fc6c Mon Sep 17 00:00:00 2001 From: hanwen Date: Fri, 5 May 2006 21:18:06 +0000 Subject: [PATCH] (struct Beam_stem_segment): add gapped_ for tremolo beams. --- ChangeLog | 5 +++++ lily/beam.cc | 26 ++++++++++++++++++++++++-- lily/include/beam.hh | 1 + scm/lily.scm | 4 +++- 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 95b9a317f8..f024d45e25 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2006-05-05 Han-Wen Nienhuys + + * lily/include/beam.hh (struct Beam_stem_segment): add gapped_ for + tremolo beams. + 2006-05-05 Erik Sandberg * lily/context.cc, lily/global-context.cc: Added 'unique' member, used by music streams. diff --git a/lily/beam.cc b/lily/beam.cc index 0c5246c501..ea68186213 100644 --- a/lily/beam.cc +++ b/lily/beam.cc @@ -313,9 +313,14 @@ Beam::get_beam_segments (Grob *me_grob, Grob **common) *common = commonx; + int gap_count = robust_scm2int (me->get_property ("gap-count"), 0); + Real gap_length = robust_scm2double (me->get_property ("gap"), 0.0); + Position_stem_segments_map stem_segments; Real lt = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness")); + Slice ranks; + for (vsize i = 0; i < stems.size (); i++) { Grob *stem = stems[i]; @@ -330,7 +335,18 @@ Beam::get_beam_segments (Grob *me_grob, Grob **common) { if (!scm_is_integer (scm_car (s))) continue; - + + int beam_rank = scm_to_int (scm_car (s)); + ranks.add_point (beam_rank); + } + + for (SCM s = index_get_cell (beaming, d); + scm_is_pair (s); s = scm_cdr (s)) + { + if (!scm_is_integer (scm_car (s))) + continue; + + int beam_rank = scm_to_int (scm_car (s)); Beam_stem_segment seg; seg.stem_ = stem; seg.stem_x_ = stem_x; @@ -338,7 +354,11 @@ Beam::get_beam_segments (Grob *me_grob, Grob **common) seg.width_ = stem_width; seg.stem_index_ = i; seg.dir_ = d; - stem_segments[scm_to_int (scm_car (s))].push_back (seg); + Direction stem_dir = get_grob_direction (stem); + + seg.gapped_ + = (stem_dir * beam_rank < (stem_dir * ranks[-stem_dir] + gap_count)); + stem_segments[beam_rank].push_back (seg); } } while (flip (&d) != LEFT); @@ -399,6 +419,8 @@ Beam::get_beam_segments (Grob *me_grob, Grob **common) else { current.horizontal_[event_dir] += event_dir * segs[j].width_/2; + if (segs[j].gapped_) + current.horizontal_[event_dir] -= event_dir * gap_length; } if (event_dir == RIGHT) diff --git a/lily/include/beam.hh b/lily/include/beam.hh index 87cafa038c..0dbc485b53 100644 --- a/lily/include/beam.hh +++ b/lily/include/beam.hh @@ -56,6 +56,7 @@ struct Beam_stem_segment Real stem_x_; int rank_; int stem_index_; + bool gapped_; Direction dir_; }; diff --git a/scm/lily.scm b/scm/lily.scm index b45f5987ff..98d3b16261 100644 --- a/scm/lily.scm +++ b/scm/lily.scm @@ -106,6 +106,8 @@ similar to chord syntax") (let* ((file-name (%search-load-path x))) (if (ly:get-option 'verbose) (ly:progress "[~A" file-name)) + (if (not file-name) + (ly:error (_ "Can't find ~A" x))) (primitive-load file-name) (if (ly:get-option 'verbose) (ly:progress "]")))) @@ -223,7 +225,7 @@ The syntax is the same as `define*-public'." ;; load-from-path '("lily-library.scm" "file-cache.scm" - "define-event-classes.scm" +; "define-event-classes.scm" "define-music-types.scm" "output-lib.scm" "c++.scm" -- 2.39.5