use position/direction from single tie case too. This fixes overridesand defaults for single laissez-vibrer and repeat ties.
+2006-10-30 Han-Wen Nienhuys <hanwen@lilypond.org>
+
+ * input/regression/tie-semi-single.ly:
+ use position/direction from single tie case too. This fixes overridesand defaults for single laissez-vibrer and repeat ties.
+
+ * buildscripts/git-update-changelog.py:
+ only prepend header if one patch was successful.
+
+2006-10-31 Jan Nieuwenhuizen <janneke@gnu.org>
+
+ * cygwin/GNUmakefile (#INSTALLATION_OUT_DIR): Remove postinstall
+ stuff. Remove cygwin packaging stuff.
+
2006-10-30 Jan Nieuwenhuizen <janneke@gnu.org>
* python/convertrules.py (conv): Part 2 fixes vertical extent.
if op == 'add':
system ('cvs add %(f)s' % locals ())
- new_log = header (last_commit) + new_log + '\n'
+ if last_commit:
+ new_log = header (last_commit) + new_log + '\n'
log = new_log + log
--- /dev/null
+
+\header {
+
+
+ texidoc = "Like normal ties, single semities (LaissezVibrerTie or
+RepeatTie) get their direction from the stem direction, and may be
+tweaked with @code{#'direction}."
+
+
+}
+\version "2.9.27"
+\layout{ragged-right=##t}
+
+{
+ r4
+ c'\laissezVibrer\repeatTie
+ \stemUp
+ b'\laissezVibrer\repeatTie
+ r
+
+ \stemDown
+ b'\laissezVibrer\repeatTie
+ r
+ c''\laissezVibrer\repeatTie
+ r
+
+ \override LaissezVibrerTie #'direction = #DOWN
+ \override RepeatTie #'direction = #DOWN
+ c''\laissezVibrer_"override"\repeatTie
+}
Bezier get_transformed_bezier (Tie_details const &) const;
Bezier get_untransformed_bezier (Tie_details const &) const;
Real height (Tie_details const&) const;
+ int column_span_length () const;
static int compare (Tie_configuration const &a,
Tie_configuration const &b);
Tie_specification ();
int column_span () const;
+ void get_tie_manual_settings (Grob *);
};
struct Tie_configuration_variation
Semi_tie::calc_control_points (SCM smob)
{
Grob *me = unsmob_grob (smob);
+ (void) me->get_property ("direction");
+
if (Semi_tie_column::has_interface (me->get_parent (Y_AXIS)))
{
me->get_parent (Y_AXIS)->get_property ("positioning-done");
return SCM_UNSPECIFIED;
}
-MAKE_SCHEME_CALLBACK(Semi_tie, calc_direction, 1)
-SCM
-Semi_tie::calc_direction (SCM smob)
-{
- Grob *me = unsmob_grob (smob);
- if (Semi_tie_column::has_interface (me->get_parent (Y_AXIS)))
- {
- me->get_parent (Y_AXIS)->get_property("positioning-done");
- }
- else
- {
- programming_error ("lv tie without Semi_tie_column");
- set_grob_direction (me, UP);
- }
-
- return SCM_UNSPECIFIED;
-}
-
int
Semi_tie::get_position (Grob *me)
{
details.ratio_);
}
+int
+Tie_configuration::column_span_length () const
+{
+ return column_ranks_[RIGHT] - column_ranks_[LEFT];
+}
+
Real
Tie_configuration::distance (Tie_configuration const &a,
Tie_configuration const &b)
for (vsize i = 0; i < ties.size (); i++)
{
Tie_specification spec;
+
+ spec.get_tie_manual_settings (ties[i]);
- if (scm_is_number (ties[i]->get_property_data ("direction")))
- {
- spec.manual_dir_ = to_dir (ties[i]->get_property ("direction"));
- spec.has_manual_dir_ = true;
- }
-
- spec.position_ = Tie::get_position (ties[i]);
- if (scm_is_number (ties[i]->get_property ("staff-position")))
- {
- spec.manual_position_ = scm_to_double (ties[i]->get_property ("staff-position"));
- spec.has_manual_position_ = true;
- spec.position_ = int (my_round (spec.manual_position_));
- }
+
do
{
}
void
-Tie_formatting_problem::from_semi_ties (vector<Grob*> const &lv_ties, Direction head_dir)
+Tie_formatting_problem::from_semi_ties (vector<Grob*> const &semi_ties, Direction head_dir)
{
- if (lv_ties.empty ())
+ if (semi_ties.empty ())
return;
- details_.from_grob (lv_ties[0]);
+ details_.from_grob (semi_ties[0]);
vector<Item*> heads;
int column_rank = -1;
- for (vsize i = 0; i < lv_ties.size (); i++)
+ for (vsize i = 0; i < semi_ties.size (); i++)
{
Tie_specification spec;
- Item *head = unsmob_item (lv_ties[i]->get_object ("note-head"));
+ Item *head = unsmob_item (semi_ties[i]->get_object ("note-head"));
if (!head)
programming_error ("LV tie without head?!");
{
spec.position_ = int (Staff_symbol_referencer::get_position (head));
}
-
+ spec.get_tie_manual_settings (semi_ties[i]);
+
spec.note_head_drul_[head_dir] = head;
column_rank = dynamic_cast<Item*> (head)->get_column ()->get_rank ();
spec.column_ranks_ = Drul_array<int> (column_rank, column_rank);
specifications_.push_back (spec);
}
- x_refpoint_ = lv_ties [0];
- for (vsize i = 0; i < lv_ties.size (); i++)
- x_refpoint_ = lv_ties[i]->common_refpoint (x_refpoint_, X_AXIS);
+ x_refpoint_ = semi_ties [0];
+ for (vsize i = 0; i < semi_ties.size (); i++)
+ x_refpoint_ = semi_ties[i]->common_refpoint (x_refpoint_, X_AXIS);
for (vsize i = 0; i < heads.size (); i++)
x_refpoint_ = heads[i]->common_refpoint (x_refpoint_, X_AXIS);
conf->attachment_x_.widen ( - details_.x_gap_);
- Direction d = LEFT;
- do
+ if (conf->column_span_length ())
{
- Real y = conf->position_ * details_.staff_space_ * 0.5 + conf->delta_y_;
- if (get_stem_extent (conf->column_ranks_[d], d, X_AXIS).is_empty ()
- || !get_stem_extent (conf->column_ranks_[d], d, Y_AXIS).contains (y))
- continue;
+ /*
+ avoid the stems that we attach to as well. We don't do this
+ for semities (span length = 0)
- conf->attachment_x_[d] =
- d * min (d * conf->attachment_x_[d],
- d * (get_stem_extent (conf->column_ranks_[d], d, X_AXIS)[-d] - d * details_.stem_gap_));
- }
- while (flip (&d) != LEFT);
-
+ It would be better to check D against HEAD-DIRECTION if
+ applicable.
+ */
+ Direction d = LEFT;
+ do
+ {
+ Real y = conf->position_ * details_.staff_space_ * 0.5 + conf->delta_y_;
+ if (get_stem_extent (conf->column_ranks_[d], d, X_AXIS).is_empty ()
+ || !get_stem_extent (conf->column_ranks_[d], d, Y_AXIS).contains (y))
+ continue;
+
+ conf->attachment_x_[d] =
+ d * min (d * conf->attachment_x_[d],
+ d * (get_stem_extent (conf->column_ranks_[d], d, X_AXIS)[-d] - d * details_.stem_gap_));
+ }
+ while (flip (&d) != LEFT);
+ }
return conf;
}
column_ranks_[LEFT] = 0;
}
+
+void
+Tie_specification::get_tie_manual_settings (Grob *tie)
+{
+ if (scm_is_number (tie->get_property_data ("direction")))
+ {
+ manual_dir_ = to_dir (tie->get_property ("direction"));
+ has_manual_dir_ = true;
+ }
+
+ position_ = Tie::get_position (tie);
+ if (scm_is_number (tie->get_property ("staff-position")))
+ {
+ manual_position_ = scm_to_double (tie->get_property ("staff-position"));
+ has_manual_position_ = true;
+ position_ = int (my_round (manual_position_));
+ }
+}
+
int
Tie_specification::column_span () const
{
{
if (tie_configs->empty ())
return ;
-
+
if (!tie_configs->at (0).dir_)
- tie_configs->at (0).dir_ = DOWN;
+ {
+ if (tie_configs->size () == 1)
+ tie_configs->at (0).dir_ = Direction (sign (tie_configs->at (0).position_));
+
+ if (!tie_configs->at (0).dir_)
+ tie_configs->at (0).dir_ = DOWN;
+ }
+
if (!tie_configs->back ().dir_)
tie_configs->back ().dir_ = UP;
#include "tie-configuration.hh"
#include "tie-formatting-problem.hh"
#include "warn.hh"
+#include "semi-tie-column.hh"
bool
Grob *
Tie::head (Grob *me, Direction d)
{
+ if (is_direction (me->get_property ("head-direction")))
+ {
+ Direction hd = to_dir (me->get_property ("head-direction"));
+
+ return (hd == d)
+ ? unsmob_grob (me->get_object ("note-head"))
+ : 0;
+ }
+
Item *it = dynamic_cast<Spanner*> (me)->get_bound (d);
if (Note_head::has_interface (it))
return it;
{
Grob *me = unsmob_grob (smob);
Grob *yparent = me->get_parent (Y_AXIS);
- if (Tie_column::has_interface (yparent)
+ if ((Tie_column::has_interface (yparent)
+ || Semi_tie_column::has_interface (yparent))
&& unsmob_grob_array (yparent->get_object ("ties"))
&& unsmob_grob_array (yparent->get_object ("ties"))->size () > 1)
{
. (
(stencil . ,ly:tie::print)
(control-points . ,ly:semi-tie::calc-control-points)
- (direction . ,ly:semi-tie::calc-direction)
+ (direction . ,ly:tie::calc-direction)
(details . ((ratio . 0.333)
(height-limit . 1.0)))
+ (head-direction . ,LEFT)
(thickness . 1.0)
(meta . ((class . Item)
(interfaces . (semi-tie-interface))
. (
(stencil . ,ly:tie::print)
(control-points . ,ly:semi-tie::calc-control-points)
- (direction . ,ly:semi-tie::calc-direction)
+ (direction . ,ly:tie::calc-direction)
(details . ((ratio . 0.333)
(height-limit . 1.0)))
(thickness . 1.0)
+ (head-direction . ,RIGHT)
(meta . ((class . Item)
(interfaces . (semi-tie-interface))
))
. (
(X-extent . #f)
(Y-extent . #f)
+ (direction . ,ly:tie::calc-direction)
(head-direction . ,RIGHT)
+
(positioning-done . ,ly:semi-tie-column::calc-positioning-done)
(meta . ((class . Item)
(interfaces . (semi-tie-column-interface))