X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fstem.cc;h=8a59a4909cf777997280b98ca6481fc3909e28a1;hb=c043944a17dce34b2e539982e7e43b6cbc74b632;hp=e572acb652f1bd6a04dd75b309cbd94850ac4959;hpb=b37e3f652677ae0298423db9fa0e552e5fce0c92;p=lilypond.git diff --git a/lily/stem.cc b/lily/stem.cc index e572acb652..8a59a4909c 100644 --- a/lily/stem.cc +++ b/lily/stem.cc @@ -155,7 +155,7 @@ Stem::extremal_heads (Grob *me) Drul_array exthead (0, 0); extract_grob_set (me, "note-heads", heads); - for (int i = heads.size (); i--;) + for (vsize i = heads.size (); i--;) { Grob *n = heads[i]; int p = Staff_symbol_referencer::get_rounded_position (n); @@ -181,21 +181,21 @@ integer_compare (int const &a, int const &b) } /* The positions, in ascending order. */ -Array +vector Stem::note_head_positions (Grob *me) { - Array ps; + vector ps; extract_grob_set (me, "note-heads", heads); - for (int i = heads.size (); i--;) + for (vsize i = heads.size (); i--;) { Grob *n = heads[i]; int p = Staff_symbol_referencer::get_rounded_position (n); - ps.push (p); + ps.push_back (p); } - ps.sort (integer_compare); + vector_sort (ps, integer_compare); return ps; } @@ -233,7 +233,7 @@ Stem::calc_stem_end_position (SCM smob) Real ss = Staff_symbol_referencer::staff_space (me); int durlog = duration_log (me); - Array a; + vector a; /* WARNING: IN HALF SPACES */ Real length = robust_scm2double (me->get_property ("length"), 7); @@ -261,11 +261,12 @@ Stem::calc_stem_end_position (SCM smob) if (dots) { Real dp = Staff_symbol_referencer::get_position (dots); - Real flagy = flag (me).extent (Y_AXIS)[-dir] * 2 / ss; + Interval flag_yext = flag (me).extent (Y_AXIS) * (2 / ss) + stem_end; /* Very gory: add myself to the X-support of the parent, which should be a dot-column. */ - if (dir * (stem_end + flagy - dp) < 0.5) + + if (flag_yext.distance (dp) < 0.5) { Grob *par = dots->get_parent (X_AXIS); @@ -331,7 +332,7 @@ Stem::calc_length (SCM smob) (Stem_tremolo::raw_stencil () looks at the beam.) --hwn */ Real minlen = 1.0 - + 2 * Stem_tremolo::raw_stencil (t_flag).extent (Y_AXIS).length () + + 2 * t_flag->extent (t_flag, Y_AXIS).length () / ss; if (durlog >= 3) @@ -367,12 +368,12 @@ Stem::calc_positioning_done (SCM smob) return SCM_BOOL_T; extract_grob_set (me, "note-heads", ro_heads); - Link_array heads (ro_heads); - heads.sort (compare_position); + vector heads (ro_heads); + vector_sort (heads, compare_position); Direction dir = get_grob_direction (me); if (dir < 0) - heads.reverse (); + reverse (heads); Real thick = thickness (me); @@ -385,13 +386,13 @@ Stem::calc_positioning_done (SCM smob) } Real w = hed->extent (hed, X_AXIS)[dir]; - for (int i = 0; i < heads.size (); i++) + for (vsize i = 0; i < heads.size (); i++) heads[i]->translate_axis (w - heads[i]->extent (heads[i], X_AXIS)[dir], X_AXIS); bool parity = true; Real lastpos = Real (Staff_symbol_referencer::get_position (heads[0])); - for (int i = 1; i < heads.size (); i++) + for (vsize i = 1; i < heads.size (); i++) { Real p = Staff_symbol_referencer::get_position (heads[i]); Real dy = fabs (lastpos- p); @@ -508,7 +509,8 @@ Stem::height (SCM smob) Grob *beam = get_beam (me); if (beam) { - beam->get_property ("positions"); + /* trigger set-stem-lengths. */ + beam->get_property ("quantized-positions"); } /* @@ -548,7 +550,7 @@ Stem::flag (Grob *me) TODO: maybe property stroke-style should take different values, e.g. "" (i.e. no stroke), "single" and "double" (currently, it's '() or "grace"). */ - std::string flag_style; + string flag_style; SCM flag_style_scm = me->get_property ("flag-style"); if (scm_is_symbol (flag_style_scm)) @@ -559,7 +561,7 @@ Stem::flag (Grob *me) bool adjust = true; - std::string staffline_offs; + string staffline_offs; if (flag_style == "mensural") /* Mensural notation: For notes on staff lines, use different flags than for notes between staff lines. The idea is that @@ -582,7 +584,7 @@ Stem::flag (Grob *me) staffline_offs = ""; char dir = (get_grob_direction (me) == UP) ? 'u' : 'd'; - std::string font_char = flag_style + string font_char = flag_style + to_string (dir) + staffline_offs + to_string (log); Font_metric *fm = Font_interface::get_default_font (me); Stencil flag = fm->find_by_name ("flags." + font_char); @@ -592,10 +594,10 @@ Stem::flag (Grob *me) SCM stroke_style_scm = me->get_property ("stroke-style"); if (scm_is_string (stroke_style_scm)) { - std::string stroke_style = ly_scm2string (stroke_style_scm); + string stroke_style = ly_scm2string (stroke_style_scm); if (!stroke_style.empty ()) { - std::string font_char = to_string (dir) + stroke_style; + string font_char = to_string (dir) + stroke_style; Stencil stroke = fm->find_by_name ("flags." + font_char); if (stroke.is_empty ()) me->warning (_f ("flag stroke `%s' not found", font_char)); @@ -702,7 +704,7 @@ Stem::print (SCM smob) // URG Real stem_width = thickness (me); Real blot - = me->layout ()->get_dimension (ly_symbol2scm ("blotdiameter")); + = me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter")); Box b = Box (Interval (-stem_width / 2, stem_width / 2), Interval (stem_y[DOWN] * half_space, stem_y[UP] * half_space)); @@ -723,7 +725,7 @@ Stem::get_translated_flag (Grob *me) { Direction d = get_grob_direction (me); Real blot - = me->layout ()->get_dimension (ly_symbol2scm ("blotdiameter")); + = me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter")); Real stem_width = thickness (me); Real half_space = Staff_symbol_referencer::staff_space (me) * 0.5; Real y2 = robust_scm2double (me->get_property ("stem-end-position"), 0.0); @@ -770,7 +772,7 @@ Stem::offset_callback (SCM smob) extract_grob_set (me, "rests", rests); if (rests.size ()) { - Grob *rest = rests.top (); + Grob *rest = rests.back (); r = rest->extent (rest, X_AXIS).center (); } }