]> git.donarmstrong.com Git - lilypond.git/commitdiff
More tweakable percent repeat glyphs.
authorNeil Puttock <n.puttock@gmail.com>
Sat, 22 Nov 2008 17:19:18 +0000 (17:19 +0000)
committerNeil Puttock <n.puttock@gmail.com>
Sat, 22 Nov 2008 17:19:18 +0000 (17:19 +0000)
- use grob properties for dot_neg_kern and slash_neg_kern.

input/regression/repeat-percent-kerning.ly [new file with mode: 0644]
lily/include/percent-repeat-item.hh
lily/multi-measure-rest.cc
lily/percent-repeat-item.cc
scm/define-grob-interfaces.scm
scm/define-grob-properties.scm
scm/define-grobs.scm

diff --git a/input/regression/repeat-percent-kerning.ly b/input/regression/repeat-percent-kerning.ly
new file mode 100644 (file)
index 0000000..530fb1a
--- /dev/null
@@ -0,0 +1,21 @@
+\version "2.11.65"
+\header {
+  texidoc = "The positioning of dots and slashes in percent repeat
+glyphs can be altered using @code{dot-negative-kern} and
+@code{slash-negative-kern}."
+}
+
+<<
+  \new Staff {
+    \set Staff.instrumentName = #"(default)"
+    \repeat percent 2 { c'1 }
+    \repeat percent 2 { d'1 e' }
+  }
+  \new Staff {
+    \override PercentRepeat #'dot-negative-kern = #1.1
+    \repeat percent 2 { c'1 }
+    \override DoublePercentRepeat #'dot-negative-kern = #0
+    \override DoublePercentRepeat #'slash-negative-kern = #1
+    \repeat percent 2 { d'1 e' }
+  }
+>>
index 990a31873df92696d4ebbb3e4de45e8d67537e28..be3f06247bdf261d2aad2b41c131269bab49f6c0 100644 (file)
@@ -18,7 +18,7 @@ public:
   DECLARE_GROB_INTERFACE();
   DECLARE_SCHEME_CALLBACK (beat_slash, (SCM));
   DECLARE_SCHEME_CALLBACK (double_percent, (SCM));
-  static Stencil x_percent (Grob *, int, Real, Real);
+  static Stencil x_percent (Grob *, int);
   static Stencil brew_slash (Grob *);
 };
 
index d16a11e3dbddd9ba2655f44a7c79e67809477f37..d5b490d1e9701489547beb32be3606b7240d0944 100644 (file)
@@ -47,7 +47,7 @@ Multi_measure_rest::percent (SCM smob)
   Grob *me = unsmob_grob (smob);
   Spanner *sp = dynamic_cast<Spanner *> (me);
 
-  Stencil r = Percent_repeat_item_interface::x_percent (me, 1, 0.75, 1.6);
+  Stencil r = Percent_repeat_item_interface::x_percent (me, 1);
 
   // ugh copy & paste.
 
index b0c86c45b46060154ffd6f8af538cb82d69940fb..a38f77cb9d5010f50665bc007bf7808741bd8ba7 100644 (file)
@@ -26,17 +26,17 @@ Percent_repeat_item_interface::brew_slash (Grob *me)
   return m;
 }
 
-/*
-  todo: use grob props for dot_neg_kern, slash_neg_kern?
-*/
 Stencil
-Percent_repeat_item_interface::x_percent (Grob *me, int count,
-                                         Real dot_neg_kern,
-                                         Real slash_neg_kern)
+Percent_repeat_item_interface::x_percent (Grob *me, int count)
 {
   Stencil m;
   Stencil s = brew_slash (me);
 
+  Real dot_neg_kern =
+    robust_scm2double (me->get_property ("dot-negative-kern"), 0.75);
+  Real slash_neg_kern =
+    robust_scm2double (me->get_property ("slash-negative-kern"), 1.6);
+
   for (int i = count; i--;)
     m.add_at_edge (X_AXIS, RIGHT, s, -slash_neg_kern);
   Stencil d1 = Font_interface::get_default_font (me)->find_by_name ("dots.dot");
@@ -47,6 +47,7 @@ Percent_repeat_item_interface::x_percent (Grob *me, int count,
   m.add_at_edge (X_AXIS, LEFT, d1, -dot_neg_kern);
   m.add_at_edge (X_AXIS, RIGHT, d2, -dot_neg_kern);
 
+  m.translate_axis (- m.extent (X_AXIS).center (), X_AXIS);
   return m;
 }
 
@@ -55,8 +56,7 @@ SCM
 Percent_repeat_item_interface::double_percent (SCM grob)
 {
   Grob *me = unsmob_grob (grob);
-  Stencil m = x_percent (me, 2, 0.75, 1.6);
-  m.translate_axis (- m.extent (X_AXIS).center (), X_AXIS);
+  Stencil m = x_percent (me, 2);
   return m.smobbed_copy ();
 }
 
@@ -74,6 +74,8 @@ ADD_INTERFACE (Percent_repeat_item_interface,
               "Repeats that look like percent signs.",
               
               /* properties */
+              "dot-negative-kern "
+              "slash-negative-kern "
               "slope "
               "thickness "
               );
index b5ffda6574faa9f1fc4ed998284a1b62448b7e08..7185bd20d30e1aa5633761efcbeef44db1363430 100644 (file)
@@ -124,7 +124,7 @@ note)."
 (ly:add-interface
  'percent-repeat-interface
  "Beat, Double and single measure repeats."
- '(slope thickness))
+ '(dot-negative-kern slash-negative-kern slope thickness))
 
 (ly:add-interface
  'piano-pedal-interface
index ed1837c8c6329cce8ab341579435b3dd5eec873e..619adf31067cd52fc07bc2ba2c9ed8b6d795169f 100644 (file)
@@ -1,4 +1,4 @@
-;;;; grob-property-description.scm -- part of generated backend documentation
+;;;; define-grob-properties.scm -- part of generated backend documentation
 ;;;;
 ;;;;  source file of the GNU LilyPond music typesetter
 ;;;; 
@@ -168,6 +168,9 @@ other object.  Otherwise, it determines whether the object is placed
 be used: @code{#UP}=@code{1}, @code{#DOWN}=@code{-1},
 @code{#LEFT}=@code{-1}, @code{#RIGHT}=@code{1}, @code{#CENTER}=@code{0}.")
      (dot-count ,integer? "The number of dots.")
+     (dot-negative-kern ,number? "The space to remove between a dot
+a and slash in percent repeat glyphs.  Larger values bring the two
+elements closer together.")
      (dot-placement-list ,list? "List 
 consisting of @code{(@var{description} @var{string-number} 
 @var{fret-number} @var{finger-number})} 
@@ -566,6 +569,9 @@ is placed vertically.")
 @code{direction-source} with this to get the direction of this
 object.")
      (size ,number? "Size of object, relative to standard size.")
+     (slash-negative-kern ,number? "The space to remove between
+slashes in percent repeat glyphs.  Larger values bring the two
+elements closer together.")
      (slope ,number? "The slope of this object.")
      (slur-padding ,number? "Extra distance between slur and script.")
      (space-alist ,list? "A table that specifies distances between
index 1ae24412d6968ca28038718a2f2206d2cc5139be..0c1df0a25714540f03ea860347b8b274114c8c4d 100644 (file)
        (stencil . ,ly:percent-repeat-item-interface::double-percent)
        (non-musical . #t)
        (slope . 1.0)
+       (dot-negative-kern . 0.75)
+       (slash-negative-kern . 1.6)
        (font-encoding . fetaMusic)
        (width . 2.0)
        (thickness . 0.48)
        (stencil . ,ly:multi-measure-rest::percent)
        (slope . 1.0)
        (thickness . 0.48)
+       (dot-negative-kern . 0.75)
        (font-encoding . fetaMusic)
        (meta . ((class . Spanner)
                 (interfaces . (multi-measure-rest-interface