+2006-03-07 <hanwen@xs4all.nl>
+
+ * lily/spacing-basic.cc (standard_breakable_column_spacing): also
+ consider columns that have originals. Unifies spacing for mm
+ rests around line breaks.
+
+ * lily/multi-measure-rest.cc (set_spacing_rods): read bound-padding.
+ (set_text_rods): idem.
+ (calculate_spacing_rods): new function: share code between
+ set_text_rods and set_spacing_rods.
+ (set_text_rods): take extents of bounds into account.
+
+2006-03-07 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+ * Documentation/user/basic-notation.itely (Writing music in
+ parallel): don't use relative.
+
2006-03-06 Han-Wen Nienhuys <hanwen@xs4all.nl>
* ly/music-functions-init.ly (Module): add shiftDurations
Music for multiple parts can be interleaved
-@lilypond[quote,fragment,verbatim,relative=1]
+@lilypond[quote,fragment,verbatim]
\parallelMusic #'(voiceA voiceB) {
r8 g'16[ c''] e''[ g' c'' e''] r8 g'16[ c''] e''[ g' c'' e''] |
c'2 c'2 |
Sven Axelsson
Thomas Scharkowski
Thomas Bushnell BSG
+Toine Schreurs
Trent Johnston
Trevor Bača
Vicente Solsona Dellá
PACKAGE_NAME=LilyPond
MAJOR_VERSION=2
MINOR_VERSION=7
-PATCH_LEVEL=37
+PATCH_LEVEL=38
MY_PATCH_LEVEL=
DECLARE_SCHEME_CALLBACK (set_text_rods, (SCM));
DECLARE_SCHEME_CALLBACK (centered_stencil, (SCM));
+
+ static void calculate_spacing_rods (Grob *me, Real length);
static Stencil big_rest (Grob *, Real);
static Stencil symbol_stencil (Grob *, Real);
static Stencil church_rest (Grob *, Font_metric *, int, Real);
add_bound_item (dynamic_cast<Spanner *> (me), c);
}
-MAKE_SCHEME_CALLBACK (Multi_measure_rest, set_spacing_rods, 1);
-SCM
-Multi_measure_rest::set_spacing_rods (SCM smob)
+void
+Multi_measure_rest::calculate_spacing_rods (Grob *me, Real length)
{
- Grob *me = unsmob_grob (smob);
-
Spanner *sp = dynamic_cast<Spanner *> (me);
if (! (sp->get_bound (LEFT) && sp->get_bound (RIGHT)))
{
programming_error ("Multi_measure_rest::get_rods (): I am not spanned!");
- return SCM_UNSPECIFIED;
+ return ;
}
Item *li = sp->get_bound (LEFT)->get_column ();
{li, rb},
{lb, rb}};
- Real sym_width = symbol_stencil (me, 0.0).extent (X_AXIS).length ();
-
for (int i = 0; i < 4; i++)
{
Item *li = combinations[i][0];
rod.distance_ = li->extent (li, X_AXIS)[BIGGER]
- ri->extent (ri, X_AXIS)[SMALLER]
- /* 2.0 = magic! */
- + sym_width + 2.0;
+ + length
+ + 2 * robust_scm2double (me->get_property ("bound-padding"), 1.0);
Real minlen = robust_scm2double (me->get_property ("minimum-length"), 0);
rod.distance_ = max (rod.distance_, minlen);
rod.add_to_cols ();
}
- return SCM_UNSPECIFIED;
}
-/*
- Ugh. Cut & paste.
- */
+MAKE_SCHEME_CALLBACK (Multi_measure_rest, set_spacing_rods, 1);
+SCM
+Multi_measure_rest::set_spacing_rods (SCM smob)
+{
+ Grob *me = unsmob_grob (smob);
+ Real sym_width = symbol_stencil (me, 0.0).extent (X_AXIS).length ();
+ calculate_spacing_rods (me, sym_width);
+
+ return SCM_UNSPECIFIED;
+}
+
MAKE_SCHEME_CALLBACK (Multi_measure_rest, set_text_rods, 1);
SCM
Multi_measure_rest::set_text_rods (SCM smob)
{
Grob *me = unsmob_grob (smob);
-
- Spanner *sp = dynamic_cast<Spanner *> (me);
- if (! (sp->get_bound (LEFT) && sp->get_bound (RIGHT)))
- {
- programming_error ("Multi_measure_rest::get_rods (): I am not spanned!");
- return SCM_UNSPECIFIED;
- }
-
- Item *li = sp->get_bound (LEFT)->get_column ();
- Item *ri = sp->get_bound (RIGHT)->get_column ();
- Item *lb = li->find_prebroken_piece (RIGHT);
- Item *rb = ri->find_prebroken_piece (LEFT);
-
- Item *combinations[4][2] = {{li, ri},
- {lb, ri},
- {li, rb},
- {lb, rb}};
-
Stencil *stil = me->get_stencil ();
/* FIXME uncached */
Real len = (stil && !stil->extent (X_AXIS).is_empty ())
? stil->extent (X_AXIS).length ()
: 0.0;
+ calculate_spacing_rods (me, len);
- for (int i = 0; i < 4; i++)
- {
- Item *li = combinations[i][0];
- Item *ri = combinations[i][1];
-
- if (!li || !ri)
- continue;
-
- Rod rod;
- rod.item_drul_[LEFT] = li;
- rod.item_drul_[RIGHT] = ri;
-
- rod.distance_ = len;
-
- Real minlen = robust_scm2double (me->get_property ("minimum-length"), 0);
- rod.distance_ = max (rod.distance_, minlen);
- rod.add_to_cols ();
- }
return SCM_UNSPECIFIED;
}
-
ADD_INTERFACE (Multi_measure_rest, "multi-measure-rest-interface",
"A rest that spans a whole number of measures.",
"hair-thickness "
"thick-thickness "
"use-breve-rest "
+ "bound-padding "
"minimum-length");
Paper_column_engraver::Paper_column_engraver ()
{
+ last_moment_.main_part_ = Rational (-1,1);
command_column_ = 0;
musical_column_ = 0;
breaks_ = 0;
}
while (flip (&d) != LEFT);
- if (l->is_breakable (l) && r->is_breakable (r))
+ if ((l->is_breakable (l) || l->original ())
+ && (r->is_breakable (r) || r->original ()))
{
Moment *dt = unsmob_moment (l->get_property ("measure-length"));
Moment mlen (1);
vector<Grob*> const &cols,
Spacing_options const *options)
{
- Paper_column *next = 0;
- Paper_column *next_next = 0;
- for (vsize i = cols.size (); i--;)
+ Paper_column *prev = 0;
+ for (vsize i = 0; i < cols.size (); i++)
{
Paper_column *col = dynamic_cast<Paper_column *> (cols[i]);
- if (next)
- generate_pair_spacing (me, col, next, next_next, options);
+ Paper_column *next = (i < cols.size()-1) ? dynamic_cast<Paper_column *> (cols[i+1]) : 0;
+
+ if (i > 0)
+ generate_pair_spacing (me, prev, col, next, options);
- next_next = next;
- next = col;
+ prev = col;
}
}
(MultiMeasureRestNumber
. (
- (springs-and-rods . ,ly:multi-measure-rest::set-spacing-rods)
+ (bound-padding . 2.0)
+ (springs-and-rods . ,ly:multi-measure-rest::set-text-rods)
(stencil . ,ly:text-interface::print)
(X-offset . ,(ly:make-simple-closure
`(,+ ,(ly:make-simple-closure (list ly:self-alignment-interface::x-aligned-on-self))
)
))
-;; FIXME: stray statement
+
+;; need to do this in the beginning. Other parts of the
+;; Scheme init depend on these options.
+;;
(define-scheme-options)
(if (defined? 'set-debug-cell-accesses!)
_debug = 0
-
_prune = ['(*)']
+package_diff_dir = '/tmp/package-diff.%s/' % os.getlogin ()
+
def system (cmd):
print cmd
s = os.system (cmd)
def cleanup ():
global from_diff, to_diff, original_dir
- os.chdir ('/tmp/package-diff')
+ os.chdir (package_diff_dir)
sys.stderr.write ('Cleaning ... ')
system ('rm -fr %s %s' % (from_diff, to_diff))
sys.stderr.write ('\n')
import tempfile
original_dir = os.getcwd ();
-system ('rm -rf /tmp/package-diff')
+system ('rm -rf %s' % package_diff_dir)
try:
- os.mkdir ('/tmp/package-diff')
+ os.mkdir (package_diff_dir)
except:
pass
patch_name = compat_abspath (patch_name)
-from_diff = '/tmp/package-diff/' + from_diff
-to_diff = '/tmp/package-diff/' + to_diff
+from_diff = package_diff_dir + from_diff
+to_diff = package_diff_dir + to_diff
if not from_src:
- os.chdir ('/tmp/package-diff')
+ os.chdir (package_diff_dir)
untar (released_tarball (flags.from_version))
os.chdir (original_dir)
else:
if not to_src:
- os.chdir ('/tmp/package-diff')
+ os.chdir (package_diff_dir)
untar (released_tarball (flags.to_version))
os.chdir (original_dir)
else: