/*
+
text-spanner.cc -- implement Text_spanner
source file of the GNU LilyPond music typesetter
- (c) 2000 Jan Nieuwenhuizen <janneke@gnu.org>
+ (c) 2000--2001 Jan Nieuwenhuizen <janneke@gnu.org>
*/
#include "molecule.hh"
/* Ugh, must be same as Hairpin::brew_molecule. */
-#if 0
- Real padding = gh_scm2double (me->get_grob_property ("padding"));
-#else
- /* something seems seriously broken, somewhere, when used by
- text-spanner-engraver. For dynamic-engraver, all seems fine */
- Real padding = 0;
- if (me->get_grob_property ("padding") != SCM_EOL
- && gh_number_p (me->get_grob_property ("padding")))
- padding = gh_scm2double (me->get_grob_property ("padding"));
-#endif
+ Real padding = gh_scm2double (me->get_grob_property ("if-text-padding"));
Real broken_left = spanner->get_broken_left_end_align ();
Real width = spanner->spanner_length ();
width -= broken_left;
Direction d = LEFT;
do
{
+ extra_off [d]=0;
Item *b = spanner->get_bound (d);
broken[d] = b->break_status_dir () != CENTER;
- /* This should be switchable, only for (de)cresc. not for generic
- text spanners */
- if (padding && !broken [d])
+ if (!broken [d])
{
Interval e = b->extent (b, X_AXIS);
Real r = 0.0;
if (!e.empty_b ())
r = e[-d] + padding;
- width += d * r;
- extra_off[d] = r;
+ /* Text spanners such as ottava, should span from outer limits of
+ noteheads, iso (de)cresc. spanners that span the inner space */
+ if (me->get_grob_property ("outer") != SCM_EOL)
+ // r *= -1; // huh?
+ {
+ width -= d * r;
+ }
+ else
+ {
+ width += d * r;
+ extra_off[d] = r;
+ }
}
}
while (flip (&d) != LEFT);
// FIXME: ecs tells us -- only for (de)cresc. spanners
- if (padding)
- width += gh_scm2double (me->get_grob_property ("width-correct"));
+ width += gh_scm2double (me->get_grob_property ("width-correct"));
/* /Ugh */
SCM properties = Font_interface::font_alist_chain (me);
-
+
SCM edge_text = me->get_grob_property ("edge-text");
Drul_array<Molecule> edge;
if (gh_pair_p (edge_text))
Direction d = LEFT;
do
{
- SCM text = index_cell (edge_text, d);
- edge[d] = Text_item::text2molecule (me, text, properties);
- if (!edge[d].empty_b ())
- edge[d].align_to (Y_AXIS, CENTER);
+ /* Don't repeat edge text for broken end */
+ if (!broken[d])
+ {
+ SCM text = index_cell (edge_text, d);
+ edge[d] = Text_item::text2molecule (me, text, properties);
+ if (!edge[d].empty_b ())
+ edge[d].align_to (Y_AXIS, CENTER);
+ }
}
while (flip (&d) != LEFT);
}