summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith OHara <k-ohara5a5a@oco.net>2012-07-14 10:19:41 -0700
committerKeith OHara <k-ohara5a5a@oco.net>2012-07-14 10:19:41 -0700
commitd05afb4c0bf29cbd6a98691c9c62afa1604fa4b2 (patch)
tree41e6825494576359fdec279e5772b1a268080000
parenta2fcb88e9f4ffb1097d934f7ebb5dca0551687da (diff)
Revert "line_count fixes"
This reverts commit 2a872121379fffe7b1cd5d23048b7ea04b4d1f68.
-rw-r--r--input/regression/ledger-lines-varying-staves.ly6
-rw-r--r--input/regression/non-centered-bar-lines.ly1
-rw-r--r--input/regression/staff-ledger-positions.ly2
-rw-r--r--input/regression/staff-line-positions.ly4
-rw-r--r--input/regression/zero-staff-space.ly2
-rw-r--r--lily/bar-line.cc65
-rw-r--r--lily/beam.cc12
-rw-r--r--lily/breathing-sign.cc34
-rw-r--r--lily/custos.cc3
-rw-r--r--lily/rest-collision.cc13
-rw-r--r--lily/rest.cc3
-rw-r--r--lily/slur-scoring.cc3
-rw-r--r--lily/time-signature.cc32
-rw-r--r--lily/vaticana-ligature.cc3
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)
{