diff options
author | Keith OHara <k-ohara5a5a@oco.net> | 2012-07-14 10:19:41 -0700 |
---|---|---|
committer | Keith OHara <k-ohara5a5a@oco.net> | 2012-07-14 10:19:41 -0700 |
commit | d05afb4c0bf29cbd6a98691c9c62afa1604fa4b2 (patch) | |
tree | 41e6825494576359fdec279e5772b1a268080000 | |
parent | a2fcb88e9f4ffb1097d934f7ebb5dca0551687da (diff) |
Revert "line_count fixes"
This reverts commit 2a872121379fffe7b1cd5d23048b7ea04b4d1f68.
-rw-r--r-- | input/regression/ledger-lines-varying-staves.ly | 6 | ||||
-rw-r--r-- | input/regression/non-centered-bar-lines.ly | 1 | ||||
-rw-r--r-- | input/regression/staff-ledger-positions.ly | 2 | ||||
-rw-r--r-- | input/regression/staff-line-positions.ly | 4 | ||||
-rw-r--r-- | input/regression/zero-staff-space.ly | 2 | ||||
-rw-r--r-- | lily/bar-line.cc | 65 | ||||
-rw-r--r-- | lily/beam.cc | 12 | ||||
-rw-r--r-- | lily/breathing-sign.cc | 34 | ||||
-rw-r--r-- | lily/custos.cc | 3 | ||||
-rw-r--r-- | lily/rest-collision.cc | 13 | ||||
-rw-r--r-- | lily/rest.cc | 3 | ||||
-rw-r--r-- | lily/slur-scoring.cc | 3 | ||||
-rw-r--r-- | lily/time-signature.cc | 32 | ||||
-rw-r--r-- | lily/vaticana-ligature.cc | 3 |
14 files changed, 59 insertions, 124 deletions
diff --git a/input/regression/ledger-lines-varying-staves.ly b/input/regression/ledger-lines-varying-staves.ly index 2f8db819a1..e037de7f79 100644 --- a/input/regression/ledger-lines-varying-staves.ly +++ b/input/regression/ledger-lines-varying-staves.ly @@ -7,9 +7,9 @@ for a variety of staves using both @code{line-count} and notes = \relative c' { \time 3/4 - c2. | d | e | f \bar ":|" - g2. | a | b | c \bar "|:" - d2. | e | f | g \bar ":|:" + c2. | d | e | f + g2. | a | b | c + d2. | e | f | g a2. } diff --git a/input/regression/non-centered-bar-lines.ly b/input/regression/non-centered-bar-lines.ly index f12fb98503..429fc41915 100644 --- a/input/regression/non-centered-bar-lines.ly +++ b/input/regression/non-centered-bar-lines.ly @@ -8,6 +8,5 @@ staves which are not centered around position@tie{}0. \override Staff.StaffSymbol #'line-positions = #'(1 3 5 7 9) c''1 \bar "||" c''1 \bar ":" - c''1 \bar ":|" c''1 \bar "|." } diff --git a/input/regression/staff-ledger-positions.ly b/input/regression/staff-ledger-positions.ly index 7cf8fb000d..67233d1060 100644 --- a/input/regression/staff-ledger-positions.ly +++ b/input/regression/staff-ledger-positions.ly @@ -13,5 +13,5 @@ later by setting the @code{ledger-extra} property." \override Staff.StaffSymbol #'line-positions = #'(-5 -2 -1 2 5 6) \override Staff.StaffSymbol #'ledger-positions = #'(-5 (-2 -1) 2) \override Staff.StaffSymbol #'ledger-extra = #1 - g,4 c e b' \bar ":|" c'' e g + g,4 c e b' c'' e g } diff --git a/input/regression/staff-line-positions.ly b/input/regression/staff-line-positions.ly index 1e3ee81be1..0b801a8744 100644 --- a/input/regression/staff-line-positions.ly +++ b/input/regression/staff-line-positions.ly @@ -11,5 +11,7 @@ \new Staff \relative c' { \override Staff.StaffSymbol #'line-positions = #'(-7 -2 0 3 9) - g c f b \bar ":|" e a + g c f b e a } + + diff --git a/input/regression/zero-staff-space.ly b/input/regression/zero-staff-space.ly index fc1c162c06..62e2e16bc9 100644 --- a/input/regression/zero-staff-space.ly +++ b/input/regression/zero-staff-space.ly @@ -10,6 +10,6 @@ Setting staff-space to 0 does not cause a segmentation fault. \override StaffSymbol #'staff-space = #0 } { \relative c' { - c1 \bar ":|" + c1 } } diff --git a/lily/bar-line.cc b/lily/bar-line.cc index 7da72ba321..0cd0339235 100644 --- a/lily/bar-line.cc +++ b/lily/bar-line.cc @@ -25,12 +25,8 @@ #include "lookup.hh" #include "output-def.hh" #include "paper-column.hh" -#include "staff-symbol.hh" #include "staff-symbol-referencer.hh" -#include <set> - - MAKE_SCHEME_CALLBACK (Bar_line, calc_bar_extent, 1) SCM Bar_line::calc_bar_extent (SCM smob) @@ -116,62 +112,15 @@ Bar_line::compound_barline (Grob *me, string str, Interval const &extent, Stencil thick = simple_barline (me, fatline, extent, rounded); Stencil dot = Font_interface::get_default_font (me)->find_by_name ("dots.dot"); - /* - the two dots of the repeat sign should be centred at the middle of - the staff and both should avoid staff lines - */ - Real centre = 0.0, dist = 1.0; - if (staff_space) - { - if (Grob *staff = Staff_symbol_referencer::get_staff_symbol (me)) - { - std::vector<Real> linepos = Staff_symbol::line_positions (staff); - if (!linepos.empty ()) - { - centre = Staff_symbol::line_span (staff).center (); - - /* - fold the staff into two at centre and find the first gap - big enough to hold a dot and some space below and above - */ - std::set<Real> half_staff; - half_staff.insert (0.0); - for (std::vector<Real>::const_iterator - i = linepos.begin (), e = linepos.end (); - i != e; - ++i) - half_staff.insert (fabs (*i - centre)); - - /* - gap is measured like line-positions; - 1.0 for dot diameter, twice the staffline width for the - gap above and below and one more staffline width for the - two half stafflines - */ - Real const gap_to_find = (1.0 + 3 * staffline) / staff_space; - dist = *half_staff.rbegin () * 2 + gap_to_find; - for (std::set<Real>::const_iterator - i0 = half_staff.begin (), i1 = i0, e = half_staff.end (); - ++i1 != e; - i0 = i1) - if (*i1 - *i0 > gap_to_find) - { - dist = *i0 + *i1; - break; - } - } - } - } - else - dist += 3 * staffline; - - if (staff_space == 0.0) - staff_space = 1.0; - + int lines = Staff_symbol_referencer::line_count (me); + Real dist + = ((lines & 1 || lines == 0) + ? 1 + : (staff_space < 2 ? 2 : .5)) * staff_space; Stencil colon (dot); - colon.translate_axis (dist * staff_space / 2, Y_AXIS); + colon.translate_axis (dist, Y_AXIS); colon.add_stencil (dot); - colon.translate_axis ((centre - dist / 2) * staff_space / 2, Y_AXIS); + colon.translate_axis (-dist / 2, Y_AXIS); Real const h = extent.length (); Stencil m; diff --git a/lily/beam.cc b/lily/beam.cc index d73169a917..49253434c0 100644 --- a/lily/beam.cc +++ b/lily/beam.cc @@ -675,7 +675,7 @@ Beam::print (SCM grob) // we need two translations: the normal one and // the one of the lowest segment - size_t idx[] = {i, extreme}; + int idx[] = {i, extreme}; Real translations[2]; for (int j = 0; j < 2; j++) @@ -1274,16 +1274,16 @@ Beam::rest_collision_callback (SCM smob, SCM prev_offset) Real shift = d * min (d * (beam_y - d * minimum_distance - rest_dim), 0.0); shift /= staff_space; + Real rad = Staff_symbol_referencer::line_count (rest) * staff_space / 2; /* Always move discretely by half spaces */ shift = ceil (fabs (shift * 2.0)) / 2.0 * sign (shift); - Interval staff_span = Staff_symbol_referencer::staff_span (rest); - staff_span *= staff_space / 2; - /* Inside staff, move by whole spaces*/ - if (staff_span.contains (rest_extent[d] + staff_space * shift) - || staff_span.contains (rest_extent[-d] + staff_space * shift)) + if ((rest_extent[d] + staff_space * shift) * d + < rad + || (rest_extent[-d] + staff_space * shift) * -d + < rad) shift = ceil (fabs (shift)) * sign (shift); return scm_from_double (offset + staff_space * shift); diff --git a/lily/breathing-sign.cc b/lily/breathing-sign.cc index 02b29858af..a3d9637bef 100644 --- a/lily/breathing-sign.cc +++ b/lily/breathing-sign.cc @@ -81,19 +81,13 @@ Breathing_sign::divisio_maior (SCM smob) * more than half the size of the staff, such that the endings of * the line are in the middle of a staff space. */ - Interval ydim = Staff_symbol_referencer::staff_span (me); - ydim.widen (-0.25 * ydim.delta ()); - for (UP_and_DOWN (i)) - { - int const int_dim = (int) ydim[i]; - if (int_dim == ydim[i] - && Staff_symbol_referencer::on_staff_line (me, int_dim)) - ydim[i] += i; - } - - ydim *= 1.0 / Staff_symbol_referencer::staff_space (me); + int lines = Staff_symbol_referencer::line_count (me); + int height = lines / 2; // little more than half of staff size + if ((lines & 1) != (height & 1)) + height++; // ensure endings are centered in staff space Interval xdim (0, thickness); + Interval ydim (-0.5 * height, +0.5 * height); Box b (xdim, ydim); Stencil out = Lookup::round_filled_box (b, blotdiameter); return out.smobbed_copy (); @@ -108,15 +102,20 @@ Breathing_sign::divisio_maxima (SCM smob) { Grob *me = unsmob_grob (smob); Real staff_space = Staff_symbol_referencer::staff_space (me); + Real staff_size; Real thickness = Staff_symbol_referencer::line_thickness (me); thickness *= robust_scm2double (me->get_property ("thickness"), 1.0); + if (Staff_symbol_referencer::get_staff_symbol (me)) + staff_size = (Staff_symbol_referencer::line_count (me) - 1) * staff_space; + else + staff_size = 0.0; + Real blotdiameter = me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter")); // like a "|" type bar Interval xdim (0, thickness); - Interval ydim = Staff_symbol_referencer::staff_span (me); - ydim *= staff_space / 2; + Interval ydim (-0.5 * staff_size, +0.5 * staff_size); Box b (xdim, ydim); Stencil out = Lookup::round_filled_box (b, blotdiameter); return out.smobbed_copy (); @@ -131,15 +130,20 @@ Breathing_sign::finalis (SCM smob) { Grob *me = unsmob_grob (smob); Real staff_space = Staff_symbol_referencer::staff_space (me); + Real staff_size; Real thickness = Staff_symbol_referencer::line_thickness (me); thickness *= robust_scm2double (me->get_property ("thickness"), 1.0); + if (Staff_symbol_referencer::get_staff_symbol (me)) + staff_size = (Staff_symbol_referencer::line_count (me) - 1) * staff_space; + else + staff_size = 0.0; + Real blotdiameter = me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter")); // like a "||" type bar Interval xdim (0, thickness); - Interval ydim = Staff_symbol_referencer::staff_span (me); - ydim *= staff_space / 2; + Interval ydim (-0.5 * staff_size, +0.5 * staff_size); Box b (xdim, ydim); Stencil line1 = Lookup::round_filled_box (b, blotdiameter); Stencil line2 (line1); diff --git a/lily/custos.cc b/lily/custos.cc index 1366202f72..00da1d53d1 100644 --- a/lily/custos.cc +++ b/lily/custos.cc @@ -62,6 +62,7 @@ Custos::print (SCM smob) = to_dir (me->get_property ("neutral-direction")); int pos = Staff_symbol_referencer::get_rounded_position (me); + int sz = Staff_symbol_referencer::line_count (me) - 1; string font_char = "custodes." + style + "."; if (pos < neutral_pos) @@ -76,7 +77,7 @@ Custos::print (SCM smob) font_char += "d"; if (adjust) - font_char += Staff_symbol_referencer::on_line (me, pos) ? "1" : "0"; + font_char += (((pos ^ sz) & 0x1) == 0) ? "1" : "0"; else font_char += "2"; diff --git a/lily/rest-collision.cc b/lily/rest-collision.cc index 0e7a01c5a7..8ba647e201 100644 --- a/lily/rest-collision.cc +++ b/lily/rest-collision.cc @@ -250,14 +250,19 @@ Rest_collision::calc_positioning_done (SCM smob) Real y = dir * max (0.0, -dir * restdim[-dir] + dir * notedim[dir] + minimum_dist); + int stafflines = Staff_symbol_referencer::line_count (me); + if (!stafflines) + { + programming_error ("no staff line count"); + stafflines = 5; + } + // move discretely by half spaces. int discrete_y = dir * int (ceil (y / (0.5 * dir * staff_space))); - Interval staff_span = Staff_symbol_referencer::staff_span (rest); - staff_span.widen (1); // move by whole spaces inside the staff. - if (staff_span.contains - (Staff_symbol_referencer::get_position (rest) + discrete_y)) + if (fabs (Staff_symbol_referencer::get_position (rest) + + discrete_y) < stafflines + 1) { discrete_y = dir * int (ceil (dir * discrete_y / 2.0) * 2.0); } diff --git a/lily/rest.cc b/lily/rest.cc index 8e45405de2..9057e45af1 100644 --- a/lily/rest.cc +++ b/lily/rest.cc @@ -37,6 +37,7 @@ Rest::y_offset_callback (SCM smob) { Grob *me = unsmob_grob (smob); int duration_log = scm_to_int (me->get_property ("duration-log")); + int line_count = Staff_symbol_referencer::line_count (me); Real ss = Staff_symbol_referencer::staff_space (me); bool position_override = scm_is_number (me->get_property ("staff-position")); @@ -68,7 +69,7 @@ Rest::y_offset_callback (SCM smob) make a semibreve rest hang from the next line, except for a single line staff */ - if (duration_log == 0 && Staff_symbol_referencer::line_count (me) > 1) + if (duration_log == 0 && line_count > 1) pos += 2; /* diff --git a/lily/slur-scoring.cc b/lily/slur-scoring.cc index e1025fa545..d8b713265c 100644 --- a/lily/slur-scoring.cc +++ b/lily/slur-scoring.cc @@ -595,7 +595,8 @@ Slur_score_state::move_away_from_staffline (Real y, * 2.0 / staff_space_; if (fabs (pos - my_round (pos)) < 0.2 - && Staff_symbol_referencer::on_staff_line (on_staff, (int) rint (pos))) + && Staff_symbol_referencer::on_line (on_staff, (int) rint (pos)) + && Staff_symbol_referencer::line_count (on_staff) - 1 >= rint (pos)) y += 1.5 * staff_space_ * dir_ / 10; return y; diff --git a/lily/time-signature.cc b/lily/time-signature.cc index 082b62a93c..ad553e4229 100644 --- a/lily/time-signature.cc +++ b/lily/time-signature.cc @@ -23,7 +23,6 @@ #include "font-interface.hh" #include "international.hh" #include "output-def.hh" -#include "staff-symbol.hh" #include "staff-symbol-referencer.hh" #include "text-interface.hh" #include "warn.hh" @@ -58,35 +57,8 @@ Time_signature::print (SCM smob) else m = numbered_time_signature (me, n, d); - /* - position the signature centred on the staff line - nearest to the middle of the staff - */ - if (Grob *staff = Staff_symbol_referencer::get_staff_symbol (me)) - { - std::vector<Real> const linepos = Staff_symbol::line_positions (staff); - if (!linepos.empty ()) - { - Interval const span = Staff_symbol::line_span (staff); - Real const mid = span.center (); - Real pos = linepos.front (); - Real dist = fabs (pos - mid); - for (std::vector<Real>::const_iterator - i = linepos.begin (), e = linepos.end (); - ++i != e;) - { - double const d = fabs (*i - mid); - if (d < dist) - { - pos = *i; - dist = d; - } - } - - m.translate_axis - (pos * Staff_symbol_referencer::staff_space (me) / 2, Y_AXIS); - } - } + if (Staff_symbol_referencer::line_count (me) % 2 == 0) + m.translate_axis (Staff_symbol_referencer::staff_space (me) / 2, Y_AXIS); return m.smobbed_copy (); } diff --git a/lily/vaticana-ligature.cc b/lily/vaticana-ligature.cc index deb0218bd0..7420db3ec1 100644 --- a/lily/vaticana-ligature.cc +++ b/lily/vaticana-ligature.cc @@ -37,7 +37,8 @@ vaticana_brew_cauda (Grob *me, Real blotdiameter) { bool on_staffline = Staff_symbol_referencer::on_line (me, pos); - bool above_staff = pos > Staff_symbol_referencer::staff_span (me)[UP]; + int interspaces = Staff_symbol_referencer::line_count (me) - 1; + bool above_staff = pos > interspaces; if (delta_pitch > -1) { |