/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#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 ();
};
/*
SCM
Ottava_bracket::print (SCM smob)
{
- Spanner *me = dynamic_cast<Spanner *> (unsmob_grob (smob));
+ Spanner *me = unsmob<Spanner> (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<bool> 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<Note_column> (b))
{
extract_grob_set (b, "note-heads", heads);
common = common_refpoint_of_array (heads, common, X_AXIS);
}
}
}
- 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<Stencil> (Text_interface::interpret_markup (layout->self_scm (),
properties, markup));
Drul_array<Real> shorten = robust_scm2interval (me->get_property ("shorten-pair"),
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<Note_column> (b))
{
extract_grob_set (b, "note-heads", heads);
for (vsize i = 0; i < heads.size (); i++)
else
span_points[d] = ext[d];
+
+ span_points[d] -= d * shorten[d];
}
- while (flip (&d) != LEFT);
/*
0.3 is ~ italic correction.
Drul_array<Real> 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<Real> (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),