From ab9d8a53a9f213febccc2996253825f91f2b9e1c Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Thu, 12 Oct 2000 15:50:17 +0200 Subject: [PATCH] patch::: 1.3.95.jcn3 1.3.95.jcn3 =========== * Added option for edge lines to Text spanner. * Bugfix for early initialisation of invalid (grace->voice) slur. --- CHANGES | 7 +++ VERSION | 2 +- input/test/text-spanner.ly | 4 ++ lily/slur.cc | 16 +++++- lily/span-arpeggio-engraver.cc | 2 +- lily/text-spanner.cc | 95 ++++++++++++++++++++++++---------- ps/lily.ps | 4 +- scm/lily.scm | 10 ++-- 8 files changed, 102 insertions(+), 38 deletions(-) diff --git a/CHANGES b/CHANGES index d7b290a7a9..b3be90fe66 100644 --- 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 7c2b9dfca7..32cd43fb7a 100644 --- 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. diff --git a/input/test/text-spanner.ly b/input/test/text-spanner.ly index 07c07f369e..7746b7c3ba 100644 --- a/input/test/text-spanner.ly +++ b/input/test/text-spanner.ly @@ -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" diff --git a/lily/slur.cc b/lily/slur.cc index 4a86f7c96f..7e37ddae47 100644 --- a/lily/slur.cc +++ b/lily/slur.cc @@ -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)); diff --git a/lily/span-arpeggio-engraver.cc b/lily/span-arpeggio-engraver.cc index 90b0767e67..9d08d8bbb4 100644 --- a/lily/span-arpeggio-engraver.cc +++ b/lily/span-arpeggio-engraver.cc @@ -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++) { diff --git a/lily/text-spanner.cc b/lily/text-spanner.cc index 073636642f..1263a8d33c 100644 --- a/lily/text-spanner.cc +++ b/lily/text-spanner.cc @@ -20,12 +20,19 @@ 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 (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 broken; @@ -65,16 +72,15 @@ Text_spanner::brew_molecule (SCM smob) Drul_array 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 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 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); diff --git a/ps/lily.ps b/ps/lily.ps index 2b75b3d951..85a6c08c76 100644 --- a/ps/lily.ps +++ b/ps/lily.ps @@ -117,7 +117,7 @@ stroke } bind def % -/draw_dashed_line % dash thickness width +/draw_dashed_line % dash thickness dx dy { 1 setlinecap 1 setlinejoin @@ -128,7 +128,7 @@ dup 0 moveto neg add - 0 lineto + lineto stroke } bind def % diff --git a/scm/lily.scm b/scm/lily.scm index 38e96e741f..ce685a87d8 100644 --- a/scm/lily.scm +++ b/scm/lily.scm @@ -223,8 +223,8 @@ (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))) @@ -504,9 +504,11 @@ (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) " [ " -- 2.39.5