X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fbar-line.cc;h=a0fa5587b410ef0fb22b2ea16c8f61e56249c1f3;hb=8608a7f5dfeb7d03f267e5f086251d90b632baba;hp=7a1e92de376f3b576b91443e48b7ed1fb88f89b0;hpb=be8e0ed9c4d9bf06fb150e1f0d3cfe1518dfc3a7;p=lilypond.git diff --git a/lily/bar-line.cc b/lily/bar-line.cc index 7a1e92de37..a0fa5587b4 100644 --- a/lily/bar-line.cc +++ b/lily/bar-line.cc @@ -16,6 +16,31 @@ #include "staff-symbol-referencer.hh" #include "line-interface.hh" +MAKE_SCHEME_CALLBACK (Bar_line, calc_bar_extent, 1) +SCM +Bar_line::calc_bar_extent (SCM smob) +{ + Grob *me = unsmob_grob (smob); + + SCM size = me->get_property ("bar-size"); + + if (!scm_is_number (size) + || !Staff_symbol_referencer::get_staff_symbol (me)) + return ly_interval2scm (Interval ()); + + Real h = scm_to_double (size); + return ly_interval2scm (Interval (-h/2, h/2)); +} + +Interval +Bar_line::bar_y_extent (Grob *me, Grob *refpoint) +{ + Interval iv = robust_scm2interval (me->get_property ("bar-extent"), Interval ()); + + iv.translate (me->relative_coordinate (refpoint, Y_AXIS)); + return iv; +} + MAKE_SCHEME_CALLBACK (Bar_line, print, 1); SCM Bar_line::print (SCM smob) @@ -250,6 +275,9 @@ Bar_line::calc_anchor (SCM smob) a repeat bar, in which case we put the anchor in the center of the barline without the dots. */ Interval ext = me->extent (me, X_AXIS); + if (ext.is_empty ()) + return scm_from_double (0); + Real anchor = ext.center (); Stencil dot = Font_interface::get_default_font (me)->find_by_name ("dots.dot"); @@ -289,6 +317,7 @@ ADD_INTERFACE (Bar_line, /* properties */ + "allow-span-bar " "gap " "kern " "thin-kern " @@ -297,6 +326,7 @@ ADD_INTERFACE (Bar_line, "glyph " "glyph-name " "bar-size " + "bar-extent " );