]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/dynamic-text-spanner.cc
Merge with master
[lilypond.git] / lily / dynamic-text-spanner.cc
index e40d3cd686f96dfd6104f29680461465d3dbb976..e6a9f336a1870cfb6c209dcc6ee014729b4ff354 100644 (file)
@@ -1,9 +1,9 @@
 /*
-  crescendo-text-spanner.cc -- implement Text_spanner
+  dynamic-text-spanner.cc -- implement Text_spanner
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2005 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 
   Revised over good by Han-Wen.
 */
@@ -22,7 +22,7 @@ class Dynamic_text_spanner
 {
 public:
   DECLARE_SCHEME_CALLBACK (print, (SCM));
-  static bool has_interface (Grob *);
+  DECLARE_GROB_INTERFACE();
 };
 
 /*
@@ -51,8 +51,9 @@ Dynamic_text_spanner::print (SCM smob)
   Grob *me = unsmob_grob (smob);
   Spanner *spanner = dynamic_cast<Spanner *> (me);
 
-  Grob *common = spanner->get_bound (LEFT)->common_refpoint (spanner->get_bound (RIGHT), X_AXIS);
-  Output_def *layout = me->get_layout ();
+  Grob *common = spanner->get_bound (LEFT)
+    ->common_refpoint (spanner->get_bound (RIGHT), X_AXIS);
+  Output_def *layout = me->layout ();
 
   Interval span_points;
   Drul_array<bool> broken;
@@ -79,6 +80,23 @@ Dynamic_text_spanner::print (SCM smob)
              encl = -d;
            }
 
+         /*
+           ugh - a special case.
+
+           FIXME: this fixed an issue, but need to have this issue in
+           the issue tracker.
+
+           This fix doesn't quite work: it should only do this if the
+           right bound has a trill too.
+          */
+#if 0
+         if (d == RIGHT && me->get_property ("style") == ly_symbol2scm ("trill"))
+           {
+             pad = 2.0;
+             encl = LEFT;
+           }
+#endif
+         
          Interval ext = b->extent (common, X_AXIS);
          span_points[d] = -d * pad
            + robust_relative_extent (b, common, X_AXIS)
@@ -87,7 +105,6 @@ Dynamic_text_spanner::print (SCM smob)
     }
   while (flip (&d) != LEFT);
 
-  Stencil m;
   SCM properties = Font_interface::text_font_alist_chain (me);
   SCM edge_text = me->get_property ("edge-text");
   Drul_array<Stencil> edge;
@@ -110,6 +127,7 @@ Dynamic_text_spanner::print (SCM smob)
       while (flip (&d) != LEFT);
     }
 
+  Stencil m;
   do
     {
       Interval ext = edge[d].extent (X_AXIS);
@@ -123,7 +141,8 @@ Dynamic_text_spanner::print (SCM smob)
     }
   while (flip (&d) != LEFT);
 
-  if (!span_points.is_empty ())
+  if (!span_points.is_empty ()
+      && span_points.length () > robust_scm2double (me->get_property ("dash-period"), 0.0))
     {
       Stencil l = Line_spanner::line_stencil (me,
                                              Offset (span_points[LEFT], 0),
@@ -135,7 +154,12 @@ Dynamic_text_spanner::print (SCM smob)
 }
 
 ADD_INTERFACE (Dynamic_text_spanner,
-              "dynamic-text-spanner-interface",
               "A text spanner for crescendo texts",
-              "bound-padding dash-period dash-fraction edge-text style thickness");
+              
+              "bound-padding "
+              "dash-period "
+              "dash-fraction "
+              "edge-text "
+              "style "
+              "thickness");