lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Issue 5788: New French Beamimg Approach (issue 557500043 by address@hidd


From: torsten . haemmerle
Subject: Issue 5788: New French Beamimg Approach (issue 557500043 by address@hidden)
Date: Sun, 23 Feb 2020 17:29:54 -0800

Reviewers: ,

Message:
Deep breath---please review.
Ta, Torsten

Description:
Issue 5788: New French Beamimg Approach

Completely new approach to French beaming.
This will automatically tackle all kinds of not-yet resolved positioning
problems caused by the current French beaming implementation.

==========
BASIC IDEA
==========

Hypothesis: The *only* difference between standard and French beaming
            is that French "inner group" stems will not pass through
            all the beams.
            THAT'S ALL! Nothing else about it!

The current approach to generally shorten French stems from the very
beginning causes many follow-up positioning problems that have to
be remedied later-on in many different places by neutralizing this
deviation somehow.
Tuplet numbers (w/o tuplet brackets) have already been dealt with, but
many other problems still remain.

GENERAL SOLUTION (in short)

- Junk all exceptions and do not distinguish between French and standard
  beaming at all (quite radical, but extremely helpful)
- That way we can be sure that all positionings will exactly match
  the standard beaming case
- Only at the very end, when it comes to actually printing the stem, it
  has to be shortened by the appropriate amount.

GENERAL SOLUTION (more detailed)

- Junk all (!) existing French beaming special treatment, using standard
  stem lenghts throughout for all calculations so that everything
exactly
  matches the standard beaming case automatically.
- The standard beam length is extremely important for all the
positioning
  calculations in several ways:
  * Special beam properties as all kinds of minimum lengths will only
work
    correctly for standard length beams and there's no need at all for
    introducing more and more exceptions for French beams
  * Stem ends are crucial for placement of all kinds of grobs such as
    articulations, fingerings, text scripts and they *must* behave
    as if all the stems had standard length (property unchanged!) for
    vertical positioning of grobs aligned to the stem ends.
  * ONLY when it comes to actually printing the stem, French shortening
    becomes relevant.
    So *only* the ly:stem::pring function will actually need to know
    about the new french-correction property, using (standard) "length"
    property minus new "french-correction" property.

=============
MODIFICATIONS
=============

        modified:   Documentation/changes.tely

Mention that French beaming will now exactly behave like standard
beaming in all beam positionings and all articulation, fingering,
etc. placements will now be identical to the standard beaming case.
Show an example comparing standard/French beaming (w/o displaying
the coding, though.  It's just about demonstrating the (now) exactly
matching positioning.

        modified:   input/regression/beam-french.ly

(existing) regression file. One beam positioning flaw (too far away
from the noteheads) can already be seen in the current test cases,
but I've added a few more examples containing exceptionally critical
cases.

        modified:   scm/define-grob-properties.scm

Introduce new property "french-correction"

        modified:   lily/include/stem.hh

Additional Real parameter for set_stem_positions to pass over
french_correction in order to be able to leave standard stem length
untouched and set both property "length" and "french-correction".

        modified:   lily/stem.cc

- Stem::set_stem_positions
  * additional parameter Real fc for french_correction value
  * Set Stem property "length" as before, but now containing the
    unaltered (i.e. "unfrenched") stem length
  * if (and only if) fc is non-zero, set "french-correction" property
    of the Stem
- Callback Stem::print
  * retrieve the (now unfrenched) stem-length property
  * retrieve the (new) french-correction property (0 if non-existent)
  * subtract french_correction from the standard stem_length
    (for printing the correctly shortened stem)
- Add new property "french-correction" to the interface

        modified:   lily/include/beam.hh

- New struct Beam_stem_length
  containing stem_y_ (as before, but unaltered by French beaming)
  plus a french_correction_ containing the Frech beaming stem length
  delta.
- Function Beam::calc_stem_y adaped
  * return Beam_stem_length rather than a mere Real stem_y
  * Boolean parameter "french" replaced by int value french_count
    for passing over the individual number of beam translations the
    stem has to be shortened by (if applicable;
    0 for standard beaming or standard-length outer group French beams).

        modified:   lily/beam.cc

- Junk (now) obsolete French beaming special treatment
- Initialize new struct Beam_stem_length
- Adapt Beam::calc_stem_y
  * return new struct Beam_stem_length
  * replace bool french by int french_count
  * in case of non-zero french_count, calculate french_correction
    respecting beam_translation and feather_factor
  * pass over (now unaltered!) stem_y + id as before plus
    french_correction via new struc Beam_stem_length
- Adapt Beam::set_stem_lengths
  * Determine value of french_count by intersecting left and right
    Slices of the stem's beaming property
  * Call Beam::calc_stem_y passing over french_count
  * Call Stem::set_stem_positions now with an additional parameter
    so that finally, both of the Stem properties "length" and
    new "french-correction" can be set.

        modified:   lily/beam-quanting.cc

- Junk (now) obsolete French beaming special treatment
- Call of Beam::calc_stem_y adapted to return a structure rather than
  a single Real value
- REMARK: French beaming is irrelevant (and even obstructive) for beam
  quanting (i.e. positioning) and so this feature is deliberately not
  being used and when calling calc_stem_y, french_count 0 is being
  passed over in any case to suppress unnecessary calculations.

        modified:   lily/tuplet-number.cc

Completely junk (now) obsolete French beaming special treatment,
no exceptions are needed anymore.

=========
IMPORTANT:
=========
All hitherto unresolved placement issues (articulations, fingerings,
etc.)
caused by French beaming are automatically remedied by this completely
new French beaming approach, as we are using standard beam lenghts
throughout for all calculations, callbacks, positionings, minimum-length
rules, and so forth...

Cheers,
Torsten

Please review this at https://codereview.appspot.com/557500043/

Affected files (+120, -86 lines):
  M Documentation/changes.tely
  M input/regression/beam-french.ly
  M lily/beam.cc
  M lily/beam-quanting.cc
  M lily/include/beam.hh
  M lily/include/stem.hh
  M lily/stem.cc
  M lily/tuplet-number.cc
  M scm/define-grob-properties.scm





reply via email to

[Prev in Thread] Current Thread [Next in Thread]