[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Allows lyrics to slide under TimeSignature when OctaveEight present.
From: |
mtsolo |
Subject: |
Re: Allows lyrics to slide under TimeSignature when OctaveEight present. (issue 6201068) |
Date: |
Fri, 11 May 2012 05:23:27 +0000 |
Reviewers: janek, carl.d.sorensen_gmail.com,
http://codereview.appspot.com/6201068/diff/1/lily/pure-from-neighbor-engraver.cc
File lily/pure-from-neighbor-engraver.cc (right):
http://codereview.appspot.com/6201068/diff/1/lily/pure-from-neighbor-engraver.cc#newcode56
lily/pure-from-neighbor-engraver.cc:56: in_same_column (Grob *g1, Grob
*g2)
On 2012/05/10 21:40:48, janek wrote:
That's problably the most stupid question ever, but why this doesn't
it begin
with Pure_from_neighbor_engraver:: ? I don't see it being special.
It doesn't need to be a class method - it'll never be called outside of
this file. It is just a small helper function.
http://codereview.appspot.com/6201068/diff/1/lily/pure-from-neighbor-engraver.cc#newcode119
lily/pure-from-neighbor-engraver.cc:119:
Pointer_group_interface::add_grob
(need_pure_heights_from_neighbors[pos[j]][k], ly_symbol2scm
("neighbors"), pure_relevants_[i]);
On 2012/05/10 21:40:48, janek wrote:
could you reduce line width, please? This one is way over regular 80
chars
limit.
Done.
Description:
Allows lyrics to slide under TimeSignature when OctaveEight present.
Please review this at http://codereview.appspot.com/6201068/
Affected files:
A input/regression/lyric-octave-eight.ly
M lily/pure-from-neighbor-engraver.cc
Index: input/regression/lyric-octave-eight.ly
diff --git a/input/regression/lyric-octave-eight.ly
b/input/regression/lyric-octave-eight.ly
new file mode 100644
index
0000000000000000000000000000000000000000..d3ed333bf54f4a7d5a3aa512cc4d5d090d75bdff
--- /dev/null
+++ b/input/regression/lyric-octave-eight.ly
@@ -0,0 +1,16 @@
+\version "2.15.37"
+
+\header {
+ texidoc = "Lyrics should still slide under @code{TimeSignature} when an
address@hidden is present.
+"
+}
+
+\new Staff {
+ \clef "treble_8"
+ b
+}
+\addlyrics {
+ \set stanza = "1."
+ aaa
+}
Index: lily/pure-from-neighbor-engraver.cc
diff --git a/lily/pure-from-neighbor-engraver.cc
b/lily/pure-from-neighbor-engraver.cc
index
a6e7b5f32fe4539867f3ddbabe136357b8ba9335..413bfe5215d2b5c29e8b08e7799981071aa32bab
100644
--- a/lily/pure-from-neighbor-engraver.cc
+++ b/lily/pure-from-neighbor-engraver.cc
@@ -52,6 +52,17 @@ Pure_from_neighbor_engraver::acknowledge_item (Grob_info
i)
pure_relevants_.push_back (i.item ());
}
+bool
+in_same_column (Grob *g1, Grob *g2)
+{
+ return (g1->spanned_rank_interval ()[LEFT]
+ == g2->spanned_rank_interval ()[LEFT])
+ && (g1->spanned_rank_interval ()[RIGHT]
+ == g2->spanned_rank_interval ()[RIGHT])
+ && (g1->spanned_rank_interval ()[LEFT]
+ == g1->spanned_rank_interval ()[RIGHT]);
+}
+
void
Pure_from_neighbor_engraver::acknowledge_pure_from_neighbor (Grob_info i)
{
@@ -80,8 +91,10 @@ Pure_from_neighbor_engraver::finalize ()
temp.push_back (need_pure_heights_from_neighbors_[l]);
for (;
(l < need_pure_heights_from_neighbors_.size () - 1
- &&
(need_pure_heights_from_neighbors_[l]->spanned_rank_interval ()[LEFT]
- == need_pure_heights_from_neighbors_[l +
1]->spanned_rank_interval ()[LEFT]));
+ && ((need_pure_heights_from_neighbors_[l]
+ ->spanned_rank_interval ()[LEFT])
+ == (need_pure_heights_from_neighbors_[l + 1]
+ ->spanned_rank_interval ()[LEFT])));
l++)
temp.push_back (need_pure_heights_from_neighbors_[l + 1]);
need_pure_heights_from_neighbors.push_back (temp);
@@ -99,15 +112,24 @@ Pure_from_neighbor_engraver::finalize ()
{
while (pos[1] < (int) need_pure_heights_from_neighbors.size ()
&& (pure_relevants_[i]->spanned_rank_interval ()[LEFT]
- >
need_pure_heights_from_neighbors[pos[1]][0]->spanned_rank_interval
()[LEFT]))
+ > (need_pure_heights_from_neighbors[pos[1]][0]
+ ->spanned_rank_interval ()[LEFT])))
{
pos[0] = pos[1];
pos[1]++;
}
for (int j = 0; j < 2; j++)
- if (pos[j] >= 0 && pos[j] < (int)
need_pure_heights_from_neighbors.size ())
- for (vsize k = 0; k <
need_pure_heights_from_neighbors[pos[j]].size (); k++)
- Pointer_group_interface::add_grob
(need_pure_heights_from_neighbors[pos[j]][k], ly_symbol2scm ("neighbors"),
pure_relevants_[i]);
+ if (pos[j] >= 0 && pos[j]
+ < (int) need_pure_heights_from_neighbors.size ())
+ for (vsize k = 0;
+ k < need_pure_heights_from_neighbors[pos[j]].size ();
+ k++)
+ if
(!in_same_column(need_pure_heights_from_neighbors[pos[j]][k],
+ pure_relevants_[i]))
+ Pointer_group_interface::add_grob
+ (need_pure_heights_from_neighbors[pos[j]][k],
+ ly_symbol2scm ("neighbors"),
+ pure_relevants_[i]);
}
need_pure_heights_from_neighbors_.clear ();