]> git.donarmstrong.com Git - lilypond.git/commitdiff
Draw bar lines correctly when staff is not centered at zero.
authorKevin Dalley <kevin@kelphead.org>
Sun, 18 Mar 2007 16:30:57 +0000 (09:30 -0700)
committerNeil Puttock <n.puttock@gmail.com>
Wed, 9 Jul 2008 00:12:51 +0000 (01:12 +0100)
Signed-off-by: Neil Puttock <n.puttock@gmail.com>
input/regression/non-centered-bar-lines.ly [new file with mode: 0644]
lily/bar-line.cc

diff --git a/input/regression/non-centered-bar-lines.ly b/input/regression/non-centered-bar-lines.ly
new file mode 100644 (file)
index 0000000..3c0738c
--- /dev/null
@@ -0,0 +1,12 @@
+\version "2.11.52"
+\header {
+  texidoc = "Bar lines are positioned correctly when using custom
+staves which are not centered around position@tie{}0.
+"
+}
+\new Staff {
+  \override Staff.StaffSymbol #'line-positions = #'(1 3 5 7 9)
+  c''1 \bar "||"
+  c''1 \bar ":"
+  c''1 \bar "|."
+}
index e51aad7196851b3ea4b4622fe971a4385d53434f..4d2cbf9b5968b46b80f3f9c7b557379a09fde3d2 100644 (file)
@@ -94,13 +94,28 @@ Bar_line::compound_barline (Grob *me, string str, Real h,
   colon.translate_axis (-dist / 2, Y_AXIS);
 
   Stencil m;
+  Grob *staff = Staff_symbol_referencer::get_staff_symbol (me);
+  Real center = 0;
+  if (staff)
+    {
+      Interval staff_extent = staff->extent (staff, Y_AXIS);
+      center = staff_extent.center ();
+    }
+
   if (str == "||:")
     str = "|:";
 
   if (str == "")
-    return Lookup::blank (Box (Interval (0, 0), Interval (-h / 2, h / 2)));
+    {
+      Stencil empty =  Lookup::blank (Box (Interval (0, 0), Interval (-h / 2, h / 2)));
+      empty.translate_axis (center, Y_AXIS);
+      return empty;
+    }
   else if (str == "|")
-    return thin;
+    {
+      thin.translate_axis (center, Y_AXIS);
+      return thin;
+    }
   else if (str == "|." || (h == 0 && str == ":|"))
     {
       m.add_at_edge (X_AXIS, LEFT, thick, 0);
@@ -165,6 +180,8 @@ Bar_line::compound_barline (Grob *me, string str, Real h,
     {
       m = dot;
     }
+
+  m.translate_axis (center, Y_AXIS);
   return m;
 }