From: Han-Wen Nienhuys Date: Mon, 22 May 2006 15:23:33 +0000 (+0000) Subject: * input/regression/beam-unconnected-beamlets.ly (Module): new file. X-Git-Tag: release/2.9.6~16 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=a4dc474c2c4c6f49a7c2fa5da92303ac496e13fb;p=lilypond.git * input/regression/beam-unconnected-beamlets.ly (Module): new file. * lily/beam.cc (get_beam_segments): generate events for max_connect_ case too. (get_beam_segments): read Stem::max-beam-connect. * lily/beam.cc (set_beaming): read clip-edges property. (calc_direction): don't suicide for single stem. --- diff --git a/ChangeLog b/ChangeLog index af201e791b..e82fb007e8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2006-05-22 Han-Wen Nienhuys + * input/regression/beam-unconnected-beamlets.ly (Module): new file. + + * lily/beam.cc (get_beam_segments): generate events for + max_connect_ case too. + (get_beam_segments): read Stem::max-beam-connect. + * input/regression/beam-single-stem.ly: new file. * lily/stem.cc (set_beaming): use #f as signaling value for diff --git a/input/regression/beam-unconnected-beamlets.ly b/input/regression/beam-unconnected-beamlets.ly new file mode 100644 index 0000000000..5931fa1847 --- /dev/null +++ b/input/regression/beam-unconnected-beamlets.ly @@ -0,0 +1,14 @@ +\header { texidoc = "By setting @code{max-beam-connect}, it is + possible to create pairs of unconnected beamlets." + + } + +\layout { + ragged-right = ##t + } +\version "2.9.6" + +\relative c'' { + \override Stem #'max-beam-connect = #1 + c16[ c16] +} diff --git a/lily/beam.cc b/lily/beam.cc index 497957b465..cf5e7c296c 100644 --- a/lily/beam.cc +++ b/lily/beam.cc @@ -52,6 +52,7 @@ Beam_stem_segment::Beam_stem_segment () { + max_connect_ = 1000; // infinity stem_ = 0; width_ = 0.0; stem_x_ = 0.0; @@ -128,10 +129,9 @@ Beam::calc_direction (SCM smob) /* Beams with less than 2 two stems don't make much sense, but could happen when you do - [r8 c8 r8]. + r8[ c8 r8] - For a beam that only has one stem, we try to do some disappearance magic: - we revert the flag, and move on to The Eternal Engraving Fields. */ + */ Direction dir = CENTER; @@ -347,6 +347,8 @@ Beam::get_beam_segments (Grob *me_grob, Grob **common) seg.width_ = stem_width; seg.stem_index_ = i; seg.dir_ = d; + seg.max_connect_ = robust_scm2int (stem->get_property ("max-beam-connect"), 1000); + Direction stem_dir = get_grob_direction (stem); seg.gapped_ @@ -369,7 +371,8 @@ Beam::get_beam_segments (Grob *me_grob, Grob **common) vector_sort (segs, default_compare); Beam_segment current; - current.vertical_count_ = (*i).first; + + int vertical_count = (*i).first; for (vsize j = 0; j < segs.size (); j++) { /* @@ -382,12 +385,14 @@ Beam::get_beam_segments (Grob *me_grob, Grob **common) j == segs.size() - 1 && event_dir==RIGHT); Drul_array inside (j > 0, j < segs.size()-1); bool event = on_bound[event_dir] - || abs (segs[j].rank_ - segs[j+event_dir].rank_) > 1; + || abs (segs[j].rank_ - segs[j+event_dir].rank_) > 1 + || (abs (vertical_count) >= segs[j].max_connect_ + || abs (vertical_count) >= segs[j + event_dir].max_connect_); if (!event) continue; - current.vertical_count_ = (*i).first; + current.vertical_count_ = vertical_count; current.horizontal_[event_dir] = segs[j].stem_x_; if (segs[j].dir_ == event_dir) { @@ -422,7 +427,6 @@ Beam::get_beam_segments (Grob *me_grob, Grob **common) if (event_dir == RIGHT) { - current.vertical_count_ = (*i).first; segments.push_back (current); current = Beam_segment(); } diff --git a/lily/include/beam.hh b/lily/include/beam.hh index 0dbc485b53..f20556a696 100644 --- a/lily/include/beam.hh +++ b/lily/include/beam.hh @@ -40,7 +40,6 @@ struct Beam_quant_parameters void fill (Grob *him); }; - struct Beam_segment { int vertical_count_; @@ -51,6 +50,7 @@ struct Beam_segment struct Beam_stem_segment { Beam_stem_segment (); + Grob *stem_; Real width_; Real stem_x_; @@ -58,6 +58,8 @@ struct Beam_stem_segment int stem_index_; bool gapped_; Direction dir_; + int max_connect_; + }; diff --git a/scm/define-grob-properties.scm b/scm/define-grob-properties.scm index 5bcffdd929..09d7187b5c 100644 --- a/scm/define-grob-properties.scm +++ b/scm/define-grob-properties.scm @@ -276,6 +276,8 @@ column is the start of a system.") (line-positions ,list? "Vertical positions of staff lines.") (line-thickness ,number? "The thickness of the tie/slur contour.") (long-text ,markup? "Text markup. See @usermanref{Text markup}.") + (max-beam-connect ,integer? "Maximum number of beams to connect +to beams from this stem. Further beams are typeset as beamlets.") (measure-length ,ly:moment? "Length of a measure. Used in some spacing situations.")