]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/arpeggio.cc
Issue 5168 Let arpeggio-bracket/slur depend on grob-property thickness
[lilypond.git] / lily / arpeggio.cc
index 54a9a4903a7a058347513e6552ff982b1a150104..3f0d32fe81149baf362cf25e2ebc6126a9f4d1a5 100644 (file)
@@ -60,7 +60,7 @@ MAKE_SCHEME_CALLBACK (Arpeggio, calc_cross_staff, 1);
 SCM
 Arpeggio::calc_cross_staff (SCM grob)
 {
-  Grob *me = Grob::unsmob (grob);
+  Grob *me = unsmob<Grob> (grob);
 
   extract_grob_set (me, "stems", stems);
   Grob *vag = 0;
@@ -83,7 +83,7 @@ MAKE_SCHEME_CALLBACK (Arpeggio, calc_positions, 1);
 SCM
 Arpeggio::calc_positions (SCM grob)
 {
-  Grob *me = Grob::unsmob (grob);
+  Grob *me = unsmob<Grob> (grob);
   Grob *common = get_common_y (me);
 
   /*
@@ -116,7 +116,7 @@ MAKE_SCHEME_CALLBACK (Arpeggio, print, 1);
 SCM
 Arpeggio::print (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Interval heads = robust_scm2interval (me->get_property ("positions"),
                                         Interval ())
                    * Staff_symbol_referencer::staff_space (me);
@@ -184,17 +184,19 @@ MAKE_SCHEME_CALLBACK (Arpeggio, brew_chord_bracket, 1);
 SCM
 Arpeggio::brew_chord_bracket (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Interval heads = robust_scm2interval (me->get_property ("positions"),
                                         Interval ())
                    * Staff_symbol_referencer::staff_space (me);
 
-  Real lt = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness"));
+  Real th
+    = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness"))
+      * robust_scm2double (me->get_property ("thickness"), 1);
   Real sp = 1.5 * Staff_symbol_referencer::staff_space (me);
   Real dy = heads.length () + sp;
   Real x = robust_scm2double (me->get_property ("protrusion"), 0.4);
 
-  Stencil mol (Lookup::bracket (Y_AXIS, Interval (0, dy), lt, x, lt));
+  Stencil mol (Lookup::bracket (Y_AXIS, Interval (0, dy), th, x, th));
   mol.translate_axis (heads[LEFT] - sp / 2.0, Y_AXIS);
   return mol.smobbed_copy ();
 }
@@ -203,21 +205,26 @@ MAKE_SCHEME_CALLBACK (Arpeggio, brew_chord_slur, 1);
 SCM
 Arpeggio::brew_chord_slur (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   SCM dash_definition = me->get_property ("dash-definition");
   Interval heads = robust_scm2interval (me->get_property ("positions"),
                                         Interval ())
                    * Staff_symbol_referencer::staff_space (me);
 
-  Real lt = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness"));
+  Real lt
+    = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness"))
+      * robust_scm2double (me->get_property ("line-thickness"), 1.0);
+  Real th
+    = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness"))
+      * robust_scm2double (me->get_property ("thickness"), 1.0);
   Real dy = heads.length ();
 
   Real height_limit = 1.5;
   Real ratio = .33;
   Bezier curve = slur_shape (dy, height_limit, ratio);
-  curve.rotate (M_PI / 2);
+  curve.rotate (90.0);
 
-  Stencil mol (Lookup::slur (curve, lt, lt, dash_definition));
+  Stencil mol (Lookup::slur (curve, th, lt, dash_definition));
   mol.translate_axis (heads[LEFT], Y_AXIS);
   return mol.smobbed_copy ();
 }
@@ -230,7 +237,7 @@ MAKE_SCHEME_CALLBACK (Arpeggio, width, 1);
 SCM
 Arpeggio::width (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   return ly_interval2scm (get_squiggle (me).extent (X_AXIS));
 }
 
@@ -238,7 +245,7 @@ MAKE_SCHEME_CALLBACK (Arpeggio, pure_height, 3);
 SCM
 Arpeggio::pure_height (SCM smob, SCM, SCM)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   if (to_boolean (me->get_property ("cross-staff")))
     return ly_interval2scm (Interval ());
 
@@ -251,9 +258,11 @@ ADD_INTERFACE (Arpeggio,
                /* properties */
                "arpeggio-direction "
                "dash-definition " // TODO: make apply to non-slur arpeggios
+               "line-thickness "
                "positions "
                "protrusion "
                "script-priority " // TODO: make around-note-interface
                "stems "
+               "thickness "
               );