X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fottava-bracket.cc;h=cc33d8b152fd4a311a769d980184d2800bb1b37f;hb=97a0169312a260933246ab224e4f8b0969871dd5;hp=3aced1d37f26c614e304c9c1d55b67c25a89725e;hpb=4a401ca1c60f428daa242dbdd102fdb3f327ebfb;p=lilypond.git diff --git a/lily/ottava-bracket.cc b/lily/ottava-bracket.cc index 3aced1d37f..cc33d8b152 100644 --- a/lily/ottava-bracket.cc +++ b/lily/ottava-bracket.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2004--2011 Han-Wen Nienhuys + Copyright (C) 2004--2015 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -17,6 +17,7 @@ along with LilyPond. If not, see . */ +#include "axis-group-interface.hh" #include "text-interface.hh" #include "spanner.hh" #include "font-interface.hh" @@ -27,14 +28,13 @@ #include "staff-symbol-referencer.hh" #include "note-column.hh" #include "directional-element-interface.hh" -#include "tuplet-bracket.hh" +#include "bracket.hh" #include "rhythmic-head.hh" #include "pointer-group-interface.hh" struct Ottava_bracket { DECLARE_SCHEME_CALLBACK (print, (SCM)); - DECLARE_GROB_INTERFACE (); }; /* @@ -48,20 +48,19 @@ MAKE_SCHEME_CALLBACK (Ottava_bracket, print, 1); SCM Ottava_bracket::print (SCM smob) { - Spanner *me = dynamic_cast (unsmob_grob (smob)); + Spanner *me = unsmob (smob); Interval span_points; Grob *common = me->get_bound (LEFT)->common_refpoint (me->get_bound (RIGHT), X_AXIS); Output_def *layout = me->layout (); Drul_array broken; - Direction d = LEFT; - do + for (LEFT_and_RIGHT (d)) { Item *b = me->get_bound (d); broken[d] = (b->break_status_dir () != CENTER); - if (Note_column::has_interface (b)) + if (has_interface (b)) { extract_grob_set (b, "note-heads", heads); common = common_refpoint_of_array (heads, common, X_AXIS); @@ -74,13 +73,12 @@ Ottava_bracket::print (SCM smob) } } } - while (flip (&d) != LEFT); SCM properties = Font_interface::text_font_alist_chain (me); SCM markup = me->get_property ("text"); Stencil text; if (Text_interface::is_markup (markup)) - text = *unsmob_stencil (Text_interface::interpret_markup (layout->self_scm (), + text = *unsmob (Text_interface::interpret_markup (layout->self_scm (), properties, markup)); Drul_array shorten = robust_scm2interval (me->get_property ("shorten-pair"), @@ -90,12 +88,12 @@ Ottava_bracket::print (SCM smob) TODO: we should check if there are ledgers, and modify length of the spanner to that. */ - do + for (LEFT_and_RIGHT (d)) { Item *b = me->get_bound (d); Interval ext; - if (Note_column::has_interface (b)) + if (has_interface (b)) { extract_grob_set (b, "note-heads", heads); for (vsize i = 0; i < heads.size (); i++) @@ -114,14 +112,15 @@ Ottava_bracket::print (SCM smob) if (broken[d]) { - span_points[d] = b->extent (common, X_AXIS)[RIGHT]; + span_points[d] = Axis_group_interface::generic_bound_extent (b, common, X_AXIS)[RIGHT]; shorten[d] = 0.; } else span_points[d] = ext[d]; + + span_points[d] -= d * shorten[d]; } - while (flip (&d) != LEFT); /* 0.3 is ~ italic correction. @@ -143,36 +142,32 @@ Ottava_bracket::print (SCM smob) Drul_array flare = robust_scm2interval (me->get_property ("bracket-flare"), Interval (0, 0)); - do + for (LEFT_and_RIGHT (d)) { edge_height[d] *= -get_grob_direction (me); if (broken[d]) edge_height[d] = 0.0; } - while (flip (&d) != LEFT); Stencil b; Interval empty; + if (!bracket_span_points.is_empty () && bracket_span_points.length () > 0.001) - b = Tuplet_bracket::make_bracket (me, - Y_AXIS, Offset (bracket_span_points.length (), 0), - edge_height, - empty, - flare, shorten); + b = Bracket::make_bracket ( + me, Y_AXIS, Offset (bracket_span_points.length (), 0), + edge_height, empty, flare, Drul_array (0, 0)); /* - The vertical lines should not take space, for the following scenario: - - 8 -----+ - o | - | - | - - - Just a small amount, yes. In tight situations, it is even - possible to center the `8' directly below the note, dropping the - ottava line completely... - + * The vertical lines should not take space, for the following scenario: + * + * 8 -----+ + * o | + * | + * | + * + * Just a small amount, yes. In tight situations, it is even + * possible to center the `8' directly below the note, dropping the + * ottava line completely... */ b = Stencil (Box (b.extent (X_AXIS),