]> git.donarmstrong.com Git - lilypond.git/commitdiff
Ends of barlines are hidden in staff lines.
authorJanek Warchoł <lemniskata.bernoulliego@gmail.com>
Sun, 13 Mar 2011 10:33:25 +0000 (11:33 +0100)
committerJanek Warchol <lemniskata.bernoullego@gmail.com>
Mon, 5 Sep 2011 19:52:54 +0000 (21:52 +0200)
Barlines are made a little shorter, so that the end of the barline doesn't touch
the outer edge of staff line - it ends in the middle of staff line now.
This prevets artifacts in pdf viewing and printing.

lily/bar-line.cc

index a56c5f6408bfb684d054958bcf01db4ada238a7b..e256e8fe55f16ceb8626bc134b08c0ef3c5f8e43 100644 (file)
@@ -34,8 +34,22 @@ Bar_line::calc_bar_extent (SCM smob)
   Interval result;
   Grob *me = unsmob_grob (smob);
   if (Grob *staff = Staff_symbol_referencer::get_staff_symbol (me))
-    result = staff->extent (staff, Y_AXIS);
-
+    {
+      result = staff->extent (staff, Y_AXIS);
+
+      /* Due to rounding problems, bar lines extending to the outermost edges
+         of the staff lines appear wrongly in on-screen display
+         (and, to a lesser extent, in print) - they stick out a pixel.
+         The solution is to extend bar lines only to the middle
+         of the staff line - unless they have different colors,
+         when it would be undesirable.
+      */
+      SCM bar_line_color = me->get_property ("color");
+      SCM staff_color = staff->get_property ("color");
+      if (bar_line_color == staff_color)
+       result *= (1 - 0.5 * (Staff_symbol_referencer::line_thickness (me) /
+                             Staff_symbol_referencer::staff_radius (me)));
+    }
   return ly_interval2scm (result);
 }