]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/stem-tremolo.cc
Doc-es: various updates.
[lilypond.git] / lily / stem-tremolo.cc
index 9021642785c86b55b3efc14b532797e7a2f146f8..5f71607a37b89b8877ea58c832c9521cb0163aa7 100644 (file)
@@ -35,11 +35,13 @@ MAKE_SCHEME_CALLBACK (Stem_tremolo, calc_slope, 1)
 SCM
 Stem_tremolo::calc_slope (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
-  Grob *stem = Grob::unsmob (me->get_object ("stem"));
+  Grob *me = unsmob<Grob> (smob);
+  Grob *stem = unsmob<Grob> (me->get_object ("stem"));
   Spanner *beam = Stem::get_beam (stem);
 
-  if (beam)
+  SCM style = me->get_property ("style");
+
+  if (beam && !scm_is_eq (style, ly_symbol2scm ("constant")))
     {
       Real dy = 0;
       SCM s = beam->get_property ("quantized-positions");
@@ -58,7 +60,8 @@ Stem_tremolo::calc_slope (SCM smob)
   else
     /* down stems with flags should have more sloped trems (helps avoid
        flag/stem collisions without making the stem very long) */
-    return scm_from_double ((Stem::duration_log (stem) >= 3 && get_grob_direction (me) == DOWN)
+    return scm_from_double ((Stem::duration_log (stem) >= 3
+                             && get_grob_direction (me) == DOWN && !beam)
                             ? 0.40 : 0.25);
 }
 
@@ -66,8 +69,8 @@ MAKE_SCHEME_CALLBACK (Stem_tremolo, calc_width, 1)
 SCM
 Stem_tremolo::calc_width (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
-  Grob *stem = Grob::unsmob (me->get_object ("stem"));
+  Grob *me = unsmob<Grob> (smob);
+  Grob *stem = unsmob<Grob> (me->get_object ("stem"));
   Direction dir = get_grob_direction (me);
   bool beam = Stem::get_beam (stem);
   bool flag = Stem::duration_log (stem) >= 3 && !beam;
@@ -76,23 +79,26 @@ Stem_tremolo::calc_width (SCM smob)
   return scm_from_double (((dir == UP && flag) || beam) ? 1.0 : 1.5);
 }
 
-MAKE_SCHEME_CALLBACK (Stem_tremolo, calc_style, 1)
+MAKE_SCHEME_CALLBACK (Stem_tremolo, calc_shape, 1)
 SCM
-Stem_tremolo::calc_style (SCM smob)
+Stem_tremolo::calc_shape (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
-  Grob *stem = Grob::unsmob (me->get_object ("stem"));
+  Grob *me = unsmob<Grob> (smob);
+  Grob *stem = unsmob<Grob> (me->get_object ("stem"));
   Direction dir = get_grob_direction (me);
   bool beam = Stem::get_beam (stem);
   bool flag = Stem::duration_log (stem) >= 3 && !beam;
+  SCM style = me->get_property ("style");
 
-  return ly_symbol2scm (((dir == UP && flag) || beam) ? "rectangle" : "default");
+  return ly_symbol2scm (!scm_is_eq (style, ly_symbol2scm ("constant"))
+                        && ((dir == UP && flag) || beam)
+                        ? "rectangle" : "beam-like");
 }
 
 Real
 Stem_tremolo::get_beam_translation (Grob *me)
 {
-  Grob *stem = Grob::unsmob (me->get_object ("stem"));
+  Grob *stem = unsmob<Grob> (me->get_object ("stem"));
   Spanner *beam = Stem::get_beam (stem);
 
   return (beam && beam->is_live ())
@@ -108,15 +114,15 @@ Stem_tremolo::raw_stencil (Grob *me, Real slope, Direction dir)
   Real thick = robust_scm2double (me->get_property ("beam-thickness"), 1);
   Real width = robust_scm2double (me->get_property ("beam-width"), 1);
   Real blot = me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter"));
-  SCM style = me->get_property ("style");
-  if (!scm_is_symbol (style))
-    style = ly_symbol2scm ("default");
+  SCM shape = me->get_property ("shape");
+  if (!scm_is_symbol (shape))
+    shape = ly_symbol2scm ("beam-like");
 
   width *= ss;
   thick *= ss;
 
   Stencil a;
-  if (style == ly_symbol2scm ("rectangle"))
+  if (scm_is_eq (shape, ly_symbol2scm ("rectangle")))
     a = Lookup::rotated_box (slope, width, thick, blot);
   else
     a = Lookup::beam (slope, width, thick, blot);
@@ -149,13 +155,13 @@ MAKE_SCHEME_CALLBACK (Stem_tremolo, pure_height, 3);
 SCM
 Stem_tremolo::pure_height (SCM smob, SCM, SCM)
 {
-  Item *me = Item::unsmob (smob);
+  Item *me = unsmob<Item> (smob);
 
   /*
     Cannot use the real slope, since it looks at the Beam.
    */
   Stencil s1 (untranslated_stencil (me, 0.35));
-  Item *stem = Item::unsmob (me->get_object ("stem"));
+  Item *stem = unsmob<Item> (me->get_object ("stem"));
   if (!stem)
     return ly_interval2scm (s1.extent (Y_AXIS));
 
@@ -166,7 +172,7 @@ Stem_tremolo::pure_height (SCM smob, SCM, SCM)
   if (!beam)
     return ly_interval2scm (s1.extent (Y_AXIS));
 
-  Interval ph = stem->pure_height (stem, 0, INT_MAX);
+  Interval ph = stem->pure_y_extent (stem, 0, INT_MAX);
   Stem_info si = Stem::get_stem_info (stem);
   ph[-dir] = si.shortest_y_;
   int beam_count = Stem::beam_multiplicity (stem).length () + 1;
@@ -182,7 +188,7 @@ MAKE_SCHEME_CALLBACK (Stem_tremolo, width, 1);
 SCM
 Stem_tremolo::width (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   /*
     Cannot use the real slope, since it looks at the Beam.
@@ -201,7 +207,7 @@ Stem_tremolo::vertical_length (Grob *me)
 Stencil
 Stem_tremolo::untranslated_stencil (Grob *me, Real slope)
 {
-  Grob *stem = Grob::unsmob (me->get_object ("stem"));
+  Grob *stem = unsmob<Grob> (me->get_object ("stem"));
   if (!stem)
     {
       programming_error ("no stem for stem-tremolo");
@@ -222,7 +228,7 @@ MAKE_SCHEME_CALLBACK (Stem_tremolo, calc_y_offset, 1);
 SCM
 Stem_tremolo::calc_y_offset (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   return scm_from_double (y_offset (me, false));
 }
 
@@ -232,7 +238,7 @@ Stem_tremolo::pure_calc_y_offset (SCM smob,
                                   SCM, /* start */
                                   SCM /* end */)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   return scm_from_double (y_offset (me, true));
 }
 
@@ -240,9 +246,9 @@ MAKE_SCHEME_CALLBACK (Stem_tremolo, calc_direction, 1);
 SCM
 Stem_tremolo::calc_direction (SCM smob)
 {
-  Item *me = Item::unsmob (smob);
+  Item *me = unsmob<Item> (smob);
 
-  Item *stem = Item::unsmob (me->get_object ("stem"));
+  Item *stem = unsmob<Item> (me->get_object ("stem"));
   if (!stem)
     return scm_from_int (CENTER);
 
@@ -255,7 +261,7 @@ Stem_tremolo::calc_direction (SCM smob)
    */
   Grob *maybe_nc = stem->get_parent (X_AXIS)->get_parent (X_AXIS);
   bool whole_note = Stem::duration_log (stem) <= 0;
-  if (whole_note && Note_collision_interface::has_interface (maybe_nc))
+  if (whole_note && has_interface<Note_collision_interface> (maybe_nc))
     {
       Drul_array<bool> avoid_me (false, false);
       vector<int> all_nhps = Note_collision_interface::note_head_positions (maybe_nc);
@@ -279,7 +285,7 @@ Stem_tremolo::calc_direction (SCM smob)
 Real
 Stem_tremolo::y_offset (Grob *me, bool pure)
 {
-  Item *stem = Item::unsmob (me->get_object ("stem"));
+  Item *stem = unsmob<Item> (me->get_object ("stem"));
   if (!stem)
     return 0.0;
 
@@ -292,16 +298,16 @@ Stem_tremolo::y_offset (Grob *me, bool pure)
 
   if (pure && beam)
     {
-      Interval ph = stem->pure_height (stem, 0, INT_MAX);
+      Interval ph = stem->pure_y_extent (stem, 0, INT_MAX);
       Stem_info si = Stem::get_stem_info (stem);
       ph[-dir] = si.shortest_y_;
 
-      return (ph - dir * max (beam_count, 1) * beam_translation)[dir] - dir * 0.5 * me->pure_height (me, 0, INT_MAX).length ();
+      return (ph - dir * max (beam_count, 1) * beam_translation)[dir] - dir * 0.5 * me->pure_y_extent (me, 0, INT_MAX).length ();
     }
 
   Real end_y
     = (pure
-       ? stem->pure_height (stem, 0, INT_MAX)[dir]
+       ? stem->pure_y_extent (stem, 0, INT_MAX)[dir]
        : stem->extent (stem, Y_AXIS)[dir])
       - dir * max (beam_count, 1) * beam_translation
       - Stem::beam_end_corrective (stem);
@@ -331,7 +337,7 @@ MAKE_SCHEME_CALLBACK (Stem_tremolo, print, 1);
 SCM
 Stem_tremolo::print (SCM grob)
 {
-  Grob *me = Grob::unsmob (grob);
+  Grob *me = unsmob<Grob> (grob);
 
   Stencil s = untranslated_stencil (me, robust_scm2double (me->get_property ("slope"), 0.25));
   return s.smobbed_copy ();
@@ -339,7 +345,7 @@ Stem_tremolo::print (SCM grob)
 
 ADD_INTERFACE (Stem_tremolo,
                "A beam slashing a stem to indicate a tremolo.  The property"
-               " @code{style} can be @code{default} or @code{rectangle}.",
+               " @code{shape} can be @code{beam-like} or @code{rectangle}.",
 
                /* properties */
                "beam-thickness "
@@ -348,6 +354,6 @@ ADD_INTERFACE (Stem_tremolo,
                "flag-count "
                "length-fraction "
                "stem "
-               "style "
+               "shape "
                "slope "
               );