From f169a3bc634eea92d3d87d18ce243bcea0216ba6 Mon Sep 17 00:00:00 2001 From: Mike Solomon Date: Mon, 11 Jun 2012 07:56:42 +0200 Subject: [PATCH] Includes Flags is Slur encompass calculations --- input/regression/slur-flag.ly | 12 ++++++++++++ lily/include/note-column.hh | 1 + lily/include/slur-scoring.hh | 1 + lily/note-column.cc | 12 ++++++++++++ lily/slur-scoring.cc | 4 ++++ 5 files changed, 30 insertions(+) create mode 100644 input/regression/slur-flag.ly diff --git a/input/regression/slur-flag.ly b/input/regression/slur-flag.ly new file mode 100644 index 0000000000..5c21ebb5c3 --- /dev/null +++ b/input/regression/slur-flag.ly @@ -0,0 +1,12 @@ +\version "2.15.40" + +\header { + texidoc = "Slurs take flag extents into account. +" +} + +\relative c'' { + \stemUp + \slurUp + b8( c) +} diff --git a/lily/include/note-column.hh b/lily/include/note-column.hh index e9f98823e1..280a5c969f 100644 --- a/lily/include/note-column.hh +++ b/lily/include/note-column.hh @@ -46,6 +46,7 @@ public: DECLARE_GROB_INTERFACE (); static Item *get_stem (Grob *); + static Item *get_flag (Grob *); }; #endif // NOTE_COLUMN_HH diff --git a/lily/include/slur-scoring.hh b/lily/include/slur-scoring.hh index 87791e0ca6..4b379c0913 100644 --- a/lily/include/slur-scoring.hh +++ b/lily/include/slur-scoring.hh @@ -66,6 +66,7 @@ struct Bound_info Grob *slur_head_; Grob *staff_; Grob *stem_; + Grob *flag_; Interval slur_head_x_extent_; Real staff_space_; diff --git a/lily/note-column.cc b/lily/note-column.cc index f3ff4f08d6..da52093797 100644 --- a/lily/note-column.cc +++ b/lily/note-column.cc @@ -64,6 +64,18 @@ Note_column::get_stem (Grob *me) return unsmob_item (s); } +Item * +Note_column::get_flag (Grob *me) +{ + Item *stem = get_stem (me); + if (stem) + { + SCM s = stem->get_object ("flag"); + return unsmob_item (s); + } + return 0; +} + Slice Note_column::head_positions_interval (Grob *me) { diff --git a/lily/slur-scoring.cc b/lily/slur-scoring.cc index 9e50984243..e137c11f01 100644 --- a/lily/slur-scoring.cc +++ b/lily/slur-scoring.cc @@ -165,6 +165,8 @@ Slur_score_state::get_bound_info () const { extremes[d].note_column_ = extremes[d].bound_; extremes[d].stem_ = Note_column::get_stem (extremes[d].note_column_); + extremes[d].flag_ = Note_column::get_flag (extremes[d].note_column_); + if (extremes[d].stem_) { extremes[d].stem_dir_ = get_grob_direction (extremes[d].stem_); @@ -173,6 +175,8 @@ Slur_score_state::get_bound_info () const { Axis ax = Axis (a); Interval s = extremes[d].stem_->extent (common_[ax], ax); + if (extremes[d].flag_) + s.unite (extremes[d].flag_->extent (common_[ax], ax)); if (s.is_empty ()) { /* -- 2.39.5