]> git.donarmstrong.com Git - lilypond.git/commitdiff
patch::: 1.3.95.jcn3
authorJan Nieuwenhuizen <janneke@gnu.org>
Thu, 12 Oct 2000 13:50:17 +0000 (15:50 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Thu, 12 Oct 2000 13:50:17 +0000 (15:50 +0200)
1.3.95.jcn3
===========

* Added option for edge lines to Text spanner.

* Bugfix for early initialisation of invalid (grace->voice) slur.

CHANGES
VERSION
input/test/text-spanner.ly
lily/slur.cc
lily/span-arpeggio-engraver.cc
lily/text-spanner.cc
ps/lily.ps
scm/lily.scm

diff --git a/CHANGES b/CHANGES
index d7b290a7a91ad284f02ff32db9b9f36017d83d63..b3be90fe669e47ec5bfee019e04ee4633c917b75 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,10 @@
+1.3.95.jcn3
+===========
+
+* Added option for edge lines to Text spanner.
+
+* Bugfix for early initialisation of invalid (grace->voice) slur.
+
 1.3.95.jcn2
 ===========
 
diff --git a/VERSION b/VERSION
index 7c2b9dfca7220747c77eb7396336116625ec2374..32cd43fb7ae3e35df53ad979e10bf6a1aec1a235 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -2,7 +2,7 @@ PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=3
 PATCH_LEVEL=95
-MY_PATCH_LEVEL=jcn2
+MY_PATCH_LEVEL=jcn3
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
 # released version.
index 07c07f369e2301cf052d4329e123caa6a0f8b1da..7746b7c3ba107edad4e963fd4d9576fd6f16b336 100644 (file)
@@ -4,16 +4,20 @@
         a \spanrequest \start "text"
        b c 
         a \spanrequest \stop "text"
+
         \property Voice.TextSpanner \pop #'type
         \property Voice.TextSpanner \push #'type = #"dotted-line"
         a \spanrequest \start "text"
        b c 
         a \spanrequest \stop "text"
+
         \property Voice.TextSpanner \pop #'type
         \property Voice.TextSpanner \push #'type = #"dashed-line"
+        \property Voice.TextSpanner \push #'edge-height = #'(1 . -2)
         a \spanrequest \start "text"
        b c 
         a \spanrequest \stop "text"
+
         \property Voice.TextSpanner \push #'dash-length = #5
         \property Voice.TextSpanner \push #'line-thickness = #10
         a \spanrequest \start "text"
index 4a86f7c96f17285f536cebe84ac19d6a97a4795c..7e37ddae470e9702b4d43603d73e520e8cb3310a 100644 (file)
@@ -465,6 +465,10 @@ Slur::brew_molecule (SCM smob)
     gh_scm2double (me->get_elt_property ("thickness"));
   Bezier one = get_curve (me);
 
+  // get_curve may suicide
+  if (!scm_ilength (me->get_elt_property ("note-columns")))
+    return SCM_EOL;
+
   Molecule a;
   SCM d =  me->get_elt_property ("dashed");
   if (gh_number_p (d))
@@ -532,7 +536,10 @@ Slur::set_control_points (Score_element*me)
        All these null control-points, where do they all come from?
       */
       if (i && b.control_[i][X_AXIS] == 0)
-       me->suicide ();
+       {
+         me->suicide ();
+         return;
+       }
     }
 
   me->set_elt_property ("control-points", controls);
@@ -545,12 +552,17 @@ Slur::get_curve (Score_element*me)
   int i = 0;
 
   if (!Directional_element_interface::get (me)
-      || ! gh_symbol_p (index_cell (me->get_elt_property ("attachment"), LEFT)))
+      || ! gh_symbol_p (index_cell (me->get_elt_property ("attachment"), LEFT))
+      || ! gh_symbol_p (index_cell (me->get_elt_property ("attachment"), RIGHT)))
     set_extremities (me);
   
   if (!gh_pair_p (me->get_elt_property ("control-points")))
     set_control_points (me);
 
+  // set_control_points may suicide
+  if (!scm_ilength (me->get_elt_property ("note-columns")))
+    return b;
+
   for (SCM s= me->get_elt_property ("control-points"); s != SCM_EOL; s = gh_cdr (s))
     {
       b.control_[i] = ly_scm2offset (gh_car (s));
index 90b0767e67feaffaa15acd0852fc7c3a79868778..9d08d8bbb4d1bdea94d4d2290671c0e3c399b4ed 100644 (file)
@@ -61,7 +61,7 @@ Span_arpeggio_engraver::process_acknowledged ()
     {
       span_arpeggio_ = new Item (get_property ("SpanArpeggio"));
       span_arpeggio_->set_parent (arpeggios_[0], Y_AXIS);
-      Side_position::set_axis (span_arpeggio_, X_AXIS);
+      // Side_position::set_axis (span_arpeggio_, X_AXIS);
       Pointer_group_interface pgi (span_arpeggio_, "arpeggios");
       for (int i = 0; i < arpeggios_.size () ; i++)
        {
index 073636642f769f8ba6c12359cea76d9a95563829..1263a8d33cc0e3504b5516002f79c863d26a8a04 100644 (file)
   Generic Text spanner:
 
   type: "line", "dashed-line", "dotted-line"
-  text: "text"
   edge-text: ("le" . "re")
   text-style: "italic"
+  egde-height: (lh . rh)
 
-     not-yet-text
-  le -------------- re
+  "le"--------------"re"
+                    |^ 
+                    |v rh
+
+  fine tuning:
+
+  dash-period 
+  dash-length 
+  line-thickness
 
   TODO:
     - vertical start / vertical end (fixme-name) |
@@ -44,7 +51,7 @@ Text_spanner::brew_molecule (SCM smob)
   Spanner *spanner = dynamic_cast<Spanner*> (me);
 
   Real staff_space = Staff_symbol_referencer::staff_space (me);
-  Real line = me->paper_l ()->get_var ("stafflinethickness");  
+  Real thickness = me->paper_l ()->get_var ("stafflinethickness");  
   
 
   Drul_array<bool> broken;
@@ -65,16 +72,15 @@ Text_spanner::brew_molecule (SCM smob)
   Drul_array<Molecule> edge;
   if (gh_pair_p (edge_text))
     {
-      edge[LEFT] = me->lookup_l ()->text (text_style,
-                                         ly_scm2string (gh_car (edge_text)),
-                                         me->paper_l ());
-      if (!edge[LEFT].empty_b ())
-       edge[LEFT].align_to (Y_AXIS, CENTER);
-      edge[RIGHT] = me->lookup_l ()->text (text_style,
-                                          ly_scm2string (gh_cdr (edge_text)),
-                                          me->paper_l ());
-      if (!edge[RIGHT].empty_b ())
-       edge[RIGHT].align_to (Y_AXIS, CENTER);
+      Direction d = LEFT;
+      do
+       {
+         String text = ly_scm2string (index_cell (edge_text, d));
+         edge[d] = me->lookup_l ()->text (text_style, text, me->paper_l ());
+         if (!edge[d].empty_b ())
+           edge[d].align_to (Y_AXIS, CENTER);
+       }
+      while (flip (&d) != LEFT);
     }
 
   Drul_array<Real> shorten;
@@ -108,13 +114,13 @@ Text_spanner::brew_molecule (SCM smob)
   if (gh_string_p (s))
     type = ly_scm2string (s);
 
-  Real height;
-  SCM at;
+  Molecule line;
+  Drul_array<Molecule> edge_line;
   if (type == "line"
       || type == "dashed-line"
       || type == "dotted-line")
     {
-      Real thick = line;
+      Real thick = thickness;
       s = me->get_elt_property ("line-thickness");
       if (gh_number_p (s))
        thick *= gh_scm2double (s);
@@ -139,23 +145,56 @@ Text_spanner::brew_molecule (SCM smob)
       Real on = length - thick;
       Real off = period - on;
 
-      height = thick;
-      at = gh_list (ly_symbol2scm ("dashed-line"),
-                   gh_double2scm (thick),
-                   gh_double2scm (on),
-                   gh_double2scm (off),
-                   gh_double2scm (width),
-                   SCM_UNDEFINED);
+      SCM list = gh_list (ly_symbol2scm ("dashed-line"),
+                         gh_double2scm (thick),
+                         gh_double2scm (on),
+                         gh_double2scm (off),
+                         gh_double2scm (width),
+                         gh_double2scm (0),
+                         SCM_UNDEFINED);
+
+      Box b (Interval (0, width), Interval (-thick / 2, thick / 2));
+      line = Molecule (b, list);
+
+      s = me->get_elt_property ("edge-height");
+      if (gh_pair_p (s))
+       {
+         Direction d = LEFT;
+         int dir = me->get_elt_property ("direction");
+         do
+           {
+             Real dy = gh_scm2double (index_cell (s, d)) * - dir;
+             if (dy)
+               {
+                 SCM list = gh_list (ly_symbol2scm ("dashed-line"),
+                                     gh_double2scm (thick),
+                                     gh_double2scm (on),
+                                     gh_double2scm (off),
+                                     gh_double2scm (0),
+                                     gh_double2scm (dy),
+                                     SCM_UNDEFINED);
+                 
+                 Box b (Interval (0, thick),
+                        dy > 0
+                        ? Interval (0, dy)
+                        : Interval (dy, 0));
+                 edge_line[d] = Molecule (b, list);
+               }
+           }
+         while (flip (&d) != LEFT);
+       }
     }
-  Box b (Interval (0, width), Interval (-height / 2, height / 2));
-  Molecule span (b, at);
 
   Molecule m;
   if (!edge[LEFT].empty_b ())
     m = edge[LEFT];
 
-  if (!span.empty_b ())
-    m.add_at_edge (X_AXIS, RIGHT, span, 0);
+  if (!edge_line[LEFT].empty_b ())
+    m.add_at_edge (X_AXIS, RIGHT, edge_line[LEFT], 0);
+  if (!line.empty_b ())
+    m.add_at_edge (X_AXIS, RIGHT, line, 0);
+  if (!edge_line[RIGHT].empty_b ())
+    m.add_at_edge (X_AXIS, RIGHT, edge_line[RIGHT], 0);
   if (!edge[RIGHT].empty_b ())
     m.add_at_edge (X_AXIS, RIGHT, edge[RIGHT], 0);
   m.translate_axis (broken_left, X_AXIS);
index 2b75b3d951ebb29ed76f38db687c6ead1094ed5a..85a6c08c76617e166517eef6e6d69539de0c0fd3 100644 (file)
        stroke 
 } bind def 
 % 
-/draw_dashed_line % dash thickness width
+/draw_dashed_line % dash thickness dx dy
 { 
        1 setlinecap 
        1 setlinejoin 
        dup
        0 moveto
        neg add
-       lineto
+       lineto
        stroke 
 } bind def 
 %
index 38e96e741ffe830ffbe7ac47dc6ee36825b7831e..ce685a87d858736e48efab1a08232ba4500e1d29 100644 (file)
   (define (char i)
     (string-append "\\char" (inexact->string i 10) " "))
   
-  (define (dashed-line thick on off w)
-    (embedded-ps ((ps-scm 'dashed-line) thick on off w)))
+  (define (dashed-line thick on off dx dy)
+    (embedded-ps ((ps-scm 'dashed-line) thick on off dx dy)))
 
   (define (decrescendo thick w h cont)
     (embedded-ps ((ps-scm 'decrescendo) thick w h cont)))
      (number->string (* 10 thick))     ;UGH.  10 ?
      " ] 0 draw_dashed_slur"))
 
-  (define (dashed-line thick on off width)
+  (define (dashed-line thick on off dx dy)
     (string-append 
-     (number->string width) 
+     (number->string dx)
+     " "
+     (number->string dy)
      " "
      (number->string thick) 
      " [ "