2005-04-18 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ * lily/text-spanner.cc: add bound-padding.
+
* lily/paper-book.cc (systems): accept Paper_score
iso. Paper_system vector.
(arrows): idem.
* lily/line-spanner.cc (line_stencil): add arrows.
-
2005-04-18 Mathieu Giraud <magiraud@free.fr>
SCM systems_;
SCM pages_;
+ void add_score_title (SCM);
public:
SCM header_;
SCM header_0_;
#include "output-def.hh"
Stencil
-Line_interface::make_arrow (Offset beg, Offset end,
+Line_interface::make_arrow (Offset begin, Offset end,
Real thick,
Real length, Real width)
{
- Real angle = (end - beg).arg();
+ Real angle = (end - begin).arg();
Array<Offset> points;
//construct the arrow
points.push (Offset (0, 0));
- points.push (Offset (length, width));
- points.push (Offset (length, -width));
+ points.push (Offset (-length, width));
+ points.push (Offset (-length, -width));
// rotate and translate the arrow
for (int i = 0; i < points.size(); i++)
- points[i] = points[i] * complex_exp (Offset (0, angle)) + beg;
+ points[i] = points[i] * complex_exp (Offset (0, angle)) + end;
- // we must shorten the line half of arrow length
- // to prevent the line from sticking out
- beg = beg + Offset (length/2,0) * complex_exp (Offset (0, angle));
-
return (Lookup::round_filled_polygon (points, thick));
}
if (to_boolean (me->get_property ("arrow")))
line.add_stencil (Line_interface::arrows (me, from, to, false, true));
- return Stencil ();
+ return line;
}
/*
Real gap = robust_scm2double (me->get_property ("gap"), 0.0);
- Offset ofxy (gap, 0); /*offset from start point to start of line*/
+ Offset ofxy (gap, 0); /* offset from start point to start of line */
Offset dxy;
Offset my_off;
Offset his_off;
}
}
+void
+Paper_book::add_score_title (SCM header)
+{
+ Stencil title = score_title (header);
+ if (title.is_empty ())
+ title = score_title (header_);
+ if (!title.is_empty ())
+ {
+ Paper_system *ps = new Paper_system (title, true);
+ systems_ = scm_cons (ps->self_scm (), systems_);
+ scm_gc_unprotect_object (ps->self_scm ());
+ set_system_penalty (ps, header);
+ }
+}
+
SCM
Paper_book::systems ()
{
else if (Paper_score *pscore
= dynamic_cast<Paper_score *> (unsmob_music_output (scm_car (s))))
{
+ add_score_title (header);
- Stencil title = score_title (header);
- if (title.is_empty ())
- title = score_title (header_);
- if (!title.is_empty ())
- {
- Paper_system *ps = new Paper_system (title, true);
- systems_ = scm_cons (ps->self_scm (), systems_);
- scm_gc_unprotect_object (ps->self_scm ());
- set_system_penalty (ps, header);
- }
header = SCM_EOL;
system_list = scm_reverse (system_list);
systems_ = scm_append (scm_list_2 (system_list, systems_));
}
+ else if (scm_is_vector (scm_car (s)))
+ {
+ /*
+ UGH. code dup.
+ */
+ add_score_title (header);
+ header = SCM_EOL;
+
+ SCM system_list = scm_vector_to_list (scm_car (s));
+ system_list = scm_reverse (system_list);
+ systems_ = scm_append (scm_list_2 (system_list, systems_));
+ }
else if (Text_interface::markup_p (scm_car (s)))
{
SCM t = Text_interface::interpret_markup (paper_->self_scm (),
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];
+ span_points[d] += -d * (ext[-d] + pad);
}
}
while (flip (&d) != LEFT);
ADD_INTERFACE (Text_spanner, "text-spanner-interface",
"generic text spanner",
- "dash-period dash-fraction edge-height bracket-flare edge-text shorten-pair style thickness enclose-bounds");
+ "bound-padding dash-period dash-fraction edge-height bracket-flare edge-text shorten-pair style thickness enclose-bounds");