]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/bar-line.cc
Merge master into nested-bookparts
[lilypond.git] / lily / bar-line.cc
index e51aad7196851b3ea4b4622fe971a4385d53434f..d0b18fd1c55345adf59f2d46f99321a5d9390af3 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);
@@ -130,11 +145,33 @@ Bar_line::compound_barline (Grob *me, string str, Real h,
       m.add_at_edge (X_AXIS, RIGHT, thick, kern);
       m.add_at_edge (X_AXIS, RIGHT, colon, kern);
     }
+  else if (str == ":|.|:")
+    {
+      m.add_at_edge (X_AXIS, LEFT, thick, 0);
+      m.add_at_edge (X_AXIS, LEFT, thin, kern);
+      m.add_at_edge (X_AXIS, LEFT, colon, kern);
+      m.add_at_edge (X_AXIS, RIGHT, thin, kern);
+      m.add_at_edge (X_AXIS, RIGHT, colon, kern);
+
+    }
+  else if (str == ":|.:")
+    {
+      m.add_at_edge (X_AXIS, LEFT, thick, 0);
+      m.add_at_edge (X_AXIS, LEFT, thin, kern);
+      m.add_at_edge (X_AXIS, LEFT, colon, kern);
+      m.add_at_edge (X_AXIS, RIGHT, colon, kern);
+    }
   else if (str == ".|.")
     {
       m.add_at_edge (X_AXIS, LEFT, thick, thinkern);
       m.add_at_edge (X_AXIS, RIGHT, thick, kern);
     }
+  else if (str == "|.|")
+    {
+      m.add_at_edge (X_AXIS, LEFT, thick, 0);
+      m.add_at_edge (X_AXIS, LEFT, thin, kern);
+      m.add_at_edge (X_AXIS, RIGHT, thin, kern);
+    }
   else if (str == "||")
     {
       /*
@@ -165,6 +202,8 @@ Bar_line::compound_barline (Grob *me, string str, Real h,
     {
       m = dot;
     }
+
+  m.translate_axis (center, Y_AXIS);
   return m;
 }