summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHan-Wen Nienhuys <hanwen@xs4all.nl>2007-01-25 16:01:47 +0100
committerHan-Wen Nienhuys <hanwen@xs4all.nl>2007-01-25 16:01:47 +0100
commit9880906860b1ba94a03e1509b2c17a13e9844fa3 (patch)
treee61b409a93b2be862e85fe23ad3af4927b01fb7b
parent9a6392ad41c7cd1d811971b20b613129c65e10a6 (diff)
use new-line-spanner for TextSpanner
-rw-r--r--input/regression/line-arrows.ly11
-rw-r--r--lily/include/text-spanner.hh22
-rw-r--r--lily/new-line-spanner.cc1
-rw-r--r--lily/text-spanner.cc178
-rw-r--r--python/convertrules.py17
-rw-r--r--scm/define-grobs.scm15
6 files changed, 38 insertions, 206 deletions
diff --git a/input/regression/line-arrows.ly b/input/regression/line-arrows.ly
index 201210c353..7512711cb1 100644
--- a/input/regression/line-arrows.ly
+++ b/input/regression/line-arrows.ly
@@ -9,12 +9,17 @@
}
\relative c'' {
- \override TextSpanner #'edge-text = #'("foo" . "bar")
\override TextSpanner #'bound-padding = #1.0
\override TextSpanner #'dash-fraction = #'()
- \override TextSpanner #'arrow = ##t
+ \override TextSpanner #'bound-details #'right #'arrow = ##t
+ \override TextSpanner #'bound-details #'left #'text = #"fof"
+ \override TextSpanner #'bound-details #'right #'text = #"gag"
+ \override TextSpanner #'bound-details #'right #'padding = #0.6
+
+ \override TextSpanner #'bound-details #'right #'stencil-align-dir-y = #CENTER
+ \override TextSpanner #'bound-details #'left #'stencil-align-dir-y = #CENTER
- \override Glissando #'arrow = ##t
+ \override Glissando #'bound-details #'right #'arrow = ##t
\override Glissando #'arrow-length = #0.5
\override Glissando #'arrow-width = #0.25
diff --git a/lily/include/text-spanner.hh b/lily/include/text-spanner.hh
deleted file mode 100644
index 3af69d6344..0000000000
--- a/lily/include/text-spanner.hh
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- text-spanner.hh -- declare Text_spanner
-
- source file of the GNU LilyPond music typesetter
-
- (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>
-*/
-
-#ifndef TEXT_SPANNER_HH
-#define TEXT_SPANNER_HH
-
-#include "grob-interface.hh"
-#include "lily-proto.hh"
-
-class Text_spanner
-{
-public:
- DECLARE_SCHEME_CALLBACK (print, (SCM));
- DECLARE_GROB_INTERFACE();
-};
-
-#endif /* TEXT_SPANNER_HH */
diff --git a/lily/new-line-spanner.cc b/lily/new-line-spanner.cc
index 3842cb2cf6..b891750361 100644
--- a/lily/new-line-spanner.cc
+++ b/lily/new-line-spanner.cc
@@ -302,7 +302,6 @@ New_line_spanner::print (SCM smob)
if (stencils[d])
span_points[d] += dz_dir *
(stencils[d]->extent (X_AXIS)[-d] / dz_dir[X_AXIS]);
-
span_points[d] += -d * gaps[d] * dz.direction ();
}
diff --git a/lily/text-spanner.cc b/lily/text-spanner.cc
deleted file mode 100644
index e98ae0f7df..0000000000
--- a/lily/text-spanner.cc
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- text-spanner.cc -- implement Text_spanner
-
- source file of the GNU LilyPond music typesetter
-
- (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>
-
- Revised over good by Han-Wen.
-*/
-
-#include "text-spanner.hh"
-
-#include "text-interface.hh"
-#include "line-spanner.hh"
-#include "spanner.hh"
-#include "font-interface.hh"
-#include "dimensions.hh"
-#include "output-def.hh"
-#include "warn.hh"
-#include "paper-column.hh"
-#include "staff-symbol-referencer.hh"
-
-/*
- TODO:
- - vertical start / vertical end (fixme-name) |
- - contination types (vert. star, vert. end) |-> eat volta-bracket
- - more styles
- - more texts/positions
-*/
-
-MAKE_SCHEME_CALLBACK (Text_spanner, print, 1);
-
-/*
- TODO: this function is too long
-*/
-SCM
-Text_spanner::print (SCM smob)
-{
- Grob *me = unsmob_grob (smob);
- Spanner *spanner = dynamic_cast<Spanner *> (me);
-
- /* Ugh, must be same as Hairpin::print. */
-
- Grob *common = spanner->get_bound (LEFT)->common_refpoint (spanner->get_bound (RIGHT), X_AXIS);
- Output_def *layout = me->layout ();
-
- SCM flare = me->get_property ("bracket-flare");
- SCM shorten = me->get_property ("shorten-pair");
-
- Interval span_points;
- Drul_array<bool> broken;
- Direction d = LEFT;
- do
- {
- Item *b = spanner->get_bound (d);
- broken[d] = b->break_status_dir () != CENTER;
-
- if (broken[d])
- {
- if (d == LEFT)
- span_points[d] = spanner->get_broken_left_end_align ();
- else
- span_points[d] = b->relative_coordinate (common, X_AXIS);
- }
- else
- {
- Real encl = robust_scm2double (me->get_property ("enclose-bounds"), 0.0);
- Interval ext = b->extent (common, X_AXIS);
-
- span_points[d]
- = robust_relative_extent (b, common, X_AXIS).linear_combination (d * encl);
-
- if (is_number_pair (shorten))
- span_points -= d * scm_to_double (index_get_cell (shorten, d));
- }
-
- if (is_number_pair (flare))
- span_points -= d * scm_to_double (index_get_cell (flare, d));
- }
- while (flip (&d) != LEFT);
-
- SCM properties = Font_interface::text_font_alist_chain (me);
- SCM edge_text = me->get_property ("edge-text");
- Drul_array<Stencil> edge;
- if (scm_is_pair (edge_text))
- {
- Direction d = LEFT;
- do
- {
- if (broken[d])
- continue;
-
- SCM text = index_get_cell (edge_text, d);
-
- if (Text_interface::is_markup (text))
- edge[d] = *unsmob_stencil (Text_interface::interpret_markup (layout->self_scm (), properties, text));
-
- if (!edge[d].is_empty ())
- edge[d].align_to (Y_AXIS, CENTER);
- }
- while (flip (&d) != LEFT);
- }
-
- Drul_array<Real> edge_height = robust_scm2interval (me->get_property ("edge-height"),
- Interval (0.0, 0.0));
- Drul_array<Stencil> edge_line;
- {
- Direction d = LEFT;
- int dir = to_dir (me->get_property ("direction"));
- do
- {
- if (broken[d])
- continue;
-
- Real dx = 0.0;
- if (is_number_pair (flare))
- dx = scm_to_double (index_get_cell (flare, d)) * d;
-
- Real dy = -dir * edge_height[d];
- if (dy)
- edge_line[d] = Line_spanner::line_stencil (me, Offset (0, 0), Offset (dx, dy));
- }
- while (flip (&d) != LEFT);
- }
-
- Stencil m;
- do
- {
- Interval ext = edge[d].extent (X_AXIS);
- if (!ext.is_empty ())
- {
- Real pad = robust_scm2double (me->get_property ("bound-padding"), 0.0);
- edge[d].translate_axis (span_points[d], X_AXIS);
- m.add_stencil (edge[d]);
- span_points[d] += -d * (ext[-d] + pad);
- }
- }
- while (flip (&d) != LEFT);
-
- do
- {
- if (d * span_points[d] > d * edge[-d].extent (X_AXIS)[d])
- {
- edge_line[d].translate_axis (span_points[d], X_AXIS);
- m.add_stencil (edge_line[d]);
- }
- }
- while (flip (&d) != LEFT);
-
-
- if (!span_points.is_empty ()
- && span_points.length () > robust_scm2double (me->get_property ("dash-period"), 0.0))
- {
- Stencil l = Line_spanner::line_stencil (me,
- Offset (span_points[LEFT], 0),
- Offset (span_points[RIGHT], 0));
- m.add_stencil (l);
- }
- m.translate_axis (- me->relative_coordinate (common, X_AXIS), X_AXIS);
- return m.smobbed_copy ();
-}
-
-ADD_INTERFACE (Text_spanner,
-
- "generic text spanner",
-
- "bound-padding "
- "bracket-flare "
- "dash-fraction "
- "dash-period "
- "edge-height "
- "edge-text "
- "enclose-bounds "
- "shorten-pair "
- "style "
- "thickness "
- );
-
diff --git a/python/convertrules.py b/python/convertrules.py
index 06f572e204..71dbd10d42 100644
--- a/python/convertrules.py
+++ b/python/convertrules.py
@@ -2952,3 +2952,20 @@ def conv (str):
return str
conversions.append (((2, 11, 11), conv, """layout-set-staff-size -> layout-set-absolute-staff-size"""))
+
+
+def conv (str):
+ str = re.sub (r"\\override\s*([a-zA-Z.]+)\s*#'arrow\s*=\s*##t",
+ r"\\override \1 #'bound-details #'right #'arrow = ##t",
+ str)
+
+ if re.search ('edge-text', str):
+ error_file.write (NOT_SMART % "edge-text settings for TextSpanner.")
+ error_file.write ("Use\n\n"
+ "\t\\override TextSpanner #'bound-details #'right #'text = <right-text>\n"
+ "\t\\override TextSpanner #'bound-details #'left #'text = <left-text>\n")
+
+
+ return str
+
+conversions.append (((2, 11, 13), conv, """#'arrow = ##t -> #'bound-details #'right #'arrow = ##t"""))
diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm
index 9cdab41324..bb10ff6308 100644
--- a/scm/define-grobs.scm
+++ b/scm/define-grobs.scm
@@ -1677,7 +1677,6 @@
(meta . ((class . Item)
(interfaces . (piano-pedal-interface
text-spanner-interface
- line-spanner-interface
text-interface
self-alignment-interface
piano-pedal-script-interface
@@ -1812,7 +1811,6 @@
(TextSpanner
. (
- (stencil . ,ly:text-spanner::print)
(Y-offset . ,ly:side-position-interface::y-aligned-side)
(font-shape . italic)
(style . dashed-line)
@@ -1822,6 +1820,19 @@
(side-axis . ,Y)
(direction . ,UP)
(outside-staff-priority . 350)
+
+ (left-bound-info . ,ly:new-line-spanner::calc-left-bound-info)
+ (right-bound-info . ,ly:new-line-spanner::calc-right-bound-info)
+ (bound-details . ((left . ((Y . 0)
+ (padding . 0.25)
+ (attach-dir . ,LEFT)
+ ))
+ (right . ((Y . 0)
+ (padding . 0.25)
+ ))
+ ))
+ (stencil . ,ly:new-line-spanner::print)
+
(meta . ((class . Spanner)
(interfaces . (text-spanner-interface
line-spanner-interface