]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/system-start-delimiter.cc
* THANKS: add Don.
[lilypond.git] / lily / system-start-delimiter.cc
index d0b93a372d28b48420978f14c1cdce439acd348d..c33180540dbf3e849eb8a21c2bd9ff282a4f3bf0 100644 (file)
@@ -7,19 +7,17 @@
 */
 
 #include "system-start-delimiter.hh"
-
-
-#include "spanner.hh"
+#include "text-interface.hh" 
+#include "all-font-metrics.hh"
 #include "axis-group-interface.hh"
-#include "output-def.hh"
 #include "font-interface.hh"
-#include "all-font-metrics.hh"
-#include "staff-symbol-referencer.hh"
-#include "lookup.hh"
 #include "item.hh"
 #include "line-interface.hh"
-
+#include "lookup.hh"
+#include "output-def.hh"
 #include "pointer-group-interface.hh"
+#include "spanner.hh"
+#include "staff-symbol-referencer.hh"
 
 Stencil
 System_start_delimiter::staff_bracket (Grob *me, Real height)
@@ -57,7 +55,7 @@ Stencil
 System_start_delimiter::line_bracket (Grob *me, Real height)
 {
   Real thick
-    = me->layout ()->get_dimension (ly_symbol2scm ("linethickness"))
+    = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness"))
     * robust_scm2double (me->get_property ("thickness"), 1);
   Real w = 0.8;
   
@@ -77,10 +75,38 @@ System_start_delimiter::line_bracket (Grob *me, Real height)
   return vline;
 }
 
+Stencil
+System_start_delimiter::text (Grob *me_grob, Real h)
+{
+  (void) h;
+  
+  Spanner *me = dynamic_cast<Spanner*> (me_grob);
+  SCM t = me->get_property ("text");
+  if (me->get_break_index () == 0)
+    t = me->get_property ("long-text");
+          
+  
+  SCM chain = Font_interface::text_font_alist_chain (me);
+
+  SCM scm_stencil = Text_interface::is_markup (t)
+    ? Text_interface::interpret_markup (me->layout ()->self_scm (), chain, t)
+    : SCM_EOL;
+
+  
+  if (Stencil *p = unsmob_stencil (scm_stencil))
+    {
+      SCM align_y  = me_grob->get_property ("self-alignment-Y");
+      if (scm_is_number (align_y))
+       p->align_to (Y_AXIS, robust_scm2double (align_y, 0.0));
+      return *p;
+    }
+  return Stencil();
+}
+
 Stencil
 System_start_delimiter::simple_bar (Grob *me, Real h)
 {
-  Real lt = me->layout ()->get_dimension (ly_symbol2scm ("linethickness"));
+  Real lt = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness"));
   Real w = lt * robust_scm2double (me->get_property ("thickness"), 1);
   return Lookup::round_filled_box (Box (Interval (0, w), Interval (-h / 2, h / 2)),
                                   lt);
@@ -96,7 +122,7 @@ System_start_delimiter::print (SCM smob)
 
   Interval ext;
   int non_empty_count = 0;
-  for (int i = elts.size (); i--;)
+  for (vsize i = elts.size (); i--;)
     {
       Spanner *sp = dynamic_cast<Spanner *> (elts[i]);
 
@@ -132,6 +158,8 @@ System_start_delimiter::print (SCM smob)
     m = simple_bar (me, len);
   else if (glyph_sym == ly_symbol2scm ("line-bracket"))
     m = line_bracket (me, len);
+  else if (glyph_sym == ly_symbol2scm ("text"))
+    m = text (me, len);
 
   m.translate_axis (ext.center (), Y_AXIS);
   return m.smobbed_copy ();
@@ -151,8 +179,9 @@ System_start_delimiter::staff_brace (Grob *me, Real y)
   SCM alist = scm_list_n (fam, SCM_UNDEFINED);
   fm = select_font (me->layout (), scm_list_n (alist, SCM_UNDEFINED));
 
-  int lo = 0;
-  int hi = max (fm->count () - 1, 2);
+  int
+    lo = 0;
+  int hi = max ((int) fm->count () - 1, 2);
 
   /* do a binary search for each Y, not very efficient, but passable?  */
   Box b;
@@ -182,5 +211,8 @@ ADD_INTERFACE (System_start_delimiter, "system-start-delimiter-interface",
               /* properties */
               "collapse-height "
               "style "
+              "text "
+              "long-text "
+              "self-alignment-Y "
               "thickness "
               );