]> git.donarmstrong.com Git - lilypond.git/commitdiff
Add Hairpin to the pure-height calculations.
authorJoe Neeman <joeneeman@gmail.com>
Mon, 16 Mar 2009 23:47:07 +0000 (16:47 -0700)
committerJoe Neeman <joeneeman@gmail.com>
Mon, 16 Mar 2009 23:47:07 +0000 (16:47 -0700)
lily/hairpin.cc
lily/include/hairpin.hh
lily/include/self-alignment-interface.hh
lily/self-aligment-interface.cc
scm/define-grobs.scm

index e5dea58244ae92033ca2d5c09cacf7dc9b224078..b20c9827e240417d491e15e10db7c0fab65f237f 100644 (file)
@@ -30,6 +30,23 @@ Hairpin::after_line_breaking (SCM smob)
   return SCM_UNSPECIFIED;
 }
 
+MAKE_SCHEME_CALLBACK (Hairpin, height, 1);
+SCM
+Hairpin::height (SCM smob)
+{
+  return Grob::stencil_height (smob);
+}
+
+MAKE_SCHEME_CALLBACK (Hairpin, pure_height, 3);
+SCM
+Hairpin::pure_height (SCM smob, SCM, SCM)
+{
+  Grob *me = unsmob_grob (smob);
+  Real height = robust_scm2double (me->get_property ("height"), 0.0);
+
+  return ly_interval2scm (Interval (-height/2, height/2));
+}
+
 void
 Hairpin::consider_suicide (Spanner*me)
 {
index d59934335cbfb425094c398973b166d313013a83..5ce62aaba318bb4062bec6a8dbd21a8ecbdff8e2 100644 (file)
@@ -16,6 +16,8 @@ struct Hairpin
 {
 public:
   DECLARE_SCHEME_CALLBACK (print, (SCM));
+  DECLARE_SCHEME_CALLBACK (height, (SCM));
+  DECLARE_SCHEME_CALLBACK (pure_height, (SCM, SCM, SCM));
   DECLARE_SCHEME_CALLBACK (after_line_breaking, (SCM));
   static void consider_suicide (Spanner*);
   DECLARE_GROB_INTERFACE();
index c42f2f44116fc393806757e1f646cde2b74a5c4d..ef953f0dbc48796d5c2173af1dc65b02054ce74f 100644 (file)
@@ -16,7 +16,7 @@ struct Self_alignment_interface
 {
   DECLARE_GROB_INTERFACE();
 
-  static SCM aligned_on_self (Grob *me, Axis a);
+  static SCM aligned_on_self (Grob *me, Axis a, bool pure, int start, int end);
   static SCM centered_on_object (Grob *me, Axis a);
   static SCM aligned_on_parent (Grob *me, Axis a);
   static void set_center_parent (Grob *me, Axis a);
@@ -25,6 +25,8 @@ struct Self_alignment_interface
   DECLARE_SCHEME_CALLBACK (x_aligned_on_self, (SCM element));
   DECLARE_SCHEME_CALLBACK (y_aligned_on_self, (SCM element));
 
+  DECLARE_SCHEME_CALLBACK (pure_y_aligned_on_self, (SCM element, SCM start, SCM end));
+
   DECLARE_SCHEME_CALLBACK (centered_on_x_parent, (SCM element));
   DECLARE_SCHEME_CALLBACK (centered_on_y_parent, (SCM element));
   DECLARE_SCHEME_CALLBACK (x_centered_on_y_parent, (SCM element));
index 71d2e1f96da987fccef3bbe4d43943ad503cad8b..b41e89ff2578ea931bea36afcf5db1c925802ccf 100644 (file)
@@ -16,18 +16,25 @@ MAKE_SCHEME_CALLBACK (Self_alignment_interface, y_aligned_on_self, 1);
 SCM
 Self_alignment_interface::y_aligned_on_self (SCM element)
 {
-  return aligned_on_self (unsmob_grob (element), Y_AXIS);
+  return aligned_on_self (unsmob_grob (element), Y_AXIS, false, 0, 0);
 }
 
 MAKE_SCHEME_CALLBACK (Self_alignment_interface, x_aligned_on_self, 1);
 SCM
 Self_alignment_interface::x_aligned_on_self (SCM element)
 {
-  return aligned_on_self (unsmob_grob (element), X_AXIS);
+  return aligned_on_self (unsmob_grob (element), X_AXIS, false, 0, 0);
 }
 
+MAKE_SCHEME_CALLBACK (Self_alignment_interface, pure_y_aligned_on_self, 3);
 SCM
-Self_alignment_interface::aligned_on_self (Grob *me, Axis a)
+Self_alignment_interface::pure_y_aligned_on_self (SCM smob, SCM start, SCM end)
+{
+  return aligned_on_self (unsmob_grob (smob), Y_AXIS, true, robust_scm2int (start, 0), robust_scm2int (end, INT_MAX));
+}
+
+SCM
+Self_alignment_interface::aligned_on_self (Grob *me, Axis a, bool pure, int start, int end)
 {
   SCM sym = (a == X_AXIS) ? ly_symbol2scm ("self-alignment-X")
     : ly_symbol2scm ("self-alignment-Y");
@@ -35,7 +42,7 @@ Self_alignment_interface::aligned_on_self (Grob *me, Axis a)
   SCM align (me->internal_get_property (sym));
   if (scm_is_number (align))
     {
-      Interval ext (me->extent (me, a));
+      Interval ext (me->maybe_pure_extent (me, a, pure, start, end));
       if (ext.is_empty ())
        programming_error ("cannot align on self: empty element");
       else
index adea7e63d6c21f359a76c63c772a9c044aae5b59..dae6bdc8a870258a5314efc1253b8895d20d4dfb 100644 (file)
        (bound-padding . 1.0)
        (self-alignment-Y . ,CENTER)
        (Y-offset . ,ly:self-alignment-interface::y-aligned-on-self)
+       (Y-extent . ,ly:hairpin::height)
        (meta . ((class . Spanner)
                 (interfaces . (hairpin-interface
                                line-interface
     (,ly:accidental-interface::height . ,ly:accidental-interface::pure-height)
     (,ly:arpeggio::height . ,ly:arpeggio::pure-height)
     (,ly:slur::outside-slur-callback . ,ly:slur::pure-outside-slur-callback)
+    (,ly:hairpin::height . ,ly:hairpin::pure-height)
     (,ly:stem::height . ,ly:stem::pure-height)
     (,ly:rest::height . ,ly:rest::pure-height)
     (,ly:grob::stencil-height . ,pure-stencil-height)
+    (,ly:self-alignment-interface::y-aligned-on-self . ,ly:self-alignment-interface::pure-y-aligned-on-self)
     (,ly:side-position-interface::y-aligned-side . ,ly:side-position-interface::pure-y-aligned-side)
     (,ly:axis-group-interface::height . ,ly:axis-group-interface::pure-height)
     (,ly:hara-kiri-group-spanner::y-extent . ,ly:hara-kiri-group-spanner::pure-height)