X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fvolta-bracket.cc;h=8a79e07159930e33649a0d9cdd26627e834bbf53;hb=b94ad43c250b87cf4ad352cc47e2f81692904ad3;hp=03137d1b12cc6f09af2fcb05ceb51cfd8266e710;hpb=31568c504806f35aac420a394c9eab07abd9faa7;p=lilypond.git diff --git a/lily/volta-bracket.cc b/lily/volta-bracket.cc index 03137d1b12..8a79e07159 100644 --- a/lily/volta-bracket.cc +++ b/lily/volta-bracket.cc @@ -1,9 +1,20 @@ /* - volta-bracket.cc -- implement Volta_bracket_interface + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2009 Jan Nieuwenhuizen - (c) 1997--2006 Jan Nieuwenhuizen + LilyPond is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + LilyPond is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with LilyPond. If not, see . */ #include @@ -63,6 +74,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 +85,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 +110,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,23 +118,19 @@ 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; string str; if (scm_is_string (glyph)) @@ -130,6 +143,8 @@ Volta_bracket_interface::after_line_breaking (SCM smob) && str != "|:" && str != "|." && str != ":|:" + && str != ":|.|:" + && str != ":|.:" && str != ".|"); if (no_vertical_end || no_vertical_start) @@ -144,29 +159,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 " + );