tags
.gdbinit
?.ly
+*.midi
+2006-10-29 Han-Wen Nienhuys <hanwen@lilypond.org>
+
+
+ * scm/define-grobs.scm:
+ separation-items have width
+
+
+ * VERSION:
+ bump version
+
+
+ * .gitignore:
+ * Documentation/topdocs/NEWS.tely:
+ * lily/separating-group-spanner.cc:
+ * lily/slur-engraver.cc:
+ * lily/slur-scoring.cc:
+ * scm/define-grobs.scm:
+ * input/regression/slur-clef.ly:
+ add breakableSeparationItem to extra encompass for slurs. This fixesslur/clef slur/key collisions etc. Should fix #49
+
+
+ * lily/include/slur-scoring.hh:
+ * lily/slur-scoring.cc:
+ Use X of separation item as slur start. Fixes #120
+
2006-10-29 Han-Wen Nienhuys <hanwen@lilypond.org>
* buildscripts/git-update-changelog.py (changelog_body): don't
@end ignore
+@item Slurs now avoid clefs and key changes.
+
+@lilypond[fragment,ragged-right]
+\new Staff { \clef bass c^( \clef "G" g') }
+@end lilypond
+
@item The @code{FretBoards} context will generate guitar frettings
automatically,
PACKAGE_NAME=LilyPond
MAJOR_VERSION=2
MINOR_VERSION=9
-PATCH_LEVEL=27
+PATCH_LEVEL=28
MY_PATCH_LEVEL=
'author',
'committish'):
self.__dict__[v] = dict[v]
-
- # Sat Oct 28 18:52:30 2006 +0200
self.date = ' '.join (self.date.split (' ')[:-1])
self.date = time.strptime (self.date, '%a %b %d %H:%M:%S %Y')
--- /dev/null
+\paper {
+ ragged-right = ##t
+ }
+\version "2.9.27"
+
+\new Staff { \clef bass c^( \clef "G" g') }
Bezier get_best_curve ();
void fill (Grob *);
void set_next_direction ();
-
+
vector<Offset> generate_avoid_offsets () const;
Drul_array<Bound_info> get_bound_info () const;
void generate_curves () const;
vector<Extra_collision_info> get_extra_encompass_infos () const;
Real move_away_from_staffline (Real y, Grob *on_staff) const;
int get_closest_index (SCM inspect_quants) const;
+
+ Grob *breakable_bound_item (Direction) const;
};
void set_slur_control_points (Grob *me);
/* properties */
"elements "
- "padding");
+ "padding ");
void
Slur_engraver::stop_translation_timestep ()
{
+ if (Grob *g = unsmob_grob (get_property ("breakableSeparationItem")))
+ {
+ for (vsize i = 0; i < end_slurs_.size (); i++)
+ Slur::add_extra_encompass (end_slurs_[i], g);
+
+ if (!events_[START])
+ for (vsize i = 0; i < slurs_.size (); i++)
+ Slur::add_extra_encompass (slurs_[i], g);
+ }
+
+
for (vsize i = 0; i < end_slurs_.size (); i++)
announce_end_grob (end_slurs_[i], SCM_EOL);
end_slurs_.clear ();
ADD_TRANSLATOR (Slur_engraver,
/* doc */ "Build slur grobs from slur events",
/* create */ "Slur",
- /* read */ "slurMelismaBusy doubleSlurs",
+ /* read */
+ "slurMelismaBusy "
+ "doubleSlurs ",
+
/* write */ "");
return configurations_[opt_idx]->curve_;
}
+Grob *
+Slur_score_state::breakable_bound_item (Direction d) const
+{
+ Grob *col = slur_->get_bound (d)->get_column ();
+
+ extract_grob_set (slur_, "encompass-objects", extra_encompasses);
+
+ for (vsize i = 0; i < extra_encompasses.size (); i++)
+ {
+ Item *item = dynamic_cast<Item*> (extra_encompasses[i]);
+ if (item && col == item->get_column ())
+ return item;
+ }
+
+ return 0;
+}
+
int
Slur_score_state::get_closest_index (SCM inspect_quants) const
{
{
end_ys[d] = dir_
* max (max (dir_ * (base_attachments_[d][Y_AXIS]
- + parameters_.region_size_ * dir_),
+ + parameters_.region_size_ * dir_),
dir_ * (dir_ + extremes_[d].note_column_->extent (common_[Y_AXIS], Y_AXIS)[dir_])),
dir_ * base_attachments_[-d][Y_AXIS]);
}
{
if (!extremes_[d].note_column_)
{
- Real x, y;
- if (d == RIGHT)
+ Real x = 0;
+ Real y = 0;
+
+ if (Grob *g = breakable_bound_item (d))
+ {
+ x = robust_relative_extent (g, common_[X_AXIS], X_AXIS)[RIGHT];
+ }
+ else if (d == RIGHT)
x = robust_relative_extent (extremes_[d].bound_, common_[X_AXIS], X_AXIS)[d];
else
x = slur_->get_broken_left_end_align ();
+
Grob *col = (d == LEFT) ? columns_[0] : columns_.back ();
if (extremes_[-d].bound_ != col)
(SeparationItem
. (
- (X-extent . #f)
- (Y-extent . #f)
+ (avoid-slur . inside)
+ (X-extent . ,ly:axis-group-interface::width)
+ (Y-extent . ,ly:axis-group-interface::height)
(meta . ((class . Item)
(interfaces . (spacing-interface
separation-item-interface))))))