]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/text-spanner.cc
patch::: 1.3.132.jcn1
[lilypond.git] / lily / text-spanner.cc
index 20d0dd17588f04759ca18a29d82eee452539691d..ba873c50a9d638b5fbd782cc5cce2967033c3831 100644 (file)
@@ -1,9 +1,10 @@
 /*
+
   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"
@@ -37,16 +38,7 @@ Text_spanner::brew_molecule (SCM smob)
 
 
   /* 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;
@@ -56,32 +48,40 @@ Text_spanner::brew_molecule (SCM smob)
   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))
@@ -89,10 +89,14 @@ Text_spanner::brew_molecule (SCM smob)
       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);
     }