X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fvolta-bracket.cc;h=494cbfb1c336ec74d2d62e56abbe92bee02f5402;hb=5b4b0d6e9a197e8f9eb085b7c2ad78b8be3e5cfc;hp=561f0830f8ac02dc505725d000eb45e48630de9f;hpb=64313890b232c731d432e5b096f30bffc3f3756d;p=lilypond.git diff --git a/lily/volta-bracket.cc b/lily/volta-bracket.cc index 561f0830f8..494cbfb1c3 100644 --- a/lily/volta-bracket.cc +++ b/lily/volta-bracket.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1997--2006 Jan Nieuwenhuizen + (c) 1997--2008 Jan Nieuwenhuizen */ #include @@ -63,6 +63,10 @@ Volta_bracket_interface::print (SCM smob) */ } + modify_edge_height (me); + if (!me->is_live ()) + return SCM_EOL; + Drul_array edge_height = robust_scm2interval (me->get_property ("edge-height"), Interval (1.0, 1.0)); Drul_array flare = robust_scm2interval (me->get_property ("bracket-flare"), @@ -70,6 +74,8 @@ Volta_bracket_interface::print (SCM smob) Drul_array shorten = robust_scm2interval (me->get_property ("shorten-pair"), Interval (0, 0)); + + scale_drul (&edge_height, - Real (get_grob_direction (me))); Interval empty; @@ -93,7 +99,7 @@ Volta_bracket_interface::print (SCM smob) num.align_to (Y_AXIS, UP); num.translate_axis (-0.5, Y_AXIS); total.add_at_edge (X_AXIS, LEFT, num, - num.extent (X_AXIS).length () - - 1.0, 0); + - 1.0); } total.translate_axis (left, X_AXIS); @@ -101,25 +107,21 @@ Volta_bracket_interface::print (SCM smob) } -MAKE_SCHEME_CALLBACK(Volta_bracket_interface,after_line_breaking, 1); -SCM -Volta_bracket_interface::after_line_breaking (SCM smob) +void +Volta_bracket_interface::modify_edge_height (Spanner *me) { - Spanner *me = unsmob_spanner (smob); Spanner *orig_span = dynamic_cast (me->original ()); bool broken_first_bracket = orig_span && (orig_span->broken_intos_[0] == (Spanner *)me); - bool broken_last_bracket = orig_span && (orig_span->broken_intos_.back () == (Spanner *)me); - bool no_vertical_start = orig_span && !broken_first_bracket; bool no_vertical_end = orig_span && !broken_last_bracket; extract_grob_set (me, "bars", bars); Grob *endbar = bars.size () ? bars.back () : 0; - SCM glyph = endbar ? endbar->get_property ("glyph") : SCM_EOL; + SCM glyph = endbar ? endbar->get_property ("glyph-name") : SCM_EOL; - std::string str; + string str; if (scm_is_string (glyph)) str = ly_scm2string (glyph); else @@ -130,6 +132,8 @@ Volta_bracket_interface::after_line_breaking (SCM smob) && str != "|:" && str != "|." && str != ":|:" + && str != ":|.|:" + && str != ":|.:" && str != ".|"); if (no_vertical_end || no_vertical_start) @@ -144,29 +148,25 @@ Volta_bracket_interface::after_line_breaking (SCM smob) me->set_property ("edge-height", ly_interval2scm (edge_height)); } - - return SCM_UNSPECIFIED; + + if (broken_last_bracket && no_vertical_end && no_vertical_start + && !broken_first_bracket) + me->suicide (); } void Volta_bracket_interface::add_bar (Grob *me, Item *b) { Pointer_group_interface::add_grob (me, ly_symbol2scm ("bars"), b); - Side_position_interface::add_support (me, b); add_bound_item (dynamic_cast (me), b); } -void -Volta_bracket_interface::add_column (Grob *me, Grob *c) -{ - Side_position_interface::add_support (me, c); -} - -ADD_INTERFACE (Volta_bracket_interface, "volta-bracket-interface", - "Volta bracket with number", +ADD_INTERFACE (Volta_bracket_interface, + "Volta bracket with number.", /* properties */ "bars " "thickness " - "height"); + "height " + );