X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fbar-line.cc;h=bfd79363934f058a082eedcb8288f5a547156208;hb=9a20efea60f373c03a6be8903870050effc628e5;hp=a56c5f6408bfb684d054958bcf01db4ada238a7b;hpb=4bb29573149a0ffa1f881c5e38a0fe68e9e76b67;p=lilypond.git diff --git a/lily/bar-line.cc b/lily/bar-line.cc index a56c5f6408..bfd7936393 100644 --- a/lily/bar-line.cc +++ b/lily/bar-line.cc @@ -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"); + Real radius = Staff_symbol_referencer::staff_radius (me); + if (bar_line_color == staff_color && radius) + result *= (1 - 0.5 * (Staff_symbol_referencer::line_thickness (me) / radius)); + } return ly_interval2scm (result); } @@ -453,6 +467,7 @@ ADD_INTERFACE (Bar_line, "kern " "thin-kern " "hair-thickness " + "has-span-bar " "thick-thickness " "glyph " "glyph-name "