]> git.donarmstrong.com Git - lilypond.git/commitdiff
Adds outside-staff-interface and outside-staff-axis-group-interface
authorMike Solomon <mike@mikesolomon.org>
Mon, 16 Dec 2013 08:11:10 +0000 (10:11 +0200)
committerMike Solomon <mike@mikesolomon.org>
Tue, 31 Dec 2013 06:43:53 +0000 (08:43 +0200)
When a property exists in an interface, the property should make sense for
a sensible of grobs that implement that interface.  Otherwise, the property
should be part of a separate interface that applies to a sensibly-sized
group of grobs.

Various properties having to do with outside-staff calculations belong to
grob-interface.  This does not make sense for many grobs (StaffSpacing,
NoteSpacing, SpacingSpanner, StaffSymbol just to name a few).  There is a
limited collection of grobs for which outside-staff properties make sense.
The outside-staff-interface provides a separate interface to be implemented
by these grobs.

The same is true for axis groups that place outside-staff grobs, which form
a limited subset of grobs implementing the axis-group-interface.  Rather than
putting the relevant properties in the axis-group-interface, we move
them to an outside-staff-axis-group-interface.

input/regression/scheme-text-spanner.ly
lily/axis-group-interface.cc
lily/grob.cc
scm/define-grob-interfaces.scm
scm/define-grobs.scm

index 14e095e9549fea00fa45554183e33dd510e0b49b..fc60c5b33964bf8eb11cebe61224ae26225d704f 100644 (file)
@@ -60,6 +60,7 @@ in scheme."
              (interfaces . (font-interface
                             line-interface
                             line-spanner-interface
+                            outside-staff-interface
                             side-position-interface))))))
 
 #(define scheme-event-spanner-types
index 1e945f2f9ec8e58f768dc0ae50932e4f450b70e3..0a6155b6eb25ab7b997e87984fcec5f340772a33 100644 (file)
@@ -1046,7 +1046,6 @@ ADD_INTERFACE (Axis_group_interface,
                "nonstaff-nonstaff-spacing "
                "nonstaff-relatedstaff-spacing "
                "nonstaff-unrelatedstaff-spacing "
-               "outside-staff-placement-directive "
                "pure-relevant-grobs "
                "pure-relevant-items "
                "pure-relevant-spanners "
@@ -1055,7 +1054,6 @@ ADD_INTERFACE (Axis_group_interface,
                "staff-grouper "
                "staff-staff-spacing "
                "system-Y-offset "
-               "vertical-skyline-elements "
                "X-common "
                "Y-common "
               );
index dee7bdaa3cfd5d4506f51b8c11250bbcc1fe95a9..cd0675505e71ed89b3ee2c2471cb527a1ba6e825 100644 (file)
@@ -825,9 +825,6 @@ ADD_INTERFACE (Grob,
                "meta "
                "minimum-X-extent "
                "minimum-Y-extent "
-               "outside-staff-horizontal-padding "
-               "outside-staff-padding "
-               "outside-staff-priority "
                "pure-Y-offset-in-progress "
                "rotation "
                "skyline-horizontal-padding "
index 59a97b69670867c6c85ed0dd4d8aae976374c9b7..ebb97d06de6fd63ed1e25091ddcb95b07fed431b 100644 (file)
@@ -221,6 +221,16 @@ accidentals)."
  "Kill this grob after the line breaking process."
  '())
 
+(ly:add-interface
+ 'outside-staff-axis-group-interface
+ "A vertical axis group on which outside-staff skyline calculations are done."
+ '(outside-staff-placement-directive vertical-skyline-elements))
+
+(ly:add-interface
+ 'outside-staff-interface
+ "A grob that could be placed outside staff."
+ '(outside-staff-horizontal-padding outside-staff-padding outside-staff-priority))
+
 (ly:add-interface
  'parentheses-interface
  "Parentheses for other objects."
index 64be8844ceba21b71830a38d4123e667a3b6adf3..82c787cdacd63260ab7703f939d93c1c5064c325 100644 (file)
@@ -97,6 +97,7 @@
                  (interfaces . (accidental-interface
                                 accidental-suggestion-interface
                                 font-interface
+                                outside-staff-interface
                                 script-interface
                                 self-alignment-interface
                                 side-position-interface))))))
 
     (Arpeggio
      . (
-       (cross-staff . ,ly:arpeggio::calc-cross-staff)
+        (cross-staff . ,ly:arpeggio::calc-cross-staff)
         (direction . ,LEFT)
         (padding . 0.5)
         (positions . ,ly:arpeggio::calc-positions)
               ((class . Item)
                (interfaces . (break-alignable-interface
                               font-interface
+                              outside-staff-interface
                               self-alignment-interface
                               side-position-interface
                               text-interface))))))
                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
                  (interfaces . (axis-group-interface
+                                outside-staff-interface
                                 side-position-interface))))))
 
     (BassFigureBracket
         (meta . ((class . Spanner)
                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
-                 (interfaces . (axis-group-interface))))))
+                 (interfaces . (axis-group-interface
+                                outside-staff-axis-group-interface))))))
 
 
     (Beam
                  (interfaces . (break-aligned-interface
                                 breathing-sign-interface
                                 font-interface
+                                outside-staff-interface
                                 text-interface))))))
 
     (ChordName
         (meta . ((class . Item)
                  (interfaces . (chord-name-interface
                                 font-interface
+                                outside-staff-interface
                                 rhythmic-grob-interface
                                 text-interface))))))
 
         (meta . ((class . Item)
                  (interfaces . (clef-modifier-interface
                                 font-interface
+                                outside-staff-interface
                                 self-alignment-interface
                                 side-position-interface
                                 text-interface))))))
         (Y-extent . ,grob::always-Y-extent-from-stencil)
         (meta . ((class . Item)
                  (interfaces . (font-interface
+                                outside-staff-interface
                                 side-position-interface
                                 text-interface
                                 text-script-interface))))))
         (Y-extent . ,grob::always-Y-extent-from-stencil)
         (meta . ((class . Item)
                  (interfaces . (font-interface
+                                outside-staff-interface
                                 percent-repeat-interface
                                 percent-repeat-item-interface
                                 self-alignment-interface
         (thickness . 0.48)
         (meta . ((class . Item)
                  (interfaces . (font-interface
+                                outside-staff-interface
                                 percent-repeat-interface
                                 percent-repeat-item-interface
                                 rhythmic-grob-interface))))))
                  (interfaces . (axis-group-interface
                                 dynamic-interface
                                 dynamic-line-spanner-interface
+                                outside-staff-interface
                                 side-position-interface))))))
 
     (DynamicText
                  (interfaces . (dynamic-interface
                                 dynamic-text-interface
                                 font-interface
+                                outside-staff-interface
                                 script-interface
                                 self-alignment-interface
                                 text-interface))))))
                                 font-interface
                                 line-interface
                                 line-spanner-interface
+                                ;for now, LilyPond never will typeset
+                                ;these without a DynamicLineSpanner
+                                ;as their controlling element
+                                ;so, they do not need the
+                                ;outside-staff-interface
                                 spanner-interface
                                 text-interface))))))
 
         (meta . ((class . Item)
                  (interfaces . (finger-interface
                                 font-interface
+                                outside-staff-interface
                                 self-alignment-interface
                                 side-position-interface
                                 text-interface
                  (interfaces . (chord-name-interface
                                 font-interface
                                 fret-diagram-interface
+                                outside-staff-interface
                                 rhythmic-grob-interface))))))
 
 
                  (interfaces . (dynamic-interface
                                 hairpin-interface
                                 line-interface
+                                outside-staff-interface
                                 self-alignment-interface
                                 spanner-interface))))))
 
         (meta . ((class . Spanner)
                  (interfaces . (horizontal-bracket-interface
                                 line-interface
+                                outside-staff-interface
                                 side-position-interface
                                 spanner-interface))))))
 
         (Y-offset . ,side-position-interface::y-aligned-side)
         (meta . ((class . Item)
                  (interfaces . (font-interface
+                                outside-staff-interface
                                 self-alignment-interface
                                 side-position-interface
                                 text-interface))))))
         (meta . ((class . Spanner)
                  (interfaces . (font-interface
                                 measure-counter-interface
+                                outside-staff-interface
                                 self-alignment-interface
                                 side-position-interface
                                 text-interface))))))
         (Y-offset . ,side-position-interface::y-aligned-side)
         (meta . ((class . Spanner)
                  (interfaces . (measure-grouping-interface
+                                outside-staff-interface
                                 side-position-interface))))))
 
     (MelodyItem
                  (interfaces . (break-alignable-interface
                                 font-interface
                                 metronome-mark-interface
+                                outside-staff-interface
                                 self-alignment-interface
                                 side-position-interface
                                 text-interface))))))
         (meta . ((class . Spanner)
                  (interfaces . (font-interface
                                 multi-measure-interface
+                                outside-staff-interface
                                 multi-measure-rest-interface
                                 rest-interface
                                 staff-symbol-referencer-interface))))))
         (meta . ((class . Spanner)
                  (interfaces . (font-interface
                                 multi-measure-interface
+                                outside-staff-interface
                                 self-alignment-interface
                                 side-position-interface
                                 text-interface))))))
         (meta . ((class . Spanner)
                  (interfaces . (font-interface
                                 multi-measure-interface
+                                outside-staff-interface
                                 self-alignment-interface
                                 side-position-interface
                                 text-interface))))))
                  (interfaces . (font-interface
                                 horizontal-bracket-interface
                                 line-interface
+                                outside-staff-interface
                                 ottava-bracket-interface
                                 side-position-interface
                                 text-interface))))))
         (meta . ((class . Spanner)
                  (interfaces . (font-interface
                                 percent-repeat-interface
+                                outside-staff-interface
                                 self-alignment-interface
                                 side-position-interface
                                 text-interface))))))
         (vertical-skylines . ,(ly:make-unpure-pure-container ly:slur::vertical-skylines ly:grob::pure-simple-vertical-skylines-from-extents))
         (Y-extent . ,slur::height)
         (meta . ((class . Spanner)
-                 (interfaces . (slur-interface))))))
+                 (interfaces . (outside-staff-interface
+                                slur-interface))))))
 
     ;; an example of a text spanner
     (PianoPedalBracket
                  (interfaces . (break-alignable-interface
                                 font-interface
                                 mark-interface
+                                outside-staff-interface
                                 self-alignment-interface
                                 side-position-interface
                                 text-interface))))))
         (Y-offset . ,side-position-interface::y-aligned-side)
         (meta . ((class . Item)
                  (interfaces . (font-interface
+                                outside-staff-interface
                                 script-interface
                                 side-position-interface))))))
 
         (vertical-skylines . ,(ly:make-unpure-pure-container ly:slur::vertical-skylines ly:grob::pure-simple-vertical-skylines-from-extents))
         (Y-extent . ,slur::height)
         (meta . ((class . Spanner)
-                 (interfaces . (slur-interface))))))
+                 (interfaces . (outside-staff-interface
+                                slur-interface))))))
 
     (SostenutoPedal
      . (
                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
                  (interfaces . (axis-group-interface
+                                outside-staff-interface
                                 piano-pedal-interface
                                 side-position-interface))))))
 
         (meta . ((class . Item)
                  (interfaces . (font-interface
                                 self-alignment-interface
+                                outside-staff-interface
                                 side-position-interface
                                 string-number-interface
                                 text-interface
         (Y-extent . ,grob::always-Y-extent-from-stencil)
         (meta . ((class . Item)
                  (interfaces . (font-interface
+                                outside-staff-interface
                                 self-alignment-interface
                                 side-position-interface
                                 stroke-finger-interface
                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
                  (interfaces . (axis-group-interface
+                                outside-staff-interface
                                 piano-pedal-interface
                                 side-position-interface))))))
 
                                       (vertical-skyline-elements . ,ly:system::vertical-skyline-elements)
                                       (vertical-alignment . ,ly:system::get-vertical-alignment)))
                  (interfaces . (axis-group-interface
-                                system-interface))))))
+                                system-interface
+                                outside-staff-axis-group-interface))))))
 
     (SystemStartBar
      . (
         (meta . ((class . Item)
                  (interfaces . (font-interface
                                 instrument-specific-markup-interface
+                                outside-staff-interface
                                 self-alignment-interface
                                 side-position-interface
                                 text-interface
                  (interfaces . (font-interface
                                 line-interface
                                 line-spanner-interface
+                                outside-staff-interface
                                 side-position-interface))))))
 
     (Tie
                  (interfaces . (font-interface
                                 line-interface
                                 line-spanner-interface
+                                outside-staff-interface
                                 side-position-interface
                                 trill-spanner-interface))))))
 
 
         (meta . ((class . Spanner)
                  (interfaces . (line-interface
+                                outside-staff-interface
                                 tuplet-bracket-interface))))))
 
     (TupletNumber
         (Y-offset . ,ly:tuplet-number::calc-y-offset)
         (meta . ((class . Spanner)
                  (interfaces . (font-interface
+                                outside-staff-interface
                                 text-interface
                                 tuplet-number-interface))))))
 
                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
                  (interfaces . (axis-group-interface
+                                outside-staff-interface
                                 piano-pedal-interface
                                 side-position-interface))))))
 
                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
 
                  (interfaces . (axis-group-interface
-                                hara-kiri-group-spanner-interface))))))
+                                hara-kiri-group-spanner-interface
+                                outside-staff-axis-group-interface))))))
 
     (VoiceFollower
      . (
                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
                  (interfaces . (axis-group-interface
+                                outside-staff-interface
                                 side-position-interface
                                 volta-interface))))))