X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fbeam-quanting.cc;h=ed1321450256aaa15a8a7345c7908e392a9dbb79;hb=b14ca8cd4fd50af455590377c4fab5c504506635;hp=0d7cca3e88950a50638add5fadbd6be80f768476;hpb=afa98722d22b2cc4c98254ff05c9ee164cf98bae;p=lilypond.git diff --git a/lily/beam-quanting.cc b/lily/beam-quanting.cc index 0d7cca3e88..ed13214502 100644 --- a/lily/beam-quanting.cc +++ b/lily/beam-quanting.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1997--2006 Han-Wen Nienhuys + (c) 1997--2009 Han-Wen Nienhuys Jan Nieuwenhuizen */ @@ -37,8 +37,8 @@ Beam_quant_parameters::fill (Grob *him) { SCM details = him->get_property ("details"); - /* - TODO: put in define-grobs.scm + /* + TODO: The default values should be copied to define-grobs.scm. */ INTER_QUANT_PENALTY = get_detail (details, ly_symbol2scm ("inter-quant-penalty"), 1000.0); SECONDARY_BEAM_DEMERIT = get_detail (details, ly_symbol2scm ("secondary-beam-demerit"), 10.0); @@ -113,7 +113,6 @@ Beam::quanting (SCM smob, SCM posns) /* Calculations are relative to a unit-scaled staff, i.e. the quants are divided by the current staff_space. - */ Real ss = Staff_symbol_referencer::staff_space (me); Real thickness = Beam::get_thickness (me) / ss; @@ -134,7 +133,6 @@ Beam::quanting (SCM smob, SCM posns) going to REGION_SIZE == 2, yields another 0.6 second with wtk1-fugue2. - (result indexes between 70 and 575) ? --hwn. */ @@ -154,16 +152,14 @@ Beam::quanting (SCM smob, SCM posns) for (int a = 2; a--;) common[a] = common_refpoint_of_array (stems, me, Axis (a)); - Grob *fvs = first_visible_stem (me); - Grob *lvs = last_visible_stem (me); + Grob *fvs = first_normal_stem (me); + Grob *lvs = last_normal_stem (me); Real xl = fvs ? fvs->relative_coordinate (common[X_AXIS], X_AXIS) : 0.0; Real xr = fvs ? lvs->relative_coordinate (common[X_AXIS], X_AXIS) : 0.0; /* - We store some info to quickly interpolate. - - Sometimes my head is screwed on backwards. The stemlength are - AFFINE linear in YL and YR. If YL == YR == 0, then we might have + We store some info to quickly interpolate. The stemlength are + affine linear in YL and YR. If YL == YR == 0, then we might have stem_y != 0.0, when we're cross staff. */ @@ -179,17 +175,19 @@ Beam::quanting (SCM smob, SCM posns) bool f = to_boolean (s->get_property ("french-beaming")) && s != lvs && s != fvs; - base_lengths.push_back (calc_stem_y (me, s, common, xl, xr, - Interval (0, 0), f) / ss); - stem_xposns.push_back (s->relative_coordinate (common[X_AXIS], X_AXIS)); - } + if (Stem::is_normal_stem (s)) + { + base_lengths.push_back (calc_stem_y (me, s, common, xl, xr, CENTER, + Interval (0, 0), f) / ss); + } + else + { + base_lengths.push_back (0); + } - bool xstaff = false; - if (lvs && fvs) - { - Grob *commony = fvs->common_refpoint (lvs, Y_AXIS); - xstaff = Align_interface::has_interface (commony); + stem_xposns.push_back (s->relative_coordinate (common[X_AXIS], X_AXIS)); } + bool xstaff = Align_interface::has_interface (common[Y_AXIS]); Direction ldir = Direction (stem_infos[0].dir_); Direction rdir = Direction (stem_infos.back ().dir_); @@ -348,7 +346,7 @@ Beam::score_stem_lengths (vector const &stems, for (vsize i = 0; i < stems.size (); i++) { Grob *s = stems[i]; - if (Stem::is_invisible (s)) + if (!Stem::is_normal_stem (s)) continue; Real x = stem_xs[i]; @@ -379,8 +377,7 @@ Beam::score_stem_lengths (vector const &stems, Direction d = DOWN; do score[d] /= max (count[d], 1); - while (flip (&d) != DOWN) - ; + while (flip (&d) != DOWN); return score[LEFT] + score[RIGHT]; }